gets.chomp做什么?

时间:2017-11-03 02:04:28

标签: ruby

我也想知道我是否总是要把感叹号放在.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}!"

3 个答案:

答案 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相同。