2014-08-31 103 views
2

所以我正在从Chris Pine的在线教程中学习,并且我坚持使用这个程序。我在做什么,我觉得只是教程中教导的内容?Ruby Nubie - 程序出了什么问题?

这是程序

toc = [[1, "Reflections"], [2, "Glasgow Roots"], [3, "Retirement U-turn"], [4, "A Fresh Start"], [5, "Beckham"]] 

title = "The table of contents of Sir Alex Ferguson' Biography" 

toc.each do |x, y| 
    lineWidth = 15 
    puts title.center lineWidth 
    puts x.ljust(lineWidth/2) + y.rjust(lineWidth/2) 
end 

错误

toc.rb:8:in `block in <main>': undefined method `ljust' for 1:Fixnum (NoMethodError) 
from toc.rb:5:in `each' 
from toc.rb:5:in `<main>' 

请帮助。

+0

你注意到代码划分为奇数(15)由2,这意味着你的字段将是7个字符宽,你的线将是14个字符,而不是你可能预期的15个字符? – dcorking 2014-08-31 13:39:04

回答

2

您的xFixnum类型,它没有ljust方法。您可以通过to_s方法将其转换为String来修复它。

x.to_s.ljust(lineWidth/2) 
+1

谢谢。解决了它。了解它。 – 2014-08-31 12:51:07

+1

如果您的问题已解决,请接受答案,以便它不会显示在“未答复”列表中。 – dcorking 2014-08-31 13:15:09

+0

@dcorking,考虑到快速选择可能会阻碍其他可能有趣的答案,有什么问题。 – 2014-08-31 15:18:09

3

或者您可以使用String#%Kernel#sprintf

puts '%-*s%*s' % [lineWidth/2, x, lineWidth/2, y] 

Kernel#printf

printf "%-*s%*s\n", lineWidth/2, x, lineWidth/2, y 
+0

我喜欢这个,但提问者应该注意,为了使这个答案的行为与问题中的ljust/rjust代码相同,他应该从格式中省略空格字符串,就像这个''% - * s%* s'' – dcorking 2014-08-31 13:35:42

+0

@dcorking,谢谢你指出。我相应地更新了答案。 – falsetru 2014-08-31 13:36:37