1

我是红宝石新手!我正在努力学习“!”的用法 .

我知道!包含在内,以便就地修改用户的字符串;否则,Ruby 将创建 user_input 的副本并对其进行修改。

但是在以下两个程序的情况下,我得到相同的输出。为什么?

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase!

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase
4

3 回答 3

4

在 Ruby 中,刘海 (!) 用于通知程序员他们正在调用的方法是destructive. 这是 Ruby 说“嘿!这个方法将改变它被调用的对象!”的方式。中的许多安全方法StringArray, Enumerable 等类

例子:

my_str = "Hello, World!"
my_str.downcase # => "hello, world!"
my_str # => "Hello, World!"

my_str = "Goodbye, World!"
my_str.downcase! # => "goodbye, world!"
my_str #> "goodbye, world!"

如您所见,虽然这两种方法都返回字符串的小写变体,downcase!但实际上会my_str永久更改。

这是 Ruby 的一个非常方便的方面,我希望提供更多的语言。

我认为还值得一提的是,由于破坏性方法就地工作,它们通常比必须返回新对象的安全方法更快、内存效率更高。因此,my_string.downcase!应尽可能首选my_string = my_string.downcase

于 2013-05-19T02:25:49.267 回答
1
print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase!

user_inputvalue 是用户输入的内容,小写

print "Please Enter your Input"
user_input = gets.chomp
user_input.downcase

user_inputvalue 是用户输入的内容

区别在于 的值user_input,而不是打印的内容。

于 2013-05-18T20:35:54.793 回答
1

两种方法的行为相同,但返回的对象不同。

downcase返回 的修改副本user_input。换句话说,user_input保持不变。

downcase!返回user_input修改。请注意,这可以提高内存效率,因为您不会生成user_input.

在这两种情况下,它们都会返回user_input. 这就是为什么你有相同的输出。

要了解有关 Ruby 中 bang 方法的更多信息,请参阅此博客文章

hth

于 2013-05-18T20:45:41.843 回答