`

Rails方法send调用参数

 
阅读更多
可以使用send方法来调用参数指定的方法:

运用send的理由,可以用字符串转换成你要调用的方法。

name = "Fred"    
puts( name.send( :reverse ) ) #=> derF    
puts( name.send( :upcase ) ) #=> FRED    
name = "Fred" puts( name.send
( :reverse ) ) #=> derF puts
( name.send( :upcase ) ) #=> FRED
 
尽管文档规定Rails方法send必须需要一个方法符号作为参数,但是也可以直接使用一个字符串作为参数,或者,为了保持一致,也可以使用to_sym进行方法名称进行相应的转换后调用:

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 

下面的这个例子显示在运行状态中通过Rails方法send动态地执行指定的方法:

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来创建Rails方法send的例子,传递了方法的名称m,还为要创建的新方法传递了一个代码块@block
分享到:
评论

相关推荐

    rails-exporter-源码.rar

    3. 文件生成与下载:Rails 内置的 send_data 和 send_file 方法可用于在服务器端生成文件后发送到客户端下载。 五、源码学习步骤 1. 阅读项目 README 文件,了解基本用法和安装步骤。 2. 分析 models 文件,理解...

    Ruby中文参考手册

    方法调用可以使用`.`或`::`操作符,还有send方法用于动态调用。 5. **异常处理**:Ruby的异常处理使用begin/rescue/else/ensure结构,可以帮助开发者捕获并处理运行时错误。 6. **内建库和框架**:Ruby 1.8.1包含...

    prawn_rails_demo:prawn_rails 插件的演示

    在控制器中,你可以使用`send_data`或`send_file`方法,指定PDF内容和文件名,使用户能够下载或直接预览。 5. **模板语言支持**: Prawn Rails支持ERB和Haml模板语言,这意味着你可以在PDF模板中使用Ruby代码,...

    ruby on rose开发文档-开发

    在Ruby on Rails中,理解Ruby的基本语法、类和对象、模块、块、 Proc和Lambda、以及元编程特性(如`send`和`method_missing`)是至关重要的。 2. **ActiveRecord**:作为Rails的ORM(对象关系映射)组件,...

    ruby中文教程(源代码)

    - `send`方法:通过`send`方法,可以动态地调用对象的方法,甚至包括私有方法。 - `eval`和`instance_eval`:`eval`可以执行字符串中的Ruby代码,`instance_eval`允许在特定对象的上下文中执行代码。 - `module_...

    Ruby语言相关项目的示例

    - `send`和`public_send`方法可以动态调用对象的方法。 6. **Gem和Ruby生态系统** - Ruby的Gem是包管理系统,它包含了许多预构建的库和工具,如Rails框架。 - Bundler是管理Gem依赖的工具,确保项目运行时依赖的...

    Ruby 学习指南.rar

    - send方法:调用对象的任何方法,即使没有点操作符。 4. **Gem与Ruby生态系统** - Gem是Ruby的包管理系统,用于分发和安装库和工具。 - Bundler:管理项目依赖的Gem版本,确保开发环境和生产环境的一致性。 - ...

    ROR 文件的上传与下载

    `send_data`的`type`参数应根据文件类型设定(如`image/jpeg`),而`disposition`参数决定了数据的展示方式(`inline`表示直接显示,`attachment`表示下载)。 #### 模型处理:文件的持久化 `SaveFile`模型负责...

    ruby 中文文档 入门必学

    文档会讲解如何使用`send`方法动态调用方法,`class_eval`和`instance_eval`等方法改变类结构,以及定义方法的动态方式(如`define_method`)。 5. **异常处理**:Ruby中的异常处理使用`begin/rescue/ensure/end`...

    Ruby In a Nutshell

    - `send`方法可以调用对象的任何方法,`define_method`用于在运行时定义方法。 10. **Gem和Ruby生态系统** - Ruby的包管理器是`gem`,用于安装、管理和更新第三方库。 - Rails是Ruby最著名的Web开发框架,它基于...

    Ruby语言中文教程.rar

    `send`方法可以调用对象的任何方法,`define_method`可以动态定义方法。 8. **Gem生态系统**:Ruby的包管理器Gem提供了丰富的第三方库,如Rails(Web开发框架)、RSpec(测试框架)、Sinatra(轻量级Web框架)等,...

    Ruby语言中文教程

    这是通过元类(meta-class)和`send`方法实现的。例如,你可以动态添加方法到类或对象,甚至在运行时改变已有的方法定义。 关于Ruby的文件和IO操作,它提供了丰富的API,可以方便地读写文件、处理流和进行网络通信...

    《Ruby用户指南》中文版

    Ruby的eval函数可以执行字符串作为代码,send方法能够调用对象的任何方法,甚至动态添加或修改方法。这些特性使得Ruby非常适合进行快速开发和原型构建。 Ruby on Rails 是Ruby最著名的Web框架,虽然《Ruby用户指南...

    patella:允许人们记忆到 memcache 的 Ruby gem

    Patella 最初是一个 gem,用于在后台记住 Rails 应用程序中昂贵的方法调用并异步加载它们。 Jeff Dwyer 在 RailsConf 2012 上讨论过它: 安装 将此行添加到应用程序的 Gemfile 中: gem 'patella' 然后执行: ...

    Ruby之路

    书中会讲解Ruby的`send`方法、`class_eval`、`instance_eval`,以及类和模块的定义方法。 4. **块、迭代器和 Proc**:Ruby中的块(Block)是代码的匿名封装,常与迭代器结合使用,如`each`、`map`等。Proc是块的可...

    ruby语言帮助文档(简体中文)

    这得益于Ruby的反射API和`send`方法,可以动态地调用方法、添加和删除方法、修改类的结构等。 7. **标准库和Gem**:Ruby的标准库提供了大量的内置模块和类,覆盖了网络、文件系统操作、日期时间处理等常见任务。...

    ruby基础学习资料

    例如,`method_missing`方法可以捕获未定义的方法调用,`send`方法允许动态调用方法。 学习这些基础后,你将能够编写简单的Ruby程序,理解面向对象编程的基本概念,并逐步探索更高级的主题,如元类、Gem包管理、...

    Ruby学习思维导图.pdf

    - **send**:动态调用对象的方法。 - **respond_to?**:检查对象是否响应某个方法。 - **method**:获取方法对象。 - **class_eval**:在类的上下文中执行代码。 - **instance_eval**:在对象的上下文中执行代码。 ...

Global site tag (gtag.js) - Google Analytics