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)
    
  • 相关阅读:
    创建一个简单的图片服务器
    spring-boot系列:初试spring-boot
    java的动态代理机制
    jedis连接池详解(Redis)
    使用logback.xml配置来实现日志文件输出
    redis在mac上的安装
    理解RESTful架构
    分布式应用框架Akka快速入门
    [Java基础]Java通配符
    Mac vim iterm2配色方案
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/11283909.html
Copyright © 2011-2022 走看看