私は数字のパリティチェックするために、このモジュールを持っている:エリクサーの標準入力に書き込む方法は?
defmodule Parity do
def start() do
continue()
end
defp continue() do
get_number()
|> parse()
|> even?()
|> print_output()
continue()
end
defp get_number() do
IO.gets("Type a number: ")
end
defp parse(input) do
String.trim(input)
|> Integer.parse
end
defp even?({ number, _ }) do
Integer.mod(number, 2) == 0
end
defp print_output(_is_even = true) do
IO.puts("This number is even!")
end
defp print_output(_is_odd) do
IO.puts("This number is odd!")
end
end
をそして、それは次のように動作します。
$ mix run -e Parity.start
Type a number: 4
This number is even!
Type a number: 3
This number is odd!
Type a number: 68
This number is even!
Type a number: 1
This number is odd!
Type a number: ...
今私は書き込み番号にできるようになる他のモジュールを、持っていたいですParity
モジュールの標準入力。ですから、Parity.start()
を実行してからIO.gets()
に番号を渡す必要があります。 私はこのような何か試してみました:
defmodule Bot do
def start() do
Parity.start()
provide_number()
end
defp provide_number() do
random_number()
|> IO.puts
provide_number()
end
defp random_number() do
Enum.random(0..100)
end
end
をそして、それは動作しません。
モジュールはParity
モジュールのみ起動しますが、provide_number()
機能からの入力はありません。
を単一のスレッド。 'Bot.start/0'を呼び出すと' Parity.start/0'が呼び出され、最終的に 'IO.gets/2'が呼び出されます。あなたのプログラムは、座って入力を待っているので、実際に数字を生成している部分にコード実行を継続することはできません。 –
あなたは何をしたいでしょうか?テスト目的ですか? –
@RyanBigg人間の入力を別のモジュールでシミュレートしたいだけです。 – Walerian