美文网首页
使用闭包突破作用域的约束

使用闭包突破作用域的约束

作者: 33d8e4ec2cc9 | 来源:发表于2016-06-23 22:35 被阅读36次

    ruby里作用域之间宛如身处两个异世界,当你试图穿过一个作用域的时候,变量会立即失效,而不是像在js里面你定义一个全局变量之后,任何function里面都能调用

    aa = 'success!' 
    class MyClass
      def my_method
        puts aa
      end
    end
    
    MyClass.new.my_method
    => NameError: undefined local variable or method `aa' for #<MyClass:0x007fb67a84ab88>
    
    

    你期望能在这个方法里面能够输出success!,然而却并不能,aa这个变量和MyClass这个class还有my_method这个方法身处三个作用域,他们之间无法互相取变量,那怎么样才能让他们共享一个作用域呢。

    aa = 'success!'
    MyClass = Class.new do
      define_method :my_method do 
        puts aa
      end
    end
    
    MyClass.new.my_method
    => 'success!'
    
    

    用Class.new代替class,用define_method代替def,此时他们便处于一个作用域中了!

    为什么会想到写这个,主要是在写招采外网动态标题方法的时候碰到的一个问题。

    相关文章

      网友评论

          本文标题:使用闭包突破作用域的约束

          本文链接:https://www.haomeiwen.com/subject/ytlodttx.html