[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:002772] Re: GPhys#replace_val
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002772] Re: GPhys#replace_val
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 27 Mar 2007 12:31:42 +0900
- Cc: horinout@xxxxxxxxxxxxxxxxxx
堀之内です。
お返事遅くなってすみません。
下記ですが、replace_val の動作には次のどちらを期待するでしょうか。
1. test.nc 内の変数 t 全体を書き換える
2. g 内の値は replace_val で与えた配列になるが、test.nc は
書き換えない。
replace_val はオブジェクトごと置き換えるので 2 です。
GPhysを構成するオブジェクトの参照関係の置き換え = リンクの張替えみたい
なものなので、もともと GPhys オブジェクト配下にあるオブジェクトの
中身は替えません。つまり、ファイルなら書き込みなしです。
これはファイル相手だと、期待しない動作かもしれません。
(replace_val を呼んだのにファイルが書き換わらないと
悩む人がきっとでる。現状のエラーメッセージはよくないですが、replace_val
をファイルベースの GPhys でも使えるようにすべきかは悩むところです。
使えるようにしたほうがいいですかね?)
やりたいのが 1 でしたら、replace_val でなく単純に代入を使います。
例えば
g.val = val
など。あるいは g[false] = val でも。
> gphys-0.5.4を使わせていただいてます.
> GPhys#replace_valがうまく動かないようです.
> 意味の無い処理のサンプルですが,以下のようになります.
>
> irb(main):001:0> g = GPhys::IO.open('test.nc','t')
> => <GPhys grid=<略> data=<略>>
> irb(main):002:0> g.replace_val(g.val)
> RuntimeError: The shape method is not available. Use shape_ul0 or shape_current instead.
> from /usr/local/lib/ruby/site_ruby/1.8/numru/gphys/varraynetcdf.rb:244:in `shape'
> from /usr/local/lib/ruby/site_ruby/1.8/numru/gphys/varray.rb:384:in `replace_val'
> from /usr/local/lib/ruby/site_ruby/1.8/numru/gphys/gphys.rb:502:in `replace_val'
> from (irb):2
>
> コードを見てみたところ,varraynetcdf.rb内でshapeの使用を禁止されて
> いるにも関わらず他で呼び出されている,ということのようです.
>
> (varraynetcdf.rb ll.241-245)
> > # It is safer not to have the method "shape" to avoid misconfusion of
> > # shape_ul0 and shape_current:
> > def shape
> > raise "The shape method is not available. Use shape_ul0 or
> > shape_current instead."
> > end
>
>
> #もし私の勘違いだったらすみません...
>
> --
> // hirocy
堀之内 武 horinout@xxxxxxxxxxxxxxxxxx
京都大学生存圏研究所 611-0011 宇治市五ヶ庄