0

这是我的代码:

print "What's your first name"
first_name = "p".gets.chomp.capitalize!
puts "#{first_name}"
puts "Your name is #{first_name}!"
print "What's your last name?"
last_name = "m".gets.chomp.capitalize!
puts "#{last_name}"
puts "Your name is #{last_name}!"
print "What city do you live in?"
city = "world".gets.chomp.capitalize!
puts "#{city}"
puts "You live in #{city}!"
print "What state do you live in?"
state = "OR".gets.chomp.upcase!
puts "#{state}"
puts "You live in the state of #{state}!"

我不断收到此错误:

private method `gets' called for "p":String

我究竟做错了什么?

4

1 回答 1

4

有一个gets方法KernelObject包括Kernel。这意味着几乎所有东西都包含Kernel所以几乎所有东西都有一个gets方法。中的许多(私有)方法的Kernel目的是允许您将某些方法(例如gets)视为普通函数,以便您可以这样说:

s = gets

从标准输入读取。

当你这样做时:

"parker".gets.chomp.capitalize!

getsKernelaString调用私有方法,但使用显式接收器调用私有方法是 a NoMethodError

如果你想从标准输入中读取名字,那么你只需要这个:

first_name = gets.chomp.capitalize

其他gets电话也是如此。

于 2013-10-31T05:23:11.520 回答