我想将命令行中的主机名和端口传递给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'一切正常。 我在这里缺少什么?
答案 0 :(得分:1)
您可能需要将host的字符串参数转换为charlist。 public class Model {
private int id;
private String name;
public Model() {}
public Model(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
需要一个erlang字符串(Elixir char list)作为它的第一个参数。