Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables if块内的变量不能在Haskell中的块外使用,这是什么原因造成的?_Variables_Haskell_Scope - Fatal编程技术网

Variables if块内的变量不能在Haskell中的块外使用,这是什么原因造成的?

Variables if块内的变量不能在Haskell中的块外使用,这是什么原因造成的?,variables,haskell,scope,Variables,Haskell,Scope,有没有办法修复它,这样我也可以在外面使用它们? 提前谢谢。 我有这样的想法: if(x==1) then someList<-aFunction (1,2) else someList<-aFunction (3,4) steps involving someList here if(x==1) 然后 someList您误解了Haskell中的变量:一旦定义了变量,它们就永远不会更改其值,因此如果您希望在分支内执行赋值,那是行不通的。但是

有没有办法修复它,这样我也可以在外面使用它们? 提前谢谢。 我有这样的想法:

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


steps involving someList here
if(x==1)
然后

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

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

注意不要阅读if-then-else中的
x
,除非你知道你在做什么:-)另一个提醒:如果你在这个结构中使用另一个
让x=..
,它将“遮蔽”外部
x
,因此它实际上是一个不同的新变量。

在这种特殊情况下

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

someList它是由作用域引起的,你能做什么取决于你的代码,我们能看看其中的一些吗?我写了代码,但看起来我别无选择,只能把所有东西都放在if块中,用于单独的x。Thanks@DanielFischerShiDoiSi的回答实际上解决了我的问题:-)这是一个范围问题,不是一个重新定义的问题。