OCaml や Haskell では変数名に ' (プライム) が使えます (先頭以外) 。
let a' = 1 in print_int a';;
「a とほぼ同じ意味だし、一時的な変数だからいちいち名前考えるのがめんどくさい、でも a2 は負けた気がする」という時に重宝します。
Ruby だと ' は文字列に使われるので不可能だと思いこんでいましたが、識別子の中ならほぼ問題ないことに気付きました。ので実装してみました。こんな感じ。
$ ./ruby -e "a' = 'foo'; a'' = 'bar'; p [a', a'']" ["foo", "bar"]
気持ち悪っ。ちなみに以下が動かなくなる非互換があります。ゴルファー涙目?
puts'foo'
すごく安易なパッチ。
Index: parse.y =================================================================== --- parse.y (revision 15044) +++ parse.y (working copy) @@ -4568,7 +4568,7 @@ #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc) #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc) -#define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p)) +#define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || (*p) == '\'' || !ISASCII(*p)) #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc)) #define parser_isascii() ISASCII(*(lex_p-1))