`

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中类变量和实例变量的比较

    主要介绍了Ruby中类变量和实例变量的比较,本文讲解了4点类变量和实例变量的不同之处,并给出了代码实例,需要的朋友可以参考下

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

    但是这种方法是静态的,用户不能控制增加行为的方式和时机。如果 你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许多类的行为,改怎么办?前一个,只能在于运行时完成,后者显然时可能的,但是...

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

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

    本书是由华中科技大学出版社于2017年3月出版的程序设计类图书,书中总结了三十余条Ruby程序开发经验,有助于读者理解学习。

    他将Ruby方法分成输入处理(Collecting Input)、功能实现(Performing Work)、输出 处理(Delivering Output)、失败处理(Handling Failures)四个部分,针对每个部分的特点归纳实用的编程模式,并配合丰富的实例...

    [Ruby完全自学手册].邓蔚.扫描版.pdf

    《Ruby完全自学手册》...采用大量实例,详解RUby语言所能涉及的各种常用知识和应用 详细介绍网站开发框架RubyonRails的基础及应用 通过4个项目案例讲解Ruby的典型应用 作者均为有多年编程经验的一线程序员或者培训讲师

    实例讲解Ruby中的五种变量

    主要介绍了Ruby中的五种变量,并用实例讲解了其用法,是Ruby学习当中的基础知识,需要的朋友可以参考下

    正则表达式经典实例

    《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报...

    初步讲解Ruby编程中的多线程

    Ruby 中我们可以通过 Thread 类来创建多线程,Ruby的线程是一个轻量级的,可以以高效的方式来实现并行的代码。 创建 Ruby 线程 要启动一个新的线程,只需要调用 Thread.new 即可: # 线程 #1 代码部分 Thread.new {...

    Ruby 文件的输入与输出

    类 IO 提供了所有基础的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。 本章节将讲解所有 Ruby 中可用的基础的 I/O 函数。如需了解更多的函数,请查看 Ruby 的 IO 类。 puts 语句 在前面的...

    正则表达式经典实例.pdf

    本书讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误...

    在Ruby中处理文件的输入和输出的教程

    类 IO 提供了所有基础的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。 本章节将讲解所有 Ruby 中可用的基础的 I/O 函数。如需了解更多的函数,请查看 Ruby 的 IO 类。 puts 语句 在前面的...

    Web开发大全:Ruby on Rails版.part1

    本书的作者们试图紧跟rails框架和ruby语言的最新发展所带来的新特性、新方法、新尝试,在动态的大环境中带领读者解读与web 2.0站点开发关联性较强的技术,期望将最实用和最新鲜的开发技术推荐给读者。  与其他中文...

    Web开发大全:Ruby on Rails版.part2

    本书的作者们试图紧跟rails框架和ruby语言的最新发展所带来的新特性、新方法、新尝试,在动态的大环境中带领读者解读与web 2.0站点开发关联性较强的技术,期望将最实用和最新鲜的开发技术推荐给读者。  与其他中文...

    Thrift的安装方法和简单实例

    本文只是简单的讲解Thrift开源框架的安装和简单使用示例,对于详细的讲解,后面在进行阐述。 Thrift简述  Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架,该框架已经开源并且加入的Apache项目。Thrift...

Global site tag (gtag.js) - Google Analytics