我是新來的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