美文网首页
Ruby 创建类

Ruby 创建类

作者: changsanjiang | 来源:发表于2017-10-20 21:41 被阅读8次

先看示例:

class HelloWorld                         # class 语句
  def initialize(name = "Ruby")          # initialize 方法
    @name = name                         # 初始化实例变量
  end

  def hello                              # 实例方法
    puts "Hello, World! I am #{@name}"
  end
end

sanJiang = HelloWorld.new("sanJiang")
sanJiang.hello

class 语句

class 语句在定义类时使用, 以下是 class语句的一些用法.

class 类名 
  类的定义
end

类名的首字母必须大写.


initialize 方法

在 class 语句中定义的方法为该类的实例方法. 上述代码中的hello也是实例方法.
其中, initialize比较特别. 使用new方法生成新的对象时, initialize方法会被调用, 同时new方法的参数也会被原封不动地传给initialize方法. 因此初始化对象时需要的处理一般都写在这个方法中.

def initialize(name = "Ruby")    # initialize 方法
  @name = name      # 初始化实例变量
end

在上述代码中, initialize 方法接收了参数 name. 因此, 像下面这样生成对象, 就可以把 Bob 传递给 initialize 方法.

bob = HelloWorld.new("Bob")

由于 initialize 方法的参数指定了默认值"Ruby". 因此, 像下面这样的没有指定参数时, 就会自动把"Ruby"传给 initialize 方法.

ruby = HelloWorld.new

实例变量与实例方法

我们回过头来看看 initialize 方法

def initialize(name = "Ruby")    # initialize 方法
  @name = name      # 初始化实例变量
end

通过 @name = name 这行程序, 作为参数传进来的对象会被赋值给变量 @name. 我们把以 @ 开头的变量称为实例变量. 在不同的方法中, 程序会把局部变量看做是不同的变量来对待. 而只要在同一个实例中, 程序就可以超越方法定义, 任意引用, 修改实例变量的值. 另外, 引用未初始化的实例变量时的返回值为nil.

不同实例的实例变量值可以不同. 只要实例存在, 实例变量的值就不会消失, 并且可以被任意使用. 而局部变量则是在调用方法时被创建, 而且只能在该方法内使用.

我们来看看下面的例子:

bob = HelloWorld.new("Bob")
tom = HelloWorld.new("Tom")
ruby = HelloWorld.new

bob, tom, ruby 各自拥有不同的@name.
我们可以调用最初定义的 hello 方法, 来输出 实例变量 @name 的值.

bob.hello  #=> Hello, World! I am Bob
tom.hello  #=> Hello, World! I am Tom
ruby.hello #=> Hello, World! I am Ruby

存取器

在 Ruby中, 从对象外部不能直接访问实例变量或对实例变量赋值, 需要通过方法来访问对象的内部.
为了访问 HelloWorld 类中的 @name 实例变量, 需要定义一下方法.

class HelloWorld
  def name
    @name    # 获取 @name 值
  end

  def name=(value)
    @name = value    # 修改 @name 的值
  end
end

第一个方法 name 只是简单地返回 @name 的值. 我们可以像访问属性一样使用该方法.

bob = HelloWorld.new("Bob")
bob.name #=> "Bob"

第二个方法的方法名为 name=, 使用方法如下:

bob.name = "Robert"

乍一看, 该语法很像是在给对象的属性赋值, 但实际却是在调用 name=("Robert") 这个方法. 利用这样的方法, 我们就可以突破 Ruby 原有的限制, 从外部自由地访问对象内部的实例变量了.
当对象有多个实例变量时, 如果逐个定义存取器, 就会是程序变的难懂, 而且也容易写错. 为此, Ruby 为我们提供了更简便的定义方法 attr_reader, attr_writer, attr_accessor. 只要指定实例变量名的符号, Ruby就会自动帮我们定义相应的存取器.


Ruby 中, 一般把设定实例变量的方法称为 writer, 读取实例变量的方法称为 reader, 合起来称 accessor. 有时候也把 reader 称为 getter, writer 称为 setter, 合称 accessor method.

定义 意义
attr_reader :name 只读(定义 name 只读方法)
attr_writer :name 只写(定义 name= 方法)
attr_accessor :name 读写(定义 以上两个方法)

so

class HelloWorld

attr_accessor :name
# 一句顶下面好几句
#  def name
#    @name    # 获取 @name 值
#  end
#  def name=(value)
#    @name = value    # 修改 @name 的值
#  end
end

相关文章

  • Ruby 创建类

    先看示例: class 语句 class 语句在定义类时使用, 以下是 class语句的一些用法. 类名的首字母必...

  • 学习大纲

    1.你可能觉得你已经完全掌握了Ruby 学会了Ruby各种语法(各种数据结构、创建类、创建对象、调用方法、.......

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • ruby 类

    ruby中任何东西都是一个类,完全面向对象的语言,一个数字也是一个类 定义一个类 然后进入irb命令行

  • Redis伪分布式集群搭建

    1、创建redis集群 (1)安装ruby 查看默认安装的ruby -->ruby -v 如果有输出...

  • Ruby中的类与对象(一)

    一些约定: 类名首字母大写 方法名首字母小写 end在Ruby中无处不在。 声明类 创建类对象 这是很不同于其他语...

  • 创建ruby环境

    如何在mac上安装ruby环境: 对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个...

  • redis-trib.rb创建集群失败

    centos 7使用redis-trib.rb创建redis集群,发现没有装ruby。yum安装ruby yum ...

  • Ruby元编程笔记——1.对象模型

    打开类 在Ruby中,定义类的语句和其他语句没有本质区别,你可以在类定义中放置任何语句。 Ruby的class关键...

  • ruby类总结

    类 1.new 实例化对象 3. .class查看对象属于哪个类 4. instance_of? 判断对象是否属于...

网友评论

      本文标题:Ruby 创建类

      本文链接:https://www.haomeiwen.com/subject/skfbuxtx.html