我是新来的Ruby和我想以下几点:在Ruby中,“产生块的产出”是什么意思?
mySet = numOfCuts.times.map{ rand(seqLength) }
,但我得到错误“叫了块的产量”。我不确定他的意思。顺便说一句,这个问题是我问here更普遍的问题的一部分。
我是新来的Ruby和我想以下几点:在Ruby中,“产生块的产出”是什么意思?
mySet = numOfCuts.times.map{ rand(seqLength) }
,但我得到错误“叫了块的产量”。我不确定他的意思。顺便说一句,这个问题是我问here更普遍的问题的一部分。
问题是times方法期望得到一个它将产生控制的块。但是你没有通过一个块。有两种方法可以解决这个问题。第一种方法是不使用时间:
mySet = (1..numOfCuts).map{ rand(seqLength) }
否则块传递给它:
mySet = []
numOfCuts.times {mySet.push(rand(seqLength))}
你想要a)在numOfCuts之后:)(并且会有重复) – 2008-09-23 05:20:24
如果 “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]
我不确定你想用代码实现什么 - 你想要做什么? (而不是专门询问什么看起来无效的语法)
Integer.times需要一个块。错误消息意味着times
方法中的yield
语句无法调用,因为您没有给它一个块。
至于你的代码,我知道你在寻找的是一个范围:
(1..5).map{ do something }
这里是你的Integer.times和Range rubydoc。
宾果,我刚刚发现这是什么。它是一个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实现)在这里做正确的事。它可能应该抱怨这没有意义,但是当MRI中调用n次时它返回一个枚举器,而Jruby则抱怨它需要一个块。
你使用jruby还是mri ruby? – 2008-09-23 05:03:38