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

时间:2016-08-30 09:17:19

标签: scala implicit

因为编译器推断出所有隐含有安全状态隐式参数是否安全?例如:

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

它工作正常,但它是安全的还是有一些关于有状态隐含的缺点?

1 个答案:

答案 0 :(得分:1)

  

有状态隐式参数

我不确定“有状态”是什么意思:可变或不可变状态? 不可改变的状态是可以的;常数并不危险。

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