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

[dennou-ruby:002685] Re: [gphys] bug: sample/cira86_to_nc.rb



神代さま

> 今日,CVS版のgphysを取ってきたのですが,以前(MLじゃなくて直接)報告した,
> サンプルプログラム cira86_to_nc.rb のバグがまだなおってなかったので,
> 再送します.

すみません、完全に忘れてました。直して cvs commit しました。

> > gphys のデモプログラムで動かないものがあるのでパッチを送ります.
> 
> ところで,ここで修正したように,VArray に
> set_att('missing_value',gp_miss_val)
> とするとき,gp_miss_val は,実数だと
> 
> /usr/local/lib/site_ruby/1.8/numru/gphys/attribute.rb:84:in `[]=': Not allowed as an attribute value: 1.0e+30 (ArgumentError)
>         from /usr/local/lib/site_ruby/1.8/numru/gphys/varray.rb:507:in `set_att'
>         from cira86_to_nc.rb:94
> 
> とエラーになります.gphys/attribute.rb を見ると,
> 
>   ##   val.is_a?(Numeric) ||   # disabled 2005/03/25 by horinout
> 
> となっているので,これは意図した動作なんですよね.
> 
> RubyNetCDF で put_att するときは,
> tmp.put_att("missing_value",-1000.0,"sfloat")
> などとできますが.

はい、そのようです。当時の私の考えを察するに、
NetCDF 同様数値は配列で取っておくのだから、
スカラーは許さないほうが混乱が少ないと
思ったのではないかと思います。
特に、float と sfloat を陽に意識させたかった
とか??

でも、NetCDF のほうは、こうできるんですよね。
あわせたほうがいい気はしたりしますが、実は
ちょっと面倒な点があります:
Attribute クラスは NetCDFAttr と違って、
一つで複数の key & val を持つようになってます。
実際 Hash を継承して作ってまして、

  attr[key] = val

で、値を設定します。VArray で使う際には、
NetCDF とインターフェースをあわせて、put_att 
が使えるようになってます。なので、実は、

  tmp.put_att("missing_value",-1000.0,"sfloat")

のように、型も同時に別引数で指定するのに困ります。
勿論、型指定はできないないまま、スカラーを許すというのが
一つの解ではありますが。

ということで、とりあえず現状はそのままにしてあります。
Attribute クラスを使う人が多くて、かつスカラーもサポートしたい
要望が多ければ考えます。

なお、現在のエラーメッセージはわかりにくいので、
String か Numeric の NArray/Array を期待する旨を
書き加えました。

--
堀之内 武  <horinout@xxxxxxxxxxxxxxxxxx>
611-0011 宇治市五ヶ庄  京都大学生存圏研究所