可以使用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
分享到:
相关推荐
3. 文件生成与下载:Rails 内置的 send_data 和 send_file 方法可用于在服务器端生成文件后发送到客户端下载。 五、源码学习步骤 1. 阅读项目 README 文件,了解基本用法和安装步骤。 2. 分析 models 文件,理解...
方法调用可以使用`.`或`::`操作符,还有send方法用于动态调用。 5. **异常处理**:Ruby的异常处理使用begin/rescue/else/ensure结构,可以帮助开发者捕获并处理运行时错误。 6. **内建库和框架**:Ruby 1.8.1包含...
在控制器中,你可以使用`send_data`或`send_file`方法,指定PDF内容和文件名,使用户能够下载或直接预览。 5. **模板语言支持**: Prawn Rails支持ERB和Haml模板语言,这意味着你可以在PDF模板中使用Ruby代码,...
在Ruby on Rails中,理解Ruby的基本语法、类和对象、模块、块、 Proc和Lambda、以及元编程特性(如`send`和`method_missing`)是至关重要的。 2. **ActiveRecord**:作为Rails的ORM(对象关系映射)组件,...
- `send`方法:通过`send`方法,可以动态地调用对象的方法,甚至包括私有方法。 - `eval`和`instance_eval`:`eval`可以执行字符串中的Ruby代码,`instance_eval`允许在特定对象的上下文中执行代码。 - `module_...
- `send`和`public_send`方法可以动态调用对象的方法。 6. **Gem和Ruby生态系统** - Ruby的Gem是包管理系统,它包含了许多预构建的库和工具,如Rails框架。 - Bundler是管理Gem依赖的工具,确保项目运行时依赖的...
- send方法:调用对象的任何方法,即使没有点操作符。 4. **Gem与Ruby生态系统** - Gem是Ruby的包管理系统,用于分发和安装库和工具。 - Bundler:管理项目依赖的Gem版本,确保开发环境和生产环境的一致性。 - ...
`send_data`的`type`参数应根据文件类型设定(如`image/jpeg`),而`disposition`参数决定了数据的展示方式(`inline`表示直接显示,`attachment`表示下载)。 #### 模型处理:文件的持久化 `SaveFile`模型负责...
文档会讲解如何使用`send`方法动态调用方法,`class_eval`和`instance_eval`等方法改变类结构,以及定义方法的动态方式(如`define_method`)。 5. **异常处理**:Ruby中的异常处理使用`begin/rescue/ensure/end`...
- `send`方法可以调用对象的任何方法,`define_method`用于在运行时定义方法。 10. **Gem和Ruby生态系统** - Ruby的包管理器是`gem`,用于安装、管理和更新第三方库。 - Rails是Ruby最著名的Web开发框架,它基于...
`send`方法可以调用对象的任何方法,`define_method`可以动态定义方法。 8. **Gem生态系统**:Ruby的包管理器Gem提供了丰富的第三方库,如Rails(Web开发框架)、RSpec(测试框架)、Sinatra(轻量级Web框架)等,...
这是通过元类(meta-class)和`send`方法实现的。例如,你可以动态添加方法到类或对象,甚至在运行时改变已有的方法定义。 关于Ruby的文件和IO操作,它提供了丰富的API,可以方便地读写文件、处理流和进行网络通信...
Ruby的eval函数可以执行字符串作为代码,send方法能够调用对象的任何方法,甚至动态添加或修改方法。这些特性使得Ruby非常适合进行快速开发和原型构建。 Ruby on Rails 是Ruby最著名的Web框架,虽然《Ruby用户指南...
Patella 最初是一个 gem,用于在后台记住 Rails 应用程序中昂贵的方法调用并异步加载它们。 Jeff Dwyer 在 RailsConf 2012 上讨论过它: 安装 将此行添加到应用程序的 Gemfile 中: gem 'patella' 然后执行: ...
书中会讲解Ruby的`send`方法、`class_eval`、`instance_eval`,以及类和模块的定义方法。 4. **块、迭代器和 Proc**:Ruby中的块(Block)是代码的匿名封装,常与迭代器结合使用,如`each`、`map`等。Proc是块的可...
这得益于Ruby的反射API和`send`方法,可以动态地调用方法、添加和删除方法、修改类的结构等。 7. **标准库和Gem**:Ruby的标准库提供了大量的内置模块和类,覆盖了网络、文件系统操作、日期时间处理等常见任务。...
例如,`method_missing`方法可以捕获未定义的方法调用,`send`方法允许动态调用方法。 学习这些基础后,你将能够编写简单的Ruby程序,理解面向对象编程的基本概念,并逐步探索更高级的主题,如元类、Gem包管理、...
- **send**:动态调用对象的方法。 - **respond_to?**:检查对象是否响应某个方法。 - **method**:获取方法对象。 - **class_eval**:在类的上下文中执行代码。 - **instance_eval**:在对象的上下文中执行代码。 ...