Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Scala匹配字符串和数组_Arrays_String_Scala_Match - Fatal编程技术网

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
一样。