【发布时间】:2020-05-15 13:26:59
【问题描述】:
我尝试在 elixir 中实现 FizzBuzz。我认为它有效,但我有一些奇怪的行为,这可能是我的环境。我可以使用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