我是Rails和Ruby开发的新手,但我正在尝试创建一个名为Currency的对象,它接受两个参数并对它们进行一些计算。我使用attr_accessor
来设置参数,然后将文件放在lib
目录中。
每当我运行rails console
并尝试c = Currency.new(100, "CAD")
时,我都会收到以下错误:
ArgumentError: wrong number of arguments (given 2, expected 0)
from (irb):5:in `initialize'
from (irb):5:in `new'
from (irb):5
我确实将文件包含在application.rb
中。这是我班级的骨架:
class Currency
class << self
attr_accessor :input_value, :currency_iso
USD_ISO = "USD"
USD_TO_DM = 2.8054
def converted_value
convert_to_dm
end
private
def convert_to_dm
@input_value / USD_TO_DM
end
end
end
我看了一遍,我对这个问题感到困惑。我尝试过使用和不使用初始化方法,我尝试创建一个更基本的版本。
答案 0 :(得分:2)
这里的问题是您将方法定义为类方法。而且你没有用这两个参数定义初始化方法。我们来看看下面的代码:
class Currency
attr_accessor :input_value, :currency_iso
USD_ISO = "USD"
USD_TO_DM = 2.8054
def initialize(input_value, currency_iso)
@input_value = input_value
@currency_iso = currency_iso
end
def converted_value
convert_to_dm
end
private
def convert_to_dm
input_value / USD_TO_DM
end
end
此外,由于您已经定义了attr_accessor,因此在调用这些属性时无需使用@
。
我发现了post。它可以帮助您更好地理解类方法和实例方法之间的区别。