代码之家  ›  专栏  ›  技术社区  ›  huynhjl bhericher

隐式参数的有效用法

  •  4
  • huynhjl bhericher  · 技术社区  · 14 年前

    以下内容 example 斯卡拉之旅 显示如何使用隐式根据类型提供适当的缺少成员(添加和单位)。编译器将在作用域中选择正确的隐式对象。图书馆也把它和 List.sortBy Ordering List.sum Numeric 例如。

    但是,在B类中的下列用法是否是隐式参数的有效/建议用法(而不是在A类中不使用隐式参数):

    class I
    
    class A {
      def foo(i:I) { bar(i) }
      def bar(i:I) { baz(i) }
      def baz(i:I) { println("A baz " + i) }
    }
    (new A).foo(new I)
    
    class B {
      def foo(implicit i:I) { bar }
      def bar(implicit i:I) { baz }
      def baz(implicit i:I) { println("B baz " + i) }
    }
    (new B).foo(new I)
    

    在这里,当沿着堆栈传递参数时,我主要使用隐式保存自己在调用站点上的一些输入。

    2 回复  |  直到 14 年前
        1
  •  3
  •   jsuereth    14 年前

    trait Context
    
    object UtilityLib {
      def performHandyFunction(implicit x : Context) : SomeResult = ...
    }
    
    trait Plugin {
       def doYourThing(implicit ctx : Context) : Unit
    }
    
    class MyPlugin extends Plugin {
      def doYourThing(implicit ctx : Context) : Unit = {
        UtilityLib.performHandyFunction
      }
    }
    
    SomePluginAPI.register(new MyPlugin)
    

    database migration system I was toying

        2
  •  3
  •   Kevin Wright    14 年前

    I (new B).foo