gpt4 book ai didi

ruby - 为什么 ruby​​ 方法没有词法作用域?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:42 24 4
gpt4 key购买 nike

例如

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

这有什么原因吗? block 有词法作用域,那么为什么方法没有呢?这会被修复吗?

最佳答案

这是因为 Ruby 的方法不是一流的对象(例如,它们在 IO 中)。那么当你定义inner方法的时候,receiver是什么?大概是方法本身,或绑定(bind)或其他东西,但 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 不同类型闭包的分割。

关于ruby - 为什么 ruby​​ 方法没有词法作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com