经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Ruby » 查看文章
Ruby中星号打包解包操作
来源:cnblogs  作者:骏马金龙  时间:2019/5/28 9:34:00  对本文有异议

Ruby中可以使用一个星号*和两个星号**完成一些打包、解包操作,它们称为splat操作符:

  • 一个星号:以数组为依据进行打包解包(参考文章)
  • 两个星号:以hash为依据进行打包解包(参考文章)

两个星号的splat场景很少见,如有必要可参考上面列出的参考文章。

当splat操作符后面跟的是数组,则进行数组解包操作:解包成元素列表。这个解包效果在调用函数并传参时比较能体现出来。

  1. def f(a,b,c,d)
  2. p "1.#{a}"
  3. p "2.#{b}"
  4. p "3.#{c}"
  5. p "4.#{d}"
  6. end
  7. arr=%w(aa bb cc dd)
  8. f(*arr)
  9. # 赋值解包:将数组解包成元素列表再赋值给arr变量
  10. # 这过程中会创建一个新的数组保存解包后但要赋值的各元素
  11. arr=*[1,2,3]

上面的*arr中,splat操作符后面跟的是一个数组,所以它做了解包操作,将数组解包成了4个元素,并依次赋值给参数a、b、c、d。

当splat操作符后面跟的是一个或多个元素,则进行数组打包操作:创建一个新数组保存这些元素。这个在函数定义中比较常见,很偶尔的在赋值的时候也能见到。

  1. def foo(a,b,*args)
  2. p a
  3. p b
  4. p args #=> 打包成[3,4,5]赋值给参数args
  5. end
  6. foo(1,2,3,4,5)

下面的打包、解包示例比较经典:

  1. a,*x=1,2,3 #=> a=1,x=[2,3]
  2. a, (b, *c), *d = 1, [2, 3, 4], 5, 6
  3. #=> a=1,b=2,c=[3, 4],d=[5, 6]

原文链接:http://www.cnblogs.com/f-ck-need-u/p/10930383.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号