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.

Jacky
fonte

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!

Zach
fonte
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.

axíaco
fonte
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