代码之家  ›  专栏  ›  技术社区  ›  KaptajnKold

混血儿与特质

  •  136
  • KaptajnKold  · 技术社区  · 16 年前

    混合基因和性状之间的区别是什么?

    According to Wikipedia ,Ruby模块有点像特性。为什么呢

    2 回复  |  直到 15 年前
        1
  •  224
  •   jk_    14 年前
    1. 混合使用“隐式冲突解决”,特征使用“显式冲突解决”
    2. 混合依赖于线性化,特征是平坦的。

    Lecture about traits

    公元1年。

    公元2年。 可能存在名称冲突。两个混合器( MA MB TA TB )使用相同的定义定义方法 foo():void

    Mixin MA {
        foo():void {
            print 'hello'
        }
    }
    
    Mixin MB {
        foo():void {
            print 'bye'
        }
    }
    
    Trait TA {
        foo():void {
            print 'hello'
        }
    }
    
    Trait TB {
        foo():void {
            print 'bye'
        }
    }
    

    C mixins MA, MB 隐式解析。

    Class C mixins MA, MB {
        bar():void {
            foo();
        }
    }
    

    这将呼叫 foo():void 从…起

    另一方面,在使用Traits时,组合类必须解决冲突。

    Class C mixins TA, TB {
        bar():void {
            foo();
        }
    }
    

    foo():void ).

    公元3年。

    换句话说,类是由Traits组成还是Traits代码“复制粘贴”到类中并不重要。

        2
  •  9
  •   fooquency    12 年前

    这些页面解释了D编程语言的区别。

    http://dlang.org/mixin.html

    http://dlang.org/traits.html

    此上下文中的mixin是动态生成的代码,然后在编译过程中插入到代码中。对于简单的DSL来说非常方便。

    trait是编译时的外部值(而不是从外部源生成的代码)。差别是微妙的。mixin添加逻辑,Traits添加诸如编译时类型信息之类的数据。