处理输入和输出的函数由IO模块提供。
要把字符串写到标准输出,可以使用IO.puts。IO.puts总会在字符串末尾添加一个换行符。如果你不想要这种行为,可以改用IO.write。如果执行成功,这两个函数都会返回原子:ok。
IO.puts("Hi!")
# > Hi!
# => :ok
IO.puts适合写字符串,但除此之外用途不大。如果你需要一个能把任意值写到标准输出的调试工具,可以改用IO.inspect。IO.inspect会原样返回传给它的值,因此可以插入到代码中的任何位置。它还接受许多选项,例如:label,可以让你把它和其他IO.inspect调用区分开。
要从标准输入读取一行,可以使用IO.gets。IO.gets接受一个实参:一个字符串,它会把它作为输入提示打印出来。IO.gets不会在提示后添加换行符,如果需要,就自己加上。
IO.gets("What's your name?\n")
# > What's your name?
# < Mary
# => "Mary\n"
你和朋友们都很喜欢玩纸笔角色扮演游戏,但你发现很难有新玩家加入你们的队伍。他们常常卡在创建角色这一步,不知道从哪儿开始。为了帮新玩家一把,你决定写一个小程序,带他们走完整个过程。
实现RPG.CharacterSheet.welcome/0函数。它应该输出一条欢迎信息,并返回:ok。
RPG.CharacterSheet.welcome()
# > Welcome! Let's fill out your character sheet together.
# => :ok
实现RPG.CharacterSheet.ask_name/0函数。它应该输出一个问题,等待回答,并返回去掉首尾空白后的答案。
RPG.CharacterSheet.ask_name()
# > What is your character's name?
# < Mathilde
# => "Mathilde"
实现RPG.CharacterSheet.ask_class/0函数。它应该输出一个问题,等待回答,并返回去掉首尾空白后的答案。
RPG.CharacterSheet.ask_class()
# > What is your character's class?
# < healer
# => "healer"
实现RPG.CharacterSheet.ask_level/0函数。它应该输出一个问题,等待回答,并把答案以整数的形式返回。
RPG.CharacterSheet.ask_level()
# > What is your character's level?
# < 2
# => 2
实现RPG.CharacterSheet.run/0函数。它应该欢迎新玩家,询问角色的名字、职业和等级,并以映射的形式返回角色卡。它还应该以“Your character”为标签输出这个映射。
RPG.CharacterSheet.run()
# > Welcome! Let's fill out your character sheet together.
# > What is your character's name?
# < Mathilde
# > What is your character's class?
# < healer
# > What is your character's level?
# < 2
# > Your character: %{class: "healer", level: 2, name: "Mathilde"}
# => %{class: "healer", level: 2, name: "Mathilde"}