【问题标题】:What does the `&:symb` do? [duplicate]`&:symb` 有什么作用? [复制]
【发布时间】:2019-05-06 15:12:39
【问题描述】:

我看过一个如何对字符串进行排序的示例。不区分大小写排序:

str.chars.sort(&:casecmp).join
#=> "ginrSt"

我很好奇(&:casecmp)。我发现例如:

arr.map(&:name)

是简写

arr.map(&:name.to_proc)

相同
arr.map{|el| el.name}

我知道&(与号)试图将符号转换为proc,并将其作为块传递给方法。我不明白这对于sort 方法是如何工作的,它应该比较两个值。会是这样吗?

str.chars.sort{|a, b| a.casecmp ;b.casecmp}.join

这不会有帮助,因为soft 需要一个块来返回一个整数,而casecmp 需要一个参数。 (或者在那种情况下它被称为参数?)对我来说,它看起来更像这样:

str.chars.sort{|a, b| a.casecmp(b)}.join

&:casecmp 如何知道将|a, b| 中的一个作为调用者,将另一个作为参数?我不认为这是一个选项。

【问题讨论】:

  • 好吧,我找到了这个:
    class Symbol def to_proc Proc.new do |obj, *args| obj.send self, *args end end end 这个我猜为什么将 |a, b| 的第二个参数作为参数.. 还是觉得很熟悉使用 &:symb 但阅读了相关内容..
    我确实尝试添加两个空格并
    进行换行.. 按下回车时会自动添加注释.. 不知道该怎么做
  • @mu 太短了.. 我正在阅读有关 cmets 格式化的帮助,但我没有看到任何关于您必须按 Shift + Enter 的换行符,我现在过度使用了..
    也许这取决于浏览器?还是不行

标签: ruby symbols proc


【解决方案1】:

如果将多个参数传递给您的块,则 Symbol#to_proc 创建的 proc 使用附加的块参数作为方法调用的参数。

http://phrogz.net/symbol-to-proc-with-multiple-arguments

所以,真正发生的是,sort(&:casecmp) 被转换为:

sort {|a,b| a.casecmp(b) }

因为sort 有两个参数。

【讨论】:

  • 谢谢@emaillenin...你怎么做换行符..当我在最后做2个空格并按回车时,它会添加一个评论..
  • @Tomasz 使用 shift + enter
  • 再来一次.. 谢谢我在阅读有关格式化 cmets 时没有看到任何关于 Shift + Enter 的信息,但它仅在评论编辑窗口中有效.. 保存后没有换行符
    没有帮助
猜你喜欢
  • 2013-07-24
  • 2015-05-03
  • 2013-07-08
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2016-04-25
  • 2014-12-19
相关资源
最近更新 更多