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

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常见面试题.pdf

    请简要介绍在Ruby中的函数定义和调用方式。 7. Ruby中如何处理异常(Exception Handling)?请说明在Ruby中的异常处理机制。 8. Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同...

    Ruby200

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

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

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

    ruby.rar

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

    ruby入门书籍

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

    ruby2.1.6安装文件

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

    ruby准备资料ruby准备资料

    Ruby允许程序员为自定义类定义操作符的行为,这意味着你可以让类的对象像原生的数字或其他类型一样进行操作。例如,你可以定义两个自定义对象如何通过"+"操作符相加。操作符重载通过定义方法来实现,如`def +(@...

    ruby-2.5.8.tar.gz

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

    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-RubyChina社区的精华帖

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

    Programming Ruby 2nd Edition

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

    Ruby语言中文教程

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

    ruby语言基础

    3. **函数与方法**:Ruby中的函数称为方法,可以定义在类、模块或全局作用域中。方法调用使用`.`操作符,支持块(block)和 Proc 对象。 4. **面向对象编程(OOP)**:Ruby是一种纯面向对象的语言,一切皆为对象。...

    Ruby程序设计

    4. **模块(Module)**:模块是组织代码的一种方式,可以包含方法、常量和类。模块可以用来实现命名空间,防止命名冲突,也可以通过`include`或`extend`引入模块的方法。 5. **类变量和实例变量**:类变量以`@@`...

    ruby-源码.rar

    它强调代码的简洁性和可读性,致力于提供一种更自然的编程方式。Ruby源码的分析可以帮助我们深入理解其内部工作机制,这对于想要成为Ruby开发高手或者对语言设计感兴趣的程序员来说是非常有价值的。 在Ruby的源码中...

    ruby语言

    4. **方法**:Ruby中的函数被称为方法,可以通过定义方法来封装代码。方法可以接受参数,并通过`return`语句返回结果。Ruby还支持块参数和默认参数值。 5. **类与对象**:Ruby是完全面向对象的,每个实体都是一个...

    ruby cookbook

    2. **面向对象编程**:详细讲解Ruby的面向对象特性,包括类的定义、继承、模块的使用、方法的定义与调用、对象的创建与销毁等。 3. **块和闭包**:Ruby的块是代码块的抽象,可以与方法一起使用,常用于迭代或条件...

Global site tag (gtag.js) - Google Analytics