【问题标题】:Elixir script does not completeElixir 脚本未完成
【发布时间】:2020-05-15 13:26:59
【问题描述】:

我尝试在 elixir 中实现 FizzBu​​zz。我认为它有效,但我有一些奇怪的行为,这可能是我的环境。我可以使用elixir fizzbuzz.exs 运行以下.exs 文件,并且在第一次运行时它会按您的预期运行。即使在第二次运行时,它也会按您的预期工作。但是,如果我等待 7 或 8 秒并再次运行它,它会在 13 或 14 处停止。它甚至可能会达到 50。我所经历的情况确实不太一致。我在第一次运行时复制了它,在两次运行之间等待两秒钟后我已经复制了它。我什至已经走了几分钟,根本无法重现它。请帮帮我...

IO.puts "Hello world from Elixir"

defmodule Fizzbuzz do
  def run(max) do
    run(1, max)
  end

  def run(n, max) do
    if rem(n, 3) == 0 do
      IO.puts "FIZZ"
    end

    if rem(n, 5) == 0 do
      IO.puts "BUZZ"
    end

    if rem(n, 3) != 0 && rem(n, 5) != 0 do
      IO.puts n
    end

    if n < max do
      run(n + 1, max)
    end
  end
end

Fizzbuzz.run(100)

#: Elixir -v
Erlang/OTP 21 [erts-10.2] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1]

Elixir 1.9.4 (compiled with Erlang/OTP 20)

【问题讨论】:

  • 我无法重现奇怪的行为。正如您所说:必须是您环境中的特定内容。
  • 我希望得到一些关于如何调试我的环境的指导
  • 您能否在 VSCode 之外的常规终端中重现该问题?
  • 是的,我可以在命令提示符、powershell 和 git bash 的 vscode 内部或外部重现它
  • 很奇怪。我猜该程序正在生成输出,但是在程序结束之前,这些行并没有被刷新到终端。您可以尝试在Fizzbuzz.run 之后添加:timer.sleep(1000),看看是否发生了类似的情况。

标签: erlang elixir erlang-otp


【解决方案1】:

首先,尝试更新到当前最新版本的 Elixir,1.13

尝试使用mix run &lt;filename&gt; 运行您的文件,因此在您的情况下:

mix run fizzbuzz.exs

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多