如何调用方法“< =>”? 本书的任务。我知道它可以是“< =>。”我需要调用方法
Point = Struct.new(:x, :y)
class Point
def add!(other)
self.x += other.x
self.y += other.y
self
end
include Comparable
def <=>(other)
return nil unless other.instance_of? Point
self.x**2 + self.y**2 <=> other.x**2 + other.y**2
end
end
我创建了两个对象。
p, q = Point.new(1, 0), Point.new(0, 1)
答案 0 :(得分:3)
在Ruby中,==
,+
和<=>
等运算符只是方法。如果您愿意,可以像其他任何方法一样调用<=>
方法:
class Foo
def <=>(other)
puts "Comparing #{inspect} to #{other.inspect}!"
1
end
end
obj = Foo.new
obj.<=>(9000)
# -> Comparing #<Foo:0x007fef1094b180> to 9000!"
# => 1
...但为了让我们都疯了,Ruby给了我们语法糖,让我们可以使用 infix 表示法来调用方法:
obj <=> 9000
# -> Comparing #<Foo:0x007fef1094b180> to 9000!"
# => 1
这两种形式是等价的。它们是调用<=>
方法的两种不同方式。
当然,当我们说&#34;调用<=>
方法&#34;在obj
,我们的意思是&#34;将消息<=>
发送到obj
。&#34;另一种方法是使用send
或其更安全的兄弟public_send
:
obj.public_send(:<=>, 9000)
# -> Comparing #<Foo:0x007fef1094b180> to 9000!"
# => 1
我只是为了演示而指出上述内容。不要在实际代码中这样做。只需使用其中缀形式调用该方法:
p <=> q
答案 1 :(得分:0)
正确的方法调用。特别针对此示例。
p.<=>(q)