我想在 Ruby 中扩展变量的功能。原因是我正在研究类似于类型系统或值检查器的东西(这听起来有点疯狂,但整个想法很长,只是我想扩展默认变量的原因)。
我读过在 Ruby 中,一切都是对象。所以变量是对象。并且 Ruby 对于可以通过元编程更改的内容应该是相当自由的。
是否有某种与我可以扩展的局部变量相关的“类”?
我想为每个包含一个类型的字符串表示的变量关联一个字符串变量。此外,我想拦截变量分配并在每次将新值分配给变量时执行一个方法。这样我就可以根据类型检查新值是否正确(作为字符串存储在变量中)。
如果 Ruby 中的局部变量被定义为类的对象,我可以扩展该类或通过 ruby mixin 修改它。
解决方法是为我的变量创建一个新类(而不是使用 Ruby 的本地变量的构建)。此类可以具有值属性、类型的属性(存储为字符串)以及获取和设置方法。这样我可以解决我的问题,但如果可能的话,我想扩展 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
还有两个问题。 首先,我认为不可能向 Fixnum 添加新的构造函数。其次,我想拦截变量访问,即“b = a”调用a的方法'typecheck'。但这需要类似于面向方面编程的东西,我不确定这是否可以通过 Ruby 的元编程工具来解决。