gpt4 book ai didi

ruby - 范围和 'self' 关键字

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:43 25 4
gpt4 key购买 nike

我有以下代码:

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 方法,但事实并非如此。有人可以帮助我了解我所缺少的吗?

非常感谢。

最佳答案

内部方法 selfTemperature实例。在 class 内部,它是 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 中,它们是等价的:

class Temperature
def self.meth ; end
def Temperature.meth ; end
end

但是在method中,self成为实例变量,而常量TemperatureClass的实例,仍然指的是你所期望的。

要从实例方法内部引用它的类,可以使用 self.class。也就是说,在实例方法内部,它们是等价的:

class Temperature
def meth
Temperature.ctof(...)
self.class.ctof(...)
end
end

关于ruby - 范围和 'self' 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276131/

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