【问题标题】:how to invoke object.apply with single implicit parameter? [duplicate]如何使用单个隐式参数调用 object.apply? [复制]
【发布时间】:2026-01-22 08:45:01
【问题描述】:

我正在尝试做这样的事情

case class Foo(p: Param)

object Bar {
  def apply(implicit p: Param) = Foo(p)
}

def qux(implicit p: Param) {
  .. something
  val foo: Foo = Bar
  .. use foo
}

到目前为止我所达到的是

object Bar {
  def apply()(implicit p: Param) = Foo(p)
}

def ... {
  val foo: Foo = Bar()
}

我可以不加括号吗?

【问题讨论】:

    标签: scala implicit


    【解决方案1】:

    这是一个不带括号的解决方案...

    case class Foo(p: Param)
    
    object Bar {
      def apply(implicit p: Param) = Foo(p)
    }
    
    def qux(implicit p: Param) {
      // .. something
      val foo: Foo = Bar.apply // the only change is here!
      // .. use foo
    }
    

    ...但带有明确的apply 调用,其优点是不会更改您的原始签名。

    希望对你有帮助。

    【讨论】: