Scala:PartialFunction奇怪的行为

时间:2015-12-16 12:21:38

标签: scala

这很奇怪,但我的代码打印url <- c("first_url", "second_url") result <- vector("list", length(url)) for(i in 1:length(url)){ result[[i]] <- tryCatch({sd_cat(url[i])}, error=function(err) "Error 404") } 。任何想法为什么会这样做?

u

1 个答案:

答案 0 :(得分:2)

您的代码解释字符串&#34;&#34;作为PartialFunction

val result: PartialFunction[Int, String] = "<undef>"
result.apply(1) // second character of "<undef>" --> u

这是通过从StringWrappedString的隐式转换实现的,Seq[Char]Seq[T]的子类型。此外,PartialFunction[Int, T]Seq的子类型(给定索引,如果存在,则获取f1的元素。)

最后一行达到了这种情况,因为1不能被2,3,5中的任何一个整除(因此它会落在f2f3applyOrElse)。

您需要的是val fun = f1 orElse f2 orElse f3 fun.applyOrElse(1, "<undef>") // --> "<undef>"

val result = f1 orElse f2 orElse f3 orElse {
  case _ => "<undef>"
}

或者,您可以指定回退部分功能:

i.putStringArrayListExtra("dataList", data1);