4

たった1行のコードでファイルを丸呑みするトリックはありますか?

(「to slup」 = ファイル全体を文字列に読み込むこと。)

通常、私は次のことを行います。

local f = io.open("/path/to/file")
local s = f:read("*a")
f:close()

しかし、もっと短い方法があるのだろうか。

(Lua 5.2で)次のことができることを私は知っています:

local s = io.lines("/path/to/file", "*a")()

しかし、ファイルは、ガベージ コレクターが起動するまでしばらく開いたままになります (そして、クロージャー リターンを取り除きます。このクロージャーは、ファイルを明示的に閉じることを知っていると思いますが、これは、それを知っている2 回目io.linesの呼び出しの後にのみ発生する可能性があります)。EOF に達しました)。

それで、私が見逃している1行の解決策はありますか?

4

1 に答える 1

2

標準ライブラリにはそのような関数はありませんが、自分で定義することができます:

local function slurp(path)
    local f = io.open(path)
    local s = f:read("*a")
    f:close()
    return s
end

あるいは、ペンライトにもそのような機能があります。

于 2014-07-21T21:28:30.547 に答える