ماذا يعني 'العائد يسمى من كتلة' يعني في روبي ؟
-
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 عن عدد صحيح.مرات و مجموعة.