これらは正常に解析および実行されます。
"=".scan(/=/)
"=".scan (/=/)
これにより、「終了していない正規表現がファイルの終わりに達します」が発生します。
"=".scan /=/
=
エラーが消える前に何かを挿入すると:
"=".scan /^=/
どうしたの?
パーサーでこれを打っていると思います:
case '/':
if (IS_BEG()) {
lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
return tREGEXP_BEG;
}
if ((c = nextc()) == '=') {
set_yylval_id('/');
lex_state = EXPR_BEG;
return tOP_ASGN;
}
nextc()
2 番目のチェックに注意してくださいif
。参考までtOP_ASGN
に、
%token <id> tOP_ASGN /* +=, -= etc. */
そのため、オペレーター割り当てトークンに使用されます。
これは/=/
、
'='.scan /=/
/=
除算代入演算子 ( ) の後に start-regex-literal ( ) が続くと見なされ/
ます。
これで(少し異なる種類の)問題が発生します:
' ='.scan / =/
しかし、これではありません:
' ='.scan(/ =/)
メソッド呼び出しに括弧がない場合、あいまいさが生じることがよくあります。この場合、演算子の優先順位規則が適用されると思いますが、それはあなたが期待しているものではありません。
私は年を取りすぎて気難しいので、パーサーがどのように動作するかを心配したくないので、すべてのメソッド呼び出しに括弧を付ける傾向があります。