Câu trả lời là cả hai Yes và No.
Bạn có thể đạt được kết quả tương tự như bạn có thể bằng các ngôn ngữ khác sử dụng một loạt các cơ chế bao gồm: -
- Giá trị mặc định cho các đối số
- Danh sách đối số biến (toán tử ký tự)
- Xác định đối số của bạn dưới dạng băm
Cú pháp thực tế của ngôn ngữ không cho phép bạn xác định phương thức hai lần, ngay cả khi các đối số khác nhau.
Xét ba tùy chọn ở trên này có thể được thực hiện với ví dụ của bạn như sau
# 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
Bạn sẽ gặp phải các cơ chế thứ hai thường xuyên trong mã Ruby, đặc biệt là trong Rails vì nó cung cấp tốt nhất của cả hai thế giới và cho phép một số đường cú pháp để tạo ra mã khá, đặc biệt không phải kèm theo băm được truyền trong dấu ngoặc đơn.
này wikibooks link cung cấp một số đọc hơn
Nguồn
2010-10-18 11:47:50
Cảm ơn vì đã chỉ ra 'cái Person.new (: phương thức first_name => "...",: last_name => "...") '. Vì một lý do nào đó nó không vượt qua tâm trí của tôi để sử dụng nó, nhưng điều đó không trả lời câu hỏi của tôi. – agentbanks217
Ruby 2.0 hỗ trợ các tham số có tên trong hộp: http://robots.thoughtbot.com/ruby-2-keyword-arguments –