Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
为什么Debug.log在Elm中按相反顺序打印?_Elm - Fatal编程技术网

为什么Debug.log在Elm中按相反顺序打印?

为什么Debug.log在Elm中按相反顺序打印?,elm,Elm,考虑一下这个计划: import Graphics.Element exposing (..) import Debug main : Element main = let one = Debug.log "one" 1 two = Debug.log "two" 2 three = Debug.log "three" 3 in show "Hello" 它将以下内容打印到浏览器控制台: three: 3 two: 2 one: 1 为什么顺序颠倒

考虑一下这个计划:

import Graphics.Element exposing (..)
import Debug


main : Element
main =
  let
    one = Debug.log "one" 1
    two = Debug.log "two" 2
    three = Debug.log "three" 3
  in
    show "Hello"
它将以下内容打印到浏览器控制台:

three: 3
two: 2
one: 1
为什么顺序颠倒了?

main=
让
一个=Debug.log“一个”1
two=Debug.log“two”2
三=Debug.log“三”3
在里面
显示“你好”
实际上被编译成

var main=函数(){
var三=A2($Debug.log,
“三”,
3);
var two=A2($Debug.log,
“两个”,
2);
var one=A2($Debug.log,
“一个”,
1);
返回$Graphics$Element.show(“Hello”);
}();
请注意订单似乎是如何翻转的。如果我们在let绑定中引入另一个依赖于其他内容的值,则会发生以下情况:

main=
让
一个=Debug.log“一个”1
two=Debug.log“two”2
三=Debug.log“三”3
四=Debug.log“四”三+一
在里面
显示“你好”
变成

var main=函数(){
var三=A2($Debug.log,
“三”,
3);
var two=A2($Debug.log,
“两个”,
2);
var one=A2($Debug.log,
“一个”,
1);
var-four=A2($Debug.log,
“四”,
三)+一;
返回$Graphics$Element.show(“Hello”);
}();
因此,它的长短不一之处在于,不依赖于同一范围内另一个值的值是自下而上处理的。当一个值依赖于同一范围内的另一个值时,它将被单独处理并放在底部


这是一个实现细节。

这是对“为什么会发生这种情况”的极好回答。回答“我为什么要在乎”:不要。这是一个不纯的函数;let子句不是指令列表,而是一组声明,编译器可以自由决定它们的“执行顺序”。一般来说,在功能性编程时,通常不必考虑执行顺序,只需考虑概念和数据之间的关系。