gpt4 book ai didi

ruby - Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash)

转载 作者:数据小太阳 更新时间:2023-10-29 06:19:57 27 4
gpt4 key购买 nike

我正在学习 Ruby,我看到了一些让我有点困惑的方法,特别是 to_sto_str(同样,to_i /to_int, to_a/to_ary, & to_h/to_hash ).我读到的内容解释说,较短的形式(例如 to_s)用于显式转换,而较长的形式用于隐式转换。

我真的不明白 to_str 实际是如何使用的。 to_str 会定义字符串以外的东西吗?你能给出这个方法的实际应用吗?

最佳答案

首先请注意,所有这些都适用于每对“短”(例如 to_s/to_i/to_a/to_h ) 与“long”(例如 to_str/to_int/to_ary/to_hash)强制方法在 Ruby 中(对于它们各自的类型),因为它们都具有相同的语义。


它们有不同的含义。你不应该实现 to_str 除非你的对象表现像一个字符串,而不是仅仅被一个字符串表示。实现 to_str 的唯一核心类是 String 本身。

来自 Programming Ruby(引自 this blog post,值得一读):

[to_i and to_s] are not particularly strict: if an object has some kind of decent representation as a string, for example, it will probably have a to_s method… [to_int and to_str] are strict conversion functions: you implement them only if [your] object can naturally be used every place a string or an integer could be used.

Older Ruby documentation from the Pickaxe有这样的话:

Unlike to_s, which is supported by almost all classes, to_str is normally implemented only by those classes that act like strings.

例如,除了Integer , 两者 Float & Numeric实现 to_int(to_i 相当于 to_str),因为它们都可以很容易地替换为 Integer(它们实际上都是数字)。除非你的类与 String 有类似的紧密关系,否则你不应该实现 to_str

关于ruby - Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182052/

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