Bir argüman alan aşağıdaki metot verildi:Bu bir yöntem # to_proc dosyasında mı? (Ruby 1.8.7)
def foo(arg); p arg; end
Boş bir dizi ile çağırabilirim:
foo([])
# prints []
Ayrıca Method
nesnesi olarak kaydedebilir ve ile boş aynı sonucu dizisi,:
method(:foo).call([])
# prints []
Ancak, bir Proc
için Method
nesneyi dönüştürmek ve boş bir dizi ile, ben bir ArgumentError
almak ararsanız:
method(:foo).to_proc.call([])
# ArgumentError: wrong number of arguments (0 for 1)
# from (irb):4:in `foo'
# from (irb):4:in `to_proc'
# from (irb):10:in `call'
bunu bekliyordum önceki iki durumla aynı davranmak. Bunun yerine, foo(*[])
yazmış gibi davranıyor gibi görünüyor. Ancak, ben beklediğimden şekilde davranır yapar bir olmayan-boş dizisi, onunla dersek: Bu argüman destructures ama argüman boş bir dizisi olmak üzere yalnızca Yani
method(:foo).to_proc.call([1])
# prints [1]
. Ve sadece Method#to_proc
'i çağırırsam.
nasıl Method
veya Proc
iş benim anlayış bir boşluk var mı, yoksa bu bir hata olduğunu?
Ben Ruby 1.8.7-p299 koşuyorum. Aynı davranışı 1.8.6-p399 ve 1.8.7-başlarında gözlemliyorum. Ancak, 1.9.1-P378 bunu görmüyorum: Orada her üç formları baskı []
boş bir dizi ile çağrıldığında.
Normalde şüpheci p ama özellikle dikkate alınarak, bu davranış için başka hiçbir açıklamaya bakın: */
Belki bir FIXME bu değişmelidir 1.9'da beklendiği gibi çalışır. Umarım birileri bizi aydınlatabilir, çünkü bu bana oldukça meraklı geliyor. –
Dilin kendisinde her zaman bir hata bulamıyorum, ancak ben ne zaman Ruby kullanıyorum. –