Bagaimana saya bisa melakukan apa yang mereka bicarakan di sini , tetapi di Ruby?
Bagaimana Anda melakukan fungsi pada suatu objek? dan bagaimana Anda melakukan fungsi global (lihat jawaban jetxee pada posting yang disebutkan)?
CONTOH KODE:
event_name = "load"
def load()
puts "load() function was executed."
end
def row_changed()
puts "row_changed() function was executed."
end
#something here to see that event_name = "load" and run load()
PEMBARUAN: Bagaimana Anda bisa sampai ke metode global? atau fungsi global saya?
Saya mencoba baris tambahan ini
puts methods
dan memuat dan row_change di mana tidak terdaftar.
ruby
metaprogramming
BuddyJoe
sumber
sumber
Tiga Cara:
send
/call
/eval
- dan Tolok UkurnyaDoa yang khas (untuk referensi):
Menggunakan
send
Menggunakan
call
Menggunakan
eval
Tolak ukur
Penghargaan diberikan pada posting blog ini yang menjelaskan lebih banyak tentang tiga metode dan juga menunjukkan cara memeriksa apakah metode tersebut ada.
sumber
Class.send("classVariable") = 5
? Itu melempar kesalahan. Apakah ada jalan keluarnya? Hal yang sama berlaku untuk menggunakanClass.method("classVariable").call() = 5
call
memasukkan instantiating objek metode (m.test.method(:length)
) untuk secara akurat mewakili waktu sebenarnya? Saat menggunakancall
Anda kemungkinan akan instantiate objek metode setiap kali.Gunakan ini:
Sederhana bukan?
Sedangkan untuk global , saya pikir cara Ruby adalah mencarinya menggunakan
methods
metode.sumber
"my_string".method('blah') #=> NameError: undefined method
bla 'untuk kelasString'
Secara pribadi saya akan mengatur referensi hash untuk berfungsi dan kemudian menggunakan string sebagai indeks untuk hash. Anda kemudian memanggil referensi fungsi dengan parameternya. Ini memiliki keuntungan karena tidak membiarkan string yang salah memanggil sesuatu yang tidak ingin Anda panggil. Cara lain pada dasarnya
eval
adalah string. Jangan lakukan ini.PS jangan malas dan benar-benar mengetikkan seluruh pertanyaan Anda, alih-alih menautkan sesuatu.
sumber