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

[dennou-ruby:001877] Re: alias put for GPhys



堀之内様
Cc: dennou-ruby

塚原です. ご迷惑おかけしております. gphys というより ruby 自体の文法に
関する質問になってしまいました. 申し訳ありません. 

> alias を
> 
> require "numru/gphys"
> というか
> require "numru/ggraph"
> の前にすればうまく行きませんか。

試してみましたが, 上手く行きません. 以下のように変更して実行してみると
put だけでなく get も alias されないようです.  

===================================
require "numru/netcdf_miss"
module NumRu
  class NetCDFVar
    def get_with_miss_and_scaling_new(*args)
      p "get_with_miss_and_scaling_new"
      get_with_miss_and_scaling(*args)
    end

    def put_with_miss_and_scaling_new(*args)
      p "put_with_miss_and_scaling_new"
      put_with_miss_and_scaling(*args)
    end

    alias get get_with_miss_and_scaling_new
    alias put put_with_miss_and_scaling_new
  end
end

require "numru/gphys"
include NumRu

p "test1: save NetCDF with GPhys::IO.write"

...
====================================


> aliasは名前ベースというよりは、関数のポインターベースのようなものだと
> 思ってください。gphys の中で alias した時点で何を呼ぶかが確定し、しかも
> それがバッファリングを考慮した特異メソッドになっているため、
> 後から変更できません。

勉強になります. なんとなくそんな気がしてましたが, ライブラリを require して
からでないと alias が有効でない, という勘違いをしていていました. 失礼しまし
た. ruby 自身をもっと知らないとだめですね...

--------------------------------------
北海道大学院理学研究科 地球惑星科学専攻
地球流体力学研究室  M2  塚原大輔

email::daktu32@xxxxxxxxxxxxxxxxxxxx
--------------------------------------

> 塚原さま
> 
> 堀之内です。
> 
> alias を
> 
> require "numru/gphys"
> というか
> require "numru/ggraph"
> の前にすればうまく行きませんか。
> 
> aliasは名前ベースというよりは、関数のポインターベースのようなものだと
> 思ってください。gphys の中で alias した時点で何を呼ぶかが確定し、しかも
> それがバッファリングを考慮した特異メソッドになっているため、
> 後から変更できません。
> 
> > 塚原です. GPhys 内部の put の挙動を alias を用いて変更したいのですが
> > 上手くいきません. 具体的には, signature 下方に記述したプログラム
> > (testalias.rb) を実行すると, GPhys::IO.write 中で呼んでいる get は
> > aliasしたメソッドが呼ばれるのですが put についてはなぜか alias が張れ
> > てない or 別のメソッドを GPhys 内部で上書き alias しているようです(test1).
> > 
> > 一方, NetCDF::put を直接呼び出している部分は正しく alias されているよ
> > うです(test2). お手数ですが, 確認いただけないでしょうか? テストに使用
> > した nc ファイルは適当なもので大丈夫です. GPhys オブジェクトとして読み
> > 込んで, 1.1 倍したものをファイルに保存するだけ.
> 
> 
>