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)

ruby中的多线程和函数的关键字传参的更多相关文章

  1. python中函数的参数:必传参数(位置参数)、默认值参数、参数组传参、关键字传参

    1.必传参数也叫做位置参数,因为必填,也必须对应位置 2.默认值参数如上图的word 3.参数组参数:传进去的是0个.或多个value的形式,,,和位置参数有点像,只传value值,但是没有限制个数 ...

  2. php匿名函数和闭包函数及use关键字传参及Closure匿名函数类

    php闭包函数用use传参有什么意义?答:use引用外层变量,比如全局变量 Closure,匿名函数,是php5.3的时候引入的,又称为Anonymous functions.字面意思也就是没有定义名 ...

  3. python函数的动态传参.作用域与命名空间

    一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...

  4. python定义函数时的参数&调用函数时的传参

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  5. Python函数定义及传参方式

    主要内容:     1.函数初识     2.函数传参方式        (1)位置参数        (2)默认参数        (3)关键参数        (4)非固定传参 一.函数初识 1. ...

  6. 二十一、springboot之定制URL匹配规则(项目中遇到的问题:get方式传参,带有小数点,被忽略)

    一.问题描述: get方式传参,在传送价格,积分时(带有小数点),debug后台微服务接受到的参数,却不带小数点,如:price是0.55,后台接受后却是0 二.解决 在WebConfiguratio ...

  7. Ruby中Time的常用函数

      Time的常用函数 时间对象. Time.now返回当前时间. 1.Time.at Time.at(time[, usec]) 返回time所指时间的Time对象. time可以是Time对象,也 ...

  8. ruby中数组的常用函数

    在程序中定义一个数组 在程序中定义一个数组,因为我们在下面说明. fruits = ["apple", "orange", "lemon"] ...

  9. bash函数定义/使用/传参…

    函数:function, 功能     过程式编程,代码重用         模块化编程         简洁             语法:         function f_name {    ...

随机推荐

  1. python模块StringIO和BytesIO

    StringIO和BytesIO StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. StringIO顾名思义就是在内存中读写str. 要把str写入StringIO,我们需要先创 ...

  2. LNMP 源码发布Thinksaas论坛

    第一步:搭建LNMP架构 LNMP架构 注意:搭建php服务时,初始化 ./configure --prefix=/usr/local/php5 \ --enable-fpm \ --enable-d ...

  3. phpStorm自动生成___jb_tmp___文件

    把这个去掉就可以了

  4. 程序员修神之路--打通Docker镜像发布容器运行流程

    菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊 还有哪不明白呢? 如果我想用docker实现所谓的云原生,我的项目该怎么发布呢? 这还是要详细介绍一下docker了 Docker 是一个开 ...

  5. JavaScript的DOM对象和jQuery对象的对比

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. layer ui 多选下拉取值(全)

    https://maplemei.gitee.io/xm-select/#/basic/create   layer ui

  7. Win7 系统所有应用颜色调整

    不知道按到哪个快捷键了,发现windows7系统桌面,浏览器,PDF阅读器和Eclipse的北京和菜单都编程淡黄色,下面是解决的过程. 方法一:在win7桌面右击 -> 个性化 -> 窗口 ...

  8. luogu P2296 寻找道路 |最短路

    题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 的 ...

  9. Spring底层源码分析

    Spring 运行原理 Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean ...

  10. HDU 全国多校第四场 题解

    题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...