GOOGLE ADS

воскресенье, 1 мая 2022 г.

PureScript — передавать аргументы в main с помощью командной строки

Программы PureScript экспортируют основную функцию, которая вызывается при запуске программы. Но неясно, как передать ему аргументы и возможно ли это.

Рассмотрим следующую простую программу, которая пишет строку с заглавной буквы.

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 извне?


Решение проблемы

Когда вы запускаете программу PureScript с помощью spago run, она запускается под управлением Node. Следовательно, чтобы получить аргументы командной строки, вам нужно, как Node.

И посмотрите: есть привязка PureScript для соответствующих средств Node — функцияargv из purescript-node-process. Это эффект, который возвращает массив аргументов:

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как собственный аргумент. Это явно ошибка. Этот вопрос представляется актуальным.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...