gpt4 book ai didi

Ruby 实例方法和变量

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:58 24 4
gpt4 key购买 nike

关于 ruby​​ 类实例变量或方法**,我有些不明白。所以我的代码一直给我这个错误,我无法理解

看起来 ruby​​ 认为我正在尝试调用 Float.in_celsius 但我想在我的类实例中进行此调用。

#-----------------------------------
def ftoc(fr)
fr = fr.to_f
if (fr == 32)
c = 0
elsif (fr == 212)
c = 100
else
c = (fr-32.0)*(5.0/9.0)
end

return c
end

def ctof (cl)
cl = cl.to_f
f = (cl*(9.0/5.0))+32.0
return f
end
#-----------------------------------

class Temperature
attr_accessor :in_celsius, :in_fahrenheit

#class metods
def self.from_celsius(cel)
puts "from celsious\n"
puts "cel: #{cel}\n"
@in_fahrenheit = cel
@in_celsius = ctof(cel)
puts "==============================\n"
return @in_celsius
end

def self.in_celsius
@in_celsius
end


end


puts "==============================\n"
puts Temperature.from_celsius(50).in_celsius
puts Temperature.from_celsius(50).in_fahrenheit

错误是 test.rb:54: in '<main>' : undefined method 'in_celsius' for 122.0:float (noMethod Error)
enter code here

最佳答案

您对类在 Ruby 中的工作方式存在根本性的误解。现在您的所有变量和方法都在类级别 定义。这意味着您在方法中所做的一切都直接作用于类本身。相反,您应该创建 Temperature实例

class Temperature
# special method called when creating a new instance
def initialize celsius
@in_celsius = celsius
@in_fahrenheit = celsius * 9 / 5.0 + 32
end

def self.from_celsius celsius
new celsius # built in method to create an instance, passes argument to initialize
end

# we defined initialize using celsius, so here we must convert
def self.from_fahrenheit fahrenheit
new((fahrenheit - 32) * 5 / 9.0)
end

private_class_method :new # people must use from_celsius or from_fahrenheit

# make instance variables readable outside the class
attr_accessor :in_celsius, :in_fahrenheit
end

Temperature.from_celsius(50).in_celsius

此代码并不完美(from_fahrenheit 进行了冗余转换)但它应该让您了解如何重新设计您的类。

关于Ruby 实例方法和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663548/

24 4 0
文章推荐: ruby-on-rails - Rails 4 - 多对多类别不会保存到数据库
文章推荐: ruby - 相同的字符串但不相等 - 这是怎么回事?
文章推荐: html - 如何将选定的选项从 HTML