永井@知能.九工大です.

外部定義の定数群を取り込んで,それらがあたかもその場所で
定義されたかのごとく取り扱うようにはできないでしょうか.

# 以下の件,他に良い方法がありましたら,お教えください.

例えば,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