私はRubyを初めて使用し、次のことを試しています。
mySet = numOfCuts.times.map{ rand(seqLength) }
しかし、「ブロック外で呼び出された歩留まり」エラーが発生します。彼が何を意味するのかわかりません。ところで、この質問は私がここで尋ねたより一般的な質問の一部です。
私はRubyを初めて使用し、次のことを試しています。
mySet = numOfCuts.times.map{ rand(seqLength) }
しかし、「ブロック外で呼び出された歩留まり」エラーが発生します。彼が何を意味するのかわかりません。ところで、この質問は私がここで尋ねたより一般的な質問の一部です。
問題は、timesメソッドが、制御を生成するブロックを取得することを期待していることです。ただし、ブロックを渡していない。これを解決するには2つの方法があります。1つ目は、時間を使用しないことです。
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
mapは、範囲と配列を処理し、配列を返す関数です。
irb(main):092:0> (1..3).map { |x| puts x; x+1 }
1
2
3
[2, 3, 4]
コードで何を達成しようとしているのかわかりません-何をしようとしているのですか?(無効な構文と思われるものについて具体的に尋ねるのとは対照的に)
ビンゴ、私はこれが何であるかを知りました。JRuby のバグです。
MRI下
>> 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>
ここで、MRI (標準の Ruby 実装) が正しいことを行っているかどうかはわかりません。おそらくこれは意味がないと文句を言うべきですが、n.times が MRI で呼び出されると Enumerator を返しますが、Jruby はブロックが必要だと文句を言います。
Integer.timesはブロックを想定しています。エラーメッセージは、ブロックを指定しなかったため、メソッドyield
内のステートメントをtimes
呼び出すことができないことを意味します。
あなたのコードに関しては、私はあなたが探しているのは範囲だと思います:
(1..5).map{ do something }
これがInteger.timesとRangeのrubydocです。