Iva*_*van 19 syntax types scala
每次我需要时总是重复一个行长的元组定义对我来说并不是很好.我可以将其命名并用作类型名称吗?很高兴为其字段命名,而不是使用._1,._2等.
Jör*_*tag 32
关于您的第一个问题,您可以简单地使用类型别名:
type KeyValue = (Int, String)
Run Code Online (Sandbox Code Playgroud)
当然,Scala是一种面向对象的语言,所以关于如何专门化元组的第二个,神奇的词是继承:
case class KeyValue(key: Int, value: String) extends (Int, String)(key, value)
Run Code Online (Sandbox Code Playgroud)
而已.该课程甚至不需要身体.
val kvp = KeyValue(42, "Hello")
kvp._1 // => res0: Int = 42
kvp.value // => res1: String = "Hello"
Run Code Online (Sandbox Code Playgroud)
但请注意,从case类(即Tuple2)继承的内容已弃用,将来可能不允许使用.以下是您为上述类定义获得的编译器警告:
警告:案例类
class KV有案例类祖先class Tuple2.这已被弃用,因为使用和实现过于复杂.您应该使用提取器在非叶节点上进行模式匹配.
Ste*_*ury 18
类型别名可用于命名您的元组,但请尝试使用案例类.您将能够使用命名参数
元组示例:
def foo(a : Int) : (Int, String) = {
(a,"bar")
}
val res = foo(1)
val size = res._1
val name= res._2
Run Code Online (Sandbox Code Playgroud)
案例类:
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
Run Code Online (Sandbox Code Playgroud)