我还看到了其他答案,并与老师进行了协商,但是我似乎找不到想要的答案。快速地,如果我声明一个变量,则类似于:
var number1 = 1
var number2 = 2
let sum = number1 + number2
number1 = number1 + 1
如果我没记错的话,最后一行应该反过来将sum的值增加一。但据我所知,在Java中没有办法做到这一点。有人知道吗? (最底线是,我能否流畅地创建一个值,该值取决于其他变量?
如果我的问题有什么问题,请告诉我,
谢谢
答案 0 :(得分:1)
Java和Swift都无法像这样工作。 Java中的int
和Swift中的Int
不会跟踪过去其他哪些值“贡献”了它们的值。
答案 1 :(得分:0)
如果我没记错的话,最后一行应该反过来将sum的值增加一。
您实际上记错了。
在Swift中,之后更新let sum = a + b
的组件之一不会更改sum
。执行从上到下进行。
所有let
所做的都是声明一个“常量”,即var
,您将无法再对其进行更改。就像Java中的final int
。
也许您希望sum
是一个函数/闭包?然后,只要您调用它,它就会产生“当前”值。
答案 2 :(得分:0)
正如其他人所说,这在Java和Swift中都是不可能的。
根据您的评论,我想到了一个简单的例子:
import java.util.function.Supplier;
public class Variable<T extends Number> {
private Supplier<T> value;
public Variable(final T value) {
this.value = () -> value;
}
public Variable(final Supplier<T> expression) {
this.value = expression;
}
public T value() {
return this.value.get();
}
public void update(T value) {
this.value = () -> value;
}
public void update(final Supplier<T> expression) {
this.value = expression;
}
}
这是您的用法:
Variable<Integer> a = new Variable<>(10);
Variable<Integer> b = new Variable<>(20);
Variable<Integer> c = new Variable<>(() -> Integer.sum(a.value(), b.value()));
System.out.println(c.value()); // 30
b.update(10);
System.out.println(c.value()); // 20
b.update(() -> Integer.sum(a.value(), 100));
System.out.println(b.value()); // 110
System.out.println(c.value()); // 120
当然,这甚至与您的示例不符,但它使用包装器类显示了概念证明。
请注意,如果您具有递归定义,例如StackOverflowError
,则此实现可能会抛出b.update(() -> Integer.sum(a.value(), c.value()));
。
如前所述,您是Java的新手,您可以阅读有关lambda表达式here的更多信息。您可能还想阅读有关lazy evaluation的信息。
答案 3 :(得分:0)
要完成其他人所说的话,要重现上述Swift代码的真实语义行为,请编写。
a <-window(x,end=2018)
fc.a <- rwf(a, drift = TRUE, h = 5)
autoplot(x) +
autolayer(fc.a, PI=FALSE)
要获得与您的想象行为相近的东西,可以这样写:
int number1 = 1;
int number2 = 2;
final int sum = number1 + number2;
number1 = number1 + 1;
...但是您必须使用int number1 = 1;
int number2 = 2;
java.util.function.IntSupplier sum = () -> number1 + number2;
number1 = number1 + 1;
作为sum
来获取当前值。并且当sum.getAsInt()
或number1
是局部变量时,它们必须在实例化lambda的点上有效地终止。