Ruby初学者我有点困惑[重复]
Posted
技术标签:
【中文标题】Ruby初学者我有点困惑[重复]【英文标题】:Ruby beginner i'm a little confused [duplicate] 【发布时间】:2016-11-08 14:26:27 【问题描述】:我想知道这两个例子有什么区别:
my_name = gets.chomp
my_name.capitalize
和
my_name = gets.chomp
my_name.capitalize!
【问题讨论】:
通读 Ruby 文档,尤其是 Ruby 附带的方法的类文档。他们是你的朋友。capitalize
vs. capitalize!
如果您要编程,那么养成阅读任何语言文档的习惯非常重要。教程还可以,但文档才是真理的源泉。
【参考方案1】:
来自 Ruby capitalize
文档:
capitalize
返回 str 的副本,其中第一个字符转换为大写 其余为小写。
capitalize!
通过将第一个字符转换为大写和 余数为小写。如果未进行任何更改,则返回 nil。
【讨论】:
【参考方案2】:区别是
my_name.capitalize
返回my_name
的大写版本而不影响my_name
指向的对象,而
my_name.capitalize!
仍然返回my_name
的大写版本,但my_name
也发生了变化,所以
my_name = "john"
puts my_name.capitalize # print 'John' but the value of my_name is 'john'
puts my_name.capitalize! # print 'John' and now the value of my_name is 'John'
【讨论】:
我不明白您所说的“返回 my_name 的大写版本而不影响 my_name 指向的对象”是什么意思 你知道一个变量保持一个值。在第一种情况下,capitalize 是一种返回首字母大写的字符串并且不更改变量值的方法。在后者中,该方法返回一个第一个字母也大写的字符串,但它也会改变变量的值。 谢谢你,我明白了! 一般来说,不能依赖in-place-mutation方法的返回值。他们有时返回零。它们的主要目的是副作用。【参考方案3】:我总是很高兴看到有人进入 ruby!
ruby 的问题在于,尽管它是一种非常友好的语言,但它假设了很多事情,而不必告诉新手。一旦你掌握了几个月的语言,它们就会变得很有意义,但不是在此之前,所以我理解你的问题。
首先,爆炸 (!) 只是名称本身的一部分。 Ruby 允许感叹号和问号作为方法名称的一部分,就像任何其他字符一样。很酷,对吧?
为什么人们会打扰呢?嗯,这是一个约定。根据经验,一个方法为什么应该有一个爆炸符号的公认解释是该方法做了一个侵入性、破坏性或变异的事情,也就是说,它会破坏数据,在数据库,永久更改数据等。
不必像这样命名这些类型的方法,但这是一个在 Ruby 社区中很好地保留的约定。
Ruby 编程说:
“危险”或修改接收器的方法可能被命名为 尾随“!”。
希望这能回答你的问题。
【讨论】:
非常感谢您的解释。以上是关于Ruby初学者我有点困惑[重复]的主要内容,如果未能解决你的问题,请参考以下文章