【问题标题】:How does the method reference operator .: work?方法引用运算符 .: 是如何工作的?
【发布时间】:2019-06-10 01:59:51
【问题描述】:

这个问题不是很有用,因为the method reference operator was removed from Ruby 2.7.0 在发布之前。由于历史原因,这个问题被搁置了。

Ruby 2.7.0-preview1 引入了方法引用运算符.: 作为实验功能。 (更多 herehere)。

有一些抽象的例子可以用来说明如何使用这个新的操作符:

method = 42.:to_s
 => #<Method: Integer#to_s>
method.receiver
 => 42
method.name
 => :to_s
method.call
 => "42"

和:

method = File.:read
 => #<Method: File.read>
method.call('/Users/foo/.zshrc')
 => "export ZSH=$HOME/.zsh"

这些抽象示例并不代表现实世界的实现。根据实际和现实世界的例子定义的方法引用运算符的目的和使用的简单英语解释是什么?

【问题讨论】:

  • here 中给出了该方法的描述以及如何利用它的示例。当我在 Google 上搜索“ruby 方法参考 v2.70”时,它位于列表的顶部。对于此类一般性问题,谷歌搜索通常比向 SO 寻求解释更有效。
  • “我发现那篇文章不清楚”是一个陈述,而不是一个问题,所以一切都是关于问题的。另外,如果您没有找到#method 的快捷方式,显然将击键保存在[1,42].reject(&amp;42.:==) 自我解释之类的东西中,我怀疑我们在这里可以提供任何帮助。
  • 我进一步查看了我的 google 结果,发现除了包含您提供的示例的文章之外没有任何帮助。你想要更多,我相信其他读者,包括我自己,也想了解更多关于该方法的可能用途,所以希望你至少得到一个好的答案。
  • @CarySwoveland ruby​​ 更新现在带来了更多的语法糖。 #itself,安全导航&amp;.,现在这个。一切都是为了节省击键;就这么简单。只是 #method 的新别名 [具有与 __call__ 相同的不可覆盖语义]。
  • @AlekseiMatiushkin 但老实说,您对这种语法糖有多爱。 :)

标签: ruby ruby-2.7


【解决方案1】:

方法引用运算符.: 只是Object#method 的语法糖,就像函数调用运算符.() 一样。只是#call 的语法糖。

因此,方法引用运算符的用例与Object#method 方法的用例完全相同……只是击键次数更少。

【讨论】:

  • 虽然有一个细微的差别:不能覆盖#:,不像#method
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2013-10-07
  • 2011-01-05
  • 2018-08-31
  • 2013-08-16
相关资源
最近更新 更多