榆树:部分功能应用和让

时间:2018-01-03 05:54:46

标签: elm let

Beginning Elm - Let Expression页面建立在上一页的基础上,但它没有涵盖如何更新主函数,用正向函数表示法编写,它是:

main =
    time 2 3
        |> speed 7.67
        |> escapeEarth 11
        |> Html.text

包含新的fuelStatus参数。

编译器抱怨类型不匹配,这是正确的,因为escapeEarth现在有第三个参数,这是一个字符串。

如该网站所述"转发函数应用程序运算符从前一个表达式获取结果,并将其作为最后一个参数传递给下一个函数应用程序。"

换句话说,我该怎么写:

Html.text (escapeEarth 11 (speed 7.67 (time 2 3)) "low")

使用正向表示法?

另外,为什么不打印#34;登陆无人机"以及"留在轨道"?它只打印"留在轨道":

module Playground exposing (..)

import Html


escapeEarth velocity speed fuelStatus =
    let
        escapeVelocityInKmPerSec =
            11.186

        orbitalSpeedInKmPerSec =
            7.67

        whereToLand fuelStatus =
            if fuelStatus == "low" then
                "Land on droneship"
            else
                "Land on launchpad"
    in
    if velocity > escapeVelocityInKmPerSec then
        "Godspeed"
    else if speed == orbitalSpeedInKmPerSec then
        "Stay in orbit"
    else
        "Come back"


speed distance time =
    distance / time


time startTime endTime =
    endTime - startTime


main =
    Html.text (escapeEarth 11 (speed 7.67 (time 2 3)) "low")

1 个答案:

答案 0 :(得分:4)

我认为你需要的是

main =
    time 2 3
        |> speed 7.67
        |> \spd -> escapeEarth 11 spd "low"
        |> Html.text

换句话说,您定义了一个小的匿名函数来正确插入值。您可能想要查看是否应使用不同的顺序定义escapeEarth函数。

如果你喜欢“免费点”,那么另一种选择就是

main =
    time 2 3
        |> speed 7.67
        |> flip (escapeEarth 11) "low"
        |> Html.text

有些人认为这不太清楚,但

关于你的第二个问题,你已经在let语句中定义了函数但从未实际使用它