诗歌rails之 SEND

可以使用send方法来调用参数指定的方法:
Ruby代码
  1. name = "Fred"  
  2. puts( name.send( :reverse ) )      #=> derF  
  3. puts( name.send( :upcase ) )       #=> FRED  
尽管文档规定send方法必须需要一个方法符号作为参数,但是也可以直接使用一个字符串作为参数,或者,为了保持一致,也可以使用to_sym进行方法名称进行相应的转换后调用:
Ruby代码
  1. name = MyString.new( gets() )     # 输入upcase  
  2. methodname = gets().chomp.to_sym               #<= to_sym 并非必需,输入upcase  
  3. puts name.send(methodname)                     #=>UPCASE  
下面的这个例子显示在运行状态中通过send方法动态地执行指定的方法:
Ruby代码
  1. class MyString < String  
  2.   def initialize( aStr )  
  3.     super aStr  
  4.   end  
  5.   
  6.   def show  
  7.     puts self  
  8.   end  
  9.   def rev  
  10.     puts self.reverse  
  11.   end  
  12. end  
  13.   
  14. print("Enter your name: ")                     #<= Enter: Fred  
  15. name = MyString.new( gets() )  
  16. print("Enter a method name: " )                #<= Enter: rev  
  17. methodname = gets().chomp.to_sym  
  18. puts( name.send(methodname) )                  #=> derF  
回忆一下上面使用define_method来创建方法的例子,传递了方法的名称m,还为要创建的新方法传递了一个代码块@block
posted @ 2009-07-14 17:17  麦飞  阅读(286)  评论(0编辑  收藏  举报