《루아프로그래밍》 독서노트 제3장: 표현식

7183 단어
Lua 표현식에는 숫자 상수, 문자열, 변수, 1원과 2원 조작부호, 함수 호출이 포함될 수 있습니다.또한 전통과 달리 표현식은 함수 정의와 테이블 구조식도 포함할 수 있다.

3.1 산술 조작부호


산술 조작부호는 2원에'+'를 더하고'-'를 줄이고'*'를 곱하고'/'를 제외하고 지수'^'를 추출하고'%'를 취하며 1원의 마이너스'-'가 있다.Lua에서 모든 조작부호는 실수에 사용할 수 있으며, 특히 추출 연산의 사용에 주의해야 한다.콜아웃 작업자는 다음 규칙에 따라 정의됩니다.
a%b=a-floor(a/b)*b;   //floor(x)     ,    x     

정수로 말하자면, 계산 결과의 기호는 영원히 두 번째 매개 변수와 같다.실수의 경우 다음과 같이 사용할 수 있습니다.
x%1     -->   x     
x-x%1       -->   x     
x-x%0.01    -->x            
angle%(2*math.pi)   -->          [0,2π]

3.2 관계 조작부호


Lua에서 제공하는 관계 연산자:
< > <= >= == ~=

주의해야 할 것은 두 값이 서로 다른 유형을 가지고 있다면 루아는 서로 다르다고 생각한다.nil은 자신과 같다.두 개의 숫자나 두 문자열만 크기를 비교할 수 있으며, 다른 종류에서는 이 동작을 지원하지 않습니다.만약 비교한 두 개의 값 유형이 다르면 오류가 발생하기 때문에 하나의 문자열과 하나의 숫자는 크기를 비교할 수 없다.Lua는 문자열의 크기를 사전 순서대로 비교합니다.

3.3 논리 연산자


논리 연산자는 다음과 같습니다.
and  or  not

and의 경우, 만약 첫 번째 조작수가 가짜라면, 첫 번째 조작수를 되돌려주고, 그렇지 않으면 두 번째 조작수를 되돌려준다.or의 경우, 첫 번째 조작수가 진짜라면, 첫 번째 조작수를 되돌려주고, 그렇지 않으면 두 번째 조작수를 되돌려줍니다.위에서 알 수 있듯이 and와 or도 단거리 값을 사용하지만, 다른 것은 그것들의 반환 값은true나false가 아니라 모든 종류의 값이 될 수 있다는 것이다.
print(4 and 5)          -->5
print(nil and 13)       -->nil
print(false and 13)     -->false
print(4 or 5)           -->4
print(false or 5)       -->5

이러한 특성을 바탕으로 Lua에는 자주 사용하는 쓰기 방법인'x=x or v'가 있는데 이것은'if not x then x=v end'와 같다. 이런 쓰기 방법은 매개 변수에 기본값을 설정하는 데 사용할 수 있다.
function(a)
  a = a or 5        -->   a     5
  ...
end

또 다른 습관적인 쓰기 방법인'(a and b) or c'는 a와 유사합니까?b:c, 그러나 전제는 b가 가짜가 아니다.not는 되돌리는 데 사용되며,true나false만 영원히 되돌려줍니다.

3.4 문자열 연결부


Lua에 두 문자열을 연결하여 ".."을 사용할 수 있습니다.주의해야 할 것은 Lua의 문자열은 변할 수 없는 값이며 연결 작업은 새로운 문자열만 만들고 원래의 문자열은 수정하지 않습니다.

3.5 우선 순위


대략

3.6 테이블 구성


구조식은 테이블을 만들고 초기화하는 데 사용되는 표현식입니다.가장 간단한 구조식은 빈 구조식 {}입니다. 빈 테이블을 만드는 데 사용됩니다.구조식은 그룹을 초기화하는 데도 사용되며, 인덱스는 기본적으로 1부터 시작합니다.
num = {123} //a[1] = 1, a[2] = 2, a[3] = 3

또한 테이블을 초기화하는 데 사용되는 특수한 문법을 제공했다
a = {x = 10, y = 20}    //a["x"] = 10, a["y"] = 20,         ,             

Lua가 구조를 평가할 때마다 새 테이블을 만들고 초기화합니다. 그러면 테이블로 다음 체인 테이블 코드를 쓸 수 있습니다.
//    
list = nil
for line in io.lines() do
    list = {next = list, value = line}
end
//    
local l = list
while l do
    print(l.value)
    l = l.next
end

Lua는 더욱 일반적인 초기화 방식을 제공했다
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}

이런 방식을 통해 우리는 초기화에서 어떤 종류의 색인 값을 사용할 수 있다.어떤 경우, 당신은 그룹의 초기 인덱스 값을 지정할 수 있습니다
num = {[0] = 0, 1, 2, 3, 4, 5}      -->       0  ,           

마지막으로 하나의 구조식에서 쉼표 대신 분호를 사용할 수 있으며 보통 서로 다른 성분을 분할하는 데 쓰인다.
local t = {x= 10, y = 45; "one", "two", "three"}    -->t[1] = "one", t[2] = "two"

좋은 웹페이지 즐겨찾기