【发布时间】: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 的换行符,我现在过度使用了..
也许这取决于浏览器?还是不行