永井@知能.九工大です.
外部定義の定数群を取り込んで,それらがあたかもその場所で
定義されたかのごとく取り扱うようにはできないでしょうか.
# 以下の件,他に良い方法がありましたら,お教えください.
例えば,tk での例として,
--- tkconst.rb ----------------------------
module TkConstant
Text = 'text'.freeze
Command = 'command'.freeze
:
:
end
-------------------------------------------
---- main ---------------------------------
require 'tk'
require 'tkconst'
include TkConstant
# Text = 'aaa' ; # <= ここでこれが許されてしまう
TkButton.new(nil, Text=>'hello', Command=>proc{print "hello"; exit}).pack
# 現状は,
# TkButton.new(nil, 'text'=>'hello', 'command'=>proc{print "hello"; exit}).pack
Tk.mainloop
------------------------------------------
というように書ければ記述が少しすっきりするかなと思いまして.
つまり,拡張ライブラリを用いる場合に,
そのライブラリにおけるパラメータ指定的な語句を
予約語的に扱うことができないかと考えてのことです.
私が少しは嬉しいかなと感じることとしては,
シングルクォートがいっぱいでソースが見づらくなることを避けられる点や
記述を誤れば未定義定数の参照となるので,
typo のようなミスを ruby 側で捉えやすくなるという点です.
定数であれば ( freeze と合わせて) 書き換えを禁止できますから,
現在の ruby の文法部分に触れることなく,
それっぽいことができそうに見えます.
ただ,こういった定数定義をライブラリの作者側が用意するというのが
現状ではうまくいきません.
module の include にしたのでは定数の再設定が許されてしまいます.
かといって,素の定数定義を書いたのでは,require の時点で
global に宣言されてしまって嫌です.
こういった定義はそれを必要とするスコープだけに限りたいですから.
というわけで,外部定義された定数定義をうまく展開する機構の導入について
検討をお願いしたいのですが,いかがでしょうか.
--
永井 秀利 (九工大 知能情報)
nagai / ai.kyutech.ac.jp