![]() |
1
15
当提供的类型与预期的类型不匹配时,scala编译器会在标记为implicit的作用域中查找以提供的类型为参数并返回预期类型的任何方法。如果找到,则在中间插入对该方法的调用。 在bigint的例子中,假设你有一个方法
你用一个整数来称呼它:
由于类型不匹配,scala编译器将生成:
假设隐式int2bigint在范围内 |
![]() |
2
12
隐式方法的要点是在只有一种正确的方法时填充无聊的样板文件。 在这种情况下 隐式参数 编译器从上下文中插入一个参数,这一定是您所想的。例如,
由于我们已经将税率标记为一个隐式参数,并且提供了一个可以在需要时填充的隐式变量,因此不需要指定税率。编译器自动填充
在这种情况下 隐式转换 ,编译器将查找一个方法,该方法可以获取它拥有的类型并将其转换为所需的类型。这种转换在正常情况下是无法链接的,因此您必须获得所需的内容 一 一步一步。 有两种情况下,隐式转换可能会发挥作用。一个在 参数 方法调用——如果类型是错误的,但可以转换为正确的类型(只有一种方式),那么编译器将为您进行转换。另一个在 存在 方法调用——如果实际使用的类型没有可用的方法,但可以将其转换为具有该方法的类型,则将进行转换,然后调用该方法。 让我们看一个例子。
这里,我们称之为
另一个例子。
BigDecimal没有
如果从
(注:
|
![]() |
3
1
补充@gclaramunt的答案。 因为通过看一个完整的例子来理解和掌握这个概念要简单得多:
我希望这个例子澄清了为什么以及如何使用隐式转换(我不认为转换
|
![]() |
Than21 · scala确保块中的隐式转换失败 7 年前 |
![]() |
Dr. Strangelove · C#协方差:具有不同接口特征的类 7 年前 |
![]() |
Ash · 使用转换运算符强制转换对象失败 7 年前 |
![]() |
Skye MacMaster · 具有隐式类型转换的调用函数 7 年前 |