我在Rails中有一个带有实例方法的模型。我希望此方法具有可选参数,但尝试使用可选参数会导致错误:
Class MyModel < ActiveRecord::Base
def my_method(param1, param2 = another_defined_variable)
instance_variable == param2
end
end
现在,在Rails控制台,开发环境或测试环境中,如果我用不同数量的参数调用此方法,我会得到以下结果:
my_instace.my_method
# ArgumentError: wrong number of arguments (0 for 2) (expected error)
my_instance.my_method(:some_symbol)
# NameError: undefined local variable or method `my_method' for #<MyModel:0x007fb7a2d9fb50>
my_instance.my_method(:some_symbol, 1)
# Runs as expected.
导致第二个失败的原因是什么?我接近这个错误吗?
答案 0 :(得分:2)
我认为您不能将参数默认为变量。为什么不这样做:
def my_method(param1, param2=nil)
instance_variable == (param2 || another_defined_variable)
end
答案 1 :(得分:2)
class MyModel
def my_instance_method(param1, param2 = 5)
puts params2
end
def self.my_class_method(param1, param2 = 5)
puts param2
end
end
obj = MyModel.new
obj.my_instance_method(4,2) #calls the instance one
MyModel.my_class_method(4,2) #calls the class method.
my_instance_method:
您无法直接调用此方法。您必须创建MyModel类的实例,然后才能调用它。
my_class_method:
这是一个类级方法,您可以使用类名直接调用它,即MyModel.my_class_method
关于默认参数:
您可以将其设置为params2 = 5.这意味着如果您没有为第二个参数传递任何值,那么5将被视为您的第二个参数值。但是如果你传递任何其他值,那么将为param2分配。