あなたは運が悪いと思います.1.8をサポートしたい場合は、=>
を使用する必要があります。いつものように、私はあなたが1.9である場合において=>
を使用しなければならないことを言及します:
- キーがシンボルではない場合。どのオブジェクト(シンボル、文字列、クラス、浮動小数点数など)もRubyハッシュのキーとなりうることに注意してください。
- あなたが引用したいシンボルが必要な場合:
:'this.that'
。
- MongoDBを使用している場合は、
:$set => hash
だが$set: hash
などの文法エラーがあります。
定期的に予定されているプログラミングに戻ってください。
なぜあなたは運がなくなったと言いますか?ハッシュのリテラル構文(両方とも)はパーサーに配線されているので、パーサーをあなたの宝石からパッチングするのは大したことはないと思います。 Ruby 1.8.7's parse.y
は、これは言っている:
assoc : arg_value tASSOC arg_value
{
$$ = list_append(NEW_LIST($1), $3);
}
;
とtASSOC
は=>
ので、ハッシュリテラルは、ハードワイヤード=>
を使用することがあります。 1.9.3'sこれは言う:
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
は、JavaScriptスタイルの構文でどのような種類のシンボル(:$set
、:'this.that'
、...)も使用できないという制限の原因となります。現在のトランクparse.y
は、ハッシュリテラルに対して1.9.3と一致します。
したがって、ハッシュのリテラル構文はパーサーに配線されており、1.8をサポートしたい場合は太った矢印が付いています。
Ruby 1.8がすぐにフェードアウトする予定です。あなたはそれをサポートする必要はありません。 – sawa
それは一般的な意見ですか?私は確かに他の宝石の作家が何をしているかについてのインプットを探しています。私はRubyコミュニティ内で1.9列車に乗ってみんなを得るための大きなプッシュがあることを知っています。私は個人的に1.8を残しても構いません。 – JackCA