40.scala编程思想笔记——元组
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447584
源码下载连接请见第一篇笔记。
如果从给某个方法放回的结果必须超过一项,那么创建特殊的类来保存返回值就是一种完全合法的方式。
如下:
import com.atomicscala.AtomicTest._
case class
ReturnBlob(data:Double, info:String)
def data(input:Double) =
if(input >5.0)
ReturnBlob(input * 2, "High")
else
ReturnBlob(input* 2, "Low")
data(7.0) is ReturnBlob(14.0, "High")
data(4.0) is ReturnBlob(8.0, "Low")
这个方法使得我们可以毫不费力地收集多个元素。可以通过将元素集合到圆括号的内部来创建元组,如下:
(element1,element2,element3,…)
例子如下:
import com.atomicscala.AtomicTest._
def data2(input:Double):(Double, String) =
if(input >5.0)
(input * 2,"High")
else
(input * 2,"Low")
data2(7.0) is (14.0, "High")
data2(4.0) is (8.0, "Low")
def data3(input:Double) =
if(input >5.0)
(input * 2,"High", true)
else
(input * 2,"Low", false)
data3(7.0) is (14.0, "High", true)
data3(4.0) is (8.0, "Low", false)
元组使得集合元素变得易如反掌,因而成为了一种毫不费力的选择。
元组拆包如下:
import com.atomicscala.AtomicTest._
def f =(1,3.14,"Mouse",false,"Altitude")
val (n, d, a, b, h) = f
(a, b, n, d, h) is
("Mouse", false, 1, 3.14, "Altitude")
// Tuple indexing:
val all = f
f._1 is 1
f._2 is 3.14
f._3 is "Mouse"
f._4 is false
f._5 is "Altitude"
还有一种类似的形式可以拆包case类,如下:
import com.atomicscala.AtomicTest._
case class Employee(name:String, ID:Int)
val empA = Employee("Bob", 1130)
val Employee(nm, id) = empA
nm is "Bob"
id is 1130
甚至可以通过使用元组来进行初始化,如下:
scala> var ( d,n,s) = (1.1,12,"HI")
d: Double = 1.1
n: Int = 12
s: String = HI