2017-01-25 3 views
2

Ich habe versucht, einige Methoden des Dateiobjekts so zu duplizieren, weil ich einen Lua-API-Code mit Groß- und Kleinschreibung nur in Kleinbuchstaben testen muss. Also habe ich versucht, dies:So benennen Sie Dateiobjektmethoden um

function openFile(n, m) 
    local f = io.open(n, m) 
    if(not f) then 
    return status(nil,"openFile: Nofile: "..tostring(n)) 
    end 
    f.Read = f.read 
    f.Write = f.write 
    f.Close = f.close 
    f.Flush = f.flush 
    return f 
end 

Unter Berücksichtigung, dass die Datei-Objekt hat file:read, file:write ... Auch bekannt als

Aber gibt mir einen Fehler wie den folgenden:

Execution error: 
.\ZeroBraineProjects/dvdlualib/fileapi.lua:41: attempt to index local 'f' (a userdata value) 

Ich dachte, dass eine Datei eine einfache Objekttabelle ist. Wie sich herausstellte, handelt es sich um ein Userdata-Objekt.

Also Jungs, wie kann ich Capital-Case-Methode zum Lesen und Schreiben verwenden?

Antwort

3

Sie haben die Felder in f ‚s Metatabelle einzustellen:

local m = getmetatable(f) 
m.Read = m.read 
m.Write = m.write 
m.Close = m.close 
m.Flush = m.flush 
+1

ich genau das tat. Bevor Sie den Kommentar bearbeiten. Vielen Dank ! –

Verwandte Themen