我讨厌问这样的菜鸟问题,但我在网上搜寻过很多高低低的东西——这实际上是我的第一天。
以下 VBA 摘录分配两个变量,其中第一个变量传入第二个变量(此代码来自 www.spreadsheetadvice.com):
If zabs <= 12.7 Then
...
If zabs <= 1.28 Then
Temp = y + a3 - a4 / (y + a5 + a6 / (y + a7))
Q = a0 - zabs * (a1 - a2 * y / Temp)
Else
Temp = (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
Q = pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
End If
Else ...
我正在尝试在 F# 中复制它——不使用可变变量。这有效:
let Temp =
if zabs <= 1.28 then
y + a3 - a4 / (y + a5 + a6 / (y + a7))
elif zabs <= 12.7 then
(zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
else
0.0
let Q =
if zabs <= 1.28 then
a0 - zabs * (a1 - a2 * y / Temp)
elif zabs <= 12.7 then
pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
else
0.0
但我不喜欢分离两个相关的变量——或者重复 If 语句。这不起作用,但已经很接近了:
let Temp, Q =
if zabs <= 1.28 then
y + a3 - a4 / (y + a5 + a6 / (y + a7)),
a0 - zabs * (a1 - a2 * y / Temp)
elif zabs <= 12.7 then
(zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11)))),
pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / Temp)))
else
0.0,
0.0
我花了一段时间才弄清楚第 3、6、9 行的逗号(如果它们实际上是正确的)。但编译器认为我试图在分配 Temp 之前使用它。我想,或者希望,我只是错过了一个简单的习语。
最佳答案
这有效:
let Temp, Q =
if zabs <= 1.28 then
let temp = y + a3 - a4 / (y + a5 + a6 / (y + a7))
let q = a0 - zabs * (a1 - a2 * y / temp)
temp, q
elif zabs <= 12.7 then
let temp = (zabs - b5 + b6 / (zabs + b7 - b8 / (zabs + b9 + b10 / (zabs + b11))))
let q = pdF / (zabs - b1 + (b2 / (zabs + b3 + b4 / temp)))
temp, q
else
0.0, 0.0
关于F# 初学者在多个依赖名称上使用 let,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059656/