`

ruby的类方法和实例方法简单讲解

阅读更多

ruby的类方法与实例方法

类方法也叫静态方法,通过类名来调用的方法。实例方法,必须要new一个实例出来才能用。

class Foo
  def self.bar
    puts 'class method'
  end
   
  def baz
    puts 'instance method'
  end
end
 
Foo.bar #class method
#Foo.baz #报错 undefined method `baz' for Foo:Class (NoMethodError)
 
Foo.new.baz #instance method
#Foo.new.bar #报错  undefined method `bar' for #<foo:0x2d61a1c> (NoMethodError)
</foo:0x2d61a1c>

当中bar就是类方法,看它是如何定义的:def self.bar,self就是指向当前的类。而对于实例方法,就很简单:def baz。

像ruby这样灵活的脚本语言不多见,它提供了多种定义类方法的手段。

# Way 1
class Foo
  def self.bar
    puts 'class method'
  end
end
 
Foo.bar # "class method"
 
# Way 2
class Foo
  class << self
    def bar
      puts 'class method'
    end
  end
end
 
Foo.bar # "class method"
 
# Way 3
class Foo; end
def Foo.bar
  puts 'class method'
end
 
Foo.bar # "class method"

第一种与第三种方式不细说了,self的运用就相当于javascript的this。第二种有种自继承的意味。通过我们添加多个类方法时就少写几个self,非常优雅。

再看实例方法,这也有几套方案:

# Way 1
class Foo
  def baz
    puts 'instance method1'
  end
end
 
Foo.new.baz # "instance method1"
puts '---------------'
# Way 2
class Foo
  attr_accessor :baz
end
 
foo = Foo.new
foo.baz = 'instance method2'
puts foo.baz# "instance method2"
 
puts '---------------'
 
# Way 3
class Foo; end
 
foo = Foo.new
def foo.lazy
  puts 'instance method3'
end
 

foo.lazy  # "instance method3"

 

转载自:http://www.cnblogs.com/rubylouvre/archive/2010/03/31/1701780.html

分享到:
评论

相关推荐

    Ruby入门教程中文PDF 附实例

    此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...

    实例讲解Ruby使用设计模式中的装饰器模式的方法

    总的来说,Ruby 中的装饰器模式是一种强大的设计模式,它允许我们在运行时动态地改变对象的行为,增加了代码的灵活性和可扩展性,同时避免了因频繁继承而导致的类爆炸问题。在面向对象编程中,尤其是在需要扩展已有...

    Ruby基础语法使用方法全套讲解,风格讲解指南大全

    4. **函数与方法**:Ruby中,函数和方法是同义词。你可以定义自己的方法,使用`def`关键字,通过`return`返回值。Ruby还支持匿名函数(Proc和Lambda),它们可以作为参数传递,也可以赋值给变量。 5. **类与模块**...

    Ruby中文教程,佩戴实例

    函数和方法是Ruby的核心组成部分。你可以定义自己的方法,使用参数传递数据,并返回结果。Ruby支持块(block)和闭包(closure),这在处理迭代和回调函数时非常有用。 Ruby还引入了模块(module)和类(class),...

    ruby元编程.pdf

    8. 继承和方法链(Method Chains):Ruby的继承机制和方法链技术使得我们可以构建出流畅的API。方法链允许调用者在一个表达式中连续调用多个方法,这些方法可以属于同一个对象或不同对象。 9. 钩子和回调(Hooks ...

    实例讲解Ruby中的钩子方法及对方法调用添加钩子

    Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法。默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应。 class String def ...

    Ruby元编程第二版中文

    `instance_variable_get`和`instance_variable_set`用于访问实例变量,而`class_variable`系列方法用于处理类变量。 4. **常量、属性和符号**:Ruby允许在运行时动态地设置和修改常量。`attr_accessor`、`attr_...

    ruby程序设计

    Ruby的继承机制允许类从其他类继承属性和方法,从而实现代码重用和结构层次。此外,Ruby还支持模块(Module),它们可以包含方法和常量,且可以被多个类混合(Mix-in)以扩展功能。 总之,"ruby程序设计"涵盖了从...

    Programming Ruby

    3. **动态性**:Ruby的动态性体现在运行时可以改变类、方法和变量的定义,允许动态绑定和鸭子类型。这为开发过程提供了极大的灵活性,但同时也要求开发者具备更高的责任感。 4. **块、 Proc 和 Lambda**:Ruby中的...

    笨办法学ruby_笨办法学ruby_ruby_bravevk4_

    总而言之,《笨办法学Ruby》是一本适合初学者的优秀教材,通过直接、清晰的讲解和实践,让读者能够快速上手Ruby编程。无论你是编程新手,还是想转战Ruby的开发者,都能从中受益。通过学习本书,你不仅能掌握Ruby语言...

    Ruby基础教程(中文第4版)

    在Ruby中,函数和方法的区别在于定义方式,但都可以用来组织代码并实现复用。Ruby还支持块(block),这是一种特殊的语法结构,常与迭代器配合使用,使得代码更加简洁。 面向对象编程是Ruby的强项。本书将深入探讨...

    Ruby 编程语言的书籍

    1. **类型与数据结构**:介绍Ruby中的各种基本数据类型,如整型、浮点型、字符串等,并深入讲解数组、哈希表等数据结构的使用方法和内部实现原理。 2. **控制流**:讲解条件语句(if/elsif/else)、循环结构...

    Ruby - Ruby for Rails

    - **变量类型**:介绍 Ruby 中不同类型的变量,如局部变量、实例变量、类变量等。 - **变量作用域**:讲解变量的作用域规则,包括局部作用域、块作用域、类作用域等。 - **动态类型**:探讨 Ruby 的动态类型系统,...

    Programming Ruby 1.9 (3rd edition)和源码

    - 方法定义:包括实例方法、类方法、定义私有和保护方法等。 - 强大的元编程:Ruby的`send`方法允许在运行时动态调用方法,`eval`可以执行字符串形式的代码,这使得Ruby在元编程方面极其灵活。 3. **Ruby的数据...

    Ruby中文教程。。。

    2. 继承:Ruby支持类的继承,通过`class Child 来指定Child类继承自Parent类,从而获取Parent的属性和方法。 3. 类方法与实例方法:`self`关键字常用于类方法,如`def self.class_method`,而实例方法定义则用`def ...

    ruby基础教程中文第四版

    4. **函数和方法**:Ruby中一切皆为对象,函数也是对象,可以赋值、传递和作为参数。方法定义简单,可以使用`=begin`和`=end`进行多行定义。 5. **类与对象**:Ruby是面向对象的语言,所有的数据都是对象,类是用来...

Global site tag (gtag.js) - Google Analytics