ruby – 范围和’self’关键字
发布时间:2020-12-17 02:24:37 所属栏目:百科 来源:网络整理
导读:我有以下代码: def self.ftoc(temp_in_fahrenheit) (temp_in_fahrenheit - 32) * 5.0/9.0enddef self.ctof(temp_in_celcius) (temp_in_celcius * 9.0/5.0) + 32enddef calculate_temperatures @f = Temperature.ctof(@c) if (@f == nil @c != nil) @c = Tem
我有以下代码:
def self.ftoc(temp_in_fahrenheit) (temp_in_fahrenheit - 32) * 5.0/9.0 end def self.ctof(temp_in_celcius) (temp_in_celcius * 9.0/5.0) + 32 end def calculate_temperatures @f = Temperature.ctof(@c) if (@f == nil && @c != nil) @c = Temperature.ftoc(@f) if (@c == nil && @f != nil) end 这很好用.但是,如果我将代码更改为 def calculate_temperatures @f = self.ctof(@c) if (@f == nil && @c != nil) @c = self.ftoc(@f) if (@c == nil && @f != nil) end 我得到一个错误 undefined method 'ftoc' for #<Temperature:0x000000025486a0 @f=50> 我会认为’self’,作为类Temperature的一个实例,将能够使用ctof / ftoc方法,但事实并非如此.有人能帮助我理解我所缺少的东西吗? 非常感谢. 解决方法
内部方法self是Temperature的一个实例.在类中,它是Class的一个实例,名称为Temperature.
试试这个: class Temperature puts "Inside class: self is #{self},Temperature is #{Temperature}" def meth puts "Inside method: self is #{self},Temperature is #{Temperature}" end end Temperature.new.meth 那就是说,在课堂上,这些是等价的: class Temperature def self.meth ; end def Temperature.meth ; end end 但是在inside方法中,self变为实例变量,而恒定的Temperature,Class的实例,仍然指的是你所期望的. 要从内部实例方法引用它的类,可以使用self.class.也就是说,在实例方法中,那些是等价的: class Temperature def meth Temperature.ctof(...) self.class.ctof(...) end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |