尝试重载方法时获取 "wrong number of arguments"
Getting "wrong number of arguments" when trying to overload method
我在 Ubuntu 14.04 上使用 Rails 4.2.7。根据这个 — Why doesn't ruby support method overloading? ,如果每个方法都有不同数量的参数,我应该能够在我的服务 class 中重载方法。所以我创造了……
def create_my_object_time_obj(data_hash)
create_my_object_time_obj(data_hash, nil)
end
def create_my_object_time_obj(data_hash, my_object_id)
…
然而,当我尝试调用只接受一个参数的调用时
my_object_time = service.create_my_object_time_obj(data_hash)
我收到错误
Error during processing: wrong number of arguments (given 1, expected 2)
/Users/login/Documents/workspace/myproject/app/services/text_table_to_my_object_time_converter_service.rb:82:in `create_my_object_time_obj'
从我的服务重载方法的正确方法是什么 class?
Ruby 对于给定的唯一名称只允许一种方法,而不管方法签名如何。 Ruby 解释器只查看方法的名称,而 Java 解释器则相反,它考虑参数和方法名称。
您只能重写方法,具有给定名称的方法的最新版本优先于共享该名称的所有先前方法。
但是,您可以利用 splat (*) 运算符将可变数量的参数传递给数组中的方法,然后根据传递的参数数量进行分支,从而解决无法重载的问题.
def foo(*args)
if args.length == 1
# logic for a single argument
elsif args.length == 2
# logic for two arguments
else
# logic for other conditions
end
end
只需按照以下简单定义您的方法:
def create_my_object_time_obj(data_hash, my_object_id = nil)
create_my_object_time_obj(data_hash, my_object_id)
end
现在您可以通过单个参数调用此方法:
my_object_time = service.create_my_object_time_obj(data_hash)
这将工作文件。试试这个:)
我在 Ubuntu 14.04 上使用 Rails 4.2.7。根据这个 — Why doesn't ruby support method overloading? ,如果每个方法都有不同数量的参数,我应该能够在我的服务 class 中重载方法。所以我创造了……
def create_my_object_time_obj(data_hash)
create_my_object_time_obj(data_hash, nil)
end
def create_my_object_time_obj(data_hash, my_object_id)
…
然而,当我尝试调用只接受一个参数的调用时
my_object_time = service.create_my_object_time_obj(data_hash)
我收到错误
Error during processing: wrong number of arguments (given 1, expected 2)
/Users/login/Documents/workspace/myproject/app/services/text_table_to_my_object_time_converter_service.rb:82:in `create_my_object_time_obj'
从我的服务重载方法的正确方法是什么 class?
Ruby 对于给定的唯一名称只允许一种方法,而不管方法签名如何。 Ruby 解释器只查看方法的名称,而 Java 解释器则相反,它考虑参数和方法名称。
您只能重写方法,具有给定名称的方法的最新版本优先于共享该名称的所有先前方法。
但是,您可以利用 splat (*) 运算符将可变数量的参数传递给数组中的方法,然后根据传递的参数数量进行分支,从而解决无法重载的问题.
def foo(*args)
if args.length == 1
# logic for a single argument
elsif args.length == 2
# logic for two arguments
else
# logic for other conditions
end
end
只需按照以下简单定义您的方法:
def create_my_object_time_obj(data_hash, my_object_id = nil)
create_my_object_time_obj(data_hash, my_object_id)
end
现在您可以通过单个参数调用此方法:
my_object_time = service.create_my_object_time_obj(data_hash)
这将工作文件。试试这个:)