Lua - 如果声明了本地x,y,z和x,y,z,它们是相同还是不同?

时间:2015-01-10 23:05:24

标签: variables lua local

function PedsPrepareConversation(ped1,ped2,distance,walkSpeed)
PlayerSetPunishmentPoints(0)
  if PedGetWeapon(gPlayer) == 437 then
    PedSetWeapon(gPlayer,-1)
  end
  if PedIsInAnyVehicle(gPlayer) then
    PedWarpOutOfCar(gPlayer)
  end
  PedStop(ped2)
  local x,y,z = PedGetPosXYZ(ped2)
  PedMoveToXYZ(ped1,walkSpeed,x,y,z)
  local r1 = x + distance
  local r2 = y + distance
  local r3 = x - distance
  local r4 = y - distance
  x,y,z = PedGetPosXYZ(ped1)
  PedFaceXYZ(ped2,x,y,z)
  repeat
 Wait(0)
  until PedInRectangle(ped1,r1,r2,r3,r4)
  PedStop(ped1)
  x,y,z = PedGetPosXYZ(ped2)
  PedFaceXYZ(ped1,x,y,z)
  x,y,z = PedGetPosXYZ(ped1)
  PedFaceXYZ(ped2,x,y,z)
end

我在Lua编程,我对变量的声明感到有些困惑。因为"本地"已经在x,y,z的一个实例上声明了,然后x,y,z的另一个实例已声明它们是不同的变量或它们是否相同?

感谢。

2 个答案:

答案 0 :(得分:1)

在您显示的代码中x,y,z仅声明一次(作为本地),然后多次分配新值。其他x,y,z与本地x,y,z的范围相同,并在声明后出现。以下是一些例子

do -- new scope
  local x,y,z = 'a','b','c' -- declared local
  print(x, y, z)   -- prints a b c
  do
    x,y,z = 1,2,3   -- new scope, but still referring to the local x, y, z (higher scope)
    print(x, y, z)  -- prints 1 2 3
  end
  print(x, y, z) -- prints 1 2 3 (modified the original)
end -- end local x, y, z scope (now they are garbage)
-- global scope, no x, y, z is defined here 
print(x, y, z)   -- prints nil nil nil 

范围是一个很大的概念,因此请查看Scope Tutorial以进行更全面的讨论。

答案 1 :(得分:0)

PIL第4.2节对此进行了详细讨论。因为您的local x,y,z位于相同的"块"代码为x,y,z=...,它们是相同的。