尝试重载方法时获取 "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)

这将工作文件。试试这个:)