|
|
||
まあ考えてみたら当たり前のことなんだけど。
PerlのEncodeに慣れてからRuby 1.9に来ると、Perlの内部エンコードおよびdecode()に該当するのがなくてちょっと混乱するよね、と。
でも、Stringは自分達のエンコード形式を知っているんだから、結合のときによきにはからってくれてもいいじゃんとか思ってしまうw
…UTF-8に揃えろってことですね、わかります。
(enctest) #!/usr/bin/ruby1.9.1 # coding: utf-8 require './enctest-euc.rb' UTF = "UTF" begin puts UTF + EUC rescue => e puts e end puts UTF + EUC.encode("utf-8") (enctest-euc.rb) # -*- coding: euc-jp -*- EUC = "EUC" (実行結果) % ./enctest incompatible character encodings: UTF-8 and EUC-JP UTFEUC
昨日ふと「Proc#===」があればcase文で便利だろうなと思ってたら…
ということでサンプル。
a = 1000 case a when lambda{|b| b == 1000} p "===" else p "no ===" end % ruby -v proc-case ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] "no ===" % ruby19 -v proc-case ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] "==="
1.8では\0を含むSymbolは作れない。
% ruby -ve 'p "\0zzz".to_sym;'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
-e:1:in `to_sym': symbol string may not contain `\0' (ArgumentError)
from -e:1
% ruby -ve 'p :"\0zzz";'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
-e:1: symbol cannot contain '\0'
1.9ではto_symを使えば作れる。
% ruby19 -ve 'p "\0zzz".to_sym;' ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] :"\x00zzz"
でも\0を含むSymbolリテラルはだめ。
% ruby19 -ve 'p :"\0zzz"' ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux] -e:1: symbol cannot contain '\0'