加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何在1种方法中产生2个块

发布时间:2020-12-17 01:54:08 所属栏目:百科 来源:网络整理
导读:如何在同一方法中产生两个不同的块 示例代码: def by_two(n,a) yield n yield aendproc1 = proc {|x| p x * 2}proc2 = proc {|x| x + 100}by_two(10,300,proc1,proc2) 错误是这样的 – main.rb:7: syntax error,unexpected ',',expecting ')'by_two(10,proc
如何在同一方法中产生两个不同的块

示例代码:

def by_two(n,a)
    yield n
    yield a
end

proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}

by_two(10,300,&proc1,&proc2)

错误是这样的 –

main.rb:7: syntax error,unexpected ',',expecting ')'
by_two(10,&proc2)

有什么建议在哪里,哪些是错的?谢谢

解决方法

块是将单个匿名过程传递给方法的轻量级方法.因此,根据定义,不能将两个块传递给方法.它不仅在语义上是不可能的,甚至在句法上也是不可能的.

Ruby确实支持Procs形式的一流程序,因为它们只是像任何其他对象一样的对象,你可以根据需要传递它们中的任意数量:

def by_two(n,a,proc1,proc2)
  proc1.(n)
  proc2.(a)
end

proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}

by_two(10,proc2)
# 20
# => 400

自从在Ruby 1.9中引入lambda文字以来,Procs在语法上几乎与块一样轻量级,因此不再有太大的区别:

by_two(10,-> x { p x * 2 },-> x { x + 100 })
# 20
# => 400

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读