2008-09-27 20 views
5

En Lua, utilizando el operador = sin un valor L parece ser equivalente a una impresión (valor r), aquí tiene algunos ejemplos se ejecutan en el Lua independiente intérprete:Lua = operador como impresión

> = a 
nil 
> a = 8 
> = a 
8 
> = 'hello' 
hello 
> = print 
function: 003657C8 

Y así sucesivamente ...

Mi pregunta es: ¿dónde puedo encontrar una descripción detallada de este uso para el operador =? ¿Como funciona? ¿Implica un valor l predeterminado especial? Creo que la raíz de mi problema es que no tengo ni idea de qué escribir en Google para encontrar información sobre él :-)

edición:

Gracias por las respuestas, usted tiene razón que es una característica de el interprete. Pregunta tonta, porque no sé por qué razón pasé por alto lo obvio. Debería evitar la publicación antes de que el café de la mañana :-) Para completar, aquí está el código que trata con esto en el intérprete:

while ((status = loadline(L)) != -1) { 
    if (status == 0) status = docall(L, 0, 0); 
    report(L, status); 
    if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ 
    lua_getglobal(L, "print"); 
    lua_insert(L, 1); 
    if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) 
     l_message(progname, lua_pushfstring(L, 
          "error calling " LUA_QL("print") " (%s)", 
          lua_tostring(L, -1))); 
    } 
} 

Edit2:

Para ser realmente completa, todo el truco de empujar los valores en la pila están en la función "pushline":

if (firstline && b[0] == '=') /* first line starts with `=' ? */ 
    lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ 

Respuesta

15

Citando al man page:

En el modo interactivo ... Si una línea comienza con '=', entonces lua muestra los valores de todas las expresiones en el resto de la línea. Las expresiones deben estar separadas por comas.

3

Creo que debe ser una característica del intérprete autónomo. No puedo hacer que funcione en nada de lo que haya compilado lua.

1

No lo llamaría una función: el intérprete simplemente devuelve el resultado de la declaración. Es su trabajo, ¿no?

+0

, pero ¿por qué no aparece en la sintaxis incorrecta? –

+0

¿No debería imprimir 8 en "a = 8" entonces, también? Sé que muchas consolas de guiones lo hacen (python, irb, perl -d-e 0 etc.), pero lo probé LUA no imprime el valor de todas las declaraciones, simplemente "= ...". – jkramer

0

La asignación no es una expresión que devuelve algo en Lua como en C.