Arrays Scala匹配字符串和数组
我正在尝试调用字符串/数组对象上的方法。比如:Arrays Scala匹配字符串和数组,arrays,string,scala,match,Arrays,String,Scala,Match,我正在尝试调用字符串/数组对象上的方法。比如: def doSth(obj: Any): Int = { obj match { case t: TraversableOnce[Any] => t.foldLeft(0)((rs: Int, i: Any) => ...) case other => ... } } 但是当我调用doSth(“abc”)时,它与case other匹配。我想要的是案例t:TraversableOnce[Any] 还有其他
def doSth(obj: Any): Int = {
obj match {
case t: TraversableOnce[Any] => t.foldLeft(0)((rs: Int, i: Any) => ...)
case other => ...
}
}
但是当我调用doSth(“abc”)
时,它与case other
匹配。我想要的是案例t:TraversableOnce[Any]
还有其他方法吗?字符串不是TraversableOnce的子类型。这就是为什么它不会匹配一次 尽管String可以隐式转换为StringOps,StringOps是TraversableOnce的子类型。检查
Predef.augmentString
你可以这样做。在这种情况下,scala编译器将隐式地将String
转换为StringOps
。如果我们传入一个“hello”
在下面的代码中。如果我们传入一个“hello”
,它将打印出类java.lang.String
。这意味着没有隐式转换
def doSth(obj: Any): Int = {
obj match {
case t: TraversableOnce[Any] => t.foldLeft(0)((rs: Int, i: Any) => ...)
case other =>
println(other.getClass)
}
}
String不是TraversableOnce的子类型。这就是为什么它不会匹配一次 尽管String可以隐式转换为StringOps,StringOps是TraversableOnce的子类型。检查
Predef.augmentString
你可以这样做。在这种情况下,scala编译器将隐式地将String
转换为StringOps
。如果我们传入一个“hello”
在下面的代码中。如果我们传入一个“hello”
,它将打印出类java.lang.String
。这意味着没有隐式转换
def doSth(obj: Any): Int = {
obj match {
case t: TraversableOnce[Any] => t.foldLeft(0)((rs: Int, i: Any) => ...)
case other =>
println(other.getClass)
}
}
所以在match/case中,scala不会尝试隐式转换为StringOps?您可以
case t:String=>{val x:TraversableOnce[Any]=t;doSth(x)
}因此在match/case中,scala不会尝试隐式转换为StringOps?您可以case t:String=>{val x:TraversableOnce[Any]=t;doSth(x)
}当然Array
也不是TraversableOnce
的,它只能转换成它,就像String
一样。当然Array
也不是TraversableOnce
的,它只能转换成它,就像String
一样。