我来自 Java 和一些 C++,并且正在通过创建二十一点游戏来学习(一些)红宝石。我正在仔细阅读这个程序以了解 ruby 的真正工作原理。
手头的代码是:
class Card
include Comparable
include Enumerable
attr_accessor :value
def initialize(v)
@value = v
end
def <=>(other)
if other.is_a?(Card)
@value <=> other.value
else
@value <=> other
end
end
def each
yield @value
end
def to_s
"#{@value}"
end
end
class Hand < Card
include Enumerable
attr_accessor :hand
def initialize
@hand = Array.new()
end
def clear_hand
@hand.clear
end
def add_to_hand(c)
if c.is_a?(Card)
@hand << c
else
raise "We have a problem - we received a non card object into our hand"
end
end
def each
@hand.each do |card|
yield card
end
end
def to_s
@hand.each do |c|
puts c
end
end
end
c1 = Card.new(3)
c2 = Card.new(0)
p = Hand.new()
p.add_to_hand(c1)
puts c1 # => 3
puts p # => 3 \n(new line) #<Hand:0x00000002b01ba0>
puts [1,2,3,4,5].include?(c1) # => true
puts [1,2,3,4,5].include?(p) # => false
我的问题:
为什么,当我使用“puts p”时,我会得到一个 ObjectID 以及预期值“3”。它只对数组执行此操作(或者这就是我到目前为止所注意到的,但我确信还有其他情况它还返回 ObjectID)。有人可以解释为什么。
最后一行(当我们得到错误输出时)我希望它返回 true - 这是因为我有一个手,里面装满了卡片(此时只有一张),并且它确实包含带有值的卡片3. 所以,我不知道我的代码有什么问题导致它返回 false - 我产生了“手”的每张卡片,我认为应该通过使用卡片的每个语句产生该值?
如果这不清楚,请告诉我!提前致谢。