Section 4.1 of Programming in Lua.여러 할당은 어떻게 작동합니까?
어떻게 할당 작업을 실제로합니까?다중 할당에서 Lua는 먼저 모든 값을 평가하고 은 할당을 실행합니다. 따라서, 우리는
X에서와 같이 두 개의 값을 교환하기 위해 다중 할당 을 사용할 수 있습니다, y는 Y, X = - 스왑
x' for
y '를
Section 4.1 of Programming in Lua.여러 할당은 어떻게 작동합니까?
어떻게 할당 작업을 실제로합니까?다중 할당에서 Lua는 먼저 모든 값을 평가하고 은 할당을 실행합니다. 따라서, 우리는
X에서와 같이 두 개의 값을 교환하기 위해 다중 할당 을 사용할 수 있습니다, y는 Y, X = - 스왑
x' for
y '를
여러 할당을 구현하는 방법은 사용중인 Lua 구현에 따라 다릅니다. 구현은 어쨌든 의미를 보존하는 한 자유롭게 수행 할 수 있습니다. 즉, 어떤 일이 구현 되더라도 Lua에 설명 된대로 LHS에 LHS를 할당하기 전에 RHS에 모든 값을 저장 한 것과 같은 결과를 얻게됩니다. 당신은 여전히 실제 구현에 대한 호기심이 있다면
, 당신이 할 수있는 한 가지 특정 프로그램에 대한 제작됩니다 바이트 코드 무엇인지 볼 수 있습니다. 예를 들어, 다음 프로그램
local x,y = 10, 11
x,y = y,x
복용 루아 5.2 바이트 코드 컴파일러 (luac -l
)로 전달하면 (
main <lop.lua:0,0> (6 instructions at 0x9b36b50)
0+ params, 3 slots, 1 upvalue, 2 locals, 2 constants, 0 functions
1 [1] LOADK 0 -1 ; 10
2 [1] LOADK 1 -2 ; 11
3 [2] MOVE 2 1
4 [2] MOVE 1 0
5 [2] MOVE 0 2
6 [2] RETURN 0 1
이동 오피 왼쪽 레지스터에 적절한 레지스터에 값을 할당 준다 자세한 내용은 Lua 소스의 lopcodes.h를 참조하십시오). 외관상으로는, 계속되고있는 것은 x
및 y
에 레지스터 0과 1이 사용되고 슬롯 2가 임시 추가 슬롯으로 사용되고 있다는 것입니다. x
및 y
은 당신이 손으로 할 것 가지처럼, 처음 두 연산 코드와 스왑은 "일시적으로"두 번째 슬롯을 사용하여 수행됩니다 향후 3 3 옵 코드에 상수로 초기화 얻을 :
tmp = y -- MOVE 2 1
y = x -- MOVE 1 0
x = tmp -- MOVE 0 2
방법을 감안할 때 루아 스와핑 할당과 정적 초기화를 할 때 다른 접근 방식을 사용했는데 여러 가지 다른 종류의 할당에 대해 다른 결과를 얻는다면 놀라지 않을 것입니다 (테이블 필드 설정은 아마도 매우 다르게 보일 것입니다. metamethods로 인해 ...). 우리는 바이트 코드가 100 % 확실하게 방출되는 곳에서 소스에서 부분을 찾아야 할 것입니다. 앞서 언급했듯이이 모든 것은 루아 버전과 구현 사이에서 다를 수 있습니다. 특히 LuaJIT vs PUC Lua를 살펴 본다면 더욱 그렇습니다.
"실제로 일"이란 무엇을 의미합니까? 이 책은 어떻게 작동하는지 설명했다. 너는 무엇을 더 찾고 있니? –