所有
我有这样的功能A和B:
def B(implicit t2: T2) = {
....
}
def A(implicit t1: T1) = {
B()
}
T1和T2是不同的类型。 如何隐式将隐式变量t1转换为隐式变量t2?
最诚挚的问候, 凯文。
答案 0 :(得分:2)
您可以定义一个隐式材料化器(一个不带参数的隐式def),返回类型T2
,它需要一个类型为T1
的隐式参数:
implicit def autoConvert(implicit t1: T1): T2 =
// your conversion
然后,如果您在范围内具有此隐式,以及隐式T1
,则可以使用该转换生成隐式T2
。
谨慎使用; - )
答案 1 :(得分:0)
我会直接转换价值:
def expectInt(implicit i: Int) = i * 10
def expectString(implicit s: String) = {
expectInt(Integer.parseInt(s))
}
expectsString("3") yields 30
如果无法更改方法调用:使用隐式转换:
// EXAMPLE CODE - WITHOUT EXCEPTION HANDLING!!
implicit def s2i(s: String) = Integer.parseInt(s)
def expectInt(implicit i: Int) = i * 10
def expectString(implicit s: String) = {
expectInt(s)
}
implicit val s = "2"
expectString yields 20
但请记住:多次隐式转换无法让您的代码易于理解