O que esperar do próximo iPhone
A TI deve confiar nos dispositivos móveis?
Plantronics cria comunidade de desenvolvedores
Guia de salários: gerentes de bancos de dados recebem até R$ 8,7 mil
Microsoft: Windows 8 chegará no final deste ano
Ah, Facebook, por que não consigo lhe largar?
4G Americas: saiba o que as operadoras devem fazer para atender demanda por dados
ATUALIZADA - Brasil: veja a lista de dispositivos que serão atualizados para Android 4.0
EMC lança mais de 40 produtos entre hardwares e softwares
Forrester: preparem-se para a segunda onde de aplicativos móveis
ATUALIZADA - Fique por dentro da compra da Motorola Mobility pelo Google
Windows Phone 7: usuários não poderão baixar apps do Marketplace

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, Fernando Hamasaki de Amorim atua em projetos utilizando Ruby e Rails. Pós-graduado em Tecnologias Web Fiap, trabalha desde 2000 com desenvolvimento web, onde já desenvolveu em várias plataformas e linguagens, como .NET, Java, JavaScript, PHP e ASP. Também foi palestrante do FISL e da RubyConf Brasil. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.
Conscientização e Dicas de Segurança da Informação
Anderson Santana
Artigo: Proteção de Dados
Dirty & Ugly Web
Paulino Michelazzo
Caiu na rede
Internet Upgrade
Victor Maeda
Ataques DDos aos bancos brasileiros.
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