문제

쓰고 있어요 루비 보석을 사용하여 {key: 'value'} 에 대한 구문을 해시에 걸쳐 나의 코드입니다.내 모든 테스트에 통과 1.9.x 지만,나는(당연하게도)을 얻 syntax error, unexpected ':', expecting ')' 에 1.8.7.

이 있는 최상의 방법을 지원하 1.8.x?해야 합니까 다시 작성하는 코드를 사용하여 우리의 오래된 친구 =>, 거나,더 나은 전략?

도움이 되었습니까?

해결책

내가 생각하는 당신의 행운을하려는 경우 지원이 1.8 다음 사용 =>.평소대로 나는 언급을 사용해야 합니다 => 에서는 특정한 경우에 1.9:

  1. 키가 있는 경우에는 상징이되지 않습니다.을 기억하는 모든 개체(기호,문자열,수업,수레,...)는 열쇠가 될 수 있습에서 Ruby 해시입니다.
  2. 필요할 경우 상징하는 견적: :'this.that'.
  3. 당신이 사용하는 경우 MongoDB 도 될 것 같은 것들을 사용하여 :$set => hash$set: hash 구문 오류가 있습니다.

다시 우리의 정기적 프로그래밍입니다.

왜 말을 하는 당신은 운?해쉬 리터럴 구문(그들 모두)는 유선에서 내가 생각하지 않는 당신이 많은 행운 패치 파서에서 당신의 보석입니다. 루비 1.8.7 의 parse.y 할 말이 있다:

assoc    : arg_value tASSOC arg_value
             {
                 $$ = list_append(NEW_LIST($1), $3);
             }
         ;

tASSOC=> 그래서 해쉬 리터럴드-유선을 사용하여 =>. 1.9.3 의 이 말

assoc    : arg_value tASSOC arg_value
             {
             /*%%%*/
                 $$ = list_append(NEW_LIST($1), $3);
             /*%
                 $$ = dispatch2(assoc_new, $1, $3);
             %*/
             }
         | tLABEL arg_value
             {
             /*%%%*/
                 $$ = list_append(NEW_LIST(NEW_LIT(ID2SYM($1))), $2);
             /*%
                 $$ = dispatch2(assoc_new, $1, $2);
             %*/
             }
         ;

우리는 지방-화살표 구문을 다시(arg_value tASSOC arg_value 다)및 JavaScript 스타일(tLABEL arg_value);AFAIK, tLABEL 도의 원본에 대한 제한의 어떤 종류의 기호(없음 :$set, 없음 :'this.that',...)과 함께 사용할 수 있는 자바스크립트 스타일문입니다.현재 트렁크 parse.y 경기 1.9.3 에 대한 해쉬 리터럴이 있습니다.

그래서 해쉬 리터럴 구문은 유선으로서 당신이 갇혀 지방과 화살하려는 경우 지원이 1.8.

다른 팁

Ruby 1.8.7은 새로운 해시 구문을 지원하지 않습니다.

루비의 비 YARV C 기반 구현에 대한 해시 구문이 필사적으로 필요하면 완전히 지원되지 않는 1.8 개의 헤드 브랜치가 있으므로 do do

rvm install ruby-head --branch ruby_1_8 ; rvm ruby-head
ruby -v
ruby 1.8.8dev (2011-05-25) [i386-darwin10.7.0]
.

그러나 1.9로 업그레이드하는 것은가는 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top