Ruby 中 Singleton 方法的另一种理解方式 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rockllei
V2EX    Ruby

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

  •  
  •   rockllei 2016-10-19 10:34:21 +08:00 6693 次点击
    这是一个创建于 3279 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    a = "hi" def a.you "hi, you" end a.you # => hi, you "hello".you # =gt; 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 条回复    2016-11-08 11:02:28 +08:00
    rockllei
        1
    rockllei  
    OP
       2016-10-24 16:23:43 +08:00
    看来技术贴不受欢迎这里
    franklinyu
        2
    franklinyu  
       2016-11-06 13:49:36 +08:00
    @rockllei 只是 Ruby 人少吧
    franklinyu
        3
    franklinyu  
       2016-11-06 13:51:00 +08:00
    @rockllei 而且你明明是告……
    rockllei
        4
    rockllei  
    OP
       2016-11-08 11:02:28 +08:00
    @franklinyu 我们比较软不硬
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     841 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 20:44 PVG 04:44 LAX 13:44 JFK 16:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86