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

Ruby 面向对象编程的一些高级应用

阅读更多

1.send的用法

 

在RUBY中可以在运行时,来决定那个对象被调用,send方法就是做这个的,他接受一个symbol变量为参数。

 

首先来个非常非常的简单的例子:

 

class Foo
   def foo
      "aa"
   end
end

puts Foo.new.__send__(:foo)

 

当然也可以使用send方法,不过为了和可能出现的自己类中定义的send方法区别,推荐使用__send__方法

 

在1.9中,send方法不能调用private方法了,不过我们能够使用__send!来调用:

class Foo   
  private   
  def foo   
    "aa"   
  end   
end   
p Foo.new.__send!(:foo)     # => nil   
p Foo.new.send(:foo)      #private method `foo' called for #<Foo:0xa89530> (NoMethodError)  

 

下面有个排序的比较全的例子:

 

class Person
  attr_reader :name, :age, :height

  def initialize(name, age, height)
    @name, @age, @height = name, age, height
  end

  def inspect
    "#@name #@age #@height"
  end
end


class Array
  def sort_by(sym)   # Our own version of sort_by
    self.sort {|x,y| x.send(sym) <=> y.send(sym) }
  end
end


people = []
people << Person.new("Hansel", 35, 69)
people << Person.new("Gretel", 32, 64)
people << Person.new("Ted", 36, 68)
people << Person.new("Alice", 33, 63)

p1 = people.sort_by(:name)
p2 = people.sort_by(:age)
p3 = people.sort_by(:height)

p p1   # [Alice 33 63, Gretel 32 64, Hansel 35 69, Ted 36 68]
p p2   # [Gretel 32 64, Alice 33 63, Hansel 35 69, Ted 36 68]
p p3   # [Alice 33 63, Gretel 32 64, Ted 36 68, Hansel 35 69]
 

 

分享到:
评论
3 楼 skandhas 2011-02-24  
dtrex 写道
skandhas 写道
"在1.9中,send方法不能调用private方法了" ? 这个确定吗?

在Ruby 1.9.2-p0 下是没问题的喔。


因为我是在1.86上试的,Ruby 1.9.2-p0没有实验,网上很多人都这么说,我就写进去了,提醒自己一下。


在Ruby1.9.2下 send 是可以调用private方法的。已验证。
2 楼 dtrex 2011-02-22  
skandhas 写道
"在1.9中,send方法不能调用private方法了" ? 这个确定吗?

在Ruby 1.9.2-p0 下是没问题的喔。


因为我是在1.86上试的,Ruby 1.9.2-p0没有实验,网上很多人都这么说,我就写进去了,提醒自己一下。
1 楼 skandhas 2011-01-31  
"在1.9中,send方法不能调用private方法了" ? 这个确定吗?

在Ruby 1.9.2-p0 下是没问题的喔。

相关推荐

    Practical Object Oriented Design in Ruby 新版 实战ruby面向对象设计

    《Practical Object-Oriented Design in Ruby 新版 实战ruby面向对象设计》是一本非常受欢迎的编程书籍,它不仅是学习Ruby语言的重要参考资料,也是深入理解面向对象编程(OOP)技术不可或缺的宝贵资料。这本书由于...

    Ruby 面向对象知识总结

    ### Ruby面向对象知识总结 #### 一、Ruby的面向对象特性 **Ruby**是一种完全面向对象的编程语言,这意味着在Ruby中,一切事物都是对象。无论是字符串、数字、布尔值甚至是`true`和`false`这样的基本数据类型,都是...

    Ruby教程面向对象脚本语言

    Ruby教程面向对象脚本语言,是由日本的松本行弘(Matsumoto Yukihiro,又称Matz)在1993年创建的一种高级程序设计语言。Matz出于对脚本语言的兴趣,尤其是面向对象编程的追求,决定设计一种新的语言,因为他发现Perl...

    Ruby语言教程-一门高级的面向对象编程语言,它被设计用于简单和快速的编程 Ruby的语法简洁而优雅,它可以用于Web开发、

    Ruby是一种典型的面向对象编程语言,几乎所有的代码都是通过类和对象来组织的。例如: ```ruby class Person attr_accessor :name, :age def initialize(name, age) @name = name @age = age end def say_...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    面向对象编程** - **一切皆为对象** - 在Ruby中,所有事物都是对象,包括数字、字符串等基本类型。 - **丰富的面向对象特性** - 支持类、继承、封装等面向对象的基本概念,并提供了一系列高级特性,如模块包含、...

    《Ruby Programming—向Ruby之父学程序设计(第2版)》电子书

    Ruby是为面向对象编程设计的,其中一切皆对象。书中会解释类、对象、继承、方法、模块(用于代码重用和分类)的概念,以及如何使用Ruby的元编程能力来动态定义和修改类和方法。 此外,书中还会涵盖Ruby的异常处理...

    Ruby编程,Ruby编程,

    - **面向对象编程**:深入讲解了Ruby中的类、模块、继承等面向对象编程特性。 - **核心库和工具**:详细介绍了Ruby标准库中的一些重要模块,如数组、哈希表等,并探讨了常用的Ruby工具和环境配置方法。 - **高级...

    ruby程序设计

    总之,"ruby程序设计"涵盖了从Ruby语言基础到高级特性的全面讲解,包括Ruby的历史、特性,环境配置,类与对象的原理,以及如何利用Ruby on Rails框架开发Web应用程序。无论你是初学者还是经验丰富的开发者,这份资料...

    ruby元编程.pdf

    10. 重载运算符和方法:Ruby允许程序员对操作符和方法进行重载,以提供更加面向对象的语法糖。例如,通过重载操作符 `,可以使自定义类的实例支持 `push` 方法。 本书作为填补了语言参考手册和编程食谱书之间的空白...

    Ruby的语法类似于英语,易于阅读和理解 它支持多种编程范式,包括面向对象编程、过程式编程和函数式编程

    Ruby作为一种高级编程语言,提供了简洁而强大的语法结构,支持多种编程范式,使其成为开发各种类型应用的理想选择。RESTful API则是现代Web开发的重要组成部分,它通过清晰的架构和标准的接口规范,促进了不同系统...

    Ruby 语言 Ruby 是一种动态、面向对象的脚本语言,具有简洁而富有表现力的语法 以下是 Ruby 语言的一些特点: 简单

    这种设计使得 Ruby 能够很好地支持类、对象、继承、多态等面向对象的核心概念和技术,有助于构建复杂的软件系统。 #### 四、元编程能力 元编程是指在运行时修改或扩展程序的能力。Ruby 提供了一系列强大的元编程...

    Ruby编程Ruby Programming

    ### 三、面向对象编程(OOP)在Ruby中的应用 #### 3.1 类与对象 - **类**:用于定义对象的蓝图或模板。 - **实例化**:通过类创建具体的对象。 - **属性与方法**:类中的属性用于存储数据,方法则定义对象的行为。 #...

    Ruby 应用安装程序制作工具 Ocra.zip

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。Ocra,全称为"One-Click Ruby Application",是专门为Ruby开发者设计的一个工具,它允许用户将Ruby源代码打包成独立的可...

    Ruby教程.chm和Ruby程序设计.doc

    Ruby是一种面向对象的脚本语言,以其简洁、优雅的语法和强大的编程能力而闻名。这份“Ruby教程.chm”和“Ruby程序设计.doc”提供了学习Ruby的宝贵资源,旨在帮助初学者快速掌握Ruby的核心概念和编程技巧。 首先,让...

    Ruby语言教程可以涵盖从基础入门到高级应用的多个方面

    Ruby语言教程可以涵盖从基础入门到高级应用的多个方面。以下是一个简要的Ruby语言教程概述,旨在帮助初学者快速上手并理解Ruby编程的基本概念。 一、Ruby语言简介 Ruby是一种简单快捷的面向对象脚本语言,由日本人...

    Ruby是一种动态、面向对象的编程语言 入门指南

    Ruby是一种动态、面向对象的编程语言,以其简洁、优雅和开发效率高而受到开发者欢迎。本教程旨在帮助初学者快速掌握Ruby语言的基础知识,并逐步深入到实际应用和高级主题。

    面向对象的程序设计2优秀文档.ppt

    在本文件中,我们将深入探讨面向对象编程(OOP)的基本原理、几种典型的OOP语言以及它们的特点。 首先,程序设计语言与软件设计方法密切相关。早期的过程性语言,如FORTRAN、ALGOL、COBOL和APL/I,主要关注编写程序...

Global site tag (gtag.js) - Google Analytics