I have a command line program that accepts two numbers as arguments, and I run it like this:
erl -noshell -s weight bmi 3 9
But I can't figure out how to process negative numbers. I've tried to pass them as strings, with -extra
etc. It seems that Erlang, according to the documentation, interprets everything that starts with a hyphen as a flag:
Any argument starting with character - (hyphen) is interpreted as a flag
So the question is: how to make Erlang consider, for example, -10
as a number, not a flag?
erl -noshell -s weight bmi -10 9
3条答案
按热度按时间gc0ot86w1#
但是我不知道如何处理负数(试图以字符串的形式传递,使用-extra等)。
下面是如何使用
-extra
标志的示例:在 shell 中:
在命令行:
在
--
后面加上负数before the first flag
或对我不起作用。如果您尝试以下代码,事情可能会更清楚:
在命令行:
init:get_plain_arguments()
返回一个参数列表。第一个参数是列表[45,57]
,可以用简写"-9"
创建;第二个参数是列表[97,98,99]
,它可以使用简写符号"abc"
创建。此外,使用list_to_integer()
可以将列表/字符串转换为整数。整数45
是连字符的ascii代码,整数57
是字符9的ascii代码。list_to_integer()
足够智能,可以处理负号。类似地,整数97,98,99
是字符a,b,c
的ascii代码。krugob8w2#
-s
标志用于非常简单的API调用,例如-s foo start
(调用foo:start()
),并可能传递单个参数作为模式标志或类似标志,如-s foo start test
(调用foo:start(test)
)。-s标志将所有参数转换为原子,所以它不适合传递整数。你可以使用-run
标志来做同样的事情,但是把参数作为字符串传递,例如-run foo start /tmp/
将调用foo:start("/tmp/")
,但是要传递整数或其他数据类型,您必须自己解析字符串。最简单、最灵活的方法是使用-eval
标志,如下所示:然后您可以执行任何Erlang表达式,系统将为您解析值。如果您要使用特殊字符,请确保在shell命令中使用单引号而不是双引号。
mccptt673#
您也可以使用不同的字符并将其转换为
-
,例如:并调用它: