2014-03-05 3 views
8

루아는 일반적으로 strongly-typed 언어이며 데이터 형식간에 암시 적 변환을 거의 제공하지 않습니다. 문자열과 숫자 사이의 자동 변환없이 Lua 컴파일

그러나, 숫자 및 문자열 automatically coerced in a few cases을받을 수 있나요 :

루아는 실행 시간에 문자열과 숫자 값 사이의 자동 변환을 제공합니다. 문자열에 적용된 산술 연산은 루아 렉서의 규칙에 따라이 문자열을 숫자로 변환하려고 시도합니다. (캐릭터가 선행하고 공간 및 서명 후행 가질 수있다.) 이와 반대로, 다수

따라서 적당한 형식 문자열이 예상되는 경우, 번호가 문자열로 변환되어 사용될 때마다 :

local x,y,z = "3","8","11" 
print(x+y,z) --> 11 11 
print(x+y==z) --> false 
print(x>z) --> true 

나는 이것을 원하지 않습니다. 모든 자동 변환을 제거하기 위해 루아 인터프리터를 어떻게 재 컴파일 할 수 있습니까?

내가 가진 것을 선호 :

print(x+y) --> error: attempt to perform arithmetic on a string value 
print(x>1) --> error: attempt to compare number with string 
print(x..1) --> error: attempt to concatenate a number value 
+5

Doable이지만 상자에서 꺼내지는 마십시오. 루아의 내부를 편집해야합니다. http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber에서 시작하십시오. – lhf

+2

당신은 다음과 같은 경우도 "수정"할 수 있습니다 :'print ("one =".. 1)' –

+2

루아의 방언을 주류와 다르게 (그리고 조용히! – vonbrand

답변

2

걸출한 LHF이 밖으로 상자의 수 없습니다, 그리고 http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber

이 마킹부터 시작 루아의 내장을 편집 할 필요가 위에 논평했습니다 이 질문을 끝내기위한 대답으로 누구든지 나중에해야 할 일에 대한 심층적 인 세부 정보를 제공하기로 선택하면 기꺼이 그 대답에 동의 표시를 전환 할 것입니다.

+0

동의합니다. 매개 변수는 함수에 전달되기 전에 평가됩니다 (이 경우 "print"). 따라서 표현 평가 (IE 강제)의 내부 기능이 변경되어야합니다. –

관련 문제