【问题标题】:in Elixir: string formatting在 Elixir 中:字符串格式化
【发布时间】:2018-07-27 21:43:06
【问题描述】:

我有一个变换规则:

"0549$2"

如何将此规则应用于 Elixir 中的字符串? 在红宝石中我使用:

format("0549%2$s", *["88", "77"])
=> "054977"

我在 Elixir 中写道:

:io.format("0549%2$s", ["88", "77"])
** (ArgumentError) argument error
    (stdlib) :io.format(#PID<0.54.0>, "0549%2$s", ["88", "77"])

因为 erlang 的 :io.format 不理解这种格式

【问题讨论】:

    标签: format erlang elixir


    【解决方案1】:

    所以你想用列表的相应元素(从 1 开始索引)替换所有 $ 后跟一个整数?这是使用Regex.replace/3的一种方式:

    defmodule A do
      def format(string, list) do
        Regex.replace(~r/\$(\d+)/, string, fn _, index ->
          Enum.at(list, String.to_integer(index) - 1)
        end)
      end
    end
    
    IO.inspect A.format("0549$2", ["88", "77"])
    IO.inspect A.format("0549$1", ["88", "77"])
    

    输出:

    "054977"
    "054988"
    

    【讨论】:

      【解决方案2】:

      您可以使用:io_lib.format/2。它生成字符列表,之后可以转换为二进制:

      "0549~i~s"
      |> :io_lib.format(~w[77 88])
      |> to_string()
      #⇒ "054988"
      
      • ~i 留下“忽略下一个任期”
      • ~s 将参数视为二进制

      旁注:io.format输出格式化字符串到IO设备,返回:ok

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多