2014-06-15 2 views
1

필자는 특정 방식으로 입력 된 텍스트를 users.txt에 추가하기 위해 lua 함수를 작성했으나 단독 실행시에는 잘 작동하지만 main.lua에서 필요할 때 작동합니다 작동하지만 users.txt에 결코 쓰지 않습니다. 이 내 두 파일의 코드입니다 :다른 .lua에서 작동하지 않는 file.write

adminprograms.lua :

function adduser() 
    print("Username") 
    local username = io.read() 
    print("Password") 
    local password = io.read() 
    print("State") 
    local state = io.read() 
    state = state.upper(state) 
    print(state.."-"..username.."-"..password) 
    --------------the code that dosent work 
    local users = io.open("users.txt", "a") 
    users.write(users , state.."-"..username.."-"..password.."\n") 
end 

main.lua : 왜이 ​​

require "adminprograms" 
loginstate = "admin" 
repeat 
local command = io.read() 
if loginstate == "admin" and command == "newuser" then 
    adduser() 
end 
until false 

입니까? 그들은 users.txt와 함께 같은 폴더에 있습니다. 그게 중요하다면 나는 윈도우 64 비트를 달리고있다. 오류가 발생하지 않습니다.

+0

그래서'main.lua'를 사용하면 인쇄 메시지를 볼 수 있지만 종료 한 후 파일에는 추가 콘텐츠가 없습니다? – Schollii

+0

나는 내가 묻는 이유가 전혀 모른다. :) – DivideByZero

답변

2
내가 잘못 아무것도 볼 수 없습니다

하지만

  • 마지막 라인부터 실행이되지 않을 수있는 코드

    는 오류가 발생합니다. 오류와 관련이 없지만 사용자가 입력하지 않은 다른 코드가 오류의 원인 일 수 있음을 나타냅니다.
  • 작업을 버퍼링 쓰기 (그들이 쓰기 버퍼가 가득 전용 디스크에 기록된다) 그렇게 확신합니다, 당신은 파일 객체를 close() 또는 적어도 flush()한다 그것은 :

    ... Call users:write() as (many times as) required, then when done: 
    users:close() 
    

    또는

    users:write() 대신 users.write(users)을 (하지 문제와 관련)
    ... 
    users:write() -- if you're going to check the file contents in an editor: 
    users:flush() 
    

문체는 : 개체를 반복 할 필요가 없습니다 콜론 표기를 사용합니다.

+0

oops, 반복을 잘랐다. 나는 그것을 확실히 추가 할 것이다. 그러나, 나는 이것이 문제를 일으키는 원인이라고 생각하지 않는다. – DivideByZero

+0

또한 콜론 표기법? 그게 정확히 무엇입니까? 구글 봤어하지만 그 물건은 구글 어렵다. – DivideByZero

+0

'x : f (y)'는'x.f (x, y)'와 같은 것입니다. 이것은 객체 지향 스타일 프로그래밍을위한 편리한 문법입니다. –

3

adduser은 끝 부분에 users:close() 전화를 걸면 예상대로 작동합니다.

참조 설명서에 "파일은 핸들이 가비지 수집 될 때 자동으로 닫히지 만, 예상치 못한 시간이 소요됩니다."라는 메시지가 표시됩니다. 프로그램 종료시 즉시 발생하는 독립형 경우. (더 정확하게 말하면, 파일 핸들은 파이널 라이즈로 표시되고 파이널 라이저는 파일을 닫고 루아의 끝에서 파이널 라이즈가 실행됩니다.) main.lua이 바로 종료되지 않기 때문에 가비지 콜렉션/완료는 연기됩니다.

관련 문제