Elixir 如何防止以字符形式返回数字?

Elixir 如何防止以字符形式返回数字?,elixir,Elixir,我正在处理来自ProgrammingElixir(PragProg)的示例问题。问题是编写一个函数,将数字从返回到到。我的解决方案如下。但是,有时它们返回字符(相当于ascii)。我怎样才能避免这种情况,并且只返回数字 defmodule MyList do def span(), do: [] def span(from), do: [from] def span(from, to) when from == to, do: [from] def span(from, to)

我正在处理来自ProgrammingElixir(PragProg)的示例问题。问题是编写一个函数,将数字
返回到
。我的解决方案如下。但是,有时它们返回字符(相当于ascii)。我怎样才能避免这种情况,并且只返回数字

defmodule MyList do
  def span(), do: []
  def span(from), do: [from]
  def span(from, to) when from == to, do: [from]
  def span(from, to) when from > to, do: [from] ++ span(from - 1, to)
  def span(from, to) when from < to, do: [from] ++ span(from + 1, to)
end

MyList.span(31,34) #=> [31,32,33,34]
MyList.span(-5,-8) #=> [-5,-6,-7,-8]
MyList.span(65,68) #=> 'ABCD'  (I need a list with numbers 65 to 68)
defmodule MyList do
def span(),do:[]
def span(从),do:[从]
当from==to,do:[from]时,定义范围(from,to)
def span(from,to)当from>to时,do:[from]++span(from-1,to)
定义范围(从,到)当从<到,执行:[从]++span(从+1到)
结束
MyList.span(31,34)#=>[31,32,33,34]
MyList.span(-5,-8)#=>[-5,-6,-7,-8]
MyList.span(65,68)#=>“ABCD”(我需要一个包含数字65到68的列表)

您无法阻止,因为Elixir和Erlang没有用户定义的类型,因此无法区分列表和单引号字符串,因为它们都只是列表。你真的不应该有太大的问题

如果是打印的话,你可以这样做

IO.inspect [65, 66, 67, 68], char_lists: false#[65, 66, 67, 68]
有关原因的详细解释,请访问此帖子-

要将此添加到打印结果的模块中,您需要其他方法,并将其他方法设置为私有

defmodule MyList do
  def span(), do: IO.inspect [], char_lists: false
  def span(from), do: IO.inspect [from], char_lists: false 
  def span(from, to), do: IO.inspect span_h(from, to), char_lists: false

  defp span_h(from, to) when from == to, do: [from]
  defp span_h(from, to) when from > to, do: [from] ++ span(from - 1, to)
  defp span_h(from, to) when from < to, do: [from] ++ span(from + 1, to)
end
defmodule MyList do
def span(),do:IO.inspect[],字符列表:false
定义范围(从),do:IO.inspect[from],字符列表:false
def span(从,到),do:IO。检查span_h(从,到),字符列表:false
当from==to,do:[from]时的defp span_h(from,to)
当from>to,do:[from]++span(from-1,to)时,解除span_h(from,to)
当from
您无法阻止,因为Elixir和Erlang没有用户定义的类型,因此无法区分列表和单引号字符串,因为它们都只是列表。你真的不应该有太大的问题

如果是打印的话,你可以这样做

IO.inspect [65, 66, 67, 68], char_lists: false#[65, 66, 67, 68]
有关原因的详细解释,请访问此帖子-

要将此添加到打印结果的模块中,您需要其他方法,并将其他方法设置为私有

defmodule MyList do
  def span(), do: IO.inspect [], char_lists: false
  def span(from), do: IO.inspect [from], char_lists: false 
  def span(from, to), do: IO.inspect span_h(from, to), char_lists: false

  defp span_h(from, to) when from == to, do: [from]
  defp span_h(from, to) when from > to, do: [from] ++ span(from - 1, to)
  defp span_h(from, to) when from < to, do: [from] ++ span(from + 1, to)
end
defmodule MyList do
def span(),do:IO.inspect[],字符列表:false
定义范围(从),do:IO.inspect[from],字符列表:false
def span(从,到),do:IO。检查span_h(从,到),字符列表:false
当from==to,do:[from]时的defp span_h(from,to)
当from>to,do:[from]++span(from-1,to)时,解除span_h(from,to)
当from
>MyList.span(65,68)=[65,66,67,68]#=>true
,这就是console使用
字符编码解释列表的方式。当然有一个模式匹配,但我想打印数字(想象一个非技术用户使用它,他们会提出一个缺陷…lol),然后
IO.inspect[65,66,67,68],char\u list::as\u list
MyList.span(65,68)=[65,66,67,68]#=>true
,这就是console使用
charcodes
解释列表的方式。当然有一个模式匹配,但我想打印数字(想象一个非技术用户使用它,他们会提出一个缺陷…lol),然后
IO.inspect[65,66,67,68],char\u list::as\u list
我如何将它合并到我的函数中?我如何将它合并到我的函数中?