Saya ingin meneruskan argumen ke metode yang didefinisikan menggunakan define_method, bagaimana saya melakukannya?
ruby
metaprogramming
Sixty4Bit
sumber
sumber
... dan jika Anda menginginkan parameter opsional
... Argumen sebanyak yang Anda inginkan
... kombinasi dari
... mereka semua
Memperbarui
Ruby 2.0 memperkenalkan gambar percikan ganda
**
(dua bintang) yang ( saya kutip ):... dan tentu saja Anda dapat menggunakannya dalam metode define juga :)
Contoh atribut yang dinamai:
Saya mencoba membuat contoh dengan argumen kata kunci, splat, dan double splat semuanya dalam satu:
atau
... tapi ini tidak akan berhasil, sepertinya ada batasan. Ketika Anda berpikir tentang hal itu masuk akal karena operator percikan adalah "menangkap semua argumen yang tersisa" dan percikan ganda adalah "menangkap semua argumen kata kunci yang tersisa" karena itu pencampuran mereka akan mematahkan logika yang diharapkan. (Saya tidak punya referensi untuk membuktikan hal ini, doh!)
perbarui 2018 Agustus:
Artikel ringkasan: https://blog.eq8.eu/til/metaprogramming-ruby-examples.html
sumber
a.foo 1
bukanfoo 1
). Terima kasih!Selain jawaban Kevin Conner: argumen blok tidak mendukung semantik yang sama dengan argumen metode. Anda tidak dapat mendefinisikan argumen default atau memblokir argumen.
Ini hanya diperbaiki di Ruby 1.9 dengan sintaks "stabby lambda" alternatif baru yang mendukung semantik argumen metode penuh.
Contoh:
sumber
Dengan 2.2 Anda sekarang dapat menggunakan argumen kata kunci: https://robots.thoughtbot.com/ruby-2-keyword-arguments
sumber