我想了解Ruby Koans的一些內容。在一個教訓,我們做兩個類,如下所示:紅寶石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
。我不明白爲什麼第二個assert語句是真的(因此第二個類可以被視爲一個字符串),只是因爲有第二個函數調用第一個函數。
我注意到問題的關鍵是'acts_like_a_string?'的定義方式。我在irb中稍微更改了代碼,因此它會響應':to_s'。 –