rubyのマルチスレッドと関数のキーワードパラメータ

3142 ワード

1、ruby中のマルチスレッドを実現する
# 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)