在Java中,您可以重载构造函数:
public Person(String name) {
this.name = name;
}
public Person(String firstName, String lastName) {
this(firstName + " " + lastName);
}
Run Code Online (Sandbox Code Playgroud)
Ruby中有没有办法实现同样的结果:两个构造函数采用不同的参数?
Ste*_*eet 73
答案是是和否.
您可以使用各种机制在其他语言中获得与您相同的结果,包括: -
该语言的实际语法不允许您定义两次方法,即使参数不同.
考虑到上面的三个选项,可以使用以下示例实现这些选项
# As written by @Justice
class Person
def initialize(name, lastName = nil)
name = name + " " + lastName unless lastName.nil?
@name = name
end
end
class Person
def initialize(args)
name = args["name"] + " " + args["lastName"] unless args["lastName"].nil?
@name = name
end
end
class Person
def initialize(*args)
#Process args (An array)
end
end
Run Code Online (Sandbox Code Playgroud)
您将在Ruby代码中经常遇到第二种机制,特别是在Rails中,因为它提供了两全其美的优点,并允许一些语法糖生成漂亮的代码,特别是不必将大括号中传递的哈希包含在内.
这个wikibooks链接提供了更多阅读
And*_*imm 26
I tend to do
class Person
def self.new_using_both_names(first_name, last_name)
self.new([first_name, last_name].join(" "))
end
def self.new_using_single_name(single_name)
self.new(single_name)
end
def initialize(name)
@name = name
end
end
Run Code Online (Sandbox Code Playgroud)
But I don't know if this is the best approach.