我有一个三元运算符输出学生数。
@students.count < 2 ? puts("Now we have #{@students.count} student").center(75) : puts("Now we have #{@students.count} students").center(75)
我必须在put之后将字符串放在括号中,否则会出现错误:
syntax error, unexpected ':', expecting end-of-input
但是,由于我已将代码更新为此,因此我的方法.center
无效,我收到此错误:
`input_students': undefined method `center' for nil:NilClass (NoMethodError)
如何用括号解决这个问题?
答案 0 :(得分:1)
问题是您将#center
的来电应用于puts
的{{1}}
nil
注意:如果学生人数为0,那么您的留言为“现在我们有0名学生”
如果你想重构,那么你可以提取公共部分:居中和输出
@students.count < 2 ? puts("Now we have #{@students.count} student".center(75)) : puts("Now we have #{@students.count} students".center(75))
但这会导致长行(取决于消息),因此您可以使用
message = count < 2 ? 'message 1' : 'message 2'
puts message.center(75)
恕我直言代码需要具有可读性,并不总是与短代码相同。特别是当有很多陈述塞进一行时。
答案 1 :(得分:0)
Kernel.puts方法总是返回nil。
你可能想要这样做:
puts((@students.count < 2 ? "Now we have #{@students.count} student" : "Now we have #{@students.count} students").center(75))
就个人而言,我会写一些类似的东西:
message= "Now we have #{@students.count} student"
message << 's' if @students.count > 1
puts(message.center(75))