0

我刚开始在 Rails 上学习 Ruby。我目前正在做一个教程,但我也在尝试理解我的一位同事所做的代码。我在互联网上寻找答案,但没有找到任何回答我问题的答案。所以这是我的问题:

在此代码上:

class Post
  require 'date'
  include Comparable
  attr_accessor :post_number, :author, :date

  def initialize

  end

  def <=> (another_post)
    self.date <=> another_post.date
  end
end

方法“<=>”是什么意思?它是 :post_number、:author 的副本和 :date 的更改吗?看来这个方法无论如何都行不通,但我只是想知道这个方法的含义。

第二个问题:我发现这段代码:a、b 和 c 具有适当的价值。

a = 0.1 * b if c?

这有什么不同:

if c?
  a = 0.1 * b
end

好吧,谢谢你的回答,我希望我的问题不要太愚蠢。问候, Bdloul

4

2 回答 2

1

<=>是比较法。如果您执行了类似的操作Post.all.sort,该sort方法将查看是否Post定义了一种比较帖子对象的方法。否则,它将向上移动继承层次结构,直到找到对它们进行排序的方法。

<=>看起来很奇怪,但它只是<(一个对象小于另一个对象)、=(两个对象是否相等)和>(一个对象大于另一个对象)的组合。

因此,在您发布的代码中,作者正在创建一个方法来定义如何比较两个对象。特别是,他写道,它们的比较方式基于.date属性的比较方式。换句话说,2013 年 1 月 1 日开始的帖子将出现在 2013 年 1 月 2 日开始的帖子之前,依此类推。

至于下一部分,两段代码是相同的。在 Ruby 中,您可以在一行中编写多个条件。这些也都是等价的,只是举个例子:

# 1.
a = 1 unless a == 0
# or
unless a == 0
  a = 1
end

# 2.
a += 1 while a < 10
# or
while a < 10
  a += 1
end
于 2013-01-10T15:05:50.970 回答
-1

<=>是比较运算符。请参阅什么是 Ruby <=>(宇宙飞船)运算符?

if语句是等价的。

于 2013-01-10T15:06:03.230 回答