ماذا يعني 'العائد يسمى من كتلة' يعني في روبي ؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا جديدة على روبي و أنا أحاول التالية:

mySet = numOfCuts.times.map{ rand(seqLength) }

ولكن يمكنني الحصول على 'العائد يسمى من كتلة' خطأ.لست متأكدا ماذا يعني له.راجع للشغل, هذا السؤال هو جزء من سؤالي هنا.

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

المحلول

المشكلة هي أن أوقات طريقة تتوقع الحصول على كتلة أنه سوف تسفر عن السيطرة.ومع ذلك لم تنتقل كتلة إلى ذلك.هناك طريقتان لحل هذه المشكلة.الأول هو عدم استخدام مرات:

mySet = (1..numOfCuts).map{ rand(seqLength) }

وإلا تمرير كتلة إلى ذلك:

mySet = []
numOfCuts.times {mySet.push( rand(seqLength) )}

نصائح أخرى

إن "numOfCuts" هو عدد صحيح ،

5.times.foo   

غير صالح

"تايمز" تتوقع كتلة.

5.times{   code here   } 

كنت الجمع بين الوظائف التي لا يبدو منطقيا-إذا numOfCuts هو عدد صحيح ، ثم مجرد استخدام مرات كتلة سيتم تشغيل كتلة عدة مرات (على الرغم من أنه فقط يعود الأصلي صحيح:

irb(main):089:0> 2.times {|x| puts x}
0
1
2

الخريطة هي الدالة التي تعمل على نطاقات و المصفوفات و إرجاع صفيف:

irb(main):092:0> (1..3).map { |x| puts x; x+1 }
1
2
3
[2, 3, 4]

لست متأكدا ما كنت تحاول تحقيق مع رمز - ماذا تحاول أن تفعل ؟ (بدلا من أن أسأل تحديدا عن ما يبدو أن بناء جملة غير صالح)

بنغو ، لقد اكتشفت ما هو هذا.في JRuby علة.

تحت التصوير بالرنين المغناطيسي

>> 3.times.map
=> [0, 1, 2]
>> 

تحت JRuby

irb(main):001:0> 3.times.map
LocalJumpError: yield called out of block
    from (irb):2:in `times'
    from (irb):2:in `signal_status'
irb(main):002:0> 

الآن, أنا لا أعرف إذا كان التصوير بالرنين المغناطيسي (مستوى تنفيذ روبي) هو فعل الشيء الصحيح هنا.ربما ينبغي أن تشكو من أن هذا لا معنى له, ولكن عندما n.مرات تسمى التصوير بالرنين المغناطيسي فإنه يعود العداد ، بينما Jruby يشكو أنه يحتاج إلى كتلة.

عدد صحيح.مرات تتوقع كتلة.رسالة الخطأ يعني yield بيان داخل times الطريقة لا يمكن أن يسمى لأنك لم تعطيه بلوك.

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

(1..5).map{ do something }

هنا هو خاصتك rubydoc عن عدد صحيح.مرات و مجموعة.

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