Ruby で変数の機能を拡張したいと考えています。その理由は、型システムまたは値チェッカーに似たものに取り組んでいるためです (これは少しクレイジーに聞こえますが、全体のアイデアは説明するのが長すぎます。デフォルト変数を拡張したいという理由だけです)。
私は、Ruby ではすべてがオブジェクトであることを読みました。したがって、変数はオブジェクトです。また、Ruby は、メタプログラミングによって変更できる内容に関して、非常に寛大であると考えられています。
拡張できるローカル変数に関連付けられたある種の「クラス」はありますか?
型の文字列表現を保持する変数ごとに文字列変数を関連付けたいと思います。さらに、変数の割り当てをインターセプトし、新しい値が変数に割り当てられるたびにメソッドを実行したいと考えています。これは、新しい値が型 (変数に文字列として格納されている) に従って正しいかどうかを確認できるようにするためです。
Ruby のローカル変数がクラスのオブジェクトとして定義されている場合、そのクラスを拡張したり、Ruby mixin を介して変更したりできます。
回避策は、変数の新しいクラスを作成することです (Ruby のローカル変数でビルドを使用しないでください)。このクラスには、値属性、型の属性 (文字列として格納)、および get メソッドと set メソッドを含めることができます。このようにして問題を解決できますが、可能であれば、Ruby の組み込み変数を拡張したいと考えています。
現在進行中の作業
class Fixnum
attr_accessor :tp
@tp
def mytype ( type )
@tp = type
end
def typecheck
#call typechecker
puts "checked"
end
end
テストコード:
a = 3
a.mytype("nat")
puts a.tp
a.typecheck
まだ2つの問題があります。 まず、Fixnum に新しいコンストラクターを追加することはできないと思います。次に、変数アクセスをインターセプトしたいと思います。つまり、「b = a」は a のメソッド「typecheck」を呼び出します。しかし、これにはアスペクト指向プログラミングに似たものが必要であり、これが Ruby のメタプログラミング機能で解決できるかどうかはわかりません。