[align=center][size=x-large][color=darkblue]Reading and 'Riting[/color][/size][/align]
Ruby有一个复杂的I/O库。我们只介绍一些简单的。
puts打印它的每个参数,并在每个后加上换行。
print打印它的每个参数,但没有换行。
它们都可以写入任何I/O对象,缺省写到控制台。
其他常用的是printf,用法和C的是一样的:
结果:
Number: 1.23, String: hello
有很多方法获得程序的输入。最传统的做法是使用gets方法,它获得程序标准输入流的一行。
gets方法有个特别的效果:当返回一个新的输入行的同时,它也将结果存入一个全局变量$_。此变量非常特殊,它是很多方法的缺省参数。如果我们调用print方法时不提供参数,那么print会打印$_。如果我们在if或while语句是使用正则表达式作为参数,那么表达式会与$_进行匹配操作。看下面的例子:
看看“Ruby Way”方式重写上面的代码:
这里使用了一个预定义的对象ARGF,此对象代表了程序能获得的输入流(input stream)。
Ruby有一个复杂的I/O库。我们只介绍一些简单的。
puts打印它的每个参数,并在每个后加上换行。
print打印它的每个参数,但没有换行。
它们都可以写入任何I/O对象,缺省写到控制台。
其他常用的是printf,用法和C的是一样的:
printf "Number: %5.2f, String: %s", 1.23, "hello"
结果:
Number: 1.23, String: hello
有很多方法获得程序的输入。最传统的做法是使用gets方法,它获得程序标准输入流的一行。
line = gets
print line
gets方法有个特别的效果:当返回一个新的输入行的同时,它也将结果存入一个全局变量$_。此变量非常特殊,它是很多方法的缺省参数。如果我们调用print方法时不提供参数,那么print会打印$_。如果我们在if或while语句是使用正则表达式作为参数,那么表达式会与$_进行匹配操作。看下面的例子:
while gets # assigns line to $_
if /Ruby/ # matches against $_
print # prints $_
end
end
看看“Ruby Way”方式重写上面的代码:
ARGF.each { |line| print line if line =~ /Ruby/ }
这里使用了一个预定义的对象ARGF,此对象代表了程序能获得的输入流(input stream)。