في لوا ، هل يمكنني بسهولة تحديد النتيجة التاسعة بدون وظائف مخصصة؟

StackOverflow https://stackoverflow.com/questions/2704771

سؤال

لنفترض أنني أدخل سلسلة في جدول على النحو التالي:

table.insert(tbl, mystring)

وذلك mystring يتم إنشاؤه عن طريق استبدال جميع حوادث "A" مع "B" في input:

mystring = string.gsub(input, "a", "b")

الطريقة الواضحة لدمج الاثنين في بيان واحد لا تعمل ، لأن gsub يعيد نتيجتين:

table.insert(tbl, string.gsub(input, "a", "b"))  -- error!
-- (second result of gsub is passed into table.insert)

والتي ، أفترض ، هو السعر المدفوع لدعم قيم العائد المتعددة. والسؤال هو ، هل هناك طريقة قياسية ومضمنة لتحديد قيمة الإرجاع الأولى فقط؟ عندما وجدت select اعتقدت أن هذا هو بالضبط ما فعلته ، ولكن للأسف ، فإنه يختار بالفعل الكل نتائج من N فصاعدا ، وبالتالي لا تساعد في هذا السيناريو.

الآن أعلم أنه يمكنني تحديد خاص بي select كالآتي:

function select1(n, ...)
  return arg[n]
end

table.insert(tbl, select1(1, string.gsub(input, "a", "b")))

لكن هذا لا يبدو صحيحًا ، لأنني أتوقع طريقة مدمجة للقيام بذلك.

إذن ، هل أفتقد بعض البناء المدمج؟ إذا لم يكن الأمر كذلك ، فهل يميل مطورو LUA إلى استخدام متغير منفصل لاستخراج الوسيطة الصحيحة أو كتابة خاصة بهم select1 المهام؟

هل كانت مفيدة؟

المحلول

يمكنك أن تحيط بالتعبير عن طريق الأقواس:

table.insert(tbl, (string.gsub(input, "a", "b")))

هذا سيختار فقط النتيجة الأولى.

للحصول على النتيجة التاسعة ، يمكنك استخدام select وتحيط به من قبل الأقواس:

func1( (select(n, func2())) )

نصائح أخرى

وضع تعبير في أقواس مثل هذا:

table.insert(tbl, (string.gsub(input, "a", "b")))

سوف يجبر قيمة عائد واحد. أو يمكنك القبض عليهما هكذا:

str,cnt = string.gsub(input, "a", "b")
table.insert(tbl, str)

أو حتى الأفضل ، تلتقطها الدمية لحفظ متغير:

str,_ = string.gsub(input, "a", "b")
table.insert(tbl, str)

في سطر واحد: ({ funct(args) })[n] سيعود النتيجة n'th دون إعلان أي متغيرات تسمية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top