Messages, not Function Calls
Java Programmers tend to think of obj.method() as looking up a member function in a table and calling it.
Ruby programmers tend to think of obj.method as sending a message to an object.
The difference is subtle, but important!
class VCR
def initialize
@messages = []
end
def method_missing(method, *args, &block)
@messages << [method, args, block]
end
def play_back_to(obj)
@messages.each do |method, args, block|
obj.send(method, *args, &block)
end
end
end
vcr = VCR.new
vcr.sub!(/Java/) { "Ruby" }
vcr.upcase!
vcr[11,10] = "Universe"
vcr << "!"
string = "ddddd Java World"
puts string
vcr.play_back_to(string)
puts string
#JAVA是Call funcation,而Ruby是Send Message,它俩是有区别的。Send Msg只是发送一个消息,因此消息可“存储”后“播放”。method_missing是ruby的一个特殊方法,没有定义的方法的调用都会转去调用它。&block是block回调。
上面的执行流程是:
vcr.sub!(/Java/) { "Ruby" } #进地一个替换,Java换成Ruby,此方法没有,因此执行了method_missing方法,“存"下了这个Send Message
vcr.upcase! #转成大写
vcr[11,10] = "Universe"#将11位置后面换成"Universe"
wcr<<"!" #添加"!"
以上四个方法是存在了@messages中,最后程序中调用play_back_to进行了回放(也就是真正的调用)产生的结果为
这真的很微妙!
Hello Java World
HELLO RUBY Universe!
分享到:
相关推荐
LINE Calls Messages.apk
Remote Function Calls (RFC)在ABAP中是一种关键的技术,它允许不同系统间的SAP组件进行通信,例如在R/3系统、NetWeaver或其他SAP技术平台之间。本培训课程"Remote Function Calls in ABAP"旨在教授开发人员如何有效...
在Java编程的世界里,有一个经典的教学实例——"Cat Calls",它旨在帮助开发者深入理解面向对象编程(Object-Oriented Programming,简称OOP)的概念。这个程序模拟了猫的叫声,通过这种方式生动地展示了类、对象、...
Calling this function releases all resources allocated by the libraries. This function delete all the reference or list objects that user has forgotten to delete. Parameters: In: None Out: ...
安装 gem install analytics_ruby_mock用法将analytics_ruby_mock添加到您的gemfile中: gem 'analytics_ruby_mock' , group : :test 在您的spec_helper需要analytics_ruby_mock: require 'analytics_ruby_mock' ...
在本文中,我们将深入探讨“system_calls-5.15.0-py3-none-any.whl”这个Python库,了解其特性和如何在Python环境中进行安装和使用。 “system_calls-5.15.0-py3-none-any.whl”是一个Python库的特定版本,版本号为...
替代版本:安装在您的Gemfile中gem "ruby-pg-extras" 一些查询(例如calls和outliers )要求启用扩展。 您可以通过运行以下命令检查数据库中是否已启用它: RubyPGExtras . extensions 您应该在输出中看到类似的行...
高亮函数调用 这个包在函数调用中突出显示函数符号。 这使它们从其他符号中脱颖而出,从而... 但是,在以下情况下: ( defsubst internal--listify ( elt ) " Wrap ELT in a list if it is not one. " ( if ( not ( l
python库。资源全名:system_calls-5.16.0-py3-none-any.whl
《PyPI官网下载|calls-0.1.1.tar.gz:深入理解Python calls库与分布式系统》 在Python编程世界中,PyPI(Python Package Index)是开发者们获取和分享软件包的重要平台。今天我们将聚焦于一个名为"calls"的Python库...
AsyncCalls是Andreas Hausladen开发的一个重要组件,主要用于在Delphi或C++Builder等基于IDE Fix Pack的开发环境中简化多线程同步编程。这个库的核心目标是为开发者提供一种更直观、更易于管理的方式来处理并发任务...
指示本实验中有四种方法可以完成: roll_call_dwarves summon_captain_planet long_planeteer_calls find_the_cheese方法1 — roll_call_dwarves 此方法应接受一组矮人名称,例如: [ "Doc" , "Dopey" , "Bashful" ,...
long_planeteer_calls find_the_cheese 方法1 — roll_call_dwarves 此方法应接受一组矮人名称,例如: [ "Doc" , "Dopey" , "Bashful" , "Grumpy" ] 然后,应使用puts按编号顺序打印出每个名称。 打印输出应...
Oracle Solaris 9 - man pages section 2: System Calls-360 Oracle Solaris 9 是一个由 Sun Microsystems 开发的操作系统,其中包括了丰富的系统调用接口,用于提供给开发者和系统管理员来管理和维护系统。man ...
3. **生成Java DLL**:首先,你需要将Java代码编译为JAR文件,然后使用像JNA(Java Native Access)或SWIG(Simplified Wrapper and Interface Generator)这样的工具将其转换为可由C#使用的DLL。JNA可以直接映射...
Oracle Solaris 9 的 "man pages section 2: System Calls-552" 是一份关于操作系统内核接口的重要文档,主要涵盖了Solaris系统调用的详细信息。系统调用是用户空间程序与操作系统内核交互的主要机制,它们提供了...
c calls: c occam, filerr, itrout, itrin, inputm, inputd c C----------------------------------------------------------------------- c Open startup file and read stuff. c (Startup and iteration files ...
考虑到经常打电话查询话费使用情况,觉得甚是麻烦,于是就想开发个小程序来简化这个过程,因此就有了下面这个小程序,之所以称之为小程序,是因为它的功能很单一,就是查询话费使用情况和话费余额,但这也是日常生活...