对我而言,每次我需要时总是重复一个行长的元组定义,这对我来说并不好。我可以将其命名并用作类型名称吗?会很高兴地命名其字段也代替使用._1,._2等我可以在Scala 2.8中命名一个元组(定义一个结构?)吗?
17
A
回答
31
关于你的第一个问题,你可以简单地用一个类型别名:
type KeyValue = (Int, String)
,当然,Scala是一种面向对象的语言,因此关于你的第二个关于如何专门的元组,口令字是继承:
case class KeyValue(key: Int, value: String) extends (Int, String)(key, value)
就是这样。班级甚至不需要身体。
val kvp = KeyValue(42, "Hello")
kvp._1 // => res0: Int = 42
kvp.value // => res1: String = "Hello"
但是请注意,从壳体类继承(其Tuple2
是),不推荐使用,并且可以在将来禁止。以下是编译器警告你得到上面的类定义:
警告:案例类
class KV
有case类祖先class Tuple2
。由于过度复杂的使用和实施,这已被弃用。您应该使用提取器在非叶节点上进行模式匹配。
18
类型别名适用于命名您的元组,但尝试使用case类代替。你将能够使用命名参数与元组
例子:
def foo(a : Int) : (Int, String) = {
(a,"bar")
}
val res = foo(1)
val size = res._1
val name= res._2
与Case类:
case class Result(size : Int , name : String)
def foo(a : Int) : Result = {
Result(a,"bar")
}
val res = foo(1)
val size = res.size
val name= res.name
4
下面是一个创建一个类型别名和工厂对象的解决方案。
scala> type T = (Int, String)
defined type alias T
scala> object T { def apply(i: Int, s: String): T = (i, s) }
defined module T
scala> new T(1, "a")
res0: (Int, String) = (1,a)
scala> T(1, "a")
res1: (Int, String) = (1,a)
然而,正如其他人所说,你可能应该只是创建一个案例类。
0
虽然正如其他人所说,明确(案例)类是一般意义上最好的。
然而,对于局部的情况,你可以做的是使用tuple extractor来提高代码的可读性:
val (first, second) = incrementPair(3, 4)
println(s"$first ... $second")
考虑返回一个元组的方法:
def incrementPair(pair: (Int, Int)) : (Int, Int) = {
val (first, second) = pair
(first + 1, second + 1)
}
相关问题
- 1. 我可以在Scala类中定义一个无名方法吗?
- 2. 我们可以在类型上定义一个结构吗?
- 3. 我可以定义一个键是结构的地图吗?
- 4. 如何在Scala 2.8注释中指定一个静态数组?
- 5. 我可以在结构中放置一个函数吗?
- 6. 在Ruby中可以定义一个名称以(冒号)结尾的方法吗?
- 7. 可以修改一个结构吗?
- 8. 我可以在一个命令中重定向两页吗?
- 9. 定义一个未命名的文档的结构Spyder的
- 10. 可以在Sass中定义一个数组吗?
- 11. 我可以用任何字节数组(Scala)构造一个BigInt吗?
- 12. 我可以在Kohana 3中使用一个路径定义吗?
- 13. 我可以在protobuf中定义一个常量字符串吗?
- 14. 我可以在while循环中定义一个迭代器吗?
- 15. 我可以在Scala中一次导入多个包吗?
- 16. 我可以直接用类型化元组定义一个函数头吗?
- 17. 我可以定义哪些字符可以“破”一个字吗?
- 18. 我可以给lambda一个名字吗?
- 19. 我可以在F#中的类中定义结构吗?
- 20. 我可以在一个文件中加载整个命名空间吗?
- 21. 我可以从Scala中的非逗号分隔的一组令牌创建一个元组吗?
- 22. 我可以用一个类名指定多个CSS类吗?
- 23. 命名为“AB”的结构是否可以包含一个AB数组?
- 24. 在结构中包含一个std :: map?可以吗?
- 25. 你可以在ASP.NET中有一个插件体系结构吗?
- 26. 我可以使用WM_COPYDATA复制一个非结构体吗?
- 27. 在scala中使列表解构为一个元组,或者使一个元组迭代成一个列表
- 28. 我可以在另一个css定义中包含css定义吗?
- 29. 如何在一个类中定义一个结构?
- 30. 在方法中定义一个匿名结构作为参数
不要元组的工作比快的情况下班?这项任务是对大量简单数据的复杂处理,这是一种数字处理。 – Ivan 2010-09-10 20:06:20
@Ivan:元组*是* case类,他们不是吗? – 2010-09-10 20:08:45
元组确实是案例类! – 2010-09-10 20:16:21