[转帖]ruby 中的 respond_to 和send 方法

[size=large]Ruby中 respond_to? 和 send 的用法 [/size]
原文:[url]http://fujinbing.iteye.com/blog/1125990[/url]

如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。

但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误:

1.
> obj = Object.new
2.
> obj.talk
3.
4.
undefined method 'talk' for #<Object:0x12345678> (NoMethodError)

因为obj对象没法响应talk这个消息,如果使用 respond_to? 这个方法,就可以实现判断对象能否响应给定的消息了:

1.
obj = Object.new
2.
if obj.respond_to?("talk")
3.
obj.talk
4.
else
5.
puts "Sorry, object can't talk!"
6.
end

这样即使obj不能响应talk,也不会使代码产生错误退出,我们也可以应用 respond_to? 方法,根据对象的属性,在程序运行时灵活的控制。

与 respond_to? 相对应,send 方法和点操作符一样,用来给对象发送消息,比如文章开始的 str.upcase ,用 send 可以写成 str.send("upcase"),它们实现的功能是完全相同的,那么为什么还要用send呢?

这是因为,send 发送的消息,在程序运行时是可变的,我们可以根据不同的输入,动态的向对象发送不同的消息。

比如一个图书管理系统,每本书都有诸如作者、出版社、日期、价钱这些,我们要根据用户的输入查询某本书的属性,如果不用send,我们要对程序的输入做一个一个的测试:

1.
print "Search for: "
2.
request = gets.chomp
3.
4.
if request == "writer"
5.
puts book.writer
6.
elsif request == "press"
7.
puts book.press
8.
elseif request == "date"
9.
puts book.date
10.
......

如果用send方法的话,就简单多了:

1.
request = gets.chomp
2.
3.
if book.respond_to?(request)
4.
puts book.send(request)
5.
else
6.
puts "Input error"
7.
end

这样不用在逐个对用户的输入进行测试,只要查询对象能否相应这个消息,再用send将输入直接发送给对象即可。

通过 respond_to? 和 send 这两个方法,我们可以构造更灵活和稳定的程序。
一文让你轻松理解Wi-Fi理论速率计算方式 如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。 阅读详情

相关推荐

Ruby中 respond_to? 和 send 的用法 .

http://selfcontroller.iteye.com/blog/1139556     如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。 但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会...

java-admin 288

【图形学】后处理下的HDR、颜色分级、颜色映射与颜色空间

目录 一、Color Grading 1.1概念 1.2 内置在Unity/UE4 二、HDR、LDR与VDR 2.1 LDR 2.2 HDR 2.3 VDR 三、Tone Mapping 3.1 概念 3.2 算法发展史 3.3 ACES算法 四、常见的颜色空间标准 参考 一、Color Grading 1.1概念 Color Grading(颜色分级、颜色校正)俗称调色,是游戏后期处理中最常见也是必要的一个环节。它能够改变或矫正最终图像的颜色和亮度,你可以把它想象...

ColorGalaxy 8419

Ruby on Rails 之旅(七)—— Ruby on Rails 入门(5)

为什么80%的码农都做不了架构师?>>> ...

weixin_33895516的博客 258

Dual-stream multiple instance learning networks for tumor detection in Whole Slide Image——论文笔记

关于多示例学习的资料网上比较少,但是在医学图像方面还是有人在应用的。主要是因为一般比较大,几个G都是十分常见的,这么大图片是无法直接训练,一般都会进行切图,所以天然契合多示例学习bag和instance的概念。最近看了一篇论文刚好关于这方面的,所以做下笔记。 github地址:https://github.com/binli123/dsmil-wsi paper:https://arxiv.org/abs/2011.08939 背景知识 在多示例学习(MIL)中,一组训练样本被视为包含多个instance的

weixin_41693877的博客 4170

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

Feizhai2的博客 4862

Ruby中 respond_to? 和 send 的用法

如同其他的OO语言一样,在ruby中,通过给对象发送消息,来完成对象的功能,比如 str.upcase ,就是给str发送upcase的消息,点操作符(.),就是用来给对象发送消息的,str接受到消息,然后执行与消息对应的功能。但是,某些时候,我们并不知道对象能响应哪些消息,比如下面的代码就会产生错误:  > obj = Object.new

在水一方 1997

使用VS Code创建第一个Flutter工程

你可以使用任意文本编辑器结合命令行工具来开发Flutter应用。然而,我们推荐使用本文介绍的编辑器插件以获取更好的开发体验。这些插件提供了代码补全、代码高亮、widget辅助编辑等功能,以及为项目的运行和调试提供支持。推荐的开发工具有VS Code、Android Studio、IntelliJ。本文将重点介绍如何使用VS Code进行Flutter应用开发。

2501_91373349的博客 2126

REST on Rails指南5: respond_to

通过上一讲,我们已经对REST on Rails的基本框架有所了解,但是它是如何实现根据客户端的请求类型来返回不同类型的资源表示的呢?这就是我们这一讲所要讲的,秘密就在于respond_to。首先让我们来看看我们在上一讲中生成的airports控制器的代码:class AirportsController   def index    @airports = Airport.find :a

海中天 5056

【ELF2学习板】基于OpenMP与RK3588多核架构优化FFTW的并行计算效率

本文详细介绍了如何在ELF2学习板上利用OpenMP与RK3588多核架构优化FFTW的并行计算效率。通过编译支持OpenMP的FFTW库、合理设置线程绑定与调度策略,以及内存访问优化等技巧,显著提升了FFT计算的性能。实测数据显示,多核并行优化可使4096点FFT计算速度提升一倍以上,特别适合信号处理、图像分析等高性能计算场景。

weixin_30352645的博客 607

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

机器学习深度学习业余选手 479

ruby中的respond to ?用法

今天写脚本,遇到了这个函数,遂搜索及阅读相关代码,整理如下: respond_to 是判断是否是某个类型的方法,比如: 1 ar = "ss" 2 p ar.respond_to?(:to_s) 3 4 #=》true 这个就是判断ar这个变量是不是字符串型的方法,如果是的话,就返回true,否则就false 转载于:https://www.cnblogs.com/fish-...

weixin_30670925的博客 1257

YOLOv12优化:原创自研 | 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD),实现暴力涨点 | CVPR2025 EfficientViM

可以将 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD)中的注意力机制换成专栏其他注意力机制 ,那么你就能实现独一无二的原创。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 664

浅析 Ruby 里的几个动态方法 (一),send 方法

浅析 Ruby 里的几个动态方法 (一),send 方法 第一次写技术方面的贴,欢迎拍砖 :) 动态方法,是去控制静态方法的方法,让静态方法的方法名和方法的内容会根据参数的变化而变化,简而言之,他使方法成为了一个变量。让我们通过一个多态实例,来理解一下最简单的动态方法send。 所谓多态就是把不同种类的东西当作相同的东西来处理。比如我要打开三个箱子,打开的方法都不

灰太狼蝈蝈的博客 5722

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Ruby下用respond_to-检查一个全局函数方法是否存在

写了那么久Ruby,之前还真没弄明白过原来全局定义的函数最终是落在Object类里,而且是作为private_method存在的,比如定义一个全局函数foo: def foo end 此刻用respond_to?("foo")去检查,返回值是false,需要给respond_to?加第二个参数true表示同时也检查私有方法才行,就像这样:respond_to?("foo", true)

494

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

respond_to的解释

DOC中有一段话这么解释respond_to的: “Rails determines the desired response format from the HTTP Accept header submitted by the client” def index @people = Person.find(:all) respond_to do |forma...

你我皆凡人,生在人世间 1758

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ruby中的respond_to和send的用法

如果使用 respond_to? 这个方法,就可以实现判断对象能否响应给定的消息了, 这样即使obj不能响应talk,也不会使代码产生错误退出,我们也可以应用 respond_to? 方法,根据对象的属性,在程序运行时灵活的控制。 obj = Object.new if obj.respond_to?("talk") obj.talk else puts"sorry ,object ca

momo1130的专栏 729

Ruby设置HTTP响应头

1.找到文件夹app/config/initializers/mime_types.rb 2.写入代码: Rack::Mime::MIME_TYPES.merge!({ ".m4a" => "audio/mp4", ".M4A" => "audio/mp4",".ogg" => "application/ogg", ".ogx" => "application/ogg", ".ogv" =>

温故知新 1310

如何在ruby中用http 发送get,post请求

Ruby发送http协议(get、post、https服务器验证、https双向验证) 1. 建立HTTP连接(通过GET方式发送请求参数)      require "open-uri"      #如果有GET请求参数直接写在URI地址中       uri = ' http://uri'      html_response = nil      open(uri

afengxg123的专栏 1万+

Ruby 获取 HTTP 回应的编码和内容

Ruby 获取 HTTP 回应的编码和内容 require 'net/http' response = Net::HTTP.get_response('www.oschina.net, '/code/list') response.code          # => "200" response.body.size     # => 2183

luoye7422的专栏 1235

ruby与javascript面向对象编程的比较

原文:[url]http://howtonode.org/object-graphs-3[/url] 作者分析了ruby与javascript两者在面向对象模式的区别,作者用图形表达这两者在面向对象模式上的区别,值得一看。这里只摘取重点部分,有兴趣的读者可看原文。 Ruby 先来看一个简单的字符串: [code="ruby"]animal = "cat"[/code] 对象图如下: ...

简单就是美 631

RSpec测试框架

[code="ruby"]#参考http://www.slideshare.net/ihower/rspec-7394497 #入门,框架 require 'rspec' class Order #自定义类 end describe Order do #一个类别 #可以Nested加入想要测试的方法是哪个 describe "#amount" do #通常用#开头...

简单就是美 598

在Rails中使用Pry

Pry可看成是IRB的加强版。支持语法高亮等特点。 1、在Gemfile中添加: [quote]group :development do gem 'pry' end[/quote] 运行bundle install。 2、在config/environments/development.r文件最后面添加: [quote]silence_warnings do require...

简单就是美 551

[转]ruby中的闭包

原文:[list] [*]http://kenbeit.com/posts/87/ruby%E4%B8%AD%E7%9A%84%E9%97%AD%E5%8C%85 [/list] 感谢作者的辛勤劳动。 [code="ruby"]# CLOSURES IN RUBY Paul Cantrell http://innig.net # Email: username "can...

简单就是美 426

[转]Ruby中的binding

http://kkito.cn/index.php/blog/getArticle/82/ruby_binding 之前在看erb如何parse的时候发现使用了binding这个东东,没有怎么在意,后来发现很多地方都用到了这个binding。 仔细查了一下手册 Objects of class Binding encapsulate the execution context at ...

简单就是美 394

[转]Ruby中的Rake任务详述

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1683808 Rake简介 Rake和Make及Ant Rake的意思是Ruby Make,一个用ruby开发的代码构建工具。Rake的英文意思是耙子,一种很朴实的劳动工具。真的是很贴切,Rake正是一个功能强大、勤勤恳恳的劳动工具。 但是,为什么Ruby需要...

简单就是美 356
上一篇: [转帖]ruby 中的符号
下一篇: 解决ruby中文乱码
biyeah
博客等级 码龄24年 0粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值