[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003720] numru-units on ruby 2.1



堀之内です。

どうやら Ruby 2.1 では単位ライブラリ numru-units がうまく動かない
ようです(先日の "1"  問題とは別)。Racc でうまく行ってないよう
なので,調査は難航しそうです。どなたか見当がつくと嬉しいのですが...
> 豊田さん,時間取れないですかね。

お試し用に電脳 K の私のホームの下
(/home/horinout/tmp/ruby2.1/bin/)に ruby 2.1.1 をインストール
してありますので (nurmu-unitsはgemでいれてある),アカウントの
ある方は試していただけます。

以下実行例です。

● ruby 2.0 だと(問題なし):

$ ruby --version
ruby 2.0.0p451 (2014-02-24 revision 45167) [i686-linux]
$ ruby -r numru/units -e "u=NumRu::Units['m/s']; u2=NumRu::Units['s']; puts u*u2"
m

● ruby 2.0 だと(問題あり):

$ use_ruby 2.1
ruby 2.1.1p76 (2014-02-24 revision 45161) [i686-linux]
$ ruby -r numru/units -e "u=NumRu::Units['m/s'];
u2=NumRu::Units['s']; puts u*u2"
/opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:209:in `foldnumber': undefined method `foldnumber' for Error[m/s]:NumRu::Units::ErrorNode (NoMethodError)
	from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:139:in `reduce4'
	from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:2611:in `binop'
	from /opt/ruby2.1/lib/ruby/site_ruby/2.1.0/numru/units.rb:2616:in `*'
	from -e:1:in `<main>'

このように演算がうまく行きません。これはパースがうまくいかない
からです:

$ ruby -r numru/units -e "u=NumRu::Units['m']; p u.do_parse2,
u.do_parse2.class"
Error[m]
NumRu::Units::ErrorNode

ここで,do_parse2 メソッドは Racc に投げた parse 処理の
結果が nil なので ErrorNode なるものを返してます。だから
問題はなんでちゃんと parse されないかということなんですが...。

堀之内 武