Rails方法send調(diào)用參數(shù)
Rails中有許多方法值得我們?cè)趯W(xué)習(xí)的過(guò)程中去深入探討。那么在這里我們將會(huì)為大家奉獻(xiàn)上有關(guān)Rails方法send的相關(guān)應(yīng)用,希望對(duì)大家有所幫助。#t#
可以使用send方法來(lái)調(diào)用參數(shù)指定的方法:
- name = "Fred"
- puts( name.send( :reverse ) ) #=> derF
- puts( name.send( :upcase ) ) #=> FRED
- name = "Fred" puts( name.send
( :reverse ) ) #=> derF puts
( name.send( :upcase ) ) #=> FRED
盡管文檔規(guī)定Rails方法send必須需要一個(gè)方法符號(hào)作為參數(shù),但是也可以直接使用一個(gè)字符串作為參數(shù),或者,為了保持一致,也可以使用to_sym進(jìn)行方法名稱進(jìn)行相應(yīng)的轉(zhuǎn)換后調(diào)用:
- name = MyString.new( gets() )
# 輸入upcase- methodname = gets().chomp.to_sym
#<= to_sym 并非必需,輸入upcase- puts name.send(methodname) #=>UPCASE
- name = MyString.new( gets() )
# 輸入upcase methodname = gets().chomp.to_sym
#<= to_sym 并非必需,輸入upcase
puts name.send(methodname) #=>UPCASE
下面的這個(gè)例子顯示在運(yùn)行狀態(tài)中通過(guò)Rails方法send動(dòng)態(tài)地執(zhí)行指定的方法:
- class MyString < String
- def initialize( aStr )
- super aStr
- end
- def show
- puts self
- end
- def rev
- puts self.reverse
- end
- end
- print("Enter your name: ") #<= Enter: Fred
- name = MyString.new( gets() )
- print("Enter a method name: " ) #<= Enter: rev
- methodname = gets().chomp.to_sym
- puts( name.send(methodname) ) #=> derF
- class MyString < String def initialize( aStr )
super aStr end def show puts self end def
rev puts self.reverse end end print("Enter
your name: ") #<= Enter: Fred name = MyString
.new( gets() ) print("Enter a method name: " )
#<= Enter: rev methodname = gets().chomp.to_sym
puts( name.send(methodname) ) #=> derF
回憶一下上面使用define_method來(lái)創(chuàng)建Rails方法send的例子,傳遞了方法的名稱m,還為要?jiǎng)?chuàng)建的新方法傳遞了一個(gè)代碼塊@block