rubyのマルチスレッドと関数のキーワードパラメータ
3142 ワード
1、ruby中のマルチスレッドを実現する
rubyのマルチスレッドでもqueueによるデータのインタラクションと伝達は,次の例を見る.
queueオブジェクトによるサブスレッドとメインプロセス間のデータインタラクション
ローカル変数のqueueオブジェクトを定義し、データ転送を行います.
2、rubyのキーワードパスを実現する.ここでは等号ではなくコロンを使う.
3、rubyにおける一般パラメータとキーワードパラメータの混合使用
4、ruby関数キーワードと普通のパラメータを混用して、1つのHashを伝達して、関数のパラメータは伝達の値とhashの中の値を使用します
5、ruby関数キーワードパラメータと一般パラメータを混用し、関数はデフォルト値とhashの2種類を使用する
# def test1
# n = 1
# if n > 10
# puts "test1 "
# else
# while true
# sleep 2
# puts n
# n = n + 1
# end
# end
# end
#
#
# def test2
# n = 100
# if n > 100
# puts "test2 "
# else
# while true
# sleep 2
# puts n
# n = n + 10
# end
# end
# end
#
# t1 = Thread.new{test1()}
# t2 = Thread.new{test2()}
#
# t1.join
# t2.join
#
rubyのマルチスレッドでもqueueによるデータのインタラクションと伝達は,次の例を見る.
$queue = Queue.new
def test1
sleep 2
puts "test1"
$queue << "test111"
end
def test2
sleep 4
puts "test2"
$queue << "test22222222"
end
t1 = Thread.new{test1}
t2 = Thread.new{test2}
t1.join
t2.join
2.times do
res = $queue.pop
puts res
end
queueオブジェクトによるサブスレッドとメインプロセス間のデータインタラクション
ローカル変数のqueueオブジェクトを定義し、データ転送を行います.
def test1(queue)
sleep 2
puts "test1"
queue << "test111111111111111111"
end
def test2(queue)
sleep 4
puts "test2"
queue << "test222222222222222"
end
def test
queue = Queue.new
t1 = Thread.new{test1(queue)}
t2 = Thread.new{test2(queue)}
t1.join
t2.join
2.times do
res = queue.pop
puts res
end
end
test
2、rubyのキーワードパスを実現する.ここでは等号ではなくコロンを使う.
def test(a:"a1",b:"b1",c:"c1")
puts a
puts b
puts c
end
test(a:"a2",c:"c2")
3、rubyにおける一般パラメータとキーワードパラメータの混合使用
def test1(d,a:"a1",b:"b1",c:"c1")
# ,
puts a
puts b
puts c
puts d
end
test1(1)
test1(1,c:"c2")
4、ruby関数キーワードと普通のパラメータを混用して、1つのHashを伝達して、関数のパラメータは伝達の値とhashの中の値を使用します
args = {"a":"a11","b":"b11","c":"c11"}
def test2(d,a:"a1",b:"b1",c:"c1")
# ,
puts "test22222222222222"
puts a
puts b
puts c
puts d
end
5、ruby関数キーワードパラメータと一般パラメータを混用し、関数はデフォルト値とhashの2種類を使用する
args = {"a":"a11","c":"c11"}
def test3(d,a:"a1",b:"b1",c:"c1")
# ,
puts "test333333333333"
puts a
puts b
puts c
puts d
end
test3(2,args)