0
我正忙着用Ruby來學習語言。目前,我正試圖圍繞纖維的概念進行研究。根據this answer,它們通常用於創建(無限)外部統計員。另一方面,這似乎與所謂的明確統計員的概念重疊。我想寫一個代碼片段來觸發連續的素數(是的,下面的算法的運行時間爲O(可怕))。我可以通過使用光纖實現它:纖維與明確的普查員
prime_fiber = Fiber.new do
primes = [2]
Fiber.yield 2
current = 1
loop do
current += 2
unless primes.find {|value| (current % value) == 0}
Fiber.yield current
primes << current
end
end
end
ARGV[0].to_i.times {print "#{prime_fiber.resume}, "}
這本身不發出枚舉器對象,雖然它不是很難創造一個出來。相比之下,我還可以利用一個明確定義枚舉,這已經是一個枚舉對象的好處:
prime_enum = Enumerator.new do |yielder|
primes = [2]
yielder.yield 2
current = 1
loop do
current += 2
unless primes.find {|value| (current % value) == 0}
yielder.yield current
primes << current
end
end
end
ARGV[0].to_i.times {print "#{prime_enum.next}, "}
# I could also write:
# p prime_enum.first(ARGV[0].to_i)
這兩種方法都讓我實現某種協同例程,他們似乎是互換我。那麼我什麼時候更喜歡一個呢?是否有一些共同商定的做法?我發現很難把所有這些成語都放在我的腦海裏,所以如果這被認爲是一個愚蠢的問題,我就提前道歉。
所以,我想建議普查員都需要,只要值僅僅作爲_sequences_和我應該用纖維,如果我想強調我的代碼的併發性方面。 – Tunix