【问题标题】:How to prevent numbers returned as chars?如何防止数字返回为字符?
【发布时间】:2016-06-13 20:14:06
【问题描述】:

我正在研究 Programming Elixir (PragProg) 中的示例问题。问题是编写一个将数字from 返回到to 的函数。我的解决方案如下。但是,有时它们会返回字符(相当于它们的 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)

【问题讨论】:

  • &gt; MyList.span(65, 68) == [65, 66, 67, 68] #=&gt; true,这就是控制台使用charcodes 解释列表的方式。 stackoverflow.com/questions/32804904/…
  • 当然有模式匹配但我想打印数字(想象一个非技术用户使用它,他们会提出一个缺陷......哈哈)
  • 然后IO.inspect [65, 66, 67, 68], char_lists: :as_lists

标签: elixir


【解决方案1】:

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

如果它的打印,那么你可以做这样的事情

IO.inspect [65, 66, 67, 68], char_lists: false#[65, 66, 67, 68]

有关原因的详细说明,请转到此帖子-https://stackoverflow.com/a/30039460/3480449

要在你的模块中添加这个,它会打印结果,你需要额外的方法,并使其他方法私有

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

【讨论】:

  • 我怎样才能在我的函数中加入这个?
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多