Có cách nào để tạo phương thức có thể chấp nhận tham số hay không, nhưng cũng có thể được gọi mà không có tham số, trong trường hợp này tham số được coi là nil
như sau?Phương pháp có tham số tùy chọn
some_func(variable)
some_func
Có cách nào để tạo phương thức có thể chấp nhận tham số hay không, nhưng cũng có thể được gọi mà không có tham số, trong trường hợp này tham số được coi là nil
như sau?Phương pháp có tham số tùy chọn
some_func(variable)
some_func
def some_func(variable = nil)
...
end
Bên cạnh những lựa chọn rõ ràng hơn các thông số với giá trị mặc định, mà Sawa đã cho thấy, sử dụng các mảng hoặc băm có thể có ích trong một số trường hợp. Cả hai giải pháp đều giữ nguyên các đối số nil.
1. Nhận như mảng:
def some_func(*args)
puts args.count
end
some_func("x", nil)
# 2
2. Gửi và nhận như băm:
def some_func(**args)
puts args.count
end
some_func(a: "x", b: nil)
# 2
mục đích của việc sử dụng '* arg' và' ** arg' thay vì chỉ 'arg' là gì? –
@ sagarpandya82 '* arg' thu thập đối số dưới dạng mảng. Không có '*', bạn sẽ phải gọi 'some_func ([" x ", nil])'. '** arg' thu thập tất cả các đối số được đặt tên. Không có '**', nó sẽ chỉ chấp nhận một đối số không có tên, hoặc bất kỳ số đối số nào được đặt tên. – bogl
Bạn cũng có thể sử dụng một hash như là đối số và có tự do hơn:
def print_arg(args = {})
if args.has_key?(:age)
puts args[:age]
end
end
print_arg
# =>
print_arg(age: 35, weight: 90)
# => 35
Sau đó, tất nhiên, người ta phải bằng cách nào đó di fferentiate giữa nil mặc định và nil rõ ràng (nếu nó quan trọng) :) –
Đó là những gì 'def some_func (variable = (variable_was_not_passed = true; nil)) Thành ngữ là dành cho. –
@ JörgWMittag bạn có thể giải thích nó hoạt động như thế nào không? cảm ơn! – dowi