Dmi*_*tov 1 scala implicit implicit-conversion
我有一个简单的代码
private def convertFieldsNames (fieldsNames: Array[String]): Array[String] =
fieldsNames.map(convertFieldName)
private def convertFieldName (fieldName: String): String = s"!!! $fieldName"
val res = convertFieldsNames(Array("123", "456"))
res.map(println)
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我添加类型转换功能时,我将在其他功能中使用
implicit def fromStringToEitherStringOrArray (str: String): Either[String, Array[String]] = Left(str)
implicit def fromArrayToEitherStringOrArray (arr: Array[String]): Either[String, Array[String]] = Right(arr)
Run Code Online (Sandbox Code Playgroud)
我一行出现错误
fieldsNames.map(convertFieldName)
type mismatch;
found : String => String
required: Array[String] => ?
Run Code Online (Sandbox Code Playgroud)
我希望这些转换仅在需要转换为Either值时才会生效,所以我无法理解为什么此错误在根本没有Either类型的行中冒出
太多的隐式转换。尝试
private def convertFieldsNames (fieldsNames: Array[String]): Array[String] =
(fieldsNames: ArrayOps[String]).map(convertFieldName)
Run Code Online (Sandbox Code Playgroud)
编译器选择错误的转换Array[String] => Either[String, Array[String]]不是Array[String] => ArrayOps[String]因为.map不仅可以,Array#map而且还可以Either#map。而且类型推断/类型检查的工作原理是,当出现类型不匹配错误时,现在回来选择适当的隐式转换为时已晚。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |