【问题标题】:Scala: Can I convert an Option to varargs?Scala:我可以将选项转换为可变参数吗?
【发布时间】:2012-01-09 09:01:02
【问题描述】:

我有一个Option:

val myOption: Option[Int] = fooBar()

还有一个采用可变参数的方法:

def myMethod(a: String, b: Int*) = {...}

有没有办法将选项作为可变参数传递给方法?即如果选项是Some(3),则传递3,如果是None,则不传递任何内容。

试验答案 scala: How to pass an expanded list as varargs into a method? 我尝试显式输入参数:

myMethod("xyz", myOption: _*)

但编译器抱怨它需要Seq[Int]。貌似Option没有实现Seq,也没有predef隐式转换。

鉴于编译器需要Seq,我当然可以通过myOption.toList: _*,但有更好的方法吗?

【问题讨论】:

  • 您的方法对Seq 有什么要求?您可以使用更通用的集合操作(​​即 foreach、map、filter 等)编写它
  • @schmmd 在这种特殊情况下,myMethod 是第三方库的一部分,所以我别无选择,只能使用可变参数。这是我自己的代码,我可能会重写方法以使用Iterable[Int]而不是Int*,并为自己省去所有这些麻烦!

标签: scala option variadic-functions


【解决方案1】:
myMethod("xyz", myOption.toSeq: _*)

【讨论】:

  • 我认为这将通过Option 对象的implicit def option2Iterable 方法在内部调用myOption.toList 是否正确?
  • @ChrisB 哎哟!你说得对……是的,toList 更好。
猜你喜欢
  • 2011-01-21
  • 2011-12-21
  • 1970-01-01
  • 2018-06-24
  • 2016-03-24
  • 1970-01-01
  • 2011-03-31
  • 2023-03-29
  • 2020-06-30
相关资源
最近更新 更多