`The rubyist'【えぬ】の日記

2011-06-03

Ruby 1.9の違うエンコード形式同士のStringを結合させてみるとエラーになる Ruby 1.9の違うエンコード形式同士のStringを結合させてみるとエラーになる - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Ruby 1.9の違うエンコード形式同士のStringを結合させてみるとエラーになる - `The rubyist'【えぬ】の日記

まあ考えてみたら当たり前のことなんだけど。

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

2009-09-05

debian(lenny)にrubygems-updateを使ってrubygems 1.3.5を入れたら debian(lenny)にrubygems-updateを使ってrubygems 1.3.5を入れたら - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - debian(lenny)にrubygems-updateを使ってrubygems 1.3.5を入れたら - `The rubyist'【えぬ】の日記

/var/lib/gemsじゃなく/usr/lib/ruby/gemsを参照するようになったので

# ln -s /var/lib/gems /usr/lib/ruby/gems

とすることで回避したんだが、これで大丈夫なんだろうか?

検索してみた

2009-04-09

Foo#bar= 形式メソッドには引数を一つしか与えられない Foo#bar= 形式メソッドには引数を一つしか与えられない - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Foo#bar= 形式メソッドには引数を一つしか与えられない - `The rubyist'【えぬ】の日記

class A
  def initialize
    @a = []
  end
  def a=(i, j)
    @a[i] = j
  end
end

z = A.new
z.a(100) = 200

-:11: syntax error, unexpected '=', expecting $end
z.a(100) = 200
          ^

Perlのlvalue属性がうらやましいw

2009-03-31

Proc#=== Proc#=== - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Proc#=== - `The rubyist'【えぬ】の日記

昨日ふと「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]
"==="

2009-03-06

Symbol, to_sym Symbol, to_sym - `The rubyist'【えぬ】の日記 を含むブックマーク はてなブックマーク - Symbol, to_sym - `The rubyist'【えぬ】の日記

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'