Lua 에서 함수 의 몇 가지 특별한 점 에 대한 탐구

7337 단어
전편 의 기초 보충 이 1 년 이 넘 을 줄 은 몰 랐 습 니 다. 최근 에 Lua 를 주 워 서 기 초 를 다 보충 하려 고 합 니 다. 오늘 은 Lua 의 함수 에 대해 이야기 해 보 겠 습 니 다 ~
0. 환경
제 가 갑자기 Lua 에 관심 이 생 긴 가장 큰 이 유 는 Cocos Code IDE 가 수면 위로 떠 오 르 기 시 작 했 기 때 문 입 니 다. Cocos 2d - x 공식 적 으로 나 온 Cocos2d - x + Lua 나 JS 를 대상 으로 하 는 IDE 입 니 다. 완벽 하 다 고 할 수 는 없 지만 기대 가 됩 니 다.
그래서 본 고 에서 사용 하 는 Lua 편집 기 는 선택 하 겠 습 니 다. 여러분 마음대로 하 세 요 ~
1. 문맹 퇴치 - Lua 의 함수
Lua 는 코드 와 같은 함 수 를 만 들 고 호출 하 는 것 이 매우 간단 합 니 다.
 
  
function mutou()
print(" :www.jb51.net");
end

이것 은 함 수 를 만 들 었 습 니 다. 호출 함수 도 매우 간단 합 니 다.
 
  
mutou();

그리고 실행 하면 출력 을 볼 수 있 습 니 다. print 도 하나의 함수 입 니 다. 아, 잔소리 가 많 지 않 습 니 다.
2. 문맹 퇴치 ― 함수 의 매개 변수
방금 mutou 함수, 코드 와 같은 인 자 를 수정 합 니 다.
 
  
function mutou(name, age)
print(name);
print(age);
end

우 리 는 mutou 에 두 개의 인 자 를 추가 합 니 다. 하 나 는 name 이 고, 하 나 는 age 이 며, 나 이 를 대표 합 니 다.참고 로 Lua 는 변수 유형 이 없다 는 표현 으로 변 수 는 부 여 된 값 에 따라 다른 유형 을 보 여 준다.  우 리 는 이렇게 mutou 함 수 를 호출 해 보 자.
 
  
mutou(" ", 25);

그리고 다음 과 같이 출력 을 실행 합 니 다.
 
  
[LUA-print]
[LUA-print] 25

정상 이 야, 난 좋아 ~
3. 해량 의 심 - 함수 매개 변수 개수 적응
Lua 의 함 수 는 마음 이 넓 어서 우리 가 전달 하 는 매개 변수 에 대해 모두 참 지만 그 규칙 에 따라 선별 합 니 다.  방금 그 mutou 함 수 를 계속 하 세 요. 우 리 는 이렇게 호출 해 보 겠 습 니 다.
 
  
mutou(" ");

인 자 를 적 게 주 었 지만 C + + 나 자바 등 언어 와 달리 컴 파일 오류 가 발생 하지 않 고 정상적으로 실행 할 수 있 습 니 다.출력 은 다음 과 같 습 니 다:
 
  
[LUA-print]
[LUA-print] nil

부족 한 인자 에 대해 서 는 자동 으로 nil 로 대체 합 니 다.
 
그 다음 에 인 자 를 적 게 줄 수 있 으 니 자 연 스 럽 게 인 자 를 더 줄 수 있 습 니 다. 이렇게 호출 해 보 세 요.
 
  
mutou(" ", 25, " ", 45);

(소 약: 너 45 살 이 야! 너 전신 세포 45 살 이 야!)
출력 은 다음 과 같 습 니 다:
 
  
[LUA-print]
[LUA-print] 25

결 과 는 자 연 스 럽 게 파 라 메 터 를 많이 내 면 버 려 진다.이것 이 좋 은 일 인지 나 쁜 일 인지 에 대해 서 는 누가 사용 하 느 냐 에 달 려 있다.
4. 다 중 반환 값
맞 아, 루 아 는 우리 가 원 하 는 게 으 름 피 울 수 있 는 모든 것 을 생각 하고 이 루어 진 것 같 아.
Lua 의 함 수 는 여러 값 을 되 돌려 줍 니 다. mutou 함 수 를 계속 수정 합 니 다. 다음 과 같 습 니 다.
 
  
function mutou(name, age)
return name, age;
end

들 어 온 두 개의 인 자 를 return 에 다시 주 었 습 니 다. 이렇게 호출 해 보 세 요.
 
  
local name = mutou(" ", 25);
print(name);

mutou 함 수 를 호출 하고 반환 값 을 변수 로 저장 합 니 다. 출력 결 과 는 다음 과 같 습 니 다.
 
  
[LUA-print]

 
우 리 는 하나의 변수 로 반환 값 을 저장 하기 때문에 함수 가 두 개의 값 을 되 돌려 주 더 라 도 우 리 는 하나만 얻 을 수 있 습 니 다. 두 개의 값 을 얻 으 려 면 매우 간단 합 니 다. 다음 과 같 습 니 다.
 
  
local name, age = mutou(" ", 25);
print(name .. ":" .. age);

입력 결 과 는 다음 과 같 습 니 다:
 
  
[LUA-print] :25

그 나 저 나 기호 '...' 로 문자열 을 연결 할 수 있 으 니 더 이상 말 하지 않 겠 습 니 다 ~
 
반환 값 은 매개 변수 와 마찬가지 로 세 개의 변수 로 함수 반환 값 을 가 져 오 려 고 시도 해도 컴 파일 오류 가 발생 하지 않 습 니 다. 다음 과 같 습 니 다.
 
  
local name, age, hehe = mutou(" ", 25);
print(name .. ":" .. age);
print(hehe);

입력 은 다음 과 같 습 니 다:
 
  
[LUA-print] :25
[LUA-print] nil

더 많은 변수 에 대해 서 는 nil 값 을 부여 합 니 다. 컴 파일 오류 가 발생 하지 않 지만 실행 중 오류 가 발생 할 수 있 습 니 다.
예 를 들 어 '...' 기호 로 nil 값 을 연결 하면 오류 가 발생 합 니 다.
5. 다 중 반환 값 의 특징 1 ― 표현 식 의 마지막 요소 여야 합 니 다.
여러 개의 반환 값 이 있 는 함수 에 대해 모든 상황 에서 여러 개의 값 을 반환 할 수 있 는 것 은 아니다.
먼저 이러한 특별한 상황 을 살 펴 보고 방금 mutou 함수 입 니 다. 우 리 는 이렇게 호출 합 니 다.
 
  
local a, b, c = "first", mutou(" ", 25);
print(a);
print(b);
print(c);

출력 결 과 는 다음 과 같 습 니 다.
 
  
[LUA-print] first
[LUA-print]
[LUA-print] 25

맞습니다. Lua 의 할당 문 구 는 쉼표 표현 식 을 지원 합 니 다. (즉, 여러 개의 값 으로 여러 개의 변수 에 할당 하 는 것 입 니 다) 앞 에 있 는 값 은 자 연 스 럽 게 변수 에 우선 부여 되 기 때문에 변수 a 의 값 은 'first' 입 니 다.
하지만 그게 중요 한 게 아니 야 ~ (소 약: 그럼 털실 을 말 해 봐!)
 
중요 한 것 은 우리 가 순 서 를 바 꾸 는 것 이다. 다음 과 같다.
 
  
local a, b, c =  mutou(" ", 25), "first";
print(a);
print(b);
print(c);

출력 결 과 는 예상 을 벗 어 날 것 입 니 다.
 
  
[LUA-print]
[LUA-print] first
[LUA-print] nil

맞습니다. mutou 함수 의 반환 값 은 하나 로 변 했 습 니 다. 이것 이 바로 함수 의 특징 중 하나 입 니 다. 함수 의 호출 이 표현 식 의 마지막 요소 가 아니라면 최대 한 값 만 되 돌려 줍 니 다.
 
뭐?아직 잘 안 나 와 요?그럼 입 자 를 하나 더 들 어 보 겠 습 니 다.
우 리 는 이렇게 함 수 를... 어, 저기, 우 리 는 다음 내용 을 계속 합 니 다.(소 약: 예 를 들 수 없다 면 너 는 방금 도 털실 을 흥분 시 켰 구나!)
6. 다 중 반환 값 의 특징 2 ― 한 값 을 강제로 되 돌려 줍 니 다.
어떤 경우 에 우 리 는 한 함수 에 대해 싫 증 을 느 낄 수 있 습 니 다. 맞 아, 왜 당신 은 항상 여러 값 을 되 돌려 줍 니까?!(소 약: 네가 쓴 함수 가 아니 냐!)  어떤 함수 가 한 값 만 강제로 되 돌려 주 려 면 이렇게 할 수 있 습 니 다.
 
  
local a, b = (mutou(" ", 25));
print(a);
print(b);

입력 결 과 는 다음 과 같 습 니 다:
 
  
[LUA-print]
[LUA-print] nil

 
우 리 는 함수 호출 시 함수 호출 을 괄호 안에 넣 으 면 된다.
7. 이름 매개 변수 / 구 명 실 참 / named 인수
마지막 으로, 우 리 는 비교적 실 용적 인 함수 매개 변수 인 이름 매개 변 수 를 살 펴 보 자.
사실 '이름 매개 변수' 는 제 이름 입 니 다. '루 아 프로 그래 밍' 2 판 에 서 는 '구명 실 삼' 이 라 고 부 르 지만 영어 단어 와 용법 을 본 후에 저 는 '이름 매개 변수' 라 고 부 르 는 경향 이 있 습 니 다.  먼저 여러분 에 게 한 가지 질문 을 드 리 겠 습 니 다. 저희 가 방금 토론 하고 있 는 mutou 함수 가 몇 개 있 는 지 다시 보지 마 세 요. 1 초 안에 대답 하 세 요 ~ (소 약: 2 개!)
두 번 째 문제, mutou 함수 의 age 와 name 매개 변 수 는 어느 것 이 앞 에 있 고 어느 것 이 뒤에 있 습 니까?0.001 초 안에 대답!(소 약: 대답 해 봐!)  맞 아, 우 리 는 가끔 함수 의 매개 변수 순 서 를 기억 하지 못 해. 거꾸로 age 가 첫 번 째 매개 변수 일 까? 아니면 name 이 두 번 째 매개 변수 일 까?(소 약: 뭔 가 잘못된 것 같 아...)  그래서 서명 실 삼 이 도움 이 되 었 다.우 리 는 mutou 함 수 를 수정 합 니 다.
 
  
function mutou(args)
return args.name, args.age;
end

현재 mutou 함수 의 매개 변 수 는 table 로 바 뀌 었 습 니 다. table 에 name 과 age 두 개의 값 을 포함 하도록 요구 합 니 다.
 
그래서 우 리 는 mutou 함 수 를 호출 하 는 방식 이 이렇게 되 었 다.
 
  
local args = {name = " ", age = 25};
print(mutou(args));

맞습니다. table 변 수 를 mutou 함수 에 전달 하면 됩 니 다. 함수 가 인삼 수 치 를 취 할 때 table 의 key 값 에 따라 얻 기 때문에 매개 변수 순 서 를 고려 할 필요 가 없습니다. 이것 은 우리 가 방금 말 한 순서 문 제 를 해결 합 니 다.
8. 끝
자, 함수 의 기본 적 인 특성 에 대하 여 이렇게 많 습 니 다. 물론 길 어 지 는 매개 변 수 는 제 가 언급 하지 않 았 습 니 다. 왜냐하면 이것 은 언급 할 것 이 없 는 것 같 습 니 다 ~  최근 에 저 는 한 가지 일 을 계획 하고 있 습 니 다. 그것 은 바로 저녁 에 게임 을 쓰 지 않 고 사람 을 흥분 시 키 는 bug 를 만 나 더 라 도.나 는 저녁 시간 을 모두 충전 하고 싶다. 나의 기본 기 는 정말 부족 하고 약간 무 너 질 것 같은 느낌 이다.  조만간 '루 아 프로 그래 밍' 이라는 책 을 한 번 훑 어 볼 계획 입 니 다. 꾸준히 하 시 길 바 랍 니 다. 매일 밤 한 시간 씩 책 을 읽 고 한 시간 씩 튜 토리 얼 을 정리 하 는 계획 입 니 다.  오늘 은 첫날 이 라 피곤 해서 게임 을 쓰 는 것 보다 교과 서 를 쓰 는 것 이 훨씬 피곤 하 다.무슨 말 이 있 었 지? 영원히 편안 한 범위 에 있 지 말 라 고. 그래, 버 텨 라.  이봐, 만약, 그런데 왜 너 도 마지막 에 생략 번 호 를 썼 니?

좋은 웹페이지 즐겨찾기