7
def test
a = "a is for apple"
def inner_method
a = "something" # this will refer to a different "a"
end
inner_method
puts a
end
是否有这方面的任何原因?块有词法范围,所以为什么不用方法?这会被修复吗?
def test
a = "a is for apple"
def inner_method
a = "something" # this will refer to a different "a"
end
inner_method
puts a
end
是否有这方面的任何原因?块有词法范围,所以为什么不用方法?这会被修复吗?
这是因为Ruby的方法不是一流的对象(例如,它们将在IO中)。所以当你定义内部方法时,接收器是什么?大概是方法本身,或者是绑定什么的,但是Ruby没有那么深的OO。
无论如何,我不清楚你在你的例子中预计会发生什么,你是否想要它修改本地变量a
?如果是这样,一个proc是一种方法的合适替代品。
def test
a = "a is for apple"
inner_method = lambda do
a = "something"
end
a # => "a is for apple"
inner_method.call
a # => "something"
end
test
“functional.rb”是这种编程风格的更奢侈的例子。
而“lambda, proc, and Proc.new”是Ruby不同类型闭包的细分。
当一切都有词汇范围时,它似乎不合适。 – 2012-02-01 01:30:27
“其他”?除了块以外,*没有*具有词汇范围。不是方法体。不是班级机构。不是模块主体。不是脚本主体。 *块*是“不合适的”。 – 2012-02-01 03:42:54
斯卡拉的方法不是一流的对象,但内部方法关闭其周围方法的环境。 “内部方法”不能通过外部方法关闭的原因有一个更简单的原因:因为它*不是“内部方法”。这是一个全局方法的定义。 – 2012-02-01 03:46:00