【问题标题】:How does Ruby's Combined Comparison Operator work?Ruby 的组合比较运算符是如何工作的?
【发布时间】:2021-11-26 04:30:39
【问题描述】:

关于stackoverflow的第一个问题:)

我正在学习 Codecademy 的 Ruby 课程,但遇到了一些问题。

fruits = ["orange", "apple", "banana", "pear", "grapes"]

fruits.sort! {|first, second| second <=> first} 

print fruits

我不知道如何表达这个问题。在 Codecademy 上,任务是设置要在控制台上反向显示的数组。经过一番研究,我能够弄清楚。我了解它的工作原理以及将其放入代码中的顺序而不是为什么。我知道“”比较两个对象,但是当我们不这样声明时,数组中的项目如何成为对象?

其次,当我们可以做到fruits.sort.reverse时,这样写这段代码的目的是什么?

【问题讨论】:

  • “当我们不声明数组中的项目时,它们如何变成对象” – 与其他语言不同,Ruby 没有原始类型,而你没有不必声明类型。像 "orange" 甚至 5 这样的文字已经是一个成熟的对象。这就是为什么您可以编写5.times { ... } 并使用times 作为Integer 的实例方法,或者"orange" &lt;=&gt; "apple" 调用String#&lt;=&gt;。 (操作符只是方法调用的语法糖)

标签: arrays ruby sorting


【解决方案1】:

字符串字面量可用于在 Ruby 中创建字符串对象,无需使用 String 类来创建对象。以下两个是等价的:

"Hello, world!"
String.new("Hello, world!")

更多信息可以在here找到。


其次,当我们可以做到fruits.sort.reverse时,这样写这段代码的目的是什么?

请就此联系 Codecademy,但我怀疑这是为了进一步了解 &lt;=&gt; 的工作原理。

【讨论】:

  • String.new("Hello, world!") 实际上创建了"Hello, world!" 的副本。文字没有真正的等价物。
【解决方案2】:

第一个问题:sort 方法在其操作的不同点必须比较对象对以查看它们的相对顺序应该是什么。它通过应用您传递给sort 的块来进行比较,即{|first, second| second &lt;=&gt; first}。不确定“当我们不这样声明数组中的项目时,它们如何成为对象?”是什么意思。 ruby 中的所有数据都是一个对象,因此鉴于所有变量都是对象引用,因此无需声明或转换。

第二个问题:是的,你可以做fruits.sort.reverse,但这需要在排序之后做额外的工作来做反向操作。此外,reverse 无法处理更复杂的排序任务,例如按性别和姓氏或头发颜色、身高和体重等多个标准对人员进行排序。编写自己的比较器可以处理相当复杂的排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2015-02-27
    • 2013-10-07
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多