这很好用——只是想知道是否有任何改进可以缩短它?
if (ARGV[0].nil?) then
input=$<
else
input=File.new(ARGV[0],"r");
end
...
# Do something with the input here, for example:
input.each_line do |line|
puts line
end
您可以完全消除前五行。
从镐
$<:提供对作为命令行参数或 $stdin(在没有参数的情况下)给出的所有文件内容串联的访问的对象。$< 支持类似于 File 对象的方法:binmode, close, closed?, each, each_byte, each_line, eof, eof?, file, filename, fileno, getc, gets, lineno, lineno=, path, pos, pos=, read、readchar、readline、readlines、rewind、seek、skip、tell、to_a、to_i、to_io、to_s,以及 Enumerable 中的方法。方法 file 返回当前正在读取的文件的 File 对象。这可能会随着 $< 读取命令行上的文件而改变。[转/转]
所以:
print $<.read
Kernel.gets 是 $<.gets 的简写,所以:
while s = gets
puts s
end
仅ARGV ?
适用于我,"r"
通常默认,因此可以跳过它,并且File.new()
可能与 相同File()
,所以
input = ARGV ? $< : File.new(ARGV[0])
then
并且;
是可选的
您也可以使用三元运算符:
input = ARGV[0].nil? ? $< : File.new(ARGV[0],"r")