我刚开始学习铁轨上的红宝石。 我现在正在做一个教程,但我也试图理解我的一个同事所做的代码。我在互联网上寻找答案,但没有找到任何回答我的问题。 所以这是我的问题:
关于此代码:
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
答案 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
语句是等效的。