if块中的变量不能在Haskell中的块之外使用,是什么原因导致的?

时间:2012-02-06 11:40:21

标签: variables haskell scope

有没有办法解决它,以便我也可以在外面使用它们? 提前致谢。 我有这样的事情:

if(x==1)
   then
       someList<-aFunction (1,2)
   else
       someList<-aFunction (3,4)


steps involving someList here

2 个答案:

答案 0 :(得分:8)

在这种特殊情况下,

someList <- aFunction (if x == 1 then (1,2) else (3,4))

会解决它。请记住,if ... then ... else ...是Haskell中的表达式。

答案 1 :(得分:4)

你在Haskell中误解了变量:一旦定义它们,它们永远不会改变它们的值,所以如果你希望在一个分支内做一个赋值,那就行不通了。但是,可能有以下帮助:

 let x = if (cond) then .. else .. in f x

小心不要在if-then-else中阅读x除非你知道你在做什么:-)另一个提示:如果你在这个结构中使用另一个let x = ..,它将“阴影“外部x,所以它实际上是一个不同的新变量。