package main
import "fmt"
func fib_seq() func() int {
n0, n1 := 0, 1
return func() int {
result := n0
n0, n1 = n1, n0 + n1
return result
}
}
func main() {
f := fib_seq()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
这是我的Fibonacci序列生成器。 result
的定义是不需要的(但必要的)。
我想知道在x, y = y, x + y
之后有办法执行return
吗?
答案 0 :(得分:3)
您可能需要查看defer
:
func fib_seq() func() int {
n0, n1 := 0, 1
return func() int {
defer func() {
n0, n1 = n1, n0 + n1
}()
return n0
}
}
答案 1 :(得分:2)
命名返回。但你拥有的东西已经足够可读了。
func fib_seq() func() int {
n0, n1 := 0, 1
return func() (r int) {
r, n0, n1 = n0, n1, n0 + n1
return
}
}
答案 2 :(得分:0)
就个人而言,我更喜欢以下(为了便于阅读):
type fib struct{ n0, n1 int }
func (f *fib) next() int {
defer func() {
f.n0, f.n1 = f.n1, f.n0+f.n1
}()
return f.n0
}
func main() {
fib := &fib{0, 1}
for i := 0; i < 10; i++ {
fmt.Println(fib.next())
}
}
答案 3 :(得分:0)
“优雅”对不同的人意味着不同的东西。对某些人来说,这可能意味着“简洁”,对其他人来说,这可能意味着“简单”或“可读性”。
以下是我的看法:
public class Fibonacci {
private static int x;
private static int y;
private static int z;
public static void main(String[] args) {
x = 0;
y = 1;
z = 0;
System.out.println(x);
System.out.println(y);
while (z < 100) {
z = x + y;
System.out.println(z);
x = y;
y = z;
}
}
}
正如你所看到的,我赞成可读性而不是复杂性:)