迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 Ruby 中使用安全导航

作者:迹忆客 最近更新:2023/03/21 浏览次数:

Ruby 安全导航运算符 (&.) 是在 Ruby 2.3.0 中引入的。它允许你安全地链接对象上的方法,基本上是为了避免流行的 nil:NilClass 的未定义方法错误。

本文将简要讨论如何在 Ruby 中使用安全导航。

在 Ruby 中使用安全导航来防止未定义的方法

示例代码:

class Bus
  def seats
    14
  end
end

class Vehicle
  def initialize(name)
    @name = name
  end

  def category
    Bus.new if @name == "hiace"
  end
end

vehicle = Vehicle.new("camry")
number_of_seats = vehicle.category.seats
puts number_of_seats

输出:

undefined method `seats' for nil:NilClass (NoMethodError)

如上例所示,vehicle.category.seats 爆炸并导致 undefined method 错误,因为 vehicle.category 已经返回 nil。为了避免这个问题,我们需要在链接另一个方法之前检查 vehicle.category 是否成功。

下一个示例,vehicle.category && vehicle.category.seats 表示如果 vehicle.category 成功,则应评估 vehicle.category.seats,否则应停止代码执行并返回 nil。这很好用,但可以用 Safe Navigation Operator 编写。

示例代码:

class Bus
  def seats
    14
  end
end

class Vehicle
  def initialize(name)
    @name = name
  end

  def category
    Bus.new if @name == "hiace"
  end
end

vehicle = Vehicle.new("camry")
number_of_seats = vehicle.category && vehicle.category.seats
puts number_of_seats

输出:

nil

在最后一个示例中,我们将使用另一个更易读、更简洁的安全导航版本。它在我们必须在一个对象上链接许多方法的情况下变得很有用,例如 object1&.method1&.method2&.method3&.method4

示例代码:

class Bus
  def seats
    14
  end
end

class Vehicle
  def initialize(name)
    @name = name
  end

  def category
    Bus.new if @name == "hiace"
  end
end

vehicle = Vehicle.new("camry")
number_of_seats = vehicle&.category&.seats
puts number_of_seats

输出:

nil

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

用 Ruby 解析 XML

发布时间:2023/03/21 浏览次数:112 分类:编程语言

本文展示了如何在 Ruby 中使用 gem nokogiri 解析 XML 文件。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便