有状态的隐式参数。安全吗?
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" 是什么意思:可变状态还是不可变状态?
不可变状态是好的;常数并不危险。
然而,可变状态会更加危险。我不确定你的用例是什么,但你通常可以忘记多线程(因为你永远不知道其他函数 运行 是否将它作为隐式获取并在另一个线程中使用它...... ).
您还无法对您的代码进行推理,因为隐式解析很复杂,并且根据定义,无法在代码中读取(因为它不是,嗯,显式)。
因为所有隐式都是由编译器推断的,所以有状态隐式参数是否安全?例如:
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" 是什么意思:可变状态还是不可变状态? 不可变状态是好的;常数并不危险。
然而,可变状态会更加危险。我不确定你的用例是什么,但你通常可以忘记多线程(因为你永远不知道其他函数 运行 是否将它作为隐式获取并在另一个线程中使用它...... ). 您还无法对您的代码进行推理,因为隐式解析很复杂,并且根据定义,无法在代码中读取(因为它不是,嗯,显式)。