定义一个闭包,再定义一个相同名称的变量,为什么不会出错?
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 你必须记住,日式小清新+腹黑嘛。
噢,明白了