与 Python 不同,Java 本身并不支持元组。因此, is 没有提供像tuple assignment这样有用的可能性。
你将如何实施它?您的解决方案应该:
- 尽可能通用。
- 尽可能可读。
- 在赋值位置不包含临时变量。
- 实用方法是允许的,但仅限于静态方法。不应创建或导入元组类。不应使用数组或集合。
我举一个简单的例子。不要太在意*Func()
方法的内容。它们可能是内联的或依赖于较少的变量或另外依赖于其他变量。
public class TupleAssignment {
static String sFunc(String s, int i, double d) {
return i + s + d;
}
static int iFunc(String s, int i, double d) {
return i + s.length() - (int) d;
}
static double dFunc(String s, int i, double d) {
return (double) i / s.length() + d;
}
public static void main(String[] args) {
String s = "ABCDE";
int i = 2;
double d = 0.6;
String s1 = sFunc(s, i, d);
int i1 = iFunc(s, i, d);
double d1 = dFunc(s, i, d);
s = s1;
i = i1;
d = d1;
System.out.println(s + ", " + i + ", " + d);
}
}
这会产生正确的结果:
2ABCDE0.6, 7, 1.0
但需要额外的变量s1
, i1
, d1
. 如果您尝试以这种方式摆脱它们:
s = sFunc(s, i, d);
i = iFunc(s, i, d);
d = dFunc(s, i, d);
你会得到错误的结果:
2ABCDE0.6, 11, 1.8222222222222224
如何得到符合上述四个要求的先前结果?如果您看到一个不错的部分解决方案,请将其添加为答案。
请注意,这个问题与制作 Tuples 无关。您不需要实现元组返回值。你甚至不需要知道元组是什么。它是关于多重赋值(如果你愿意,可以称之为同时赋值或向量赋值)。