메소드 # to_proc의 버그입니까? (Ruby 1.8.7)
def foo(arg); p arg; end
내가 하늘의 배열로 호출 할 수 있습니다 :
는 하나 개의 인수가 소요 다음과 같은 방법을 감안할 때
foo([])
# prints []
나는 또한 Method
객체로 저장하고 빈과 그을 호출 할 수 있습니다 같은 결과 배열 :
method(:foo).call([])
# prints []
그러나, 나는 Proc
에 Method
개체를 변환하고 빈 배열가, 내가 ArgumentError
얻을 호출하는 경우 :
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'
내가 예상을 앞의 두 가지 경우와 동일하게 동작합니다. 대신, 마치 foo(*[])
로 작성된 것처럼 행동하는 것 같습니다. 그러나, 나는 내가 기대하는 방식 행동 않습니다 비의 -empty 배열, 그것으로 호출하는 경우 :이 인수를 destructures하지만 인수가 빈 상태 (empty)의 배열 될 일 경우에만 그래서
method(:foo).to_proc.call([1])
# prints [1]
합니다. 그리고 내가 Method#to_proc
를 부를 때만.
방법 Method
또는 Proc
작업에 대한 이해의 차이가 있는가, 또는이 버그?
루비 1.8.7-p299을 실행하고 있습니다. 나는 1.8.6-p399와 1.8.7-head에서 같은 행동을 관찰한다. 그러나, 나는 1.9.1-P378에 표시되지 않습니다 :이 세 가지 형태의 인쇄 []
를 빈 배열로 호출 할 때.
는 일반적으로 나는 회의적 P,하지만 난 특히 고려,이 문제에 대한 다른 설명을 볼 수 없습니다 : */
은 어쩌면 우리는 FIXME에 그 변경해야 그것은 1.9에서 예상대로 작동합니다. 누군가 현명한 사람이 우리를 계몽 할 수 있기를 바랍니다. –
나는 언어 자체에서 항상 버그를 찾지는 않지만 Ruby를 사용하고있을 때는 버그를 발견하지 못합니다. –