【发布时间】:2015-01-01 01:22:32
【问题描述】:
在 Eloquent Ruby 的第一章中,Russ Olsen 写道:
Float方法将其参数(通常是字符串)转换为浮点数。
Ruby 新手 我一直认为 Ruby 方法在定义上属于类,因此例如 Fixnum 和 Array 每个都有自己独立的 :is_a?(大概包括或多或少的共享代码),但“通常是一个字符串”意味着Float 是可以在不同类的对象上调用的单个方法。有人可以澄清一下情况吗?
【问题讨论】:
在 Eloquent Ruby 的第一章中,Russ Olsen 写道:
Float方法将其参数(通常是字符串)转换为浮点数。
Ruby 新手 我一直认为 Ruby 方法在定义上属于类,因此例如 Fixnum 和 Array 每个都有自己独立的 :is_a?(大概包括或多或少的共享代码),但“通常是一个字符串”意味着Float 是可以在不同类的对象上调用的单个方法。有人可以澄清一下情况吗?
【问题讨论】:
Float 既是一个类又是一个method in Kernel。 Kernel 模块默认包含在所有 Ruby 对象中,这意味着您可以从任何地方调用Float 方法。
Float 方法将使用 Float、Fixnum、String 或具有 to_f 方法的任何其他对象的参数(此方法必须返回 Float) :
class Foo
def to_f
42.0
end
end
Float Foo.new # => 42.0
【讨论】:
Float 是依赖于to_f 的不同方法,或者因为它是to_f 的别名?
Float 方法按以下顺序检查参数的类型:Fixnum -> Float -> Bignum -> Nil(错误)-> 尝试调用 to_f。
to_f 方法吗?不同类的方法版本之间的代码共享程度如何?
to_f 方法。只有Object、BasicObject 和Kernel 中的方法出现在所有类中。 to_f 方法在 Fixnum 和 String 中的实现方式非常不同,例如,由于生成 Float 所需的转换性质。
.to_f 的每个班级”。最后一个问题,再次非常感谢您的帮助和耐心:to_f 对Fixnum 和String 的实现是否共享任何代码?