我需要獲得的參數的給定塊需要的數量。例如:獲得的塊數參數
foobar(1,2,3) { |a, b, c|
}
def foobar(x, y, z, &block)
# need to obtain number of arguments in block
# which would be 3 in this example
end
這可能在1.9中繼,但不是在任何正式版本。我希望是否有辦法做到這一點,而無需下載單獨的gem /擴展模塊。
我需要獲得的參數的給定塊需要的數量。例如:獲得的塊數參數
foobar(1,2,3) { |a, b, c|
}
def foobar(x, y, z, &block)
# need to obtain number of arguments in block
# which would be 3 in this example
end
這可能在1.9中繼,但不是在任何正式版本。我希望是否有辦法做到這一點,而無需下載單獨的gem /擴展模塊。
當您使用&實現塊時,它將成爲一個Proc對象,它具有一個arity
方法。只要小心 - 如果proc採用* splat arg,它會返回補碼。
def foobar(x, y, z, &block)
p block.arity
end
(通過 「Ruby編程語言」 一書的答案)
這是你在找什麼...
def foobar(x, y, z, &block)
# need to obtain number of arguments in block
# which would be 3 in this example
case block.arity
when 0
yield "i have nothing"
when 1
yield "I got ONE block arg"
when 2
yield "I got TWO block args"
when 3
yield "I got THREE block args"
end
end
foobar(1,2,3) { |a, b, c|
puts a
}
輸出:
D:\ruby\bin>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
D:\ruby\bin>ruby c:\Temp.rb
I got THREE block args
又見 - A Ruby HOWTO: Writing A Method That Uses Code Blocks從codahale.com
你打我吧:) +1 – Gishu 2009-07-03 04:44:50
權。請注意`{||零}`將具有爲0的元數,但`{零}`將具有-1的元數。 – 2009-07-03 04:48:45