Ruby ruby 闭包不会占用变量名?

windwiny · January 16, 2013 · Last by windwiny replied at January 16, 2013 · 2603 hits

定义一个闭包,再定义一个相同名称的变量,为什么不会出错?

def n1 yield end

n1 {} # 这里是执行方法

# defined? n1 # => "method" # n1.class # 这里会出错

n1 = 1

n1 {} # 这里不会出错

这个不是闭包 是方法啊 local varible 可以和 method 共享一个名字,之后如果这个名字可以被认为是 local variable 的话就会当成 local variable 处理,如果之后跟括号之类的明显不是 local variable 的话就会被当成 method 处理

Ruby 就是这样的 尽可能不限制你 但是有些特殊 case 你必须记住,日式小清新+腹黑嘛。

噢,明白了

You need to Sign in before reply, if you don't have an account, please Sign up first.