これは非常にうまく機能します。短くするための改善点があるかどうか疑問に思っていますか?
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
最初の 5 行を完全に削除できます。
つるはしから
$<: コマンドライン引数または $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 オブジェクトを返します。これは、コマンド ラインで $< がファイルを読み取るときに変更される場合があります。[r/o]
したがって:
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")