`
biyeah
  • 浏览: 202892 次
  • 来自: ...
社区版块
存档分类
最新评论

Ruby类函数定义的几种方式

    博客分类:
  • Ruby
 
阅读更多
Ruby类函数定义的几种方式
参考:ruby-defining-class-methods

1、
class Person
  def Person.find(id)
    ...
  end
end

这种方式,有一点不好,如果更改类名,相应的类函数定义的类名也要更改。
2、
class Person
  def self.find(id)
    ...
  end
end

这种方式比较好,没有上面提到的问题。作者也推荐使用这种方式。
3、
class Person
  class << self
    protected
    def find(id)
      ...
    end
  end
end

在定义protected类函数时使用。为什么要定义protected类函数可参见作者的另一篇文章Protected Class Methods
4、比较复杂的
class Object # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
  def meta_def name, &blk
    (class << self; self; end).instance_eval { define_method name, &blk }
  end
end

class Service
  def self.responses(hash)
    hash.each do |method_name, result|
      meta_def method_name do
        result
      end
    end
  end
  
  responses :success => 20, :unreachable => 23
end

Service.success # => 20
Service.unreachable # => 23

由于本人Ruby功力还不够,上面的代码有些还看不明,有兴趣的读者可直接看原文。
5、最后作者还提到一种方式
class Person
  instance_eval do
    def find(id)
      ...
    end
  end
end

用到instance_eval,没搞清楚这种方式有什么特点。
分享到:
评论

相关推荐

    Ruby编程Ruby Programming

    根据提供的文件信息,我们将深入探讨与“Ruby编程Ruby Programming”这一主题相关的几个核心知识点。这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些...

    元编程 Ruby

    6. 元类(metaclass)或singleton class:Ruby中的每个类都拥有一个元类,元编程中会使用到这个元类来定义类方法或动态修改类。 7. 打开类(Open Class):在Ruby中,你可以随时打开一个已经定义的类,并给它添加新...

    Ruby200

    6. **模块**:模块是组织代码的一种方式,可以包含常量、类、方法等,通过 `include` 关键字可以将模块中的内容引入到类中。 7. **混合类**(Mixins):Ruby 类可以通过 `include` 关键字混入模块,从而获取模块中...

    Ruby Programming

    它不仅详细介绍了Ruby的核心概念和技术细节,更重要的是传递了一种思维方式,一种看待编程问题的新视角。无论是初学者还是有经验的开发者,都可以从这本书中获得灵感和指导,从而更好地掌握Ruby语言,享受编程的乐趣...

    ruby.rar

    Ruby是一种强大的、面向对象的编程语言,以其简洁的语法和注重开发者生产力的设计理念而闻名。在"ruby.rar"这个压缩包中,包含了三本中文教程,可以帮助初学者和经验丰富的开发者深入理解Ruby语言的核心概念和高级...

    ruby入门书籍

    3. **块和闭包**:Ruby中的块是代码段,可以与方法一起使用,闭包是能够记住其定义环境的代码块,常用于迭代和函数式编程。 4. **方法和操作符重载**:Ruby允许自定义方法,甚至可以重载操作符,实现自定义的行为。...

    ruby2.1.6安装文件

    Ruby是一种面向对象、动态类型的脚本语言,由日本开发者松本行弘于1995年设计并开发。Ruby的设计理念是简洁、优雅和生产力,它强调代码的可读性和编程者的幸福感。Ruby 2.1.6是该语言的一个稳定版本,发布于2014年,...

    Ruby - Ruby for Rails

    - **类定义**:学习如何定义类以及类的基本组成部分,如属性、方法等。 - **继承与多态**:介绍继承的概念及其在 Ruby 中的应用,以及多态性的实现方式。 - **封装与抽象**:讲解封装和抽象的概念,以及它们如何增强...

    ruby-2.5.8.tar.gz

    - **块和闭包**:Ruby支持块(用`do..end`或`{..}`定义)和闭包(lambda或Proc对象),使得函数式编程风格得以实现。 - **元编程**:Ruby提供了`eval`、`define_method`等方法,允许在运行时修改或创建类和方法,...

    Ruby常见面试题.pdf

    请简要介绍在Ruby中的函数定义和调用方式。 在Ruby中,方法的定义非常灵活,使用`def`关键字: **示例**: ```ruby def greet(name) puts "Hello, #{name}!" end greet("John Doe") ``` #### 7. Ruby中如何处理...

    ruby 1.8.5 .tgz

    2. **动态性**:Ruby 具有高度动态性,允许你在运行时修改类、方法甚至变量的类型。这为解决复杂问题提供了极大的灵活性,但也可能带来一些维护挑战。 3. **块和闭包**:Ruby 支持块(Blocks),这是类似匿名函数的...

    ruby-1.8.7-p72-i386-mswin32.zip

    6. **lib**:这是Ruby的核心库和标准库所在的目录,包含了许多预定义的类和模块,如`Array`, `String`, `File`, `IO`等。开发者可以直接在他们的代码中导入和使用这些库。 7. **share**:这个目录可能包含一些共享...

    ruby 中文教程(带例子代码)

    这可能是一份详细的PDF文档,涵盖了Ruby的基础知识,包括变量、数据类型、控制结构(如if语句和循环)、函数、类和对象等概念。在Ruby中,一切都是对象,这使得面向对象编程变得更加直观。此外,文档可能会介绍Ruby...

    Metaprogramming ruby

    2. **方法定义和调用**:Ruby支持多种方法定义方式,如`def`关键字、`define_method`、`method_missing`等。其中,`method_missing`是一个特殊的方法,用于处理未定义的方法调用,是实现动态行为的重要工具。 3. **...

    编程资源:Ruby 编程的简要介绍.docx

    - **变量**: Ruby中的变量分为几种不同的类型,包括全局变量(以`$`开头)、实例变量(以`@`开头)、类变量(以`@@`开头)。此外,常量以大写字母开头。 - **类与对象**: 在Ruby中,类是创建对象的模板,而对象则是...

    Ruby-RubyChina社区的精华帖

    2. **块(Block)、 Proc 和 Lambda**:Ruby支持块(匿名函数)的定义和使用,Proc和Lambda是块的两种可存储形式,它们之间的区别在于调用时的参数处理和返回行为。 3. **元编程(Metaprogramming)**:Ruby的强大...

    ruby笔记2ruby笔记2ruby笔记2

    3. **方法与函数**:Ruby中的函数被称为方法,可以定义在类或模块中,也可以作为独立的闭包。块(`{}`或`do..end`)和Proc对象是Ruby处理代码块的独特方式。 4. **类与模块**:类用于创建对象,而模块则用于实现...

    Programming Ruby 2nd Edition

    3. **函数与方法**:Ruby中的函数和方法是代码复用的关键,书中详述了如何定义、调用和传递参数,以及闭包(块和Proc对象)的概念。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,所有的数据都是对象。书中...

    Ruby语言中文教程

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本中文教程旨在帮助初学者快速掌握Ruby的基础知识,同时也为有经验的程序员提供深入学习的资源。 Ruby的核心特性包括:...

Global site tag (gtag.js) - Google Analytics