[SP-pm] Dúvida entre Scalar Context e List Context

"Flávio R. Lopes" flavio.lopes at links.inf.br
Mon Mar 22 15:57:15 PDT 2010


Blz Solli e Nelson....acho que deu pra entender!

É que no livro aparece o seguinte exemplo que me deixou em dúvida:

@rocks = qw( talc quartz jade obsidian );
print "How many rocks do you have?\n";
print "I have ", @rocks, " rocks!\n";        # WRONG, prints names of rocks
print "I have ", scalar @rocks, " rocks!\n"; # Correct, gives a number

Então se eu utilizasse a penultima linha, eu estaria retornando um 
Contexto de Lista (pois me traria a lista dos nomes das pedras)
Já na última, estou forçando "@rocks" a me retornar um valor escalar, ou 
seja, esta linha é um Contexto Escalar! (pois me retorna o número de 
elementos que tenho no meu array)

É isso mesmo?


Nelson Ferraz escreveu:
> 2010/3/22 Solli Honorio <shonorio em gmail.com>:
>   
>> Sempre é um prazer ajudar, mas para isto é importante ficar claro qual a tua
>> dúvida ? Em que situação você fica confuso com algum conceito ? E tente
>> explicar o que você entendeu para que possamos saber qual o nível de
>> informação você procura !
>>     
>
> Como diz o Eric S. Raymond, no mundo dos hackers, o tipo de respostas
> que você obtém para suas questões técnicas depende bastante da forma
> que você faz as perguntas.
>
> Quanto ao conceito de contexto, é bem simples.
>
> my @list = (1..10);
> sub get_list {
>     if (wantarray) {
>         return @list;
>     } else {
>         my $item = shift @list;
>         return $item;
>     }
> }
>
> No exemplo acima existem duas maneiras de se chamar get_list():
>
> Contexto escalar:
> my $a = get_list(); # => 1
> my $b = get_list(); # => 2
> my $c = get_list(); # => 3
>
> Contexto de lista:
> my @x = get_list(); # => (1..10)
>
> Ou seja: o contexto é a forma como você chamou a subrotina -- você
> está atribuindo o resultado para um escalar ou para uma lista?
>
> Você frequentemente vai encontrar o wantarray dentro de um operador
> ternário ("?"):
>
> my @list = (1..10);
> sub get_list {
>     return wantarray ? @list : shift @list;
> }
>
> Sugestão de leitura:
>
> http://www.perl.org.br/Artigos/SmartQuestionsHowTo
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>   



More information about the SaoPaulo-pm mailing list