0

erlang シェルで io:getline("prompt") を使用すると、関数は "\n" の戻り値ですぐに戻ります。

io:get_line("prompt"). 
prompt
"\n"

ただし、別のスレッドで提案されているように、次の読み取りを standard_io から正しく実行します。

spawn(fun() -> timer:sleep(100),io:get_line("prompt") end). 

ユーザー入力を待機し、標準 io (シェル) から読み取ります。競合状態であることが言及されました。なぜそうなのか、どうすればerlangシェルから値を読み取ることができるのか教えてもらえますか?

4

2 に答える 2

0

分解してみましょう...

io:get_line/1を返すのはなぜ\nですか?

io:get_line/1は「行」を返し、\n(「行末」または「改行」) は、入力した文字列と一緒に行を構成します。

> io:get_line("Prompt:").
Prompt:TheStringIEntered
"TheStringIEntered\n"

Erlang シェルから値を読み取る方法は?

> Data = string:strip(io:get_line("Prompt:"), right, $\n).
Prompt:TheStringIEntered
"TheStringIEntered"
> Data.
"TheStringIEntered"

ここでの値 (データ) は常に文字列型であることに注意してください。他の型に変換できますが、常に文字列から始めます。

spawn(fun() -> timer:sleep(100),io:get_line("prompt") end).の動作が異なるのはなぜですか?

spawnシェルを一時的に引き継ぐ新しいプロセスを生成するためです。このプロセスがTheStringIEnteredになると、寿命も尽きます。そのため、戻り値 ( TheStringIEntered) をシェルに出力せずに終了します。

于 2013-09-02T12:31:09.747 に答える