普通にメソッドをスレッド化するとこうなる
#!/usr/bin/env ruby
require 'thread'
def foo
num = 0
loop do
sleep 1
num += 1
p num
end
end
t = Thread.new(&method(:foo))
t.join
引数を取るメソッドをスレッド化したい場合
これは Syntax error
#!/usr/bin/env ruby
require 'thread'
def foo(num)
loop do
sleep 1
num += 1
p num
end
end
t = Thread.new(&method(:foo), 0)
t.join
-:12: syntax error, unexpected ',', expecting ')'
t = Thread.new(&method(:foo), 0)
^
shell returned 1
これは ArgumentError
#!/usr/bin/env ruby
require 'thread'
def foo(num)
loop do
sleep 1
num += 1
p num
end
end
t = Thread.new(&method(:foo, 0))
t.join
-:12:in `method': wrong number of arguments (2 for 1) (ArgumentError)
from -:12:in `<main>'
shell returned 1
これが正解
#!/usr/bin/env ruby
require 'thread'
def foo(num)
loop do
sleep 1
num += 1
p num
end
end
t = Thread.new(0, &method(:foo))
t.join
とのことです