2013-09-03 6 views
0

내 컴퓨터에 저장된 파일에서 루아 프로그램을 읽으려고합니다. 나는이 코드를 사용하고 있습니다 : 나는 스크립트를 실행할 때, 그러나 그것은보고, 내 원래의 문제에 대한 해결책을 발견루아에서 파일을 읽을 때 오류가 발생했습니다

lua: io.lua:3: attempt to index local 'file' (a nil value) 
stack traceback: 
    io.lua:3: in main chunk 
    [C]: ? 
exit code: 1 

: 나는 그것을 실행하려고하면

function readFile(file) 
    local file = io.open(file,"rb") 
    local content = file:read("*all") 
    file:close() 
    return content 

을,이 오류가 발생합니다 변수 '상수'는 nil입니다.

입력 :

function readFile(filename) 
    local file = io.open(filename,"rb") 
    local content = file:read("*a") 
    file:close() 
    return content 
end 

readFile("test.txt") 
print(content) 

출력 :

lua -e "io.stdout:setvbuf 'no'" "io.lua" 
nil 
Exit code: 0 
+0

당신은 실제로 함수에 파일 이름을 통과 했습니까? –

+0

세 번째 줄은'file : read ("* a")'btw 여야합니다. – greatwolf

+0

@greatwolf 사실 이것은 중요하지 않습니다. 루아는''a ''로 시작하는 단어를 받아 들일 것입니다; 예를 들어 루아 5.2.2 소스, 파일'liolib.c', 라인 443 : 문자열의 두 번째 문자 만 사용하는'switch'가 있습니다. 물론 이것은 구현 세부 사항이며 사용자는이를 신뢰할 수는 없지만 오류의 원인이되어서는 안됩니다. –

답변

1

function 매개 변수와 다른 로컬 이름을 사용하십시오.

readFile("test.txt") 
print(content) 

당신은 nil입니다 전역 변수 content을, 인쇄, 당신이 원하는 :

function readFile(filename) 
local file = io.open(filename, “rb”) 

UPDATE 편집 한 후

은 여전히 ​​문제있다 :

print(readFile("test.txt")) 
,

나 :

local content = readFile("test.txt") 
print(content) 
+0

답안은 모두 작동하지만 반환 할 때 "nil"이라는 값이 주어집니다. – Dsf190

+0

@ Dsf190 잘못된 내용을 인쇄하고 있습니다. 업데이트를 참조하십시오. –

0

io.openassert에서이 당신에게 기본 OS에 의해 생성 된 오류 (있는 경우)를 표시합니다

local file = assert(io.open(file,"rb")) 

.

+0

답안은 모두 작동하지만 반환 할 때 "nil"이라는 값이 주어집니다. – Dsf190

관련 문제