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

windwiny · 2013年01月16日 · 最后由 windwiny 回复于 2013年01月16日 · 2601 次阅读

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

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 你必须记住,日式小清新+腹黑嘛。

噢,明白了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号