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

[dennou-ruby:002772] Re: GPhys#replace_val



堀之内です。

お返事遅くなってすみません。

下記ですが、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 宇治市五ヶ庄