【问题标题】:Passing a list as varargs Scala将列表作为可变参数 Scala 传递
【发布时间】:2013-12-25 07:33:06
【问题描述】:

如何将List[Any]List[Any] 作为参数传递给List.concat?我的代码是:

List.concat((a filter (x => x.getClass == a.getClass)): _*)

其中aList[Any](a filter (x => x.getClass == a.getClass)) 应该成为列表列表。我得到的错误是type mismatch; found List[Any] required: Seq[Traversable[Any]]

是否可以传递参数列表的元素,或将列表转换为序列?谢谢。

【问题讨论】:

  • 如果我有一个列表a = List(List(1, 2, 3), List(4, 5)),我将如何制作List(1, 2, 3, 4, 5)
  • List(List(1, 2, 3), List(4, 5)).flatten 产生List(1, 2, 3, 4, 5)
  • 此外,如果 a 是 List[Any] 并且您对其应用过滤器,则结果再次是 List[Any],这不是 List.concat 所期望的。
  • 谢谢。我自己尝试在 Scala 中实现 flatten,结果遇到了这个问题。

标签: list scala functional-programming variadic-functions


【解决方案1】:

您对: _* 的意图是什么?删除它,您的代码应该可以工作。

您实际上可以将 List[Any] 传递给 concat,如下所示。

val list1 = List("Abby", "Jim", "Tony")
val list2 = List[Any](90,"Tom")
val ret = List.concat(list1,list2)

你的代码的问题,我猜是: _*。另一个问题是a filter (x => x.getClass == a.getClass),元素与容器类型相同的可能性很小,在你的情况下是 List 。这是你的真实意图吗?您希望 List[Any] 包含 List[Any] 类型的元素吗?

以下代码有效,我在http://scalass.com/tryout 中验证了它们。

val list = List[Any](90,"Tom")
val r = List.concat((list filter (x => x.getClass == "".getClass)))

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2015-03-22
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多