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的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...
总的来说,Ruby 中的装饰器模式是一种强大的设计模式,它允许我们在运行时动态地改变对象的行为,增加了代码的灵活性和可扩展性,同时避免了因频繁继承而导致的类爆炸问题。在面向对象编程中,尤其是在需要扩展已有...
4. **函数与方法**:Ruby中,函数和方法是同义词。你可以定义自己的方法,使用`def`关键字,通过`return`返回值。Ruby还支持匿名函数(Proc和Lambda),它们可以作为参数传递,也可以赋值给变量。 5. **类与模块**...
函数和方法是Ruby的核心组成部分。你可以定义自己的方法,使用参数传递数据,并返回结果。Ruby支持块(block)和闭包(closure),这在处理迭代和回调函数时非常有用。 Ruby还引入了模块(module)和类(class),...
8. 继承和方法链(Method Chains):Ruby的继承机制和方法链技术使得我们可以构建出流畅的API。方法链允许调用者在一个表达式中连续调用多个方法,这些方法可以属于同一个对象或不同对象。 9. 钩子和回调(Hooks ...
Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法。默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应。 class String def ...
`instance_variable_get`和`instance_variable_set`用于访问实例变量,而`class_variable`系列方法用于处理类变量。 4. **常量、属性和符号**:Ruby允许在运行时动态地设置和修改常量。`attr_accessor`、`attr_...
Ruby的继承机制允许类从其他类继承属性和方法,从而实现代码重用和结构层次。此外,Ruby还支持模块(Module),它们可以包含方法和常量,且可以被多个类混合(Mix-in)以扩展功能。 总之,"ruby程序设计"涵盖了从...
3. **动态性**:Ruby的动态性体现在运行时可以改变类、方法和变量的定义,允许动态绑定和鸭子类型。这为开发过程提供了极大的灵活性,但同时也要求开发者具备更高的责任感。 4. **块、 Proc 和 Lambda**:Ruby中的...
总而言之,《笨办法学Ruby》是一本适合初学者的优秀教材,通过直接、清晰的讲解和实践,让读者能够快速上手Ruby编程。无论你是编程新手,还是想转战Ruby的开发者,都能从中受益。通过学习本书,你不仅能掌握Ruby语言...
在Ruby中,函数和方法的区别在于定义方式,但都可以用来组织代码并实现复用。Ruby还支持块(block),这是一种特殊的语法结构,常与迭代器配合使用,使得代码更加简洁。 面向对象编程是Ruby的强项。本书将深入探讨...
1. **类型与数据结构**:介绍Ruby中的各种基本数据类型,如整型、浮点型、字符串等,并深入讲解数组、哈希表等数据结构的使用方法和内部实现原理。 2. **控制流**:讲解条件语句(if/elsif/else)、循环结构...
- **变量类型**:介绍 Ruby 中不同类型的变量,如局部变量、实例变量、类变量等。 - **变量作用域**:讲解变量的作用域规则,包括局部作用域、块作用域、类作用域等。 - **动态类型**:探讨 Ruby 的动态类型系统,...
- 方法定义:包括实例方法、类方法、定义私有和保护方法等。 - 强大的元编程:Ruby的`send`方法允许在运行时动态调用方法,`eval`可以执行字符串形式的代码,这使得Ruby在元编程方面极其灵活。 3. **Ruby的数据...
2. 继承:Ruby支持类的继承,通过`class Child 来指定Child类继承自Parent类,从而获取Parent的属性和方法。 3. 类方法与实例方法:`self`关键字常用于类方法,如`def self.class_method`,而实例方法定义则用`def ...
4. **函数和方法**:Ruby中一切皆为对象,函数也是对象,可以赋值、传递和作为参数。方法定义简单,可以使用`=begin`和`=end`进行多行定义。 5. **类与对象**:Ruby是面向对象的语言,所有的数据都是对象,类是用来...