我试图从 Ruby Koans 中理解一些东西。在一堂课中,我们制作了两个类,如下所示:
class CanNotBeTreatedAsString
def to_s
"non-string-like"
end
end
not_like_a_string = CanNotBeTreatedAsString.new
not_like_a_string == "non-string-like"
class CanBeTreatedAsString
def to_s
"string-like"
end
def to_str
to_s
end
end
like_a_string = CanBeTreatedAsString.new
like_a_string.to_str == "string-like"
def acts_like_a_string?(string)
string = string.to_str if string.respond_to?(:to_str)
string.is_a?(String)
end
assert_equal false, acts_like_a_string?(CanNotBeTreatedAsString.new)
assert_equal true, acts_like_a_string?(CanBeTreatedAsString.new)
所以这两个类和最后两个“断言”语句是我不清楚的。这两个类几乎相同,除了第二个类只是有另一个函数to_str
调用to_s
. 我不明白为什么第二个断言语句是真的(因此第二个类可以被视为一个字符串)仅仅是因为有第二个函数调用第一个函数。