実行時:
def guess(a..b) do
IO.puts "In rn = #{a}..#{b}"
guess(a..b, IO.getn("Is it greater than #{div(a + b, 2)} ? : ", 1) |> String.upcase == "Y")
end
def guess(a..b, true) do
guess(div(a + b, 2)..b)
end
def guess(a..b, false) do
guess(a..div(a + b, 2))
end
結果:
iex(1)> Test.guess(1..10)
1 In rn = 1..10
2 Is it greater than 5 ? : y
3 In rn = 5..10
4 Is it greater than 7 ? :
5 In rn = 5..7
6 Is it greater than 6 ? : n
7 In rn = 5..6
8 Is it greater than 5 ? :
9 In rn = 5..5
10 Is it greater than 5 ? : y
11 In rn = 5..5
12 Is it greater than 5 ? :
13 In rn = 5..5
14 Is it greater than 5 ? :
iex は 4 行目、8 行目、12 行目でユーザー入力を待機しませんでした。入力を受け取った後、ループを 2 回実行しているように見えます。
それはなぜでしょうか?
解決済み:
どうやら、このように使用すると IO.getn で奇妙なことが起こります。おそらく、「Y」をバイトとして読み取り、「enter」を別のバイトとして読み取ります。IO.gets を置き換えて文字数をカウントしないと、問題が解決するようです。または、getn メソッド呼び出しを分離することで、この問題が発生しないようにすることができます。