`
wtb
  • 浏览: 105870 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

需要知道Ruby的--Messages, not Function Calls

阅读更多

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.

What’s the Difference?

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

    LINE Calls Messages.apk

    Remote Function Calls in ABAP

    Remote Function Calls (RFC)在ABAP中是一种关键的技术,它允许不同系统间的SAP组件进行通信,例如在R/3系统、NetWeaver或其他SAP技术平台之间。本培训课程"Remote Function Calls in ABAP"旨在教授开发人员如何有效...

    java-cat-calls.rar_Cat-Calls

    在Java编程的世界里,有一个经典的教学实例——"Cat Calls",它旨在帮助开发者深入理解面向对象编程(Object-Oriented Programming,简称OOP)的概念。这个程序模拟了猫的叫声,通过这种方式生动地展示了类、对象、...

    应用Dephi 开发佳能照相机API

    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: ...

    analytics-ruby-mock:捕获对segment.io的所有调用并阻止其发送

    安装 gem install analytics_ruby_mock用法将analytics_ruby_mock添加到您的gemfile中: gem 'analytics_ruby_mock' , group : :test 在您的spec_helper需要analytics_ruby_mock: require 'analytics_ruby_mock' ...

    Python库 | system_calls-5.15.0-py3-none-any.whl

    在本文中,我们将深入探讨“system_calls-5.15.0-py3-none-any.whl”这个Python库,了解其特性和如何在Python环境中进行安装和使用。 “system_calls-5.15.0-py3-none-any.whl”是一个Python库的特定版本,版本号为...

    ruby-pg-extras:Ruby PostgreSQL数据库性能见解。 锁,索引使用率,缓冲区高速缓存命中率,真空状态等

    替代版本:安装在您的Gemfile中gem "ruby-pg-extras" 一些查询(例如calls和outliers )要求启用扩展。 您可以通过运行以下命令检查数据库中是否已启用它: RubyPGExtras . extensions 您应该在输出中看到类似的行...

    highlight-function-calls:在 Emacs 中突出显示函数宏调用

    高亮函数调用 这个包在函数调用中突出显示函数符号。 这使它们从其他符号中脱颖而出,从而... 但是,在以下情况下: ( 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

    python库。资源全名:system_calls-5.16.0-py3-none-any.whl

    PyPI 官网下载 | calls-0.1.1.tar.gz

    《PyPI官网下载|calls-0.1.1.tar.gz:深入理解Python calls库与分布式系统》 在Python编程世界中,PyPI(Python Package Index)是开发者们获取和分享软件包的重要平台。今天我们将聚焦于一个名为"calls"的Python库...

    AsyncCalls-2.99

    AsyncCalls是Andreas Hausladen开发的一个重要组件,主要用于在Delphi或C++Builder等基于IDE Fix Pack的开发环境中简化多线程同步编程。这个库的核心目标是为开发者提供一种更直观、更易于管理的方式来处理并发任务...

    ruby-enumerables-cartoon-collections-lab-online-web-prework

    指示本实验中有四种方法可以完成: roll_call_dwarves summon_captain_planet long_planeteer_calls find_the_cheese方法1 — roll_call_dwarves 此方法应接受一组矮人名称,例如: [ "Doc" , "Dopey" , "Bashful" ,...

    ruby-enumerables-cartoon-collections-lab-sea01-seng-ft-080320

    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 - man pages section 2: System Calls-360 Oracle Solaris 9 是一个由 Sun Microsystems 开发的操作系统,其中包括了丰富的系统调用接口,用于提供给开发者和系统管理员来管理和维护系统。man ...

    CSharp-calls-JAVA-program.rar_C#调用java的dll_c# 调用 java sdk_c#调用ja

    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

    Oracle Solaris 9 的 "man pages section 2: System Calls-552" 是一份关于操作系统内核接口的重要文档,主要涵盖了Solaris系统调用的详细信息。系统调用是用户空间程序与操作系统内核交互的主要机制,它们提供了...

    occam一维反演

    c calls: c occam, filerr, itrout, itrin, inputm, inputd c C----------------------------------------------------------------------- c Open startup file and read stuff. c (Startup and iteration files ...

    A-key-query-mobile-calls.zip_prepaid java

    考虑到经常打电话查询话费使用情况,觉得甚是麻烦,于是就想开发个小程序来简化这个过程,因此就有了下面这个小程序,之所以称之为小程序,是因为它的功能很单一,就是查询话费使用情况和话费余额,但这也是日常生活...

Global site tag (gtag.js) - Google Analytics