Injetar é a mesma coisa que reduzir em rubi?


114

Eu vi que eles foram documentados juntos aqui . Eles são a mesma coisa? Por que Ruby tem tantos apelidos (como map / collect for arrays)? Muito obrigado.

Respostas:


160

Sim, e também é chamado foldem muitas outras linguagens de programação e em matemática. Ruby usa muitos apelidos para ser intuitivo para programadores com experiências diferentes. Se quiser usar #lengthem um Array, você pode. Se você quiser usar #size, tudo bem!


4
Se você deseja criar seus próprios aliases, pode estar interessado em alias_method .
Nick McCurdy,

23
#length e #count não são equivalentes em Ruby. #length e #size são.
Quolonel Perguntas

9
3. comprimento fornece NoMethodError; 3.size retorna 4. Obviamente, 3 não é uma matriz, mas cuidado com a digitação do pato! (3_000_000_000_000_000.size retorna 8 e 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size retorna 20; parece ser a quantidade de memória que ocupa.)
ChrisPhoenix

18
hm, acho que os docs Ruby atuais ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce podem ser melhores se disser o mesmo injectpara que os usuários não tenham que ler os dois descrição e tente descobrir se eles são iguais ... isso não vai com o princípio DRY?
polaridade

3
@ 太極 者 無極 而 生, bom ponto, eu estava confuso com isso assim como você previu
neontapir

6

Versões mais recentes da documentação do Enumerable#reduceespecificam explicitamente:

Os métodos injecte reducesão aliases. Não há benefício de desempenho para nenhum dos dois.


1
eu gosto de separá-los com base em como é usado, obviamente apenas para fins semânticos. se for um proc ( &:+), reduza, se for um bloco, injete
TheRealMrCrowley
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.