多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 12.安全导航 Ruby 努力成为程序员最好的朋友。 它的制造商正在发明新的方法来改善你的编码体验。 Ruby 2.3 中的此类改进之一是安全导航。 或者一种写不会引发意外错误的条件的方法。 请参阅下面的程序,键入并执行 ```rb # safe_navigation.rb class Robot attr_accessor :name end robot = Robot.new robot.name = "Zigor" puts "The robots name is #{robot.name}" if robot&.name ``` 输出量 ```rb The robots name is Zigor ``` 因此,程序可以完美地执行而不会出现故障。 查看代码`if robot&.name`,我们很快就会了解它的重要性。 现在,让我们来看一下机器人尚未初始化的情况。 那是 robot = Robot.new 未编写,程序看起来如下图所示 ```rb # safe_navigation_2.rb robot = nil puts "The robots name is #{robot.name}" if robot&.name ``` 当我们执行上面的程序时,它仍然不会引发错误! 现在看代码`if robot&.name`,它可以解决问题,我们将看看如何。 现在在下面键入程序并执行 ```rb # not_safe_navigation.rb robot = nil puts "The robots name is #{robot.name}" if robot.name ``` Output ```rb not_safe_navigation.rb:4:in `<main>': undefined method `name' for nil:NilClass (NoMethodError) ``` 因此,这引发了一个错误。 但是在这里,我们将`if`条件写为`if robot.name`,我们还没有使用安全导航。 现在我们知道了场景。 首先,我们必须检查变量`robot`是否存在或不存在`nil`,如果`robot.name`也不为 nil,那么我们就不能打印该东西。 因此,要更正 [not_safe_navigation.rb](code/not_safe_navigation.rb) ,我们输入以下代码。 ```rb # not_safe_navigation_2.rb robot = nil puts "The robots name is #{robot.name}" if robot and robot.name ``` 看一下我们需要如何使用 and 运算符提供长条件,如下所示: ```rb if robot and robot.name ``` 相反,我们可以简单地写成 ```rb if robot&.name ``` 如 [safe_navigation.rb](code/safe_navigation.rb) 中所示,这很方便。