为变量赋值时使用括号的目的是什么?

问题描述 投票:0回答:2

我不确定这是 Groovy 的东西还是 Java 的东西,我见过变量赋值的实例,例如:

String myVar = ""
...
(myVar) = someMethod(arg1);

myVar
周围的括号有什么作用吗,还是只是为了可读性?

java variables groovy parentheses
2个回答
1
投票

它在 Java 和 Groovy 中都是“事物”(如,它是允许的)。 Groovy 可以使用该语法进行复合赋值(即使它只分配一件事......)

String x, y, z
(x, y, z) = ["1", "2", "3"]

Java 没有复合赋值。无论如何,Java 语言规范 15.26.1 规定您可以使用任意数量的括号对:

如果左侧操作数表达式是字段访问表达式 e.f (§15.11),可能用一对或多对括号括起来,则:

重要的是,当它被完全求值时,它是一个“字段访问表达式”(或“数组访问表达式”)。


myVar 两边的括号有什么作用吗

不。

或者只是为了可读性?

我认为这会损害可读性。不过,风格的一致性更重要。也许他们希望普通作业在复合作业之间保持一致?

String a
(a) = "123"

String x, y, z
(x, y, z) = ["1", "2", "3"]

1
投票

律动

您展示的语法是一种解构形式。

1.2.1。多重作业

Groovy 支持多重赋值,即可以一次分配多个变量,例如:

def (a, b, c) = [10, 20, 'foo'] 
assert a == 10 && b == 20 && c == 'foo'

如果您愿意,您可以提供类型作为声明的一部分:

def (int i, String j) = [10, 'foo'] 
assert i == 10 && j == 'foo'

除了在声明变量时使用之外,它也适用于现有变量:

def nums = [1, 3, 5] 
def a, b, c 
(a, b, c) = nums 
assert a == 1 && b == 3 && c == 5

该语法适用于数组和列表,以及返回其中任一者的方法:

def (_, month, year) = "18th June 2009".split() 
assert "In $month of $year" == 'In June of 2009'

Java

该语法目前没有任何意义,但合法

© www.soinside.com 2019 - 2024. All rights reserved.