创建可以使用单个或多个元素作为 Scala 中构造函数参数进行实例化的类

发布于 2024-09-03 12:53:50 字数 265 浏览 2 评论 0原文

我想要一个可以用列表、数组、seq、set、stack、queue 等实例化的类。 我认为

class A
class B(elems:A*)

应该处理这样的事情。

这是我的解决方案:

class A
class B(elems:Iterable[A]){
    def this(elem:A) = this(Seq(elem))
}

您能提出任何改进建议吗?

I want to have class that can be instantiated with list, array, seq, set, stack, queue etc.
In my opinion

class A
class B(elems:A*)

should handle such stuff.

This is my solution:

class A
class B(elems:Iterable[A]){
    def this(elem:A) = this(Seq(elem))
}

Can you suggest any improvements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮是我掰弯的 2024-09-10 12:53:50

任何 Seq 或 Array 都可以通过使用 : _* 属性传递给具有重复参数的方法:

scala> def m1(strs: String*): Int = { strs.foldLeft(0)(_ + _.length) }
m1: (strs: String*)Int

scala> m1("foo", "bar")
res0: Int = 6

scala> val ss1 = Array("hello", ", ", "world", ".")
ss1: Array[java.lang.String] = Array(hello, , , world, .)

scala> m1(ss1: _*)
res1: Int = 13

scala> val ss2 = List("now", "is", "the", "time")
ss2: List[java.lang.String] = List(now, is, the, time)

scala> m1(ss2: _*)
res2: Int = 12

Any Seq or Array may be passed to a method with repeated parameters by using the : _* ascription:

scala> def m1(strs: String*): Int = { strs.foldLeft(0)(_ + _.length) }
m1: (strs: String*)Int

scala> m1("foo", "bar")
res0: Int = 6

scala> val ss1 = Array("hello", ", ", "world", ".")
ss1: Array[java.lang.String] = Array(hello, , , world, .)

scala> m1(ss1: _*)
res1: Int = 13

scala> val ss2 = List("now", "is", "the", "time")
ss2: List[java.lang.String] = List(now, is, the, time)

scala> m1(ss2: _*)
res2: Int = 12
〗斷ホ乔殘χμё〖 2024-09-10 12:53:50

这可能是一个小小的改进。

class A
class B(elems:Iterable[A]){
    def this(elem:A*) = this(elem.asInstanceOf[Iterable[A]])
}

这将使这些合法化

val b1 = new B(a1)
val b2 = new B(a2, a3)

This might be a minor improvement.

class A
class B(elems:Iterable[A]){
    def this(elem:A*) = this(elem.asInstanceOf[Iterable[A]])
}

That'll make these legal

val b1 = new B(a1)
val b2 = new B(a2, a3)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文