PureScript - 使用命令行将参数传递给 main

PureScript - Pass arguments to main using the command line

PureScript 程序导出一个 main 函数,当您 运行 程序时会调用该函数。但是不清楚如何向它传递参数,或者是否可能。

考虑下面的简单程序,该程序将字符串大写。

module Main where

import Effect (Effect)
import Effect.Console (log)
import Prelude (Unit, discard)

import Data.String (toUpper)

message :: String 
message = "Satisfaction Rating: 8.23"

main ∷ Effect Unit
main = do
  log ( toUpper ( message ) )

输出

SATISFACTION RATING: 8.23

调用spago run时执行此程序。

我的问题如下: 如何通过命令行传入代码示例中的参数 message,创建自定义消息大写字母?

更新后的 运行 命令类似于:

spago run --message="new_message"

更新后的输出看起来像

NEW_MESSAGE

简而言之,如何从外部向 PureScript 程序传递值?

当您使用 spago run 执行 PureScript 程序时,它会在 Node.js 下运行。因此,要获得 command-line 个参数,您需要作为 Node.

然后看:有一个用于相关 Node 工具的 PureScript 绑定 - the argv function 来自 purescript-node-process。这是一个 returns 参数数组的效果:

import Node.Process (argv)

main = do
  args <- argv
  log $ show args

快速检查 spago run --help 表明可以通过 -b 参数将参数传递给程序:

spago run -b somearg

对于多个参数,引用它们:

spago run -b "somearg anotherarg"

请注意,这适用于 Linux(并且可能是 macOS),但在 Windows 上失败,其中 Spago 出于某种原因忽略引号并尝试将 anotherarg 解释为它自己的引号争论。这显然是一个错误。 This issue 似乎相关。