zoukankan      html  css  js  c++  java
  • ruby中的多线程和函数的关键字传参

    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函数关键字和普通参数混用,传递一个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两种

    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)
    
  • 相关阅读:
    codevs 1031 质数环
    codevs 1005 生日礼物
    codevs 1004 四子连棋
    codevs 2292 图灵机游戏
    1439 统计素数个数
    1675 大质数 2
    codevs 1462 素数和
    [NOIp2012提高组]借教室
    [NOIp2007提高组]矩阵取数游戏
    [TJOI2017]城市
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/11283909.html
Copyright © 2011-2022 走看看