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 |
转载自:http://www.cnblogs.com/rubylouvre/archive/2010/03/31/1701780.html |
相关推荐
主要介绍了Ruby中类变量和实例变量的比较,本文讲解了4点类变量和实例变量的不同之处,并给出了代码实例,需要的朋友可以参考下
但是这种方法是静态的,用户不能控制增加行为的方式和时机。如果 你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许多类的行为,改怎么办?前一个,只能在于运行时完成,后者显然时可能的,但是...
Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法。默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应。 class String def ...
他将Ruby方法分成输入处理(Collecting Input)、功能实现(Performing Work)、输出 处理(Delivering Output)、失败处理(Handling Failures)四个部分,针对每个部分的特点归纳实用的编程模式,并配合丰富的实例...
《Ruby完全自学手册》...采用大量实例,详解RUby语言所能涉及的各种常用知识和应用 详细介绍网站开发框架RubyonRails的基础及应用 通过4个项目案例讲解Ruby的典型应用 作者均为有多年编程经验的一线程序员或者培训讲师
主要介绍了Ruby中的五种变量,并用实例讲解了其用法,是Ruby学习当中的基础知识,需要的朋友可以参考下
《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报...
Ruby 中我们可以通过 Thread 类来创建多线程,Ruby的线程是一个轻量级的,可以以高效的方式来实现并行的代码。 创建 Ruby 线程 要启动一个新的线程,只需要调用 Thread.new 即可: # 线程 #1 代码部分 Thread.new {...
类 IO 提供了所有基础的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。 本章节将讲解所有 Ruby 中可用的基础的 I/O 函数。如需了解更多的函数,请查看 Ruby 的 IO 类。 puts 语句 在前面的...
本书讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误...
类 IO 提供了所有基础的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。 本章节将讲解所有 Ruby 中可用的基础的 I/O 函数。如需了解更多的函数,请查看 Ruby 的 IO 类。 puts 语句 在前面的...
本书的作者们试图紧跟rails框架和ruby语言的最新发展所带来的新特性、新方法、新尝试,在动态的大环境中带领读者解读与web 2.0站点开发关联性较强的技术,期望将最实用和最新鲜的开发技术推荐给读者。 与其他中文...
本书的作者们试图紧跟rails框架和ruby语言的最新发展所带来的新特性、新方法、新尝试,在动态的大环境中带领读者解读与web 2.0站点开发关联性较强的技术,期望将最实用和最新鲜的开发技术推荐给读者。 与其他中文...
本文只是简单的讲解Thrift开源框架的安装和简单使用示例,对于详细的讲解,后面在进行阐述。 Thrift简述 Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架,该框架已经开源并且加入的Apache项目。Thrift...