[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