Dav*_*ers 1 int boolean elixir stringtokenizer
我有一个Elixir功能,例如:
def linear(m,c,min,max,_) when someCondition do something end
我有一个字符串列表: ["3", "4", "-2", "20", "false"]
如何将此列表转换为以下内容[3,4,-2,20,false]:
desiredFormat |> linear() 或类似的.  
使用String.to_atom(head)将工作"false"和使用:
String.to_integer(head) 将适用于整数的字符串,但我找不到像这样的'混合'列表的解决方案.
我希望这是有道理的.谢谢
您不能"派生"类型来转换列表中的每个元素,因为它们都只是字符串.既然事先看起来你知道列表的大小和顺序,你可以简单地用这样的东西做一些工作:
def parse_list([m, c, min, max, bool]) do
  [String.to_integer(m),
   String.to_integer(c),
   String.to_integer(min),
   String.to_integer(max),
   String.to_existing_atom(bool)]
end
parse_list(["3", "4", "-2", "20", "false"])
#=> [3, 4, -2, 20, false]
现在,如果要直接使用这些参数linear/5,可以使用apply/2:
apply(&linear/5, parse_list(my_list))
顺便提一下,这就是:存在另一种解决方案,它是解析字符串中的每个元素以推断其类型.如果列表总是只包含整数和布尔值,那么编写超简单解析器很简单:
def parse_elem("true"),  do: true
def parse_elem("false"), do: false
def parse_elem(int),     do: String.to_integer(int)
apply(&linear/5, Enum.map(my_list, &parse_elem/1)
如果您需要在列表中包含其他类型(例如浮点数),则复杂性会增加.