V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
rockllei
V2EX  ›  Ruby

Ruby 中 Singleton 方法的另一种理解方式

  •  
  •   rockllei · Oct 19, 2016 · 7053 views
    This topic created in 3477 days ago, the information mentioned may be changed or developed.

    Ruby 中的 Singleton 方法是 Ruby 中一个重要的知识点,也是做 Ruby 元编程的一个重要技巧。 简单的说就是在 Ruby 中任何自定义类都是 Class 这个类的一个实例,所以 Singleton 方法其实就是一个实例所拥有的方法,比如:

    a = "hi"
    
    def a.you
      "hi,  you"
    end
    
    a.you # => hi, you
    
    "hello".you # => undefined method 'you'
    

    上面的 a.you 方法就是 a 这个字符串实例的 Singleton Method 。

    同样如果拿我们最熟悉的类举例子的话就是:

    class A
      def self.hi
        'hi A'
      end
    end
    
    A.hi # => hi A
    

    上面的定义方法所有的同学应该都知道,其实就是类方法的定义,在 Ruby 中类方法其实就是类的 Singleton Method ,就像上面说的因为 A 也是 Class 这个类的一个实例(通过 A.class 就可以知道),所以,其实上面的方法也可以这样定义:

    class A
    end
    
    def A.hi
      'hi A'
    end
    
    A.hi # => hi A
    

    这样的话,就和上面字符串 a 的效果一样,就更容理解了。 所以关键是理解我们所定义的类也是 Class 这个类的一个实例,这是关键。


    其实我想说的,下面才是关键,

    蛋人网 http://eggman.tv 的最新系列大课程<Ruby 元编程="">已经开坑了,从今天开始会陆续更新,第一节视频课件<Ruby 元编程的介绍和使用场景="">已经放出,免费的, http://eggman.tv/c/s-ruby-meta-programming ,计划每周更新两期,上面讲述的是课件一部分内容,我们计划会在整个课件中为大家讲述:

    • Ruby 基础类结构
    • Module Mixin 设计模式
    • instance_eval 和 class_eval 的使用,以及*_eval 类和*_exec 类的区别
    • Singleton 方法的原理和各种使用场景
    • ActiveSuppot::Concern 的实现原理
    • define_method & method_missing
    • Block 的进阶使用

    等等众多深入内容的讲解,当然还包括众多的实例演示和如何使用这些高级技巧,欢迎各位大哥大嫂前来支持。

    4 replies    2016-11-08 11:02:28 +08:00
    rockllei
        1
    rockllei  
    OP
       Oct 24, 2016
    看来技术贴不受欢迎这里
    franklinyu
        2
    franklinyu  
       Nov 6, 2016
    @rockllei 只是 Ruby 節點人少吧
    franklinyu
        3
    franklinyu  
       Nov 6, 2016
    @rockllei 而且你這明明是廣告……
    rockllei
        4
    rockllei  
    OP
       Nov 8, 2016
    @franklinyu 我们比较软不硬
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1066 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:52 · PVG 06:52 · LAX 15:52 · JFK 18:52
    ♥ Do have faith in what you're doing.