Elixir 函数未返回预期结果

问题描述 投票:0回答:1

这是我的代码,如果它是 3 或 5 的乘积,则应将 0 和“number”之间的所有数字相加,但始终返回 0

defmodule Challenge do
  def solution(number) do 
    result = 0
    for i <- 0..number-1 do
      if rem(i, 5) == 0 || rem(i, 3) == 0 do
        result = result + i
      end
    end
    result
  end
end

这是测试:

defmodule TestSolution do
  use ExUnit.Case
  import Challenge, only: [solution: 1]

  def test_solution(n, expected) do
    assert solution(n) == expected
  end
  
  test "basic tests" do
    test_solution 10, 23
  end
end
elixir
1个回答
0
投票

在 Elixir 中,变量是不可变的,因此您无法像示例中那样真正更改结果变量,它保留在

for do
代码块内。您的示例在 OOPS 语言中可以正常工作,但 Elixir 功能正常,您需要稍微改变一下方法。 Elixir 提供了一个 Enum 模块来以更有效的方式迭代列表,并且您的解决方案可以轻松地用 Enum 模块替换。

 defmodule Challenge do
  def solution(number) do 
    0..number-1
    |> Enum.filter(fn x -> rem(x, 5) == 0 || rem(x, 3) == 0 end)
    |> Enum.sum()
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.