Pertanyaan Ruby: Bagaimana saya melewati semua parameter dan blok yang diterima oleh satu metode ke metode lainnya?


Saya menulis pembantu yang menambahkan atribut HTML ke tag link_to di rel. Jadi, pemikiran saya adalah bahwa metode pembantu saya harus menerima parameter atau blok apa pun yang dilewatkan ke sana, panggil link_to dengan parameter yang sama, tambahkan atributnya ke apa yang dikembalikan, dan kembalikan hasilnya ke pemanggil.

Seperti ini:

def link_to(*args, &block)
  ... rails code in link_to ...
end

def myhelper(*args, &block) # Notice that at this point, 'args' has already
  link_to()                 # become an array of arguments and 'block' has
  ... my code ...           # already been turned into a Proc.
end

myhelper() # Any arguments or blocks I pass with this call should make
           # it all the way through to link_to.

Jadi, seperti yang Anda lihat, sepertinya tidak ada cara (yang tidak melibatkan banyak kode dan percabangan bersyarat) untuk meneruskan apa yang telah diterima oleh myhelper ke link_to tanpa mengubah semua parameter kembali ke apa yang terlihat sebelum mereka sampai metode saya.

Apakah ada solusi 'Ruby-like' untuk masalah ini?


34
2018-01-13 18:38


asal


Jawaban:


Kamu dapat memakai * dan & dalam pemanggilan metode untuk mengubah array kembali ke daftar argumen dan kembali ke blok. Jadi Anda bisa melakukan ini:

def myhelper(*args, &block)
  link_to(*args, &block)
  # your code
end

63
2018-01-13 18:43