Ruby Koans から何かを理解しようとしています。1 つのレッスンで、次のように 2 つのクラスを作成します。
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)
したがって、2 つのクラスと最後の 2 つの "assert" ステートメントについては、よくわかりません。2 つのクラスはほぼ同じですが、2 番目のクラスにはto_str
を呼び出す別の関数があるだけto_s
です。最初の関数を呼び出す 2 番目の関数があるという理由だけで、2 番目の assert ステートメントが true である (したがって、2 番目のクラスを文字列として扱うことができる) 理由がわかりません。