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

为什么在ruby 1.9中可以使用===调用proc?

发布时间:2020-12-16 22:48:30 所属栏目:百科 来源:网络整理
导读:This article提到了4种在ruby 1.9中调用proc的方法,而===就是其中之一.我不明白为什么会这样做.它是否与===的正常含义有任何关系(询问这两个对象是否是同一个对象)? irb(main):010:0 f =- n {[:hello,n]}= #irb(main):011:0 f.call(:hello)= [:hello,:hello
This article提到了4种在ruby 1.9中调用proc的方法,而===就是其中之一.我不明白为什么会这样做.它是否与===的正常含义有任何关系(询问这两个对象是否是同一个对象)?
irb(main):010:0> f =-> n {[:hello,n]}
=> #
irb(main):011:0> f.call(:hello)
=> [:hello,:hello]
irb(main):012:0> f === :hello
=> [:hello,:hello]
irb(main):013:0> Object.new === Object.new
=> false
irb(main):014:0> f === f
=> [:hello,#]

解决方法

This is what the docs have to say:

It is to allow a proc object to be a target of when clause in the
case statement.

这是一个可能是人为的例子:

even = proc { |x| x % 2 == 0 }
n = 3
case n
when even
  puts "even!"
else
  puts "odd!"
end

它的工作原理是因为case / when基本上是这样执行的:

if even === n
  puts "even!"
else
  puts "odd!"
end

case / when通过在when子句的参数上调用===来检查哪些分支执行,选择返回truthy值的第一个.

尽管它与等式运算符(==)相似,但它并不是更强或更弱的形式.我试着将===运算符视为“属于”运算符.类定义它以便您可以检查对象是否属于该类(即,是类的实例还是类的子类),Range将其定义为检查参数是否属于该范围(即包含在范围),等等.这并没有真正使Proc案例更有意义,而是将其视为使自己属于运算符的工具,就像我上面的例子;我定义了一个对象,可以确定某些东西是否属于偶数组.

(编辑:李大同)

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

    推荐文章
      热点阅读