<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jhonathan Paulo Banczek</title>
    <description>The latest articles on DEV Community by Jhonathan Paulo Banczek (@jhoonb).</description>
    <link>https://dev.to/jhoonb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F283386%2F6f8c4029-5fab-48e2-a8b9-7a7ef9cc9ff3.jpeg</url>
      <title>DEV Community: Jhonathan Paulo Banczek</title>
      <link>https://dev.to/jhoonb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jhoonb"/>
    <language>en</language>
    <item>
      <title>Resolvendo uma dependência com poetry dependency management</title>
      <dc:creator>Jhonathan Paulo Banczek</dc:creator>
      <pubDate>Mon, 06 Jul 2020 20:50:48 +0000</pubDate>
      <link>https://dev.to/jhoonb/resolvendo-uma-dependencia-com-poetry-dependency-management-74f</link>
      <guid>https://dev.to/jhoonb/resolvendo-uma-dependencia-com-poetry-dependency-management-74f</guid>
      <description>&lt;p&gt;Usando o &lt;a href="https://python-poetry.org/"&gt;Poetry&lt;/a&gt; para gerenciar um pequeno projeto em Python, me deparo com o seguinte erro ao instalar uma dependência:&lt;/p&gt;

&lt;p&gt;comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;poetry add newspaper3k

Using version ^0.2.8 &lt;span class="k"&gt;for &lt;/span&gt;newspaper3k

Updating dependencies
Resolving dependencies... &lt;span class="o"&gt;(&lt;/span&gt;1.3s&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;ReadError]
file could not be opened successfully
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Falhou ao instalar a dependência. &lt;/p&gt;

&lt;p&gt;Executei o mesmo comando acima passando &lt;code&gt;-vvv&lt;/code&gt; para exibir as mensagens de &lt;em&gt;debug&lt;/em&gt;, omiti parte do debug com &lt;code&gt;[...]&lt;/code&gt; pra não ficar muito extenso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;poetry add newspaper3k &lt;span class="nt"&gt;-vvv&lt;/span&gt;
Using virtualenv: 

&lt;span class="o"&gt;[&lt;/span&gt;...]
PyPI: 18 packages found &lt;span class="k"&gt;for &lt;/span&gt;newspaper3k &lt;span class="k"&gt;*&lt;/span&gt;
Using version ^0.2.8 &lt;span class="k"&gt;for &lt;/span&gt;newspaper3k

Updating dependencies
Resolving dependencies...

&lt;span class="o"&gt;[&lt;/span&gt;...]

PyPI: 1 packages found &lt;span class="k"&gt;for &lt;/span&gt;newspaper3k &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;0.2.8,&amp;lt;0.3.0

&lt;span class="o"&gt;[&lt;/span&gt;...]

   1: selecting feedfinder2 &lt;span class="o"&gt;(&lt;/span&gt;0.0.4&lt;span class="o"&gt;)&lt;/span&gt;
PyPI: Getting info &lt;span class="k"&gt;for &lt;/span&gt;feedparser &lt;span class="o"&gt;(&lt;/span&gt;5.2.1&lt;span class="o"&gt;)&lt;/span&gt; from PyPI
PyPI: No dependencies found, downloading archives
PyPI: Downloading sdist: feedparser-5.2.1.tar.bz2
   1: Version solving took 0.791 seconds.
   1: Tried 1 solutions.

&lt;span class="o"&gt;[&lt;/span&gt;ReadError]
file could not be opened successfully

Traceback &lt;span class="o"&gt;(&lt;/span&gt;most recent call last&lt;span class="o"&gt;)&lt;/span&gt;:

&lt;span class="o"&gt;[&lt;/span&gt;...]

&lt;span class="s2"&gt;"/home/jhoonb/.poetry/lib/poetry/_vendor/py3.8/pkginfo/sdist.py"&lt;/span&gt;, line 26, &lt;span class="k"&gt;in &lt;/span&gt;_get_archive
    archive &lt;span class="o"&gt;=&lt;/span&gt; tarfile.TarFile.open&lt;span class="o"&gt;(&lt;/span&gt;fqn&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/home/jhoonb/.asdf/installs/python/3.8.2/lib/python3.8/tarfile.py"&lt;/span&gt;, line 1604, &lt;span class="k"&gt;in &lt;/span&gt;open
    raise ReadError&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"file could not be opened successfully"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;O instalador tentou baixar e abrir a seguinte &lt;em&gt;lib&lt;/em&gt; &lt;code&gt;feedparser-5.2.1.tar.bz2&lt;/code&gt;, não conseguiu e retornou erro &lt;em&gt;file could not be opened successfully&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;a &lt;em&gt;lib&lt;/em&gt; &lt;a href="https://github.com/codelucas/newspaper"&gt;newspaper3k&lt;/a&gt; depende de &lt;a href="https://github.com/kurtmckee/feedparser/"&gt;feedparser&lt;/a&gt;, mas por algum motivo quebrou na instalação.&lt;/p&gt;

&lt;p&gt;Tentando instalar a dependência que quebrou via &lt;code&gt;poetry&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;poetry add feedparser &lt;span class="nt"&gt;-vvv&lt;/span&gt; 

&lt;span class="o"&gt;[&lt;/span&gt;...]

PyPI: 12 packages found &lt;span class="k"&gt;for &lt;/span&gt;feedparser &lt;span class="k"&gt;*&lt;/span&gt;
Using version ^5.2.1 &lt;span class="k"&gt;for &lt;/span&gt;feedparser

Updating dependencies
Resolving dependencies...

&lt;span class="o"&gt;[&lt;/span&gt;...]

PyPI: 1 packages found &lt;span class="k"&gt;for &lt;/span&gt;feedparser &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;5.2.1,&amp;lt;6.0.0
PyPI: Getting info &lt;span class="k"&gt;for &lt;/span&gt;feedparser &lt;span class="o"&gt;(&lt;/span&gt;5.2.1&lt;span class="o"&gt;)&lt;/span&gt; from PyPI
PyPI: No dependencies found, downloading archives
PyPI: Downloading sdist: feedparser-5.2.1.tar.bz2
   1: Version solving took 0.759 seconds.
   1: Tried 1 solutions.

&lt;span class="o"&gt;[&lt;/span&gt;ReadError]
file could not be opened successfully

Traceback &lt;span class="o"&gt;(&lt;/span&gt;most recent call last&lt;span class="o"&gt;)&lt;/span&gt;:
  File 

&lt;span class="o"&gt;[&lt;/span&gt;...]


&lt;span class="s2"&gt;"/home/jhoonb/.asdf/installs/python/3.8.2/lib/python3.8/tarfile.py"&lt;/span&gt;, line 1604, &lt;span class="k"&gt;in &lt;/span&gt;open
    raise ReadError&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"file could not be opened successfully"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Não conseguimos instalar a &lt;em&gt;lib&lt;/em&gt;. Mas tentando instalar pelo &lt;code&gt;pip&lt;/code&gt; a instalação é concluída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pip3 &lt;span class="nb"&gt;install &lt;/span&gt;feedparser      
pip3 &lt;span class="nb"&gt;install &lt;/span&gt;feedparser  
Collecting feedparser
  Using cached feedparser-5.2.1.tar.gz &lt;span class="o"&gt;(&lt;/span&gt;252 kB&lt;span class="o"&gt;)&lt;/span&gt;
Building wheels &lt;span class="k"&gt;for &lt;/span&gt;collected packages: feedparser
  Building wheel &lt;span class="k"&gt;for &lt;/span&gt;feedparser &lt;span class="o"&gt;(&lt;/span&gt;setup.py&lt;span class="o"&gt;)&lt;/span&gt; ... &lt;span class="k"&gt;done
  &lt;/span&gt;Created wheel &lt;span class="k"&gt;for &lt;/span&gt;feedparser: &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;feedparser-5.2.1-py3-none-any.whl &lt;span class="nv"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;44939 &lt;span class="o"&gt;[&lt;/span&gt;...]
Successfully built feedparser
Installing collected packages: feedparser
Successfully installed feedparser-5.2.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;O problema deve ser no &lt;strong&gt;poetry&lt;/strong&gt;, vamos tentar instalar essa dependência apontando para &lt;em&gt;github&lt;/em&gt;, no &lt;em&gt;branch master&lt;/em&gt;, porque por padrão o branch é &lt;em&gt;develop&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;poetry add git+https://github.com/kurtmckee/feedparser.git#master

Updating dependencies
Resolving dependencies... &lt;span class="o"&gt;(&lt;/span&gt;14.3s&lt;span class="o"&gt;)&lt;/span&gt;

Writing lock file


Package operations: 1 &lt;span class="nb"&gt;install&lt;/span&gt;, 0 updates, 0 removals

  - Installing feedparser &lt;span class="o"&gt;(&lt;/span&gt;5.2.1 cf41851&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Instalado com sucesso! Agora vamos tentar instalar a &lt;em&gt;lib&lt;/em&gt; &lt;code&gt;newspaper3k&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;poetry add newspaper3k                                           
Using version ^0.2.8 &lt;span class="k"&gt;for &lt;/span&gt;newspaper3k

Updating dependencies
Resolving dependencies... &lt;span class="o"&gt;(&lt;/span&gt;16.2s&lt;span class="o"&gt;)&lt;/span&gt;

Writing lock file


Package operations: 23 installs, 0 updates, 0 removals

  - Installing certifi &lt;span class="o"&gt;(&lt;/span&gt;2020.6.20&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing chardet &lt;span class="o"&gt;(&lt;/span&gt;3.0.4&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing idna &lt;span class="o"&gt;(&lt;/span&gt;2.10&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing urllib3 &lt;span class="o"&gt;(&lt;/span&gt;1.25.9&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing requests &lt;span class="o"&gt;(&lt;/span&gt;2.24.0&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing soupsieve &lt;span class="o"&gt;(&lt;/span&gt;1.9.6&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing beautifulsoup4 &lt;span class="o"&gt;(&lt;/span&gt;4.9.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing click &lt;span class="o"&gt;(&lt;/span&gt;7.1.2&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing joblib &lt;span class="o"&gt;(&lt;/span&gt;0.16.0&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing regex &lt;span class="o"&gt;(&lt;/span&gt;2020.6.8&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing requests-file &lt;span class="o"&gt;(&lt;/span&gt;1.5.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing tqdm &lt;span class="o"&gt;(&lt;/span&gt;4.47.0&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing cssselect &lt;span class="o"&gt;(&lt;/span&gt;1.1.0&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing feedfinder2 &lt;span class="o"&gt;(&lt;/span&gt;0.0.4&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing jieba3k &lt;span class="o"&gt;(&lt;/span&gt;0.35.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing lxml &lt;span class="o"&gt;(&lt;/span&gt;4.5.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing nltk &lt;span class="o"&gt;(&lt;/span&gt;3.5&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing pillow &lt;span class="o"&gt;(&lt;/span&gt;7.2.0&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing python-dateutil &lt;span class="o"&gt;(&lt;/span&gt;2.8.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing pyyaml &lt;span class="o"&gt;(&lt;/span&gt;5.3.1&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing tinysegmenter &lt;span class="o"&gt;(&lt;/span&gt;0.3&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing tldextract &lt;span class="o"&gt;(&lt;/span&gt;2.2.2&lt;span class="o"&gt;)&lt;/span&gt;
  - Installing newspaper3k &lt;span class="o"&gt;(&lt;/span&gt;0.2.8&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Conseguimos instalar! Tivemos que adicionar a dependência &lt;code&gt;feedparser&lt;/code&gt; diretamente em nosso projeto apontando para &lt;em&gt;git&lt;/em&gt; em &lt;em&gt;branch master&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Fica em aberto a questão do &lt;strong&gt;poetry&lt;/strong&gt; não conseguir instalar a lib &lt;code&gt;newspaper3k&lt;/code&gt; com a dependência diretamente. O &lt;code&gt;pip&lt;/code&gt; conseguiu resolver o problema.   &lt;/p&gt;

</description>
      <category>poetry</category>
      <category>python</category>
      <category>management</category>
      <category>code</category>
    </item>
    <item>
      <title>Introdução à Linguagem de Programação Lua</title>
      <dc:creator>Jhonathan Paulo Banczek</dc:creator>
      <pubDate>Sun, 19 Apr 2020 17:31:28 +0000</pubDate>
      <link>https://dev.to/jhoonb/introducao-a-linguagem-de-programacao-lua-1aoi</link>
      <guid>https://dev.to/jhoonb/introducao-a-linguagem-de-programacao-lua-1aoi</guid>
      <description>&lt;h1&gt;
  
  
  Lua 5.3
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Conceitos Básicos
&lt;/h1&gt;

&lt;p&gt;Lua é uma linguagem de programação &lt;em&gt;multiparadigma&lt;/em&gt;, &lt;em&gt;interpretada&lt;/em&gt; (executa bytecodes em uma VM baseada em registradores [&lt;em&gt;register-based virtual machine&lt;/em&gt;]), tipagem dinâmica e gerenciamento automático de memória com &lt;em&gt;incremental garbage collection&lt;/em&gt;. &lt;br&gt;
Lua é uma linguagem escrita em &lt;em&gt;C ANSI&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dinamicamente tipada:&lt;/strong&gt; Variáveis em Lua não tem tipos, apenas valores. Não há definição de tipos na linguagem para as variáveis. &lt;/p&gt;
&lt;h1&gt;
  
  
  Tipos
&lt;/h1&gt;

&lt;p&gt;Todos os valores em Lua são &lt;em&gt;first-class values&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Lua tem &lt;strong&gt;8&lt;/strong&gt; tipos básicos: &lt;code&gt;nil&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;function&lt;/code&gt;, &lt;code&gt;userdata&lt;/code&gt;, &lt;code&gt;thread&lt;/code&gt; e &lt;code&gt;table&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;nil&lt;/code&gt;&lt;/strong&gt;: tem valor único = &lt;code&gt;nil&lt;/code&gt;, que deve ser diferente de qualquer outro valor. Representa ausência de valor. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/strong&gt;: tem dois valores, &lt;code&gt;true&lt;/code&gt; e &lt;code&gt;false&lt;/code&gt;, &lt;code&gt;nil&lt;/code&gt; e &lt;code&gt;false&lt;/code&gt; tornam uma condição falsa, qualquer outro valor é &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;number&lt;/code&gt;&lt;/strong&gt;: representa tanto números inteiros (&lt;em&gt;integer&lt;/em&gt;) quanto números reais (&lt;em&gt;floating-point&lt;/em&gt;). (O tipo &lt;code&gt;number&lt;/code&gt; usa duas representações internas, ou dois &lt;em&gt;subtypes&lt;/em&gt;: &lt;code&gt;int&lt;/code&gt; e &lt;code&gt;float&lt;/code&gt;, por padrão os dois 64-bit).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;string&lt;/code&gt;&lt;/strong&gt;: representa uma sequência imutável de &lt;em&gt;bytes&lt;/em&gt;. Também é &lt;em&gt;8-bit clean&lt;/em&gt;, suporta qualquer valor de &lt;em&gt;8-bit&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;function&lt;/code&gt;&lt;/strong&gt;: maneira de representar e manipular funções escritas em Lua e também em C. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;userdata&lt;/code&gt;&lt;/strong&gt;: permite que dados em C sejam armazenados um bloco de memória (&lt;em&gt;raw memory&lt;/em&gt;) em Lua (apenas pode ser usado pela API C).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;thread&lt;/code&gt;&lt;/strong&gt;: representa &lt;em&gt;threads&lt;/em&gt; independentes e é usado para implementar corotinas (&lt;em&gt;coroutines&lt;/em&gt; ou &lt;em&gt;collaborative multithreading&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;table&lt;/code&gt;&lt;/strong&gt;: Implementa &lt;em&gt;associative array&lt;/em&gt;, ou seja, um vetor associativo que pode ter como índices não apenas números, mas qualquer valor de Lua, exceto &lt;code&gt;nil&lt;/code&gt;. As tabelas podem ser heterogêneas; isto é, eles podem conter valores de todos os tipos (exceto &lt;code&gt;nil&lt;/code&gt;). Qualquer chave com valor nulo não é considerada parte da tabela. Por outro lado, qualquer chave que não faça parte de uma tabela tem um valor nulo associado. &lt;strong&gt;As tabelas são o único mecanismo de estruturação de dados&lt;/strong&gt; em Lua; podem ser usadas ​​para representar &lt;em&gt;arrays&lt;/em&gt; (vetores e matrizes), &lt;em&gt;lists&lt;/em&gt;, &lt;em&gt;symbol tables&lt;/em&gt;, &lt;em&gt;sets&lt;/em&gt;, &lt;em&gt;records&lt;/em&gt;, &lt;em&gt;graphs&lt;/em&gt;, &lt;em&gt;trees&lt;/em&gt;, &lt;em&gt;hash table&lt;/em&gt;, etc.&lt;/p&gt;
&lt;h1&gt;
  
  
  Elementos Léxicos
&lt;/h1&gt;

&lt;p&gt;Os identificadores em Lua podem ser qualquer sequência de letras, dígitos e sublinhados (&lt;em&gt;underscore&lt;/em&gt;), não começando com um dígito e não sendo uma palavra reservada da linguagem. &lt;/p&gt;

&lt;p&gt;Lua é uma linguagem &lt;em&gt;case sensitive&lt;/em&gt;, ou seja, diferencia letras maiúsculas e minúsculas. Por convenção, deve-se evitar o uso de identificadores com &lt;em&gt;underscore&lt;/em&gt; e letra maiúsculas, como por exemplo: &lt;code&gt;_VERSION&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Comentários curtos (uma linha) são feitos com &lt;code&gt;--&lt;/code&gt; (dois hífens), para comentários longos (mais de uma linha) se utiliza dois traços seguidos de dois colchetes de abertura &lt;code&gt;--[[&lt;/code&gt; e dois colchetes de fechamento &lt;code&gt;]]&lt;/code&gt;, veja o exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- comentário de uma linha&lt;/span&gt;

&lt;span class="cm"&gt;--[[ comentário
em duas linhas
--]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Palavras Reservadas
&lt;/h1&gt;

&lt;p&gt;Lua possui &lt;strong&gt;22&lt;/strong&gt; palavras reservadas, são elas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;and&lt;/td&gt;
&lt;td&gt;break&lt;/td&gt;
&lt;td&gt;do&lt;/td&gt;
&lt;td&gt;else&lt;/td&gt;
&lt;td&gt;elseif&lt;/td&gt;
&lt;td&gt;end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;for&lt;/td&gt;
&lt;td&gt;function&lt;/td&gt;
&lt;td&gt;goto&lt;/td&gt;
&lt;td&gt;if&lt;/td&gt;
&lt;td&gt;in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;local&lt;/td&gt;
&lt;td&gt;nil&lt;/td&gt;
&lt;td&gt;not&lt;/td&gt;
&lt;td&gt;or&lt;/td&gt;
&lt;td&gt;repeat&lt;/td&gt;
&lt;td&gt;return&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;then&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;td&gt;until&lt;/td&gt;
&lt;td&gt;while&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Outros &lt;em&gt;tokens&lt;/em&gt; da linguagem:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;amp;&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt;&amp;lt;&lt;/td&gt;
&lt;td&gt;&amp;gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;//&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;==&lt;/td&gt;
&lt;td&gt;~=&lt;/td&gt;
&lt;td&gt;&amp;lt;=&lt;/td&gt;
&lt;td&gt;&amp;gt;=&lt;/td&gt;
&lt;td&gt;&amp;lt;&lt;/td&gt;
&lt;td&gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;=&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(&lt;/td&gt;
&lt;td&gt;)&lt;/td&gt;
&lt;td&gt;{&lt;/td&gt;
&lt;td&gt;}&lt;/td&gt;
&lt;td&gt;[&lt;/td&gt;
&lt;td&gt;]&lt;/td&gt;
&lt;td&gt;::&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;;&lt;/td&gt;
&lt;td&gt;:&lt;/td&gt;
&lt;td&gt;,&lt;/td&gt;
&lt;td&gt;.&lt;/td&gt;
&lt;td&gt;..&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Variável
&lt;/h1&gt;

&lt;p&gt;Existem 3 tipos de variáveis: variáveis &lt;strong&gt;globais&lt;/strong&gt;, variáveis &lt;strong&gt;locais&lt;/strong&gt; e &lt;strong&gt;campos da tabela&lt;/strong&gt;. Todas as variáveis por padrão tem &lt;strong&gt;escopo global&lt;/strong&gt;, a menos que declarada explicitamente como local. Antes da primeira atribuição a uma variável, seu valor é &lt;code&gt;nil&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Criando variáveis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;var1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt; &lt;span class="c1"&gt;-- tipo number, int&lt;/span&gt;
&lt;span class="n"&gt;var2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- tipo number, float&lt;/span&gt;

&lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;-- tipo boolean, valor verdadeiro&lt;/span&gt;
&lt;span class="n"&gt;nao_ok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;-- tipo boolean, valor falso&lt;/span&gt;

&lt;span class="n"&gt;lang&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Linguagem Lua'&lt;/span&gt; &lt;span class="c1"&gt;-- tipo string, usando aspas duplas&lt;/span&gt;
&lt;span class="n"&gt;lang&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Linguagem Lua'&lt;/span&gt; &lt;span class="c1"&gt;-- tipo string, usando aspas simples&lt;/span&gt;
&lt;span class="c1"&gt;-- string com mais de uma linha, se usa colchetes&lt;/span&gt;
&lt;span class="n"&gt;lang&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;[[Linguagem de
programação Lua]]&lt;/span&gt;

&lt;span class="c1"&gt;-- table&lt;/span&gt;
&lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;-- tipo table&lt;/span&gt;
&lt;span class="n"&gt;lista2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;-- tipo table&lt;/span&gt;
&lt;span class="n"&gt;agenda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;pedro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'1234-4321'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'5555-5555'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para criar &lt;strong&gt;variáveis locais&lt;/strong&gt;, é necessário usar a palavra reservada &lt;code&gt;local&lt;/code&gt;, veja:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;var1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lua permite múltiplas atribuições, do lado esquerdo uma lista de variáveis e do lado direito uma lista de expressões, os elementos são separados por vírgula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- a tem o valor 100&lt;/span&gt;
&lt;span class="c1"&gt;-- b tem o valor 200.5&lt;/span&gt;
&lt;span class="c1"&gt;-- c tem o valor 'lua'&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Lua'&lt;/span&gt;

&lt;span class="c1"&gt;-- swap&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- a = 1, b = 2&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="c1"&gt;-- a = 2, b = 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Operações Matemáticas
&lt;/h1&gt;

&lt;p&gt;Lua suporta as seguintes operações aritméticas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;descrição&lt;/th&gt;
&lt;th&gt;operador&lt;/th&gt;
&lt;th&gt;exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;soma&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;a + b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;subtração&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;a - b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;multiplicação&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;a * b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;divisão&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;a / b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;divisão inteira&lt;/td&gt;
&lt;td&gt;//&lt;/td&gt;
&lt;td&gt;a // b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;módulo&lt;/td&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;a % b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exponenciação&lt;/td&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;a ^ b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;negativo (operador unário)&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Com exceção do operador de exponenciação &lt;code&gt;^&lt;/code&gt; e de divisão inteira &lt;code&gt;//&lt;/code&gt;, os operadores aritméticos funcionam da seguinte maneira: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Se os dois operandos são números inteiros (&lt;em&gt;int&lt;/em&gt;), a operação é executada sobre números inteiros e o resultado é um número inteiro. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caso contrário, se ambos os operandos forem &lt;em&gt;números&lt;/em&gt; ou &lt;em&gt;strings&lt;/em&gt; que podem ser convertidos em números, eles serão convertidos em &lt;em&gt;float&lt;/em&gt;, a operação será executada seguindo as regras usuais para aritmética de &lt;em&gt;ponto flutuante&lt;/em&gt;, e o resultado é um &lt;em&gt;float&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A exponenciação &lt;code&gt;^&lt;/code&gt; e a divisão &lt;code&gt;/&lt;/code&gt; sempre convertem seus operandos em &lt;em&gt;float&lt;/em&gt; e o resultado é sempre &lt;em&gt;float&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A divisão inteira &lt;code&gt;//&lt;/code&gt; é uma divisão que arredonda pra baixo o número. &lt;/p&gt;

&lt;p&gt;Módulo &lt;code&gt;%&lt;/code&gt; é o resto da divisão inteira.&lt;/p&gt;

&lt;p&gt;Divisão por &lt;code&gt;0&lt;/code&gt; (zero) não gera uma exceção, mas retorna um valor numérico &lt;code&gt;inf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;inf&lt;/code&gt;&lt;/strong&gt; = valor infinito, por exemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- retorna inf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;nan&lt;/code&gt;&lt;/strong&gt; = &lt;em&gt;Not a Number&lt;/em&gt;, é um valor especial usado para representar resultados numéricos indefinidos ou não representáveis, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- nan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Operadores Relacionais
&lt;/h1&gt;

&lt;p&gt;Lua suporta os seguintes operadores relacionais:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;descrição&lt;/th&gt;
&lt;th&gt;operador&lt;/th&gt;
&lt;th&gt;exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;igualdade&lt;/td&gt;
&lt;td&gt;==&lt;/td&gt;
&lt;td&gt;a == a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;desigualdade(diferente)&lt;/td&gt;
&lt;td&gt;~=&lt;/td&gt;
&lt;td&gt;a ~= b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;menor que&lt;/td&gt;
&lt;td&gt;&amp;lt;&lt;/td&gt;
&lt;td&gt;a &amp;lt; b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;maior que&lt;/td&gt;
&lt;td&gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;a &amp;gt; b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;menor ou igual&lt;/td&gt;
&lt;td&gt;&amp;lt;=&lt;/td&gt;
&lt;td&gt;a &amp;lt;= b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;maior ou igual&lt;/td&gt;
&lt;td&gt;&amp;gt;=&lt;/td&gt;
&lt;td&gt;a &amp;gt;= b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Todos os operadores retornam um valor tipo &lt;code&gt;boolean&lt;/code&gt;, que pode ser &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A igualdade &lt;code&gt;==&lt;/code&gt; primeiro compara o tipo de seus operandos. Se os tipos forem diferentes, o resultado será falso. Caso contrário, os valores dos operandos são comparados. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Table&lt;/code&gt;, &lt;code&gt;userdata&lt;/code&gt; e &lt;code&gt;threads&lt;/code&gt; são comparados por referência: dois objetos são considerados iguais apenas se forem o mesmo objeto. Sempre que você cria um novo objeto esse novo objeto é diferente de qualquer objeto existente anteriormente. &lt;/p&gt;

&lt;p&gt;O operador &lt;code&gt;~=&lt;/code&gt; é a negação da igualdade &lt;code&gt;==&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As comparações de igualdade &lt;code&gt;==&lt;/code&gt; não converte &lt;code&gt;string&lt;/code&gt; para &lt;code&gt;number&lt;/code&gt;, ou &lt;code&gt;number&lt;/code&gt; para &lt;code&gt;string&lt;/code&gt;. Sempre irá retornar &lt;code&gt;false&lt;/code&gt;, e o operador &lt;code&gt;~=&lt;/code&gt; retorna &lt;code&gt;true&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;-- false&lt;/span&gt;
&lt;span class="s1"&gt;'0'&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- false&lt;/span&gt;
&lt;span class="s1"&gt;'0'&lt;/span&gt; &lt;span class="o"&gt;~=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;span class="s1"&gt;'0'&lt;/span&gt; &lt;span class="o"&gt;~=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Seguindo o padrão &lt;em&gt;IEEE 754&lt;/em&gt;, o &lt;code&gt;nan&lt;/code&gt; é considerado nem menor, nem igual, nem maior que qualquer valor (incluindo ele próprio).&lt;/p&gt;

&lt;h1&gt;
  
  
  Operadores bit-a-bit
&lt;/h1&gt;

&lt;p&gt;Lua suporta os seguintes operadores bit-a-bit:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;descrição&lt;/th&gt;
&lt;th&gt;operador&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;bitwise AND&lt;/td&gt;
&lt;td&gt;&amp;amp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bitwise OR&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bitwise exclusive OR&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;right shift&lt;/td&gt;
&lt;td&gt;&amp;gt;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;left shift&lt;/td&gt;
&lt;td&gt;&amp;lt;&amp;lt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unary bitwise NOT&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Operadores lógicos
&lt;/h1&gt;

&lt;p&gt;Os operadores lógicos em Lua são &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, e &lt;code&gt;not&lt;/code&gt;. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;descrição&lt;/th&gt;
&lt;th&gt;operador&lt;/th&gt;
&lt;th&gt;exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;e (conjunção)&lt;/td&gt;
&lt;td&gt;and&lt;/td&gt;
&lt;td&gt;a and b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ou (disjunção inclusiva)&lt;/td&gt;
&lt;td&gt;or&lt;/td&gt;
&lt;td&gt;a or b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;não (negado)&lt;/td&gt;
&lt;td&gt;not&lt;/td&gt;
&lt;td&gt;not a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Todos os operadores lógicos consideram &lt;code&gt;false&lt;/code&gt; e &lt;code&gt;nil&lt;/code&gt; como &lt;code&gt;false&lt;/code&gt; e qualquer outra coisa como &lt;code&gt;true&lt;/code&gt;. As expressões lógicas são avaliadas por curto-circuito (&lt;em&gt;short-circuit evaluation&lt;/em&gt;), ou seja, o segundo operando é avaliado apenas se necessário. aqui estão alguns exemplos:&lt;/p&gt;

&lt;p&gt;O operador de negação (&lt;code&gt;not&lt;/code&gt;) sempre retorna &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;O operador &lt;code&gt;and&lt;/code&gt; retorna seu primeiro argumento se esse valor for &lt;code&gt;false&lt;/code&gt; ou &lt;code&gt;nil&lt;/code&gt;, caso contrário, e retorna seu segundo argumento. &lt;/p&gt;

&lt;p&gt;O operador &lt;code&gt;or&lt;/code&gt; retorna seu primeiro argumento se esse valor for diferente de &lt;code&gt;nil&lt;/code&gt; e &lt;code&gt;false&lt;/code&gt;; caso contrário, &lt;code&gt;or&lt;/code&gt; retorna seu segundo argumento. &lt;/p&gt;

&lt;p&gt;Vejamos os exemplos abaixo com &lt;code&gt;nan&lt;/code&gt;, &lt;code&gt;inf&lt;/code&gt; e &lt;code&gt;nil&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;or&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="c1"&gt;-- 'Lua'&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="c1"&gt;-- 'Lua'&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;inf&lt;/span&gt; &lt;span class="c1"&gt;-- 'Lua'&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;error&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;and&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
&lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="c1"&gt;-- nan&lt;/span&gt;
&lt;span class="s1"&gt;'Lua'&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;inf&lt;/span&gt; &lt;span class="c1"&gt;-- inf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;not&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- false&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="s1"&gt;'lua'&lt;/span&gt; &lt;span class="c1"&gt;-- false&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;nan&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;inf&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;-- false&lt;/span&gt;
&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Precedência
&lt;/h1&gt;

&lt;p&gt;A precedência de operadores em Lua, do maior para o menor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;parênteses: &lt;code&gt;(&lt;/code&gt;, &lt;code&gt;)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;exponenciação: &lt;code&gt;^&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;operadores unários: &lt;code&gt;not&lt;/code&gt;, &lt;code&gt;#&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;~&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;multiplicação: &lt;code&gt;*&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;divisão: &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;divisão inteira: &lt;code&gt;//&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;módulo: &lt;code&gt;%&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;adição: &lt;code&gt;+&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;subtração: &lt;code&gt;-&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;concatenação de string: &lt;code&gt;..&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;operadores &lt;em&gt;bit a bit&lt;/em&gt;: &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;code&gt;~&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;operadores relacionais: &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;~=&lt;/code&gt;, &lt;code&gt;==&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;operadores lógicos: &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Os operadores de concatenação &lt;code&gt;..&lt;/code&gt; e exponenciação &lt;code&gt;^&lt;/code&gt; são associativos-à-direita. E todos os outros operadores binários são associativos-à-esquerda.&lt;/p&gt;

&lt;h1&gt;
  
  
  Estruturas de Controle
&lt;/h1&gt;

&lt;p&gt;Em Lua temos estruturas de decisão (condicional) e de repetição, semelhante a qualquer outra linguagem de programação. (Lua a partir da versão 5.2 incluiu o comando &lt;code&gt;goto&lt;/code&gt;).&lt;/p&gt;

&lt;h1&gt;
  
  
  Estrutura Condicional
&lt;/h1&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="cm"&gt;--[[ *exp* é qualquer trecho de código Lua 
que está realizando alguma operação lógica. 
Em uma expressão os valores em Lua como nil 
e false sempre retornam false, qualquer 
outro valor retorna true.
*block* é qualquer trecho de código Lua que 
será executado somente dentro do corpo do condicional
--]]&lt;/span&gt;

&lt;span class="c1"&gt;-- if na mesma linha&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- ou&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; 
  &lt;span class="n"&gt;block&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- usando else if (se senão então) na mesma linha&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;elseif&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- ou&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; 
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;elseif&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Estrutura de Repetição
&lt;/h1&gt;

&lt;p&gt;Para os nossos &lt;em&gt;loops&lt;/em&gt; usamos os clássicos &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;repeat–until&lt;/code&gt; e &lt;code&gt;for&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Usando &lt;code&gt;while&lt;/code&gt; e &lt;code&gt;repeat–until&lt;/code&gt;
&lt;/h1&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- while: enquanto *exp* for verdadeira faça&lt;/span&gt;
&lt;span class="c1"&gt;-- no while verifica a *exp* primeiro, depois executa *block*&lt;/span&gt;

&lt;span class="c1"&gt;-- mesma linha&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- ou&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- repeat–until, repita até que *exp* seja verdadeira&lt;/span&gt;
&lt;span class="c1"&gt;-- em repeat primeiro executa o bloco e depois verifica a exp&lt;/span&gt;

&lt;span class="c1"&gt;-- mesma linha  &lt;/span&gt;
&lt;span class="k"&gt;repeat&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;until&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;

&lt;span class="c1"&gt;-- ou&lt;/span&gt;
&lt;span class="k"&gt;repeat&lt;/span&gt;
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;until&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Usando o &lt;code&gt;for&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;O loop &lt;code&gt;for&lt;/code&gt; em Lua tem duas formas diferentes, uma é um &lt;em&gt;for numérico&lt;/em&gt; e outra um &lt;em&gt;for genérico&lt;/em&gt; (veja as funções &lt;code&gt;pairs&lt;/code&gt; e &lt;code&gt;ipairs&lt;/code&gt; na seção sobre &lt;em&gt;funções Embutidas&lt;/em&gt;):&lt;/p&gt;

&lt;p&gt;for numérico&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- inicial = número inicial&lt;/span&gt;
&lt;span class="c1"&gt;-- limite = número limite&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inicial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limite&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
  &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- ou na mesma linha&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inicial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limite&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Há um terceiro parâmetro opcional: passo (step),&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="cm"&gt;--[[ passo tem um valor padrão de 1, 
pois o loop vai de 1 em 1 iterando 
os elementos do valor inicial ao limite, 
se mudarmos para 2, a iteração será de 2 em 2
--]]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inicial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;passo&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;block&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- na mesma linha&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inicial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;passo&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- exemplo&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ou&lt;/span&gt; &lt;span class="n"&gt;na&lt;/span&gt; &lt;span class="n"&gt;mesma&lt;/span&gt; &lt;span class="n"&gt;linha&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- saida: 1, 3, 5, 9&lt;/span&gt;

&lt;span class="c1"&gt;-- exemplo, tabuada do 5&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"5 x"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="cm"&gt;--[[
saída:
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
--]]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Comando &lt;code&gt;break&lt;/code&gt; 
&lt;/h1&gt;

&lt;p&gt;Para sair (interromper) a execução de um &lt;em&gt;loop&lt;/em&gt; usamos o comando &lt;code&gt;break&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- loop infinito&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"entrou no loop..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="c1"&gt;-- interrompe na primeira iteração&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"nunca será executado"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- outro exemplo&lt;/span&gt;
&lt;span class="c1"&gt;-- observe a linha onde incrementamos nosso 'contador' i&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"entrou no loop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;-- incremento&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 3&lt;/span&gt;
&lt;span class="cm"&gt;--[[ saída:
entrou no loop
entrou no loop
entrou no loop
3
--]]&lt;/span&gt;

&lt;span class="c1"&gt;-- no loop for&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"entrou no loop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="c1"&gt;-- interrompe&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"saiu do loop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"entrou no loop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"saiu do loop"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="cm"&gt;--[[ saída:
entrou no loop
entrou no loop
entrou no loop
saiu do loop
--]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Funções
&lt;/h1&gt;

&lt;p&gt;Como todos os outros tipos em Lua, &lt;code&gt;function&lt;/code&gt; também é &lt;em&gt;first-class-value&lt;/em&gt;, isso significa que você pode atribuir uma função a uma variável, passar uma função por parâmetro e retornar um função como valor.&lt;/p&gt;

&lt;p&gt;Por padrão as funções são anônimas, você atribui a função a uma variável, como por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;diga_ola&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"olá!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- executando&lt;/span&gt;
&lt;span class="n"&gt;diga_ola&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;-- imprime "olá"&lt;/span&gt;

&lt;span class="c1"&gt;-- pode ser escrita em uma única linha&lt;/span&gt;
&lt;span class="n"&gt;diga_ola&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"olá!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;-- Lua fornece syntactic sugar para a definição&lt;/span&gt;
&lt;span class="c1"&gt;-- a função escrita abaixo é equivalente a versão de cima.&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;diga_ola&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"olá"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ao usar o &lt;em&gt;syntactic sugar&lt;/em&gt;, Lua transcreve a função para o formato anônimo. Essas duas formas são equivalentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;nome_da_funcao&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;para&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;nome_da_funcao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Funções podem ter zero ou mais parâmetros e podem ter nenhum ou múltiplos retornos (se usa no final do corpo da função a palavra reservada &lt;code&gt;return&lt;/code&gt;), veja:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- função com 2 parâmetros e 1 retorno&lt;/span&gt;
&lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- v1 = 25&lt;/span&gt;

&lt;span class="c1"&gt;-- 2 parâmetros e 2 retornos&lt;/span&gt;
&lt;span class="n"&gt;somar_multiplar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
  &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;somar_multiplar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- v1 = 46, v2 = 408&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Funções podem receber um número variável de parâmetros(&lt;em&gt;variadic functions&lt;/em&gt;), para isso, como último parâmetro use &lt;code&gt;...&lt;/code&gt;, veja no exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;imprimir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;imprimir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- saída: 1  2  3  4  5  6&lt;/span&gt;
&lt;span class="n"&gt;imprimir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;".org"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- saída: lua  .org&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;O escopo de uma função por padrão é global, mas podemos alterar usando a palavra reservada &lt;code&gt;local&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- v = 9 &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Tabela
&lt;/h1&gt;

&lt;p&gt;Em Lua existe uma única estrutura de dados: &lt;code&gt;table&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- criando uma variavel table&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="c1"&gt;-- vazia&lt;/span&gt;

&lt;span class="c1"&gt;-- usamos o operador unário # para descobrir o tamanho da table&lt;/span&gt;
&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="c1"&gt;-- 0&lt;/span&gt;

&lt;span class="c1"&gt;-- criando com elementos&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;-- funciona como um vetor&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Linguagem"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;-- heterogenea&lt;/span&gt;

&lt;span class="cm"&gt;--[[ quando usado como um vetor, podemos 
acessar via colchetes passando um índice 
--]]&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- 1&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- 2&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- "Lua"&lt;/span&gt;
&lt;span class="n"&gt;linguagem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- linguagem = "Lua"&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;linguagem&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- true&lt;/span&gt;

&lt;span class="cm"&gt;--[[ o índice em em Lua começa em 1 
e não em 0 como nas demais linguagens 
--]]&lt;/span&gt;
&lt;span class="c1"&gt;-- podemos colocar outro table como valor&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"linguagem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"PUC"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="s2"&gt;"roberto"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="c1"&gt;-- tamanho: 5&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- "Lua"&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- table: 0x55a93478f110&lt;/span&gt;
&lt;span class="c1"&gt;-- acessando a tabela dentro da tabela&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- "linguagem"&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- "PUC"&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- indice não existe, retorna nil&lt;/span&gt;
&lt;span class="n"&gt;nome_prof&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- roberto&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"professor:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome_prof&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- professor: roberto&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;

&lt;span class="cm"&gt;--[[ usando table como tabela hash, 
ou (dict em Python), um par de chave-valor (key-value)
--]]&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Roberto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;funcao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"professor"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;-- acessamos através da chave nome e operador . (ponto)&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="c1"&gt;-- "Roberto"&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;funcao&lt;/span&gt; &lt;span class="c1"&gt;-- "professor"&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;outro&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;

&lt;span class="c1"&gt;-- podemos acessar por colchetes&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"nome"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- "Roberto"&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"outro"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="c1"&gt;-- inserindo um novo par chave-valor&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;outro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Knuth"&lt;/span&gt; 
&lt;span class="c1"&gt;-- ou de outra forma&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"outro"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Knuth"&lt;/span&gt; 

&lt;span class="c1"&gt;-- tabelas podem armazenar funções&lt;/span&gt;
&lt;span class="n"&gt;somar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; 
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;somar&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;-- 12&lt;/span&gt;

&lt;span class="c1"&gt;-- usando . (ponto)&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;valor2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;somar&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;valor2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Biblioteca Padrão (&lt;em&gt;Standard Libraries&lt;/em&gt;)
&lt;/h1&gt;

&lt;p&gt;Toda linguagem de programação fornece um conjunto de bibliotecas (funções) que estão disponiveis por padrão. A Biblioteca padrão de Lua é implementada diretamente por uma API em C, e é pequena, enxuta, porém, eficiente.&lt;/p&gt;

&lt;h1&gt;
  
  
  Funções Embutidas
&lt;/h1&gt;

&lt;p&gt;As funções disponíveis por padrão, ou &lt;em&gt;funções embutidas&lt;/em&gt; (&lt;em&gt;built-in function&lt;/em&gt;) são: &lt;code&gt;assert&lt;/code&gt;, &lt;code&gt;collectgarbage&lt;/code&gt;, &lt;code&gt;dofile&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;getmetatable&lt;/code&gt;, &lt;code&gt;ipairs&lt;/code&gt;, &lt;code&gt;load&lt;/code&gt;, &lt;code&gt;loadfile&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;pairs&lt;/code&gt;, &lt;code&gt;pcall&lt;/code&gt;, &lt;code&gt;print&lt;/code&gt;, &lt;code&gt;rawequal&lt;/code&gt;, &lt;code&gt;rawget&lt;/code&gt;, &lt;code&gt;rawlen&lt;/code&gt;, &lt;code&gt;rawset&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;setmetatable&lt;/code&gt;, &lt;code&gt;tonumber&lt;/code&gt;, &lt;code&gt;tostring&lt;/code&gt;, &lt;code&gt;xpcall&lt;/code&gt; e &lt;code&gt;type&lt;/code&gt;. E duas variáveis globais &lt;code&gt;_VERSION&lt;/code&gt; e &lt;code&gt;_G&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Funções básicas
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;assert (v [, message])&lt;/code&gt; levanta um erro (&lt;code&gt;message&lt;/code&gt;) caso &lt;code&gt;v&lt;/code&gt; seja falso, se &lt;code&gt;v&lt;/code&gt; for verdadeiro retorna todos os argumentos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ok'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- v = true, m = 'ok'&lt;/span&gt;

&lt;span class="c1"&gt;-- v = true, m = 'ok', n = 'ok2', o = 'ok3'&lt;/span&gt;
&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ok'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ok2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ok3'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 

&lt;span class="c1"&gt;-- levanta um erro&lt;/span&gt;
&lt;span class="nb"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"errado!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;errado&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="n"&gt;traceback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="s1"&gt;'
    stdin:1: in main chunk
    [C]: in ?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;print (···)&lt;/code&gt; recebe qual número de parâmetros e os imprime na tela:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Olá Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt; &lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Olá"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;    &lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Olá"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Linguagem"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;    &lt;span class="n"&gt;Lua&lt;/span&gt; &lt;span class="n"&gt;Linguagem&lt;/span&gt;

&lt;span class="c1"&gt;-- imprime a referência da tabela&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;linguagem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x559004645b70&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="mi"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;type (v)&lt;/code&gt; retorna uma &lt;code&gt;string&lt;/code&gt; com o tipo de &lt;code&gt;v&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;number&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;number&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Lua'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;string&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;

&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;
&lt;span class="n"&gt;table&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- retorna uma string 'nil' não o valor nil&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;string&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nan&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;string&lt;/span&gt;

&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;tostring(v)&lt;/code&gt; converte o valor &lt;code&gt;v&lt;/code&gt; para uma &lt;code&gt;string&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"aa"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;aa&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x559002715db0&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;2020&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- string da referência&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x559002715db0&lt;/span&gt;

&lt;span class="nb"&gt;tostring&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- string da referência&lt;/span&gt;
&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x559004647b80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;tonumber (e [, base])&lt;/code&gt; converte o valor &lt;code&gt;e&lt;/code&gt; para &lt;code&gt;number&lt;/code&gt;. Se o valor não pode ser convertido para &lt;code&gt;number&lt;/code&gt; retorna &lt;code&gt;nil&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2.3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 2.3&lt;/span&gt;
&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2,3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;span class="nb"&gt;tonumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;dofile ([filename])&lt;/code&gt; abre um arquivo Lua e executa seu conteúdo, se o arquivo não estiver no formato correto ocorrerá um erro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="cm"&gt;--[[
crie outro arquivo teste.lua, por exemplo e dentro
dele coloque códigos Lua:

soma = function(a,b) return a+b end
a, b = 4, 5
c = soma(a, b)
--]]&lt;/span&gt;
&lt;span class="c1"&gt;-- carrega e executa o arquivo&lt;/span&gt;
&lt;span class="nb"&gt;dofile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"teste.lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 4&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 5&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- 9&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;-- 6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;error (message [, level])&lt;/code&gt; leventa um erro com o texto de &lt;code&gt;message&lt;/code&gt;, por padrão &lt;code&gt;level&lt;/code&gt; = &lt;code&gt;1&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Mensagem de Erro"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Mensagem&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="n"&gt;Erro&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="n"&gt;traceback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="s1"&gt;'
    stdin:1: in main chunk
    [C]: in ?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;load (chunk [, chunkname [, mode [, env]]])&lt;/code&gt; carrega um trecho de código Lua, retorna dois valores, o primeiro é uma função o segundo é &lt;code&gt;nil&lt;/code&gt; caso não tenha acontecido nenhum erro, ou uma &lt;code&gt;string&lt;/code&gt; com a mensagem do erro&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"x = 2 + 3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;-- executa o conteúdo x = 2 + 3&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;

&lt;span class="c1"&gt;-- com erro&lt;/span&gt;
&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"x 2 + 3"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- erro sintático&lt;/span&gt;
&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;-- executa o conteúdo x 2 + 3, levanta um erro&lt;/span&gt;
&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt; &lt;span class="s1"&gt;'f'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="n"&gt;traceback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="err"&gt;?&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="s2"&gt;"x 2 + 5"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;syntax&lt;/span&gt; &lt;span class="nb"&gt;error&lt;/span&gt; &lt;span class="n"&gt;near&lt;/span&gt; &lt;span class="s1"&gt;'2'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;loadfile ([filename [, mode [, env]]])&lt;/code&gt; igual o &lt;code&gt;load()&lt;/code&gt; porém carrega de um arquivo.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pcall (f [, arg1, ···])&lt;/code&gt; Executa a função &lt;code&gt;f&lt;/code&gt; com os argumentos fornecidos de &lt;em&gt;modo protegido&lt;/em&gt;. Isso significa que qualquer erro dentro de &lt;code&gt;f&lt;/code&gt; não é propagado; em vez disso, o &lt;code&gt;pcall&lt;/code&gt; captura o erro e retorna um código de status. Seu primeiro resultado é o código de status (um &lt;code&gt;boolean&lt;/code&gt;), que é &lt;code&gt;true&lt;/code&gt; se a chamada for bem-sucedida sem erros. Nesse caso, &lt;code&gt;pcall&lt;/code&gt; também retorna todos os resultados da chamada, após este primeiro resultado. Em caso de erro, &lt;code&gt;pcall&lt;/code&gt; retorna &lt;code&gt;false&lt;/code&gt; mais a mensagem de erro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- erro&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;-- string&lt;/span&gt;
&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;perform&lt;/span&gt; &lt;span class="n"&gt;arithmetic&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="s1"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- exemplo com mais de um retorno&lt;/span&gt;
&lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s2"&gt;"Lua"&lt;/span&gt;

&lt;span class="c1"&gt;-- com erro&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;pcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;perform&lt;/span&gt; &lt;span class="n"&gt;arithmetic&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="s1"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- o restante dos parâmetros ficam como nil &lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;xpcall (f, msgh [, arg1, ···])&lt;/code&gt; Essa função é semelhante à &lt;code&gt;pcall&lt;/code&gt;, exceto que define um novo manipulador de mensagens &lt;code&gt;msgh&lt;/code&gt; (&lt;code&gt;function&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;erro_msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Deu errado!"&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;xpcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;erro_msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="c1"&gt;-- com erro&lt;/span&gt;
&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;xpcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;erro_msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Deu&lt;/span&gt; &lt;span class="n"&gt;errado&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;

&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;xpcall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;error&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;error&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;error&lt;/span&gt; &lt;span class="n"&gt;handling&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;select (index, ···)&lt;/code&gt; Se &lt;code&gt;index&lt;/code&gt; for um número, retornará todos os argumentos após o índice do número do argumento; um número negativo é indexado a partir do final (-1 é o último argumento). Caso contrário, o índice deve ser a &lt;code&gt;string&lt;/code&gt; com '#' e o select retorna o número total de argumentos extras recebidos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x55a350147720&lt;/span&gt;

&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="c1"&gt;-- nil&lt;/span&gt;

&lt;span class="c1"&gt;-- usando com vararg&lt;/span&gt;
&lt;span class="n"&gt;funcao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"quantidade: "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="nb"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;funcao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="n"&gt;quantidade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;

&lt;span class="n"&gt;funcao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;quantidade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;next (table [, index])&lt;/code&gt; Permite percorrer todos os campos de uma tabela. Seu primeiro argumento é uma tabela (&lt;code&gt;table&lt;/code&gt;) e seu segundo argumento é um índice (&lt;code&gt;number&lt;/code&gt;) nesta tabela. &lt;code&gt;next&lt;/code&gt; retorna o próximo índice da tabela e seu valor associado. Quando chamado com &lt;code&gt;nil&lt;/code&gt; como seu segundo argumento, o &lt;code&gt;next&lt;/code&gt; retorna o índice inicial e seu valor associado. Quando chamado com o último índice ou com &lt;code&gt;nil&lt;/code&gt; em uma tabela vazia, o &lt;code&gt;next&lt;/code&gt; retorna &lt;code&gt;nil&lt;/code&gt;. Se o segundo argumento estiver ausente, ele será interpretado como &lt;code&gt;nil&lt;/code&gt;. Em particular, você pode usar &lt;code&gt;next(t)&lt;/code&gt; para verificar se uma tabela está vazia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rawget (table, index)&lt;/code&gt; Obtém o valor real de &lt;em&gt;table[index]&lt;/em&gt;, sem chamar o metamétodo &lt;code&gt;__index&lt;/code&gt;. index pode ser qualquer valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="nb"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rawlen(v)&lt;/code&gt; Retorna o tamanho do objeto &lt;code&gt;v&lt;/code&gt;, pode ser uma &lt;code&gt;table&lt;/code&gt; ou uma &lt;code&gt;string&lt;/code&gt;, sem invocar o metamétodo &lt;code&gt;__len&lt;/code&gt;. Retorna um número inteiro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"abc"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"abc123"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"lua"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="nb"&gt;rawlen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"lua"&lt;/span&gt;&lt;span class="p"&gt;,{}})&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rawset(table, index, value)&lt;/code&gt; Define o valor real da &lt;code&gt;table[index]&lt;/code&gt; como &lt;code&gt;value&lt;/code&gt;, sem chamar o metamétodo &lt;code&gt;__newindex&lt;/code&gt;. &lt;code&gt;table&lt;/code&gt; deve ser uma tabela, &lt;code&gt;index&lt;/code&gt; qualquer valor diferente de &lt;code&gt;nil&lt;/code&gt; e &lt;code&gt;NaN&lt;/code&gt; e &lt;code&gt;value&lt;/code&gt; qualquer valor de Lua. Esta função modifica e retorna a própria &lt;code&gt;table&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;-- nenhum valor no indice 4&lt;/span&gt;
&lt;span class="kc"&gt;nil&lt;/span&gt;

&lt;span class="n"&gt;tabela&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;rawset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tabela&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="n"&gt;tabela&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;rawset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Linguagem"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;Linguagem&lt;/span&gt;

&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tabela&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;Linguagem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rawequal(v1, v2)&lt;/code&gt; Verifica se &lt;code&gt;v1&lt;/code&gt; é igual a &lt;code&gt;v2&lt;/code&gt;, sem chamar o metamétodo &lt;code&gt;__eq&lt;/code&gt;. Retorna um &lt;code&gt;boolean&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="nb"&gt;rawequal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nb"&gt;rawequal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="nb"&gt;rawequal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="nb"&gt;rawequal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="n"&gt;f2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="nb"&gt;rawequal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ipairs (t)&lt;/code&gt; Retorna 3 valores (um &lt;code&gt;iterator function&lt;/code&gt;, a tabela &lt;code&gt;t&lt;/code&gt;, e o valor &lt;code&gt;0&lt;/code&gt;). Itera sobre os pares de chave-valor (1, t[1]), (2, t[2]) até o primeiro valor &lt;code&gt;nil&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;--- usa no for generico&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;ipairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;       &lt;span class="mi"&gt;40&lt;/span&gt;

&lt;span class="c1"&gt;-- inserindo um valor nil no meio da tabela t&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;ipairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="c1"&gt;-- note que iterou até o valor nil ser lido e encerrou.&lt;/span&gt;

&lt;span class="cm"&gt;--[[ se tivermos um elemento no formato chave = valor
ele não é lido, é ignorado.
--]]&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;linguagem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;ipairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;pairs(t)&lt;/code&gt;. se &lt;code&gt;t&lt;/code&gt; tem um &lt;em&gt;metametodo&lt;/em&gt; &lt;code&gt;__pairs&lt;/code&gt;, chama-o com &lt;code&gt;t&lt;/code&gt; como argumento e retorna os três primeiros resultados da chamada. &lt;br&gt;
Caso contrário, retorna três valores: a função &lt;code&gt;next&lt;/code&gt;, a tabela &lt;code&gt;t&lt;/code&gt; e &lt;code&gt;nil&lt;/code&gt;. &lt;code&gt;pairs&lt;/code&gt; itera sobre todas os pares chave-valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
  &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;       &lt;span class="mi"&gt;30&lt;/span&gt;

&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="c1"&gt;-- com chave-valor no meio da tabela&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="n"&gt;nome&lt;/span&gt;    &lt;span class="n"&gt;Lua&lt;/span&gt;

&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Lua"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;autor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Roberto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"TecGraf"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="mi"&gt;20&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="mi"&gt;40&lt;/span&gt;
&lt;span class="n"&gt;autor&lt;/span&gt;   &lt;span class="n"&gt;Roberto&lt;/span&gt;
&lt;span class="n"&gt;nome&lt;/span&gt;    &lt;span class="n"&gt;Lua&lt;/span&gt;
&lt;span class="n"&gt;lab&lt;/span&gt; &lt;span class="n"&gt;TecGraf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h1&gt;
  
  
  Outros Recursos
&lt;/h1&gt;

&lt;p&gt;Ficaram de fora dessa introdução:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As bibliotecas: coroutine library, package library, string manipulation, basic UTF-8 support, table manipulation, mathematical functions, input and output, operating system facilities, debug facilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses recursos serão explicados em outros &lt;em&gt;posts&lt;/em&gt;, e podem ser conhecidos através do &lt;a href="https://www.lua.org/manual/5.3/manual.html#6"&gt;Lua Reference Manual.&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências e Links importantes
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Site Oficial: &lt;a href="http://www.lua.org/"&gt;Lua.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Referência Oficial da Linguagem: &lt;a href="http://www.lua.org/manual/5.3/"&gt;Lua 5.3 Reference Manual&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Livro escrito por um dos autores da linguagem: professor Roberto Ierusalimschy, versão online (Lua 5.0) está desatualizado mas é fundamental &lt;a href="http://www.lua.org/pil/contents.html"&gt;Programming in Lua (first edition)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ebook: &lt;a href="https://store.feistyduck.com/products/programming-in-lua-fourth-edition-ebook"&gt;Programming in Lua, Fourth Edition Author: Roberto Ierusalimschy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Book: &lt;a href="https://www.amazon.com/exec/obidos/ASIN/8590379868/lua-pilindex-20"&gt;Programming in Lua, Fourth Edition Author: Roberto Ierusalimschy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Site dos usuários de Lua, vários documentos, exemplos, tutoriais, etc &lt;a href="http://lua-users.org/"&gt;Lua-users&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Página do professor Fabio Mascarenhas da UFRJ: Curso de Lua &lt;a href="https://dcc.ufrj.br/~fabiom/lua/"&gt;https://dcc.ufrj.br/~fabiom/lua/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>lua</category>
      <category>language</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Meu ambiente de trabalho</title>
      <dc:creator>Jhonathan Paulo Banczek</dc:creator>
      <pubDate>Mon, 30 Mar 2020 20:52:24 +0000</pubDate>
      <link>https://dev.to/jhoonb/meu-ambiente-de-trabalho-pof</link>
      <guid>https://dev.to/jhoonb/meu-ambiente-de-trabalho-pof</guid>
      <description>&lt;p&gt;&lt;strong&gt;Editado em:&lt;/strong&gt; 10/05/2020&lt;/p&gt;

&lt;p&gt;Direto ao assunto: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sistema Operacional:&lt;/strong&gt; &lt;a href="https://ubuntu.com/"&gt;Linux Ubuntu 20.04.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tema:&lt;/strong&gt; Modo Dark do Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal:&lt;/strong&gt; &lt;a href="https://gnunn1.github.io/tilix-web/"&gt;tilix&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell:&lt;/strong&gt; &lt;a href="http://www.zsh.org/"&gt;zsh&lt;/a&gt; com &lt;a href="https://ohmyz.sh/"&gt;ohmyzsh&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gerenciador de versão:&lt;/strong&gt; &lt;a href="https://asdf-vm.com"&gt;asdf&lt;/a&gt;. Com os plugins para: &lt;a href="https://github.com/danhper/asdf-python"&gt;Python 3&lt;/a&gt;, &lt;a href="https://github.com/kennyp/asdf-golang"&gt;Golang&lt;/a&gt; e &lt;a href="https://github.com/Stratus3D/asdf-lua"&gt;Lua&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor de Código:&lt;/strong&gt; &lt;a href="https://www.sublimetext.com/"&gt;Sublime Text 3&lt;/a&gt; com packages: &lt;a href="https://packagecontrol.io/packages/Terminus"&gt;Terminus&lt;/a&gt;, &lt;a href="https://packagecontrol.io/packages/ColorPicker"&gt;ColorPicker&lt;/a&gt; e &lt;a href="https://packagecontrol.io/packages/MarkdownPreview"&gt;Markdown Preview&lt;/a&gt;; Editor no modo &lt;strong&gt;terminal&lt;/strong&gt;: &lt;a href="//micro-editor.github.io/"&gt;Micro&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navegador:&lt;/strong&gt; &lt;a href="https://brave.com/"&gt;Brave&lt;/a&gt; &lt;strong&gt;extensões:&lt;/strong&gt; Lastpass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aplicativos do dia a dia&lt;/strong&gt;: Audacity, Discord, PDFSam, Calibre, Pinta, Gimp, Inkscape, Scribus, QBitorrent, VLC, Nvlc, Virtual Box e Wine para o uso do &lt;em&gt;Winbox&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;E obviamente: &lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt; para uso do &lt;a href="https://github.com/jhoonb"&gt;github.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>code</category>
      <category>development</category>
      <category>environment</category>
    </item>
    <item>
      <title>Deletando tweets antigos com Python 3</title>
      <dc:creator>Jhonathan Paulo Banczek</dc:creator>
      <pubDate>Wed, 04 Dec 2019 01:17:01 +0000</pubDate>
      <link>https://dev.to/jhoonb/deletando-tweets-antigos-com-python-3-3fi4</link>
      <guid>https://dev.to/jhoonb/deletando-tweets-antigos-com-python-3-3fi4</guid>
      <description>&lt;p&gt;Estava em busca de alguma ferramenta para deletar &lt;em&gt;tweets&lt;/em&gt;, procurei e usei vários serviços (&lt;em&gt;online&lt;/em&gt;) que conectavam a API do &lt;em&gt;Twitter&lt;/em&gt; para fazer isso, porém de maneira limitada, ou em alguns casos era necessário pagar. &lt;/p&gt;

&lt;p&gt;Achei uma &lt;em&gt;lib&lt;/em&gt; escrita em &lt;strong&gt;Python&lt;/strong&gt; &lt;a href="https://github.com/koenrh/delete-tweets"&gt;delete-tweets&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Uso
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parte chata:&lt;/strong&gt; você terá que se registrar na api do &lt;em&gt;Twitter&lt;/em&gt;, solicitar acesso para criar &lt;em&gt;app&lt;/em&gt;... Eu tive que enviar alguns &lt;em&gt;emails&lt;/em&gt; explicando o que eu estava querendo fazer, depois de algum tempo o &lt;em&gt;Twitter&lt;/em&gt; liberou meu acesso a &lt;em&gt;API&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Nada melhor que a própria documentação explicando como fazer isso:&lt;br&gt;
&lt;a href="https://developer.twitter.com/en/docs/basics/getting-started"&gt;Get started with the Twitter developer platform&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Basicamente o roteiro é o seguinte:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/basics/developer-portal/overview"&gt;Solicite e receba aprovação para uma conta de desenvolvedor do Twitter.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/basics/apps/overview"&gt;Crie um aplicativo (app) com sua conta de desenvolvedor do Twitter.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.twitter.com/en/docs/basics/apps/guides/the-app-management-dashboard"&gt;Gere as &lt;em&gt;chaves&lt;/em&gt; de API do seu aplicativo e os &lt;em&gt;tokens&lt;/em&gt; de acesso do usuário.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As chaves/tokens são exibidos na página do seu &lt;em&gt;app&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2m6zLQP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/88b2e87b54acb5ed1e1295abb9dcae52/467504997e6d9535-a0/s1280x1920/62ec55903d38f1d9015c8600d4e345aaaeb1cbc7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2m6zLQP5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/88b2e87b54acb5ed1e1295abb9dcae52/467504997e6d9535-a0/s1280x1920/62ec55903d38f1d9015c8600d4e345aaaeb1cbc7.jpg" alt="tokens..."&gt;&lt;/a&gt;&lt;br&gt;
(obviamente você não deve deixar essas informações públicas!!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vamos apagar os tweets usando para isso os dados baixados da conta, &lt;a href="https://twitter.com/settings/your_twitter_data"&gt;acesse seu twitter e solicite seus dados.&lt;/a&gt; &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_fXG1yD9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/97fa0ef1150e4965b69992c9b446cfbc/745c725f5550a24f-40/s640x960/914a68c37da79cd08610fc647c381b2165fb3530.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_fXG1yD9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/97fa0ef1150e4965b69992c9b446cfbc/745c725f5550a24f-40/s640x960/914a68c37da79cd08610fc647c381b2165fb3530.jpg" alt="no twitter..."&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Depois de solicitar seus dados, descompacte e copie o arquivo "&lt;strong&gt;tweets.js&lt;/strong&gt;" para um local. (Todos os seus tweets estão dentro dele.)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GEWKWS3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/3c0c623db3c74c589f45b6308710d61d/92d9161bc86137b9-ed/s250x400/d4859b08ba7ffc3ee65617e966a06638b1bb85ba.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GEWKWS3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://66.media.tumblr.com/3c0c623db3c74c589f45b6308710d61d/92d9161bc86137b9-ed/s250x400/d4859b08ba7ffc3ee65617e966a06638b1bb85ba.jpg" alt="no seu diretório..."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observação:&lt;/strong&gt; Estou usando &lt;strong&gt;Python 3&lt;/strong&gt; no Linux/Ubuntu 18.04.&lt;/p&gt;

&lt;p&gt;Instale via &lt;strong&gt;pip&lt;/strong&gt; o &lt;strong&gt;delete-tweets&lt;/strong&gt; com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pip3 &lt;span class="nb"&gt;install &lt;/span&gt;delete-tweets 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Exporte as chaves para seu terminal, com os comandos (execute):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TWITTER_CONSUMER_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"seu_TWITTER_CONSUMER_KEY"&lt;/span&gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TWITTER_CONSUMER_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"seu_TWITTER_CONSUMER_SECRET"&lt;/span&gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TWITTER_ACCESS_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"seu_TWITTER_ACCESS_TOKEN"&lt;/span&gt;
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;TWITTER_ACCESS_TOKEN_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"seu_TWITTER_ACCESS_TOKEN_SECRET"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Agora vamos executar passando por parâmetro as seguintes informações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;delete tweets até data...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;e o arquivo que baixamos do twitter&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veja o exemplo, no terminal digite:&lt;br&gt;
(Esse comando irá apagar tweet por tweet até o dia 01-01-2018, o&lt;br&gt;
ID dos tweets  se encontra no arquivo tweet.js)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;delete-tweets &lt;span class="nt"&gt;--until&lt;/span&gt; 2018-01-01 tweet.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Se o comando acima retornar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;delete-tweets: comando não encontrado
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Você precisa escrever o local onde o &lt;strong&gt;delete-tweet&lt;/strong&gt; foi salvo,&lt;br&gt;
no meu caso, como uso o &lt;a href="https://github.com/asdf-vm/asdf"&gt;&lt;em&gt;.asdf&lt;/em&gt;&lt;/a&gt; para gerenciar meu &lt;em&gt;runtime&lt;/em&gt;, eu tive que executar assim (porque o &lt;strong&gt;delete-tweet&lt;/strong&gt; não estava no meu &lt;em&gt;PATH&lt;/em&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;dev@jhoonb:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/home/jhoonb/.asdf/installs/python/3.7.4/bin/delete-tweets &lt;span class="nt"&gt;--until&lt;/span&gt; 2018-01-01 tweet.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lembre de executar o comando acima na pasta onde você salvou o arquivo &lt;em&gt;tweet.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Feito!&lt;/p&gt;

&lt;p&gt;Deletei meus &lt;em&gt;tweets&lt;/em&gt; antigos!&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Demorou quase 24 horas para deletar todos os tweets, afinal eu tinha mais de 76K. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em certos momentos tive que matar o programa e continuar depois...&lt;br&gt;
Caso faça isso (e não queira que o programa verifique novamente os tweets ja deletados) você pode editar o arquivo &lt;em&gt;tweet.js&lt;/em&gt; e apagar os já deletados. Lembre de salvar qual foi o &lt;strong&gt;último ID deletado&lt;/strong&gt;, procure ele no arquivo e exclua os tweets acima dele.&lt;/p&gt;

&lt;p&gt;Observe com muita atenção a edição desse arquivo, use um editor como &lt;a href="https://www.sublimetext.com/"&gt;&lt;strong&gt;Sublime Text 3&lt;/strong&gt;&lt;/a&gt; para marcar(&lt;em&gt;Edit &amp;gt; Mark &amp;gt; Set Mark&lt;/em&gt;) o ponto onde encontrou o ID, depois vá até a linha do tweet limite e selecione usando &lt;em&gt;Edit &amp;gt; Mark &amp;gt; Select to Mark&lt;/em&gt;, quando a seleção for feita delete o trecho.&lt;/p&gt;

&lt;p&gt;Tentei editar esse arquivo com o &lt;a href="https://code.visualstudio.com/"&gt;&lt;strong&gt;VS Code&lt;/strong&gt;&lt;/a&gt; o editor que estou usando no momento, contudo ele se apresentou muito lento para efetuar esse processo. O Sublime Text fez o serviço sem travar. &lt;/p&gt;

</description>
      <category>python</category>
      <category>twitter</category>
    </item>
  </channel>
</rss>
