1

演習 17 では、他の回答を検索することで、次の内容を 1 行にまとめることができました (追加のクレジット #3 で質問されているように)。

from_file, to_file = ARGV
script = $0

input = File.open(from_file)
indata = input.read()

output = File.open(to_file, 'w')
output.write(indata)

output.close()
input.close()

私はそれを次のように要約することができました:

from_file, to_file = ARGV
script = $0

File.open(to_file, 'w') {|f| f.write IO.read(from_file)}
  1. これを1行に凝縮するためのより良い/別の方法はありますか?

  2. 誰かが私が作成した行を説明するのを手伝ってもらえますか? この質問とは関係のないさまざまな質問/回答から作成しました。私は自分がしたことを正確に調べようとしましたが、まだ少し迷っており、それを完全に理解したいと思っています.

4

3 に答える 3

4
  1. IO::read「ファイル全体を文字列に読み取るだけ」を単純化するために使用するのと同様に、 IO::write「文字列をファイルに書き込むだけ」に使用できます。

    from_file, to_file = ARGV
    IO.write(to_file, IO.read(from_file))
    

    使用しないのでscript取り外し可能です。本当に 1 行にまとめたい場合は、次のようにします。

    IO.write(ARGV[1], IO.read(ARGV[0]))
    

    個人的には、これは理解できると思いますが、エラー チェックがないことは同等です。

  2. File#openブロックを使用してto_file、書き込み専用モードで開きます ( 'w')。ブロック内では、開いているファイル asfにアクセスでき、ブロックが終了するとファイルが閉じられます。 IO::readの内容全体を読み取り、from_fileそれをIO#writeonに渡しf(File は IO のサブクラスです)、それらの内容をf( の開いている書き込み専用ファイルto_file) に書き込みます。

于 2013-06-19T19:10:36.070 に答える
0

私は完全な初心者ですが、これは私にとってはうまくいきます:

open(ARGV[1], 'w').write(open(ARGV[0]).read)    

私にはエレガントに見えませんが、うまくいきます。

編集:これは、明確でない場合、スクリプト全体を 1 行にまとめようとする私の試みです。

于 2014-12-25T20:47:33.303 に答える