Novo OS 2.0 traz email integrado e aplicativos Android para o PlayBook
Boatos: Microsoft pode ter Office para iPad
Guia de salários: carreira em e-commerce pode pagar até R$ 16 mil
Google ignora controles de privacidade do IE, diz Microsoft
iPad 3 terá SoC Apple A5X
Lista de falhas: iPad 2 é mais seguro que Kindle Fire
Fundador do Megaupload é solto pela justiça
Anonymous: conheça os 10 principais fatos do grupo
Anônimos, trolls e fakes: dicas de etiqueta para lidar na internet
Especial Carreiras em TI: entenda o que faz um arquiteto de solução
Solução capta e reporta falhas em softwares
Guia de salários: profissionais de help desk ganham até R$ 16,7 mil

No último post falei sobre procs e lambdas. Agora vamos ver quais as diferenças entre eles.
Um proc se comporta como um bloco. Invocar um proc é semelhante a produzir um bloco. Já um lambda tem o comportamento de um método. Invocar um lambda é como invocar um método.
Quando um return é chamado dentro de um bloco, não somente há o retorno do bloco, mas também o retorno do método onde está o bloco. O mesmo vale para os procs. Veja um exemplo:
Quando o return dentro do proc my_proc for chamado, também será o retorno do método some_method. Sendo assim, a última linha do método some_method não é executada. Mas se você declarar esse proc fora do método e passá-lo como parâmetro, ao chamar o método call do proc um erro do tipo LocalJumpError será lançado, pois o Ruby entende que está sendo chamado mais de um return para o método.
Com lambda o return somente irá retornar do lambda, continuando a execução normal do método onde o lambda foi invocado.
Mesmo declarando o lambda fora do escopo do método, a execução será normal e um LocalJumpError não acontecerá.
Aqui há uma grande diferença entre procs e lambdas. Como dito anteriormente, lambdas se comportam como métodos. Então quando chamados, precisam receber a quantidade de parâmetros exata com o qual foram declarados. Caso contrário, um erro do tipo ArgumentNumberError ocorrerá.
Já os blocos se comportam de uma maneira mais flexível em relação aos seus parâmetros. Parâmetros que não forem passados recebem nil como valor e parâmetros adicionais serão descartados.
Para finalizar, uma dica: para descobrir a quantidade de parâmetros esperados em um proc ou lambda, use o método arity.
Referências:
Desenvolvedor sênior na Locaweb, empresa na qual está desde 2007, Fernando Hamasaki de Amorim trabalha desde a criação até a arquitetura, modelagem, análise e integração de sistemas e aplicativos na companhia. Graduado em Tecnologia em Informática pela UniSant'Anna, o profissional possui pós-graduação em Tecnologias Web com Ênfase em Java pela Fiap. Já atuou em diversas outras companhias, tais como a TV Online, empresa brasileira pioneira em transmissões ao vivo e SAC Sistemas, que desenvolve ERP. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.
Inovação, tecnologia e futurismo
Bráulio Medina
SIRI, MAJEL, EVI - Colhemos os frutos da semântica e inteligência artificial
Mundo RIA
Zaedy Sayão
Construindo Mobile Apps com Sencha Touch e Phonegap - Parte 1
Conversando sobre Tecnologia
Anderson Rocha
Transpondo Fronteiras da Multidisciplinaridade para Lidar Com Falsificações de Imagens e Vídeos no Século XXI*
Mídias Sociais e Negócios - Direto do Vale do Silício
Marcio Saito
7 Ações em Mídia Social para quem tem mais o que fazer
Expedição WDC: o diário do sinal de internet no Brasil
Expedição WDC
Pegue uma carona na Expedição WDC/Abranet