我也想知道我是否总是要把感叹号放在.capitalize之后!
print "What's your first name? "
first_name = gets.chomp
first_name.capitalize!
print "What's your last name? "
last_name = gets.chomp
last_name.capitalize!
print "What city are you from? "
city = gets.chomp
city.capitalize!
print "What state or province are you from? "
state = gets.chomp
state.capitalize!.upcase!
puts "Your name is #{first_name} #{last_name} and you're from #{city}, #{state}!"
答案 0 :(得分:1)
gets.chomp做什么?
如果输入 d e n i s 返回然后gets
将返回"denis\n"
,其中\n
是 return 键中的换行符。 chomp
删除了此类跟踪newline:
"denis\n".chomp
#=> "denis"
我还想知道我是否总是要把感叹号放在.capitalize之后!
一般来说,爆炸方法与其他任何方法一样:(来自method names的文档)
方法名称末尾的爆炸方法(
!
)被调用并执行,就像任何其他方法一样。
可是:
[...]按照惯例,带有感叹号或爆炸声的方法被认为是危险的。
Dangerous 可能意味着各种各样的事情,具体取决于具体情况。对于Ruby核心库中的内置方法,它通常意味着:
[...]当方法以爆炸(
!
)结束时,它表示与其非爆炸等效物不同,永久修改其接收器。
所以capitalize!
(带!
)会修改first_name
:(方法的接收者)
first_name = 'denis' #=> "denis"
first_name.capitalize! #=> "Denis"
first_name #=> "Denis"
如果字符串已经大写, capitalize!
也将返回nil
:
first_name = 'Denis' #=> "Denis"
first_name.capitalize! #=> nil
first_name #=> "Denis"
capitalize
(没有!
)将始终返回一个新的(大写)字符串,保持first_name
不变:
first_name = 'denis' #=> "denis"
first_name.capitalize #=> "Denis"
first_name #=> "denis"
显然,上面的capitalize
调用没有多大意义,因为返回值不会在任何地方使用。您通常希望使用新字符串执行某些操作,例如将其分配给变量:
capitalized_first_name = first_name.capitalize
或将其传递给方法:
puts "Your name is #{first_name.capitalize}"
答案 1 :(得分:0)
chomp删除字符串输入末尾的换行符。 添加!将改变变量的值。这不是必需的。这取决于您的使用案例。
foo = 'foo'
foo.capitalize
print foo
=> 'foo'
bar = 'bar'
bar.capitalize!
print bar
=> 'Bar'
答案 2 :(得分:0)
当然你不需要“!”。让我们试着没有他们:
print "What's your first name? "
first_name = gets.chomp.capitalize
print "What's your last name? "
last_name = gets.chomp.capitalize
print "What city are you from? "
city = gets.chomp.capitalize
print "What state or province are you from? "
state = gets.chomp.upcase
puts "Your name is #{first_name} #{last_name} and you're from #{city}, #{state}!"
你去吧。你可以避免变异,只需用标准方法操纵你的字符串。没有“!”方法需要申请!
ps:大写后跟upcase与upcase相同。