2012-04-24 3 views
2

Ruby 1.9.2의 새로운 해시 구문에 이상한 문제가 있습니다. 1.9.2에서 어떤 객체를 해시 키로 사용할 수 있습니까?ruby ​​새 해시의 키

1.8.7 해시에서 작동 :

a="b" 
{"a" => "some",a => "another value",:a => "3rd value"} 

그러나 1.9.2 IN> 우리는 할 수 없습니다 (또는 우리가 내가 틀렸다 수 있다면 어떻게? ")

1.9.2 해시 :

{a: "some"} => {:a=>"s"} #it convert to old hash format 

하지만

루비 1.9에서
a="a" 
{a: "..."} # This doesn't work 

{"a": "some value"} => syntax error, unexpected '}', expecting $end 
from /home/naveed/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>' 

{1: "s"} => 

SyntaxError: (irb):11: syntax error, unexpected ':', expecting tASSOC {1: "s"} 
+0

이전 구문이 1.9에서 여전히 유효하다는 것을 알고 있습니까? 대체품이 아니라 추가 품목입니다. – sepp2k

+0

예전 문법은 여전히 ​​여기에 있습니다. 나는 내 코드에 너무 많은 로켓을 넣는 것을 좋아하지 않습니다. => => => Dusss Duss – Naveed

+0

[ ': key = > "값"및 "키 :"값 "할당?] (http://stackoverflow.com/questions/8675206/is-there-any-difference-between-key-value-and-key-value-assignments) –

답변

6

키로 사용되는 기호 뒤에 콜론 :만 삽입 할 수 있습니다!

임의의 개체는 화살표 =>, 짝수 기호를 사용할 수 있습니다.

+0

{a : "s", "a"=> "d"}는 "기호 뒤에 만"+1하지 않습니다. – Naveed

+0

레일은 심볼을 키로 광범위하게 사용하기 때문에 너무 해킹 가능성이 없습니다 . 물론 Rails가 Ruby의 유일한 애플리케이션은 아닙니다 ... – jdoe

3

다른 말로하면 새 기능은 새로운 일반 해시 구문이 아니며 키가 기호 리터럴 인 경우 해시를 작성하기위한 특정 조정입니다. {a: 1}{:a => 1}의 바로 가기입니다. 그게 전부입니다. 키가 다른 것 인 경우 일반 구문을 사용해야합니다.