Dúvida no uso do dois pontos( : )

176 views
Skip to first unread message

Bruno de Oliveira

unread,
Apr 14, 2010, 12:54:43 PM4/14/10
to Lua BR
Eu estava lendo o Manual do lua 5.1, e acabei não entendendo muito bem
o uso do dois pontos( : ).

Alguém poderia me dar uma breve explicação e um simples exemplo?

Obrigado.

Marcos Douglas

unread,
Apr 14, 2010, 1:49:02 PM4/14/10
to lua...@googlegroups.com
2010/4/14 Bruno de Oliveira <id.brun...@gmail.com>:

> Eu estava lendo o Manual do lua 5.1, e acabei não entendendo muito bem
> o uso do dois pontos( : ).
>
> Alguém poderia me dar uma breve explicação e um simples exemplo?

Bruno,

A sintaxe utilizando dois-pontos é apenas um "açúcar sintático" da
linguagem, veja:

obj.metodo(obj, argumentos)
obj:metodo(argumentos)

Ambas sintaxes acima são válidas. O que o dois-pontos faz, é passar
como primeiro argumento, o próprio objeto.

- Marcos Douglas

Manoel Campos da Silva Filho

unread,
Apr 14, 2010, 1:59:19 PM4/14/10
to lua...@googlegroups.com
Os dois pontos é usado para passar a própria tabela, de onde a função está sendo chamada, como parâmetro o implícito de nome self, permitindo que dentro da função, sejam acessados os campos da tabela que a chamou.

local calc = {a = 2, b = 3}

--usando : na definicao da funcao, é criado um parâmetro implicito self
--que deverá receber a tabela que está chamando a funcao.
function calc:soma()
  return self.a + self.b
end

--aqui não se usou :  e o efeito é o mesmo,
--mas neste caso, para acessar o self, é preciso declará-lo
--explicitamente
function calc.subtrai(self)
  return self.a - self.b
end

--definida com ponto e sem o parâmetro self explícito,
--logo, só faz sentido chamá-la com ponto, senão
--a tabela chamadora seria passada para o parâmetro a
function calc.inverte_sinal(a)
   return -a
end


--chama soma, passando calc implicitamente para o parâmetro self (também implícito)
print(calc:soma())
calc.a = 3
calc.b = 4

--independente de soma ter sido definida com dois-pontos ou ponto, 
--pode-se chamá-la das duas formas (exceto no último exemplo logo abaixo).
--aqui, é usado ponto, logo, é preciso passar 
--a tabela calc (que tá chamando a soma) para a funcao soma
print(calc.soma(calc))

--o mesmo ocorre com subrai, independente de como foi definida,
--pode-se chamar com dois-pontos ou ponto.
--Como foi definida com ponto e possui o parâmetro self,
--a chamada com ponto deve incluir a tabela chamadora
print(calc.subtrai(calc))

--subtrai foi definida com ., mas inclui o parâmetro self explicitamente,
--logo, a chamada com dois-pontos passará a tabela calc para este parâmetro
print(calc:subtrai())

--Como inverte_sinal foi definida com ponto e sem o self, e possui um parâmetro(s)
--neste caso, não se pode usar dois-pontos, senão, o valor de self seria
--passado ao primeiro parâmetro, no caso o "a"
print(calc.inverte_sinal(1))

2010/4/14 Bruno de Oliveira <id.brun...@gmail.com>
Eu estava lendo o Manual do lua 5.1, e acabei não entendendo muito bem



--
Manoel Campos da Silva Filho
Mestrando em Engenharia Elétrica - TV Digital - UnB
Professor do Instituto Federal de Educação, Ciência e Tecnologia do Tocantins - IFTO
Analista e Desenvolvedor de Sistemas

(61) 3010-1527 / 8515-5798
http://manoelcampos.com
http://twitter.com/manoelcampos
http://br.linkedin.com/in/manoelcampos
http://lab.ifto.edu.br/~mcampos/

manoelcampos at gmail.com
mcampos at ifto.edu.br
contato at manoelcampos.com

--
Rastreador Automatizado de Encomendas: http://rastreador.manoelcampos.com

Bruno de Oliveira

unread,
Apr 16, 2010, 3:22:34 PM4/16/10
to Lua BR
Agora compreendi.

BRUNO ROCHA

unread,
Apr 19, 2010, 3:21:01 PM4/19/10
to lua...@googlegroups.com

   ...
          Alguém saberia me dizer às diferenças entre os módulos
          classlib e unclasslib ?
    
        Um abraço a todos .


Quer transformar suas fotos em emoticons para o Messenger? Clique aqui e veja como.
Reply all
Reply to author
Forward
0 new messages