绑定变量的范围是什么?为什么我不能从 where 子句中访问它?例如,在此示例中:
someFunc x y = do
let a = x + 10
b <- someAction y
return subFunc
where
subFunc = (a * 2) + (b * 3)
在这里,subFunc 可以看到 a 而不是 b。为什么我不能在 where 子句中使用绑定变量?谢谢你。
绑定变量的范围是什么?为什么我不能从 where 子句中访问它?例如,在此示例中:
someFunc x y = do
let a = x + 10
b <- someAction y
return subFunc
where
subFunc = (a * 2) + (b * 3)
在这里,subFunc 可以看到 a 而不是 b。为什么我不能在 where 子句中使用绑定变量?谢谢你。
因为它可能导致不一致。想象一下这段代码:
printName = do
print fullName
firstName <- getLine
lastName <- getLine
return ()
where
fullName = firstName ++ " " + lastName
该代码不起作用,并且由于这些情况,绑定变量的使用仅限于do
实际绑定之后的块部分。对上述代码进行脱糖处理时,这一点变得清晰:
printName =
print fullName >>
getLine >>= (\ firstName ->
getLine >>= (\ lastName ->
return ()
)
)
where
fullName = firstName ++ " " ++ lastName
在这里,可以看到变量firstName
和lastName
不在子句的范围内where
,并且它们不能在该子句的任何定义中使用。