我想将命令行中的主机名和端口传递给gen_tcp.connect。
defmodule MyComm.Application do
use Application
def main(args \\ []) do
{options, _, _} = parse_args(args)
connect(options[:host], options[:port])
# connect('localhost', options[:port])
end
def connect(host, port) do
opts = [:binary, active: false]
{:ok, socket} = :gen_tcp.connect(host, port, opts)
:gen_tcp.send(socket, "123\r\n")
end
def parse_args(args \\ []) do
OptionParser.parse(args, switches: [host: :string, port: :integer])
end
end
运行上面的示例会导致:badarg错误:
**(退出):badarg(内核)gen_tcp.erl:149 :: gen_tcp.connect / 4(mycomm)lib / application.ex:14:MyComm.Application.connect / 2(elixir)lib / kernel / cli.ex :76:Kernel.CLI.exec_fun / 2中的匿名fn / 3
但是,通过硬编码'localhost'一切正常。我在这里错过了什么?
您可能需要将host的字符串参数转换为charlist。 :gen_tcp.connect/4
需要一个erlang字符串(Elixir char list)作为它的第一个参数。