有状态的隐式参数。安全吗?

Stateful implicit parameters. Is it safe?

因为所有隐式都是由编译器推断的,所以有状态隐式参数是否安全?例如:

class TestImplct {
  def test(implicit mc : MyClass) = println(mc.i)
}

class MyClass(val i : Int)

然后像这样使用

implicit val mc = new MyClass(1234)
val ti = new TestImplct
ti.test

它工作正常,但是它安全吗?或者说有状态隐式可能有一些缺点?

stateful implicit parameters

我不确定 "stateful" 是什么意思:可变状态还是不可变状态? 不可变状态是好的;常数并不危险。

然而,可变状态会更加危险。我不确定你的用例是什么,但你通常可以忘记多线程(因为你永远不知道其他函数 运行 是否将它作为隐式获取并在另一个线程中使用它...... ). 您还无法对您的代码进行推理,因为隐式解析很复杂,并且根据定义,无法在代码中读取(因为它不是,嗯,显式)。