Lua io.close()

前言#

不知道大家在看到io.open()這一章的時候有沒有感覺到問題,其中有個很明顯的問題就是我在使用io.open()打開文件后并沒有關(guān)閉,很多人應(yīng)該知道這個問題,不過那是我故意寫的,就會為了今天這個函數(shù),要不然怎么能凸顯這個函數(shù)的作用呢?

一般在一些小的程序里打開一個文件而不去關(guān)閉,當(dāng)程序結(jié)束后自然會回收回來,但這也是一個不好的習(xí)慣??扇绻诖笮统绦蚶?,有一個模塊如果總是打開文件為不去關(guān)閉的話,就會造成資源的浪費,導(dǎo)致程序運行一段時間后無法正常工作。

內(nèi)容#


io.close()##

  • 原型:io.close ([file])
  • 解釋:這個函數(shù)等價于file:close(),如果省略參數(shù)file的話,那么就表示關(guān)閉默認輸出文件。函數(shù)file:close()也是用來關(guān)閉文件的,只是調(diào)用形式有所不同。另外當(dāng)文件描述符被垃圾回收時,對應(yīng)的文件也會自動關(guān)閉,但是這個時間是不確定的。

Usage##

  • 首先新建一個名叫closetest.lua的文件然后編寫如下代碼:
local file = io.open("iotest.txt","r")
print("\nopen a file:")
print(file)

-- 關(guān)閉打開的文件
local ret = io.close(file);
print("\nclose file ret:")
print(ret)

local filenew = io.open("iotest.txt","r")
print("\n\nopen a file again:")
print(filenew)

-- 換種方式再次關(guān)閉打開的文件
local retagain = filenew:close();
print("\nclose file again ret:")
print(retagain)

-- 設(shè)置并打開默認輸出文件
io.output("iotest.txt")
local outret = io.close()
print("\nclose default out file ret:")
print(outret)

-- 設(shè)置并打開默認輸入文件
io.input("iotest.txt")
local inret = io.close()
print("\nclose default in file ret:")
print(inret)
  • 運行結(jié)果
io_close.png

總結(jié)#

  • 保證打開文件和關(guān)閉文件成對出現(xiàn)是一個良好的習(xí)慣。
  • 由結(jié)果可知函數(shù)io.close(file)file:close()完全等價,但是當(dāng)要關(guān)閉默認輸出文件時,需要選擇io.close()。
  • 結(jié)果中最后一段報錯可能有的人不理解,原因就是io.close()只能用來關(guān)閉默認的出輸出文件,不能用關(guān)閉默認的輸入文件,而默認的輸出文件在上面已經(jīng)關(guān)閉過了,如果嘗試再次關(guān)閉的話,Lua 解釋器就會發(fā)出報錯警告。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容