You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir中如何通过管道操作符避免条件分支的代码重复?

消除Elixir函数中的重复逻辑

你提供的smallestNumber函数里,两个case分支重复执行了String.to_integer(Enum.join(...))的逻辑,要把公共逻辑抽到分支外,得调整管道的使用方式——Elixir的|>是将前一步结果作为后一步函数的第一个参数传入,所以正确的写法应该是先对分支返回的列表做拼接,再转成整数:

原代码

def smallestNumber(list) do
  [head | tail] = Enum.sort(list)
  case head === 0 do
    true ->
      [tempHead | tempTail] = tail
      String.to_integer(Enum.join([tempHead | [head | tempTail]], ""))
    false -> String.to_integer(Enum.join([head | tail], ""))
  end
end

修正后的代码

def smallestNumber(list) do
  [head | tail] = Enum.sort(list)

  case head === 0 do
    true ->
      [tempHead | tempTail] = tail
      [tempHead | [head | tempTail]]
    false ->
      [head | tail]
  end
  |> Enum.join("")
  |> String.to_integer()
end

说明

  1. 让case分支只返回处理好的数字列表:如果首元素是0,就把第一个非0元素移到最前面,后面跟0和剩余元素;否则直接返回排序后的列表。
  2. 用|>把列表传给Enum.join(""),将列表拼接成字符串。
  3. 再把拼接好的字符串传给String.to_integer(),转成整数。

这样就把重复的Enum.join和String.to_integer逻辑完全抽离到分支外,代码更简洁,也符合Elixir的管道使用习惯。

内容的提问来源于stack exchange,提问作者IOEnthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:25:34