我可以做类似的事情
def f(): Tuple2[String, Long] = ...
val (a, b) = f()
如果变量已经存在怎么办?我在过滤器上运行相同的数据集,但我不想链接它们(长名称等)。这是我尝试过的,但它抱怨期待;而不是最后一行的=:
var a = ...initialization for this data
var b = ...some other init
(a, b) = g(a, b) // error: expected ';' but found '='
有没有办法避免中间元组?
正如亚历克斯指出的,简短的答案是否定的。你的代码发生的事情是这样的:当a and b已经在当前作用域中绑定了变量,(a, b)意思是“获取 a 和 b 的值并从中构造一个元组。”
所以,
(a, b) = ...
相当于
(new Tuple2(a, b)) = ...
这显然不是你想要的(除了荒谬之外)。
您想要的语法(一次分配给多个变量的能力)根本不存在。你甚至不能分配相同的值一次指向多个预先存在的变量(许多其他语言中常见的语法“a = b = ...”在 Scala 中不起作用。)我不认为 val 比 var 获得优先待遇是偶然的;它们几乎总是一个更好的主意。
听起来所有这一切都发生在某种循环内,并进行重复的分配。这不是很惯用的 Scala。我建议您尝试消除程序中 var 的使用,并以更实用的方式执行操作,使用诸如 map、flatMap、filter、foldLeft 等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)