Bienvenidos sean a este post, hoy hablaremos sobre el interprete a secas del lenguaje que puede ser llamado lua.c por su codigo fuente o lua5.3 por su ejecutable, este es un programa pequeño que nos permite usar directamente el lenguaje, en el post anterior vimos un ejemplo simple donde mostraba un mensaje en pantalla pero lo haciamos a traves de un archivo con extension .lua y la linea almacenaba el metodo a ejecutar, una alternativa que nos ofrece el interprete es utilizar el simbolo de numeral(#) en la primera linea porque este la ignora al momento de la ejecucion pero a su vez nos permite usar a Lua como un interprete de scripts en sistemas UNIX (entiendase por Linux o derivados de este como un MacOs), si iniciaras tu script de la siguiente forma:

#! /usr/bin/lua5.3

En este caso le informamos la ubicacion de nuestro interprete, por lo menos en mi caso esta ubicado en ese lugar, y todo lo que agreguemos a continuacion sera interpretado directamente, veamos unos simples pasos.

En primer lugar buscaremos la ubicacion de nuestro interprete:

tinchicus@dbn001dsk:~/lenguaje/lua$ whereis lua5.3
lua5: /usr/bin/lua5.3
tinchicus@dbn001dsk:~/lenguaje/lua$

Esto lo hacemos con el comando whereis que se encarga de ubicar el archivo informado y nos devuelve todas las ubicaciones del mismo, en este caso nos devolvio esta sola, para entender mejor este caso vamos a tomar el codigo del post anterior y vamos a modificarlo de la siguiente manera:

hola.lua

#! /usr/bin/lua5.3

print("Hola, Mundo!")

Una vez modificado debemos modificar los atributos del archivo para poder ser ejecutable, para ello usaremos chmod y lo haremos de la siguiente manera:

tinchicus@dbn001dsk:~/lenguaje/lua$ chmod u=rwx,g=rx,o=rx hola.lua

Una breve explicacion de este comando UNIX, los permisos que podemos conceder son de lectura (r), escritura (w) y ejecucion (x) al usuario (u), los mismos permisos se aplican para el grupo del o los usuarios (g) y para el resto que no este identificado o no pertenezca a niinguno de los dos anteriores, para la linea anterior concedimos todos los permisos al usuario, de lectura y ejecucion al grupo y los “otros”, si hacemos un listado se vera de la siguiente manera:

tinchicus@dbn001dsk:~/lenguaje/lua$ ls -l
total 4
-rwxr-xr-x 1 tinchicus tinchicus 42 ago  7 11:19 hola.lua
tinchicus@dbn001dsk:~/lenguaje/lua$

Con estas modificaciones realizadas podemos ejecutar nuestro ejemplo de dos formas:

tinchicus@dbn001dsk:~/lenguaje/lua$ ./hola.lua
Hola, Mundo!
tinchicus@dbn001dsk:~/lenguaje/lua$ lua5.3 hola.lua
Hola, Mundo!
tinchicus@dbn001dsk:~/lenguaje/lua$
Anuncios

Podemos ejecutar directamente el archivo como se ve en el primer caso o como hicimos anteriormente por medio del interprete como se ve en la segunda linea, en ambos casos el resultado fue el mismo y como podran ver el interprete ignoro completamente la primera linea pero esto siempre quedara a evalucacion de la necesidad de cada uno porque recuerden que como vimos anteriormente debemos concederle permisos de ejecucion al archivo y si usamos el interprete no es necesario, aunque la primera opcion es ideal para ejecutar nuestros codigos en otro script sin necesidad del interprete, pasemos a ver como es la sintaxis del interprete:

$ lua5.3 [opciones] [script [args]]

En este caso tenemos primero el interprete luego las opciones y por ultimo el archivo o script y a su vez los argumentos, veamos las opciones disponibles:

Switch (opcion)Descripcion
-eEjecuta codigo en la linea de comando directamente
-l “nombre”Carga la libreria informada en nombre
-iIngresa al modo interactivo
-vMuestra la version del programa
-EIgnora las variables del entorno

Veamos algunos ejemplos, primero usaremos la opcion -e para ver su funcionamiento:

tinchicus@dbn001dsk:~/lenguaje/lua$ lua5.3 -e "print(math.sin(12))"
-0.53657291800043
tinchicus@dbn001dsk:~/lenguaje/lua$

En este caso nos calculara el valor del seno de 12, observen como lo muestra en pantalla y vuelve al prompt de la linea de comandos, para nuestro siguiente caso agregaremos la opcion -i:

tinchicus@dbn001dsk:~/lenguaje/lua$ lua5.3 -i -e "print(math.sin(12))"
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
-0.53657291800043
>

En este caso primero ejecuta la operacion que le informamos en -e pero luego utiliza el -i para quedar en el prompt del interprete y nosotros podamos ejecutar los metodos directamente en el mismo, continuando con el ejemplo anterior:

tinchicus@dbn001dsk:~/lenguaje/lua$ lua5.3 -i -e "print(math.sin(12))"
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
-0.53657291800043
>print("Hola, Mundo!")
Hola, Mundo!
>

En este caso si escribimos la funcion print(“Hola, Mundo!”) al dar Enter nos devolvera el mensaje en print y volvera a quedar con el prompt, presionen Ctrl+C o Ctrl+D para salir del mismo, para ir finalizando hablemos sobre los args (argumentos) que podemos enviar, su forma de trabajo es muy similar al de C, C++ o Java donde cada elemento que enviemos despues del archivo o script sera indexado en el array o arreglo, depende como lo conozcan, arg y nosotros por medio de la posicion en el mismo podremos recuperarlo, veamos el siguiente ejemplo:

tinchicus@dbn001dsk:~/lenguaje/lua$ lua5.3 -i -e "print('Hola, Mundo')" hola.lua a b c
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
Hola, Mundo
Hola, Mundo!
> =arg[0]
hola.lua
> = arg[-3]
-i
> return  arg[-1]
print('Hola, Mundo')
> return  arg[2]
b
>

En este caso podemos ver como al enviar todos los parametros, primero ejecuto la opcion -e y nos mostro el print, luego ejecuto el archivo hola.lua, despues le pedimos que devuelve el arg en la posicion 0, nos devolvio el archivo, luego usamos la posicion – 3 y nos devolvio el switch -i y asi con las otras dos opciones.

Anuncios

Primero hablemos sobre el tema de la posicion, a partir de la version 5.1 de Lua el interprete toma como referencia el archivo para la posicion 0, posicion inicial de todo array para cualquier lenguaje de programacion, y todas las posiciones delante de este se interpretan como negativas y todas las posteriores como positivas, en versiones anteriores a esta estos “argumentos” eran ignorados y solo se consideraba al que estaba posterior al script o archivo, nuestra segunda curiosidad es como devolver un valor de ellos, se puede por medio de: = arg[pos] o por medio de return arg[pos] en cualquiera de los dos casos nos mostrara el valor en pantalla.

En resumen, hemos hablado del interprete, como se puede utilizar para llamar al archivo directamente como un script, hemos visto las opciones disponibles, como trabajar con algunas de ellas y como setear y recuperar argumentos, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00