scala学习手记5 - 元组与多重赋值

假定要在一个方法中返回多个值。比如需要返回一个人的名、姓和邮箱地址。在Java中最常用的方法是定义一个Person类,其中包括相对应的字段;还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循环取值。在Scala中我们又多一个选择:元组。

元组是一个不可变的对象序列,可以使用逗号分隔的值进行创建,比如这个有3个对象的元组:(“robin”, “zhang”, “robin@zhyea.com”)。

元组的一个特性就是多重赋值,就是可以将元组中的元素赋值给多个val或var。

下面是一个例子:

def getPersonInfo (primaryKey: Int) = {
  //假设使用primaryKey获取用户信息
  //这里的返回值被硬编码了
  ("robin", "zhang", "robin@zhyea.com")
}

val (firstName, lastName, email) = getPersonInfo (1);

println ("firstName: " + firstName)
println ("lastName: " + lastName)
println ("email: " + email)

再来看一下执行结果:

image

多重赋值成功了。注释中的“硬编码”是什么意思在百度后知道了:硬编码是指将可变变量用一个固定值来代替的方法。还有一点就是getPersonInfo方法中返回结果没有使用return,这也是scala支持的一个特性:在scala中的方法中将最后出现的变量作为return的值。要使用return必须显示指定返回类型,从而使scala失去推断返回值类型的能力。必须使用return意味着存在“多路径返回”的问题,需要借助return的中断返回的特性来处理多分支问题。在scala中不鼓励使用return。

如果尝试将方法返回结果赋值给数量不一致的变量scala就会报错,如果是在编译代码而不是作为脚本执行,那么在编译期间就会报错。

将代码调整成这样:

def getPersonInfo (primaryKey: Int) = {
  //假设使用primaryKey获取用户信息
  //这里的返回值被硬编码了
  ("robin", "zhang", "robin@zhyea.com")
}

val (firstName, lastName) = getPersonInfo (1);

println ("firstName: " + firstName)
println ("lastName: " + lastName)

执行后报错了:

image

不赋值的话也可以使用索引来访问元组中的元素,像这样:

val info = getPersonInfo (1);

println ("firstName: " + info._1)
println ("lastName: " + info._2)
println ("email: " + info._3)

元组不仅仅对多重赋值中有用。在并发编程里,使用元组可以把一组数据值作为消息在Actor之间传递(它们不变的属性刚好在这里派得上用场)。这一点先记下来。

scala的元组还有一个特性,就是元组中的值可以是不同类型。稍稍调整了下之前的代码:

def getPersonInfo (primaryKey: Int) = {
  //假设使用primaryKey获取用户信息
  //这里的返回值被硬编码了
  ("robin", "zhang", 29, "robin@zhyea.com")
}

val info = getPersonInfo (1);

println ("firstName: " + info._1)
println ("lastName: " + info._2)
println ("age: " + info._3)
println ("email: " + info._4)

再来看一下执行结果:

image

就这样。

转载于:https://www.cnblogs.com/amunote/p/5559867.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值