Apakah menyuntikkan sama dengan mengurangi ruby?

114

Saya melihat bahwa mereka didokumentasikan bersama di sini . Apakah mereka sama? Mengapa Ruby memiliki begitu banyak alias (seperti map / kumpulkan untuk array)? Terima kasih banyak.

Jacky
sumber

Jawaban:

160

Ya, dan itu juga disebut folddalam banyak bahasa pemrograman lain dan Matematika. Banyak alias Ruby agar intuitif bagi pemrogram dengan latar belakang berbeda. Jika Anda ingin menggunakan #lengthpada Array, Anda bisa. Jika Anda ingin menggunakan #size, tidak masalah juga!

Zach
sumber
4
Jika Anda ingin membuat alias sendiri, Anda mungkin tertarik dengan alias_method .
Nick McCurdy
23
#length dan #count tidak setara di Ruby. #length dan #size adalah.
Pertanyaan Quolonel
9
3.length memberikan NoMethodError; 3. ukuran kembali 4. Jelas 3 bukan sebuah larik, tapi hati-hati mengetik bebek! (3_000_000_000_000_000. Ukuran mengembalikan 8 dan 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000. Ukuran mengembalikan 20; tampaknya jumlah memori yang dibutuhkan.)
ChrisPhoenix
18
hm, menurut saya dokumen Ruby saat ini ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce mungkin lebih baik jika dikatakan sama injectsehingga pengguna tidak perlu membaca keduanya deskripsi dan mencoba mencari tahu apakah mereka sama ... bukankah ini sesuai dengan prinsip KERING?
nonopolaritas
3
@ 太極 者 無極 而 生, bagus, saya bingung dengan ini seperti yang Anda prediksi
neontapir
6

Versi dokumentasi yang lebih baru Enumerable#reducemenjelaskannya secara eksplisit:

Metode injectdan reduceadalah alias. Tidak ada manfaat kinerja juga.

aksiak
sumber
1
Saya suka memisahkannya berdasarkan cara penggunaannya, jelas hanya untuk semantik. jika itu proc ( &:+), kurangi, jika itu blok, injeksikan
TheRealMrCrowley