gpt4 book ai didi

elm - 为什么 Debug.log 在 Elm 中以相反的顺序打印出来?

转载 作者:行者123 更新时间:2023-12-03 23:11:44 25 4
gpt4 key购买 nike

考虑这个程序:

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 =
let
one = Debug.log "one" 1
two = Debug.log "two" 2
three = Debug.log "three" 3
in
show "Hello"

实际上被编译为

var main = function () {
var three = A2($Debug.log,
"three",
3);
var two = A2($Debug.log,
"two",
2);
var one = A2($Debug.log,
"one",
1);
return $Graphics$Element.show("Hello");
}();

请注意订单似乎是如何翻转的。如果我们在 let 绑定(bind)中引入另一个依赖于其他东西的值,则会发生以下情况:

 main =
let
one = Debug.log "one" 1
two = Debug.log "two" 2
three = Debug.log "three" 3
four = Debug.log "four" three + one
in
show "Hello"

变成

var main = function () {
var three = A2($Debug.log,
"three",
3);
var two = A2($Debug.log,
"two",
2);
var one = A2($Debug.log,
"one",
1);
var four = A2($Debug.log,
"four",
three) + one;
return $Graphics$Element.show("Hello");
}();

因此,它的长处和短处是不依赖于同一范围内的另一个值的值自下而上处理。当一个值依赖于同一作用域内的另一个值时,单独处理,放在最底层。

这是一个实现细节。

关于elm - 为什么 Debug.log 在 Elm 中以相反的顺序打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com