2011-01-10 4 views
60

는 초보자 질문을 용서하지만 배열이 있다고 :인수의 배열이 주어지면 Ruby에서 이러한 인수를 특정 함수로 보내려면 어떻게해야합니까?

a = [1,2,3] 

그리고 어딘가 기능을; 의이 인스턴스 기능입니다 가정 해 봅시다 :

class Ilike 
    def turtles(*args) 
    puts args.inspect 
    end 
end 

가 어떻게 aIlike.turtles를 호출 할 내가 (Ilike.new).turtles(1,2,3)를 호출하는 것처럼.

저는 send에 익숙하지만, 배열을 인수 목록으로 변환하는 것으로 보이지 않습니다.

내가 찾고있는 병렬은 call과 동일하지만 인수 목록으로 배열을 변환하는 자바 스크립트 apply입니다.

답변

113

아시다시피 방법을 정의 할 때 *을 사용하여 인수 목록을 배열로 바꿀 수 있습니다. 마찬가지로 메서드를 호출 할 때 *을 사용하여 배열을 인수 목록으로 바꿀 수 있습니다. 그래서 당신의 예제에서 당신은 할 수 있습니다 :

Ilike.new.turtles(*a) 
+4

환상적. 훌륭한 답변을 바탕으로 [Wikibooks] (http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls#Variable_Length_Argument_List.2C_Asterisk_Operator)에서이 기술에 대한보다 자세한 설명을 발견했습니다. 병렬 표기법이 다른 방식으로 진행되면 실제로 이것은 사실 완벽하게 타당합니다. 아, 루비. 또한 나는''. 새우 (1,2,3, * a) '를 사용하여 어색한'a.unshift' 안타까움없이 자신의 주장을 덧붙일 수 있다는 것을 알아 냈다. 그러나 postpending은 그런 기동을 요구하는 것처럼 보인다. –

+1

@StevenXu Ruby 1.9에서는 'postpending'을 표시 할 수 있습니다. 'a = [1,2]; b = [4,5]; "0 \ n1 \ n2 \ n3 \ n4 \ n5 \ n6" ' – Phrogz

+0

환상적으로 대답했습니다! – RubyFanatic

관련 문제