2016-07-06 37 views
-1

我想知道有什么区别这两个示例:红宝石初学者我有点困惑

my_name = gets.chomp 
my_name.capitalize 

my_name = gets.chomp 
my_name.capitalize! 
+0

通读Ruby文档,特别是Ruby附带的方法的类文档。他们是你的朋友。 ['capitalize'](http://ruby-doc.org/core-2.3.1/String.html#method-i-capitalize)与['capitalize!'](http://ruby-doc.org /core-2.3.1/String.html#method-i-capitalize-21)如果你要编程,这非常重要,你会习惯于阅读你选择的任何语言的文档。教程是可以的,但文档是真相的来源。 –

+0

我不知道你在说什么文档?我正在网上学习codeacademy。 –

回答

1

从红宝石capitalize文档:

capitalize 

返回str的副本,第一个字符为con转换为大写 ,其余为小写。

capitalize! 

通过转换第一个字符为大写和 其余为小写修改STR。如果没有更改,则返回nil。

+0

非常感谢。 –

3

不同的是

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' 
+0

我不明白你的意思是“返回my_name的大写版本而不影响my_name指向的对象” –

+0

你知道一个变量保持一个值。在第一种情况下,大写,是一种返回首字母大写的字符串的方法,不会更改变量的值。在后者中,该方法返回一个字符串,其首字母也是大写,但它也会更改变量的值。 – Ursus

+0

谢谢,我现在明白了! –

0

我总是很高兴看到有人进入红宝石!

与红宝石的事情是,即使它是一种非常友好的语言,它假设了很多东西,没有必要告诉新手它。一旦你在语言背后有几个月的时间,但是之前没有,那么它们就很有意义,所以我理解你的问题。

首先,爆炸(!)只是名称本身的一部分。与其他任何字符一样,Ruby允许感叹号和问号作为方法名称的一部分。很酷,对吧?

为什么人们打扰,但?那是一个惯例。作为一个经验法则,为什么一种方法应该有一个重要标志的公认的解释是该方法做了一个侵入性,破坏性或变异性的事,也就是说,它破坏数据,在数据库上运行事务,永久性地改变数据等等。

这不是强制性的命名这种类型的方法,但它是一个在Ruby社区中非常好的约定。

编程的Ruby说:

中的方法是 “危险的”,或修改接收器,可能被命名为 后面有个 “!”。

希望能回答你的问题。

+0

非常感谢您的解释。 –