ruby - 以“!”结尾的 Ruby 方法的含义
问题描述
我是 Ruby 的新手,到目前为止,我已经找到!
了一些过于技术性的解释。
假设我们有以下内容:
print "What is your first name?"
first_name = gets.chomp.upcase!
puts "Hi, #{first_name}. How are you?"
!
添加到方法中的是什么?这是否意味着每次我#{first_name}
在任何后续字符串中使用时,名称中的所有字母都会以大写形式打印?如果我遗漏,代码会受到怎样的影响!
?
如果可以的话,请用通俗易懂的方式解释它,因为我仍在学习 Ruby 的一些技术术语。
提前致谢。
解决方案
!
添加到方法中的是什么?
没有什么。The!
只是消息名称的一部分,就像 the u
、 the p
、 the c
、 the a
、 thes
和 the e
are 一样。它不会更改有关消息的任何内容。
如果我遗漏,代码会受到怎样的影响
!
?
然后你只是发送一条不同的消息。
upcase
和upcase!
或foo
和之间绝对没有任何区别bar
。它们只是消息名称。如果你写foo
,那么你发送消息foo
,如果你写bar
,那么你发送消息bar
,如果你写upcase
,那么你发送消息upcase
(在你的情况下将被发送到方法String#upcase
),如果你写upcase!
,那么你发送消息upcase!
(在您的案例将被发送到方法String#upcase!
)。
以结尾的消息名称!
绝对没有什么特别之处?
,就像以 or 结尾的消息名称绝对没有什么特别一样,就像以a
or b
or结尾的消息名称绝对没有什么特别之处一样c
。
但是,有一些约定。具体而言,公约是:
如果您有两个方法或多或少都做相同的事情,那么更令人惊讶的是用 a 命名的方法!
。
而已。这就是它的全部。
例如,有方法Process::exit
和Process::exit!
。他们都做同样的事情(终止进程),但其中一个跳过运行已安装的退出处理程序。
因为它们都做同样的事情,它们都可以被命名为“exit”,但是当然,你不能有两个同名的方法(在同一个接收器上)。因此,我们需要以某种方式区分两者。我们可以为两者之一想出一个完全不同的名称,但这也很烦人。
因此,相反,我们将 a 添加!
到这两种方法之一。现在,问题是:我们将添加!
到两者中的哪一个?根据我们的惯例,“更令人惊讶”的人应该得到!
. Ruby 开发人员选择了忽略退出处理程序的方法,我认为这是正确的选择:退出处理程序的全部意义在于它们在您退出时运行,因此退出而不运行退出处理程序的方法令人惊讶,因此应标有!
。
请注意,这些都与“破坏性”或“突变”无关。Process::exit!
不会改变任何东西,也不会破坏任何东西。另请注意,我们仅使用!
来标记一对方法中更令人惊讶的方法。当没有一个名为的方法时,永远不应该有一个名为的方法。foo!
foo
特别是,方法没有 a 的事实并不能!
告诉您有关该方法的任何信息。唯一有 a 的方法告诉您!
的是有两种方法,您可能应该检查文档以确保您了解这两种方法的作用以及!
警告您的“惊喜”是什么关于。而已。
推荐阅读
- elasticsearch - 使用 Elasticsearch 查找用户定义的元数据
- javascript - 如何动态追加jquery函数
- excel - VBA Excel在单元格之间复制ActiveX Spin按钮
- google-chrome - 在发送之前修改 websocket wss 发送消息
- ssis - 在 SSIS 查找转换中动态传递表名
- docker - 如何在我的 ubuntu 容器中安装 Docker?
- c# - 如何从串口c#接收更多消息
- hadoop - DynamoDBStorageHandler Hive 连接器
- android - 隐藏启动器图标后无法在启动时启动应用程序
- ios - 导航栏标题不出现