2011-12-03 2 views
1

해시를 작성하기 위해이 구문을 본 적이 없습니다. do_stuff(records: records) 이것은 메소드로 보내지는 매개 변수 목록에서만 작동합니까? 어디에서 문서화되어 있습니까? 루비 1.9 이상인 것을 압니다.해시를 전달하는 고유 한 구문

records = { 
    'example.com' => '1.2.3.4', 
    'hello.com' => '44.33.22.22', 
} 

def do_stuff(data = {}) 
puts data 
end 

do_stuff(records: records) 
+0

JSON 해시 구문에는 몇 가지 단점이 있습니다. 예를 들어'{: $ a => 'b'}'와'{: 'ab'=> 'c'}'는 유효하지만'{$ a : 'b'}'와'{ 'a- : 'c'}'는 그렇지 않습니다. –

답변

6

여기에는 두 가지가 있습니다. { key: value } 구문은 Ruby 1.9에서 새로 추가되었습니다. { :key => value }과 같습니다.

또한 Ruby 메서드에는 해시 리터럴을 중괄호를 포함하지 않고 메서드의 마지막 인수로 전달할 수있는 구문 설탕이 있습니다. Ruby 1.9에서는 이 아니며이 아닙니다. 그래서

do_stuff(key: value) 

는 해시 메소드의 마지막 인수 인 경우 다만,이 단지 작품을 당신을 생각 나게하는

do_stuff({ key: value }) 

에 해당합니다.

0

Ruby 1.9의 새로운 해시 구문을 사용하면 해시 로켓을 삭제할 수 있습니다.

#Pre 1.9 
{:key => value} 

#1.9+ 
{key: value} 

위의 두 가지는 동일합니다.

새로운 해시 구문을 사용할 때 명심해야 할 것은 키가 항상 기호로 취급된다는 것입니다.

관련 문제