2.6. 核心语言——对象,类,方法-1

未匹配的标注

为了建立有意义的程序,我们需要一些抽象的单元。在 Ruby 里面,这些单元就是对象和方法,所有的值都是对象。所有与值的交互都是通过调用一个对象的方法来发生的。对象是从类创建的,类是通过 class 关键字来定义的,类使用 def 来定义他们的实例方法。

类、方法的定义

这里是一个类,它有一个不接收参数的方法。

class Robot
  def talk
    "beep boop"
  end
end

方法名的结尾符号的约定

方法的名称能够以 ? 结尾——通常是用于返回布尔值的方法,也能够以一个 ! 结尾。按约定,当方法改变接收对象时就使用这个! ,没有 ! 就不改变。比如 bot = “robot”,bot.gsub(“o”, “i”) 返回一个新的字符串 “ribit”,但 bot 本身并不会改变,然而 bot.gsub!(“o”, “i”) 会改变 bot 本身。

bot = "robot"
bot.gsub("o", "i") # => "ribit"
puts bot # => "robot"

bot.gsub!("o", "i") # => "ribit"
puts bot # => "ribit"

image-20221004154248845

创建对象、调用方法

对象是通过调用类的 new 方法,从而实例化类来创建的。调用对象上的方法是在对象后面跟上. 和方法名来完成的。方法的返回值就是它方法体里面执行的最后一个表达式的值。除非方法里面包含了一个明确的 return 指令。

class Robot
  def talk
    "beep boop"
  end
end

bot = Robot.new
puts bot.talk # => "beep boop"

image-20221004154835279

&. VS .

如果对象没有实现或对应所请求的方法, . 操作符就会引起一个错误。因此有一个 safe navigation 操作符 &.,它的功能与 .类似,但如果其左边的值为 nil就会默默地返回 nil,而不是引发一个错误,因为 nil 没有所请求的方法。

class Robot
  def talk
    "beep boop"
  end
end
bot = Robot.new
puts bot&.talk # "beep boop"
bot = nil
puts bot&.talk # nil

bot = Robot.new
puts bot.talk # "beep boop"
bot = nil
puts bot.talk # NoMethodError (undefined method `name' for nil:NilClass)

image-20221004160420250

&. 在可能没有赋值的可选值上调用方法是很有用的,bot&.talk 等价于这个三元表达式:

bot == nil ? nil : bot.talk

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~