方法< =>和其他问题

时间:2013-01-10 15:00:20

标签: ruby-on-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

该方法&#34;&lt; =&gt;&#34;手段?它是一个副本:post_number,:author和更改:date?似乎这种方法无论如何都不起作用,但我只是想知道这种方法的含义。

第二个问题: 我找到了这段代码: a,b和c具有适当的值。

a = 0.1 * b if c?

这有什么不同:

if c?
  a = 0.1 * b
end

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

2 个答案:

答案 0 :(得分:1)

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

<=>看起来很奇怪,但它只是<(一个对象少于另一个对象),=(两个对象相等)和{{1}的组合(是一个比另一个更大的对象)。

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

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

.date

答案 1 :(得分:-1)

<=>是一个比较运算符。见What is the Ruby <=> (spaceship) operator?

if语句是等效的。