有可能不为lambda分配上下文吗?
例如:
class Rule
def get_rule
return lambda {puts name}
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
Rule.new.get_rule.call() # should say "ruby" but say what object of class Rull, does not have variable name
# or self.instance_eval &Rule.new.get_rule
end
end
Run Code Online (Sandbox Code Playgroud)
我的目标是 - >没有上下文的存储过程对象,并在特定位置调用之前分配上下文.可能吗?
是的,但要小心,这个很容易被滥用.我个人会担心像这样的代码.
class Rule
def get_rule
Proc.new { puts name }
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
instance_eval(&Rule.new.get_rule)
end
end
Run Code Online (Sandbox Code Playgroud)
派对有点晚了,但这是通过明确地将上下文传递给规则来实现此目的的另一种方式.
class Rule
def get_rule
return lambda{|context| puts context.name}
end
end
class Person
attr_accessor :name
def init_rule
@name = "ruby"
Rule.new.get_rule.call(self)
end
end
Person.new.init_rule
#=> ruby
Run Code Online (Sandbox Code Playgroud)