在Javascript里我可以这么做。
var a = {};
a.f1 = function(){};我怎么能在Ruby里做到这一点?
更新。
在JS代码中,a是一个没有类实例化的对象。function(){}是一个匿名函数,a.f1 =将该函数添加到对象实例中。因此,函数仅绑定到实例,与类或类似定义无关。
发布于 2011-11-12 14:08:49
Ruby和JS的对象模型非常不同,但直接翻译可能如下所示:
a = Object.new
def a.f1(x)
2*x
end
a.f1(5) #=> 10还可以使用Ruby的本征类:
class Object
def metaclass
class << self; self; end
end
end
a = Object.new
# Also: (class << a; self; end).send(:define_method, :f1) do |x|
a.metaclass.send(:define_method, :f1) { |x| 2*x }警告注意:您将在元编程/猴子识别/.但在编写“普通”代码时,这并不常见,因为其他技术(主要是模块混合)适用。
发布于 2011-11-12 14:09:33
JavaScript和其他语言有区别,因为JavaScript以另一种方式进行继承。所以这里不可能有直接的模拟。
让我们假设{}是ruby中的A类,然后用它创建对象
class A
end
a = A.new和f1函数在某些模块B中的位置
module B
def f1
puts "you've extended your object"
end
end现在你可以用类似的方式做你想做的事了
a.extend(B)
a.f1 #=> "you've extended your object"https://stackoverflow.com/questions/8104779
复制相似问题