要定义一个类,我必须执行以下操作(例如)
var example1 = "some_information";
$.ajax({
url: '/myURL?var1=example1',
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8'
})
我需要实现以下
class Foo
#attr_accessors
#methods
#so on
end
foo = Foo.new #to create an instance
我需要ruby解释器来处理 case_class ,方法与关键字 class
相同答案 0 :(得分:3)
与几乎所有编程语言一样,Ruby不允许您修改其语法或语义。所以,你想要的是不可能的。
你可以,但是,很容易编写一个方法来实现你的目标,但不改变Ruby的语法和语义:
class Module
def case_class(name, superclass = ::Object, &blk)
const_set(name, Class.new(superclass, &blk))
end
end
def case_class(name, superclass = ::Object, &blk)
self.class.case_class(name, superclass, &blk)
end
case_class :Foo_immutable do
# ↑ ↑↑
# these are the only differences to your proposed syntax
#attr_accessors
#methods
#so on
end
foo_immutable = Foo_immutable.new
答案 1 :(得分:1)
为了达到这个目的,除了定义上一个答案中已经说过的内容之外:
class Module
def case_class(name, superclass = ::Object, &blk)
const_set(name, Class.new(superclass, &blk))
end
end
def case_class(name, superclass = ::Object, &blk)
self.class.case_class(name, superclass, &blk)
end
您可能需要查看 const_missing 方法,以及ruby为各种范围内的常量执行的“查找”
这将允许你做像
这样的事情case_class Foo do
...
end
有关详细说明,请参阅此页:tadp-utn-frba.github.io
它有大量有用的脚本解释ruby元编程(西班牙语)以及如何实现您正在寻找的东西,它也有相关的参考资料。 负责该页面的人员,因此您可以随时向他们发送电子邮件(鉴于您是该班级的学生) 出于学术原因 。
干杯!