我有一个简单的代码
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)
它工作正常,但是当我添加类型转换功能时,我将在其他功能中使用
implicit def fromStringToEitherStringOrArray (str: String): Either[String, Array[String]] = Left(str)
implicit def fromArrayToEitherStringOrArray (arr: Array[String]): Either[String, Array[String]] = Right(arr)
我一行出现错误
fieldsNames.map(convertFieldName)
type mismatch;
found : String => String
required: Array[String] => ?
我希望这些转换仅在需要转换为Either值时才会生效,所以我无法理解为什么此错误在根本没有Either类型的行中冒出
太多的隐式转换。尝试
private def convertFieldsNames (fieldsNames: Array[String]): Array[String] =
(fieldsNames: ArrayOps[String]).map(convertFieldName)
编译器选择错误的转换Array[String] => Either[String, Array[String]]
不是Array[String] => ArrayOps[String]
因为.map
不仅可以,Array#map
而且还可以Either#map
。而且类型推断/类型检查的工作原理是,当出现类型不匹配错误时,现在回来选择适当的隐式转换为时已晚。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句