gpt4 book ai didi

Ruby Koans 和字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:56 24 4
gpt4 key购买 nike

我试图从 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_s 的函数 to_str。我不明白为什么第二个断言语句为真(因此第二个类可以被视为字符串)仅仅是因为有第二个函数调用第一个函数。

最佳答案

这里没有魔法。第二个测试是检查 to_str 方法是否存在。这不是为 CanNotBeTreatedAsString 定义的,但它CanBeTreatedAsString 定义的。

respond_to?的作用是测试方法是否定义,在Ruby 2.0中会进一步说明是否可以调用。无法调用的 protected 方法将不再计算在内。现在,如果 respond_to?(:method_name) 返回 true,那么带有任何必需参数的 send(:method_name) 理论上都可以工作。

第二个类可以使用 alias :to_str, :to_s 以更少的代码实现相同的结果。

关于Ruby Koans 和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13939177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com