3

私はRubyを初めて使用し、次のことを試しています。

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

しかし、「ブロック外で呼び出された歩留まり」エラーが発生します。彼が何を意味するのかわかりません。ところで、この質問は私がここで尋ねたより一般的な質問の一部です。

4

5 に答える 5

9

問題は、timesメソッドが、制御を生成するブロックを取得することを期待していることです。ただし、ブロックを渡していない。これを解決するには2つの方法があります。1つ目は、時間を使用しないことです。

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

または、それにブロックを渡します。

mySet = []
numOfCuts.times {mySet.push( rand(seqLength) )}
于 2008-09-23T05:06:35.053 に答える
1

「numOfCuts」が整数の場合、

5.times.foo   

無効です

「回」はブロックを期待します。

5.times{   code here   } 
于 2008-09-23T05:03:55.603 に答える
1

意味をなさないように見える関数を組み合わせています。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]

コードで何を達成しようとしているのかわかりません-何をしようとしているのですか?(無効な構文と思われるものについて具体的に尋ねるのとは対照的に)

于 2008-09-23T05:10:07.710 に答える
1

ビンゴ、私はこれが何であるかを知りました。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 はブロックが必要だと文句を言います。

于 2008-09-23T13:01:17.063 に答える
0

Integer.timesはブロックを想定しています。エラーメッセージは、ブロックを指定しなかったため、メソッドyield内のステートメントをtimes呼び出すことができないことを意味します。

あなたのコードに関しては、私はあなたが探しているのは範囲だと思います:

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

これがInteger.timesRangeのrubydocです。

于 2008-09-23T05:11:50.857 に答える