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

[dennou-ruby:000151] Re: reading binary files



沼口です.

>> ただし,まだ ***get がうまくいっていないようです.

 > どこがまずいんでしょうか?

私の理解では,Ruby では,たとえば,
   Dcl.sglget('lcrip',lcrip)  # 現在のクリッピング情報を得る
で,lcrip に値を返してもらう,というような
メソッドの使い方は基本的にはできないようです.

実引数 lcrip を配列オブジェクトにすれば可能ですが,
それも推奨されませんし,使い勝手もよくありません.

やはり,ここは
   lcrip = Dcl.sglget('lcrip')  
の形であるべきだということになるかと思います.

もし他の言語のインターフェースとの整合性,
これまでの資産の継承を重視するなら,
1. C で書く ext モジュールのラッパでは,
  これまでの dcl となるべく互換性をもたせて,
   Dcl.sglget('lcrip',lcrip)
が通用するようにし,
2. これにさらに ruby で書いたラッパをかぶせて
   lcrip = Dcl.getinteger('lcrip')
も通用するようにする.
というようにできればいいのですが,どうもこの筋は良くなさそうです.

返り値が複数なら,
  uxmin, uxmax, uymin, uymax = Dcl.sgqwnd()  # 現在のウインドウ情報を得る
が基本になります.f90 ではこのようなこと
(配列を返す関数の値を展開した形で得る)はできましたっけ?
できないとすれば,f90 の(上位)インターフェースとは形が
変わってしまいます.

返り値が配列クラスオブジェクトの中身として返ってくる
場合には,効率化のため,メソッドの引数に破壊的に作用させる
ことは特例として認めてよいのではないかと思います.
大きな配列を使う場合には,効率の問題もありますし.
(あんまりないのかな? ちゃんと GC してくれるし..)

たとえば,
  call rfftf(n,r,wsave) ! n 個のデータ r の FFT を r に返す.
                        ! wsave はあらかじめ作成された三角関数表
は,
  Dcl.rfftf(n,r,wsave)  #
あるいは,
  Dcl.rfftf(r,wsave)    # Ruby では r は配列の大きさを知っているので
でよく,
  s = Dcl.rfftf(r,wsave)  # s に FFT した値が入る
の形にしなくてもいいのでは,ということです
(f90,C とかとの整合性を考えて)

ごとけんさん,どう思われますか?
私の認識が間違っていたら指摘してください.

また,Ruby のインターフェースと f90/C インターフェースは
どの程度同じにしたほうがいいと思われますか > 皆さま

##
Ruby は Ruby,違っていてもいいじゃない,というのなら,

      PROGRAM GRPK01

      CALL GROPN(IWS)
      CALL GRFRM

      CALL GRSWND(0.0, 1.0, -0.7, 0.7)
      CALL GRSVPT(0.2, 0.8,  0.2, 0.6)
      CALL GRSTRN(1)
      CALL GRSTRF
      CALL USSTTL('X-AXIS', ' ', 'Y1-AXIS', ' ')
      CALL USDAXS
      CALL SGTXZU(0.5, 0.0, 'PAGE:1, FRAME:1', 0.02, 0, 0, 3)

は,たとえば,

dev = DclDevice.new('X')
dev.newframe

win = DclWindow.new(0.0, 1.0, -0.7, 0.7)
vpt = DclViewport.new(0.2, 0.8,  0.2, 0.6)
fig = DclFig.new(win,vpt,'linear')

fig.AxisTitle('X-AXIS', ' ', 'Y1-AXIS', ' ')
fig.DrawAxis

txt = DclText.new('PAGE:1, FRAME:1', 0.02, 0, 0, 3)
txt.Show

とかいうように(詳細はともかく)やってしまうとカッコイイのでしょうが,
こういうのは,のちのちさらなるラッパとして考える,ということで
よいかと思います.

-- 
沼口  敦@北海道大学大学院地球環境科学研究科  大気海洋圏環境科学専攻
tel:011-706-2365 fax:011-706-4865 〒060-0810 札幌市北区北10条西5丁目  
mailto:numa@xxxxxx   http://wwwoa.ees.hokudai.ac.jp/~numa