2013-03-09 4 views
0

나는 형식을 이해하는 데 어려움이있다 : 속성 => 매개 변수: attribute => 매개 변수는 실제로 무엇을합니까?

누구든지 나에게 그것에 대한 설명을 줄 수 있는가? Is : 클래스에 속하는 필드 (변수) 또는 다른 속성을 속성합니까? 왜이 쌍을 하나의 매개 변수로 메소드에 전달할 수 있습니까?

+0

루비 질문이 아닌 레일 질문입니다. 루비의 상징에 대해 읽어야합니다. – Robin

답변

2

이 같은 것을 참조하는 경우 :

some_method(:foo => "bar", :baz => "abc") 

그런 다음이 해시에 그 일을 변환하는 루비 원인이 단지 속기입니다. 이 양식을 사용하는 경우 해시가 작동하려면 메소드의 마지막 인수 여야합니다. 위의 설명을 바탕으로

some_method(:foo => "bar", :baz => "abc") 

괜찮이지만,이

some_method(:foo => "bar", :baz => "abc", moo) 

는 없습니다.

+0

이 양식을 사용할 때 실제로 전달되는 것은 무엇입니까? 값 "bar"또는 인덱스 : foo? 또는 전체 해시 테이블? – OneZero

+0

@ user1229490 : 전체 해시 인'f (: a => b)'는'f ({: a => b})'와 동일합니다. –

0

레일스에서 ​​일반적으로 볼 수 있지만 레일스 관련 질문이 아닙니다. 루비 야.

해답에있는 키/값 쌍인 것이 일반적으로 메서드의 인수로 전달됩니다.

변수에 직접 할당 할 때이 표시가 나타납니다. 이것은 당신이 제공하는, 마지막 인수에 대해 제공 할 수 있다는 사실에 특정 루비 2.0.0입니다

def some_method(*args, name: 'Joe', amount: 42, **other_params) 
    puts "#{name}, #{amount}, glob of arguments = #{args.inspect}", 
     "other params #{other_params}" 
end 

some_method(:occupation => 'programmer', :phone => '123-456-7890', name: 'Jane') 

을 :하지만 당신은 그들을 함께 넣을 수 있도록 내가 당신에게 샘플 방법 및 샘플 사용을 보여 드리죠 이름없는 매개 변수의 경우 실제로. 인수 목록의 해시에 1.9+ 구문을 사용하면 해쉬 인수 뒤에 나타날 수있는 다른 이름없는 "매개 변수"를 제공 할 수 있습니다.

해시에 대한 이전 구문, 즉 : key => 'value'구문을 사용한 경우 끝에는 ** other_params 인수가 있어야한다는 것을 유의하십시오 (적어도이 글을 쓰는 동안) 인수 목록의.

some_method를 호출 할 때 해시 구문으로 남겨 두었지만 호출 코드의 새로운 구문을 사용하여 해시를 제공 할 수도 있습니다.

Hash는 여전히 메소드 정의에 대한 인수 목록에 표시된 것과 같은 호출 인수 목록에서 마지막으로 제공되어야합니다.

관련 문제