2011-11-15 3 views
1

나는 지금 루비/레일을 배우고있다. 내가 읽고있는 책에는 새로운 구문을 건너 뛰는 경향이있다. 특히,이 비트; 나는이 방법을 무엇을 말할 수에서활성 레코드 구문 설명 - 초보자

person = Person.find(:first, :conditions => ["name = ?", "Mikey"]) 

는 첫 번째 인수 무엇을 상징/배열의 키/값을 가진 하나의 항목 해시처럼 보이는 기호를합니다. 이것이 맞습니까? 그렇다면 왜 갑자기 중괄호 {}없이 해시를 지정할 수 있습니까?

+2

'NEW'액티브 레코드 구문에 한 걸음 더 가까워지기를 원할 것입니다. 이제는 'person = Person.where ('name =? ','Mokey ')와 약간 다를 것입니다. '-> http://guides.rubyonrails.org/active_record_querying.html –

+1

@Mr_Nizzle :이 특별한 경우 :'person = Person.where (: name = "Mikey"). first' – tokland

+0

잘못 입력하셨습니다. –

답변

4

Ruby 메서드 매개 변수에서 일반 인수 뒤에 있지만 블록 앞에있는 모든 key => 값 쌍이 단일 해시로 묶입니다. 당신은 my_method는 두 개의 인수, 문자열 ("안녕하세요")를 통과하고,되고 있음을 의미

my_method("hello", :something=>"yo!", :another_thing=>"bah!") 

라고 그래서 경우 해시 ({: 뭔가 => "요!": another_thing => "흥! "}).

다른 이유 중 하나는 해시 매개 변수를 나타내는 중괄호와 블록을 나타내는 중괄호 사이의 혼란을 방지합니다. 그렇지 않으면 Ruby에 존재하지 않는 "명명 된 매개 변수"를 시뮬레이션하는 편리한 방법을 제공합니다.

+0

추가 참고로 자유 형식 해시 인수는 마지막 인수 여야하며 그렇지 않으면 명시 적 중괄호를 사용해야합니다. 'foo (: a => 'b',')는 괜찮지 만'foo (: a => 'b', x))'대신. 일반적으로 대부분의 인터페이스는이 이유로 인수 해시를 마지막으로 정의합니다. – tadman

+0

사실, 그게 내가 "보통의 논쟁을 한 후에"전달하려는 의미입니다. –