Scala对现有变量的多重赋值

Qua*_*rtz 9 scala assignment-operator

我可以做点什么

def f(): Tuple2[String, Long] = ...
val (a, b) = f()
Run Code Online (Sandbox Code Playgroud)

如果变量已经存在怎么办?我在过滤器上运行相同的数据集,我不想链接它们(长名称等).这是我尝试过的,但它抱怨期待; 而不是在最后一行=:

var a = ...initialization for this data
var b = ...some other init
(a, b) = g(a, b) // error: expected ';' but found '='
Run Code Online (Sandbox Code Playgroud)

有没有办法避免中间元组?

Tom*_*ett 14

正如亚历克斯指出的那样,简短的回答是否定的.你的代码发生了什么:当ab已经在当前范围内绑定变量时,(a,b)意味着"获取a和b的值并从中构造一个元组."

因此,

(a, b) = ...
Run Code Online (Sandbox Code Playgroud)

相当于

(new Tuple2(a, b)) = ...
Run Code Online (Sandbox Code Playgroud)

这显然不是你想要的(除了是荒谬的).

您想要的语法(一次分配给多个变量的能力)根本不存在.你甚至不能一次为多个预先存在的变量分配相同的值(在许多其他语言中找到的通常语法"a = b = ..."在Scala中不起作用.)我不认为这是一个意外vals对vars享有优惠待遇; 他们几乎总是一个更好的主意.

听起来所有这一切都发生在某种循环中,并且重复分配.这不是非常惯用的Scala.我建议您尝试在程序中消除vars的使用,并使用map,flatMap,filter,foldLeft等更实用的方式执行操作.

  • 读一遍我说的话.我在谈论在一个语句中分配多个*预先存在的*变量,而不是用初始值声明新变量.前者是OP正在寻找的东西,Scala不支持的东西(据我所知). (2认同)

Ale*_*ise 8

简答:不.