打印输出时出现Ruby Pattern程序错误

时间:2018-09-13 06:11:40

标签: ruby

我有一个工作逻辑,可以通过接受终端的行数来动态打印金字塔和正方形。在包含“模块,类和开始-结束块”之后,我面临错误。

module PatternPrinting
  class Operation
    def input
      puts 'Enter the number of rows:'
      rows = Integer(gets.chomp)
      raise StandardError if rows <= 0 || rows > 10
      pyramid(rows)
      square(rows)
    rescue StandardError
      raise StandardError, 'Invalid Input, the entered value exceeds is not between 1-10 '
    end

  def pyramid(rows)
    rows.times do |n|
      print ' ' * (rows - n)
      puts '*' * (2 * n + 1)
    end
  end
  puts "Pyramid Rows: #{pyramid(rows)}"

  def square(rows)
    rows.times do |_n|
      puts '*' * 10
    end
  end
  puts "Sqaure Rows: #{square(rows)}"
end
end

begin
  res = PatternPrinting::Operation.new
  res.input
end

但是我面临错误

pattern.rb:20:in `<class:Operation>': undefined local variable or method `rows' for PatternPrinting::Operation:Class (NameEr
ror)
        from ./pattern.rb:3:in `<module:PatternPrinting>'
        from ./pattern.rb:2:in `<main>'

2 个答案:

答案 0 :(得分:1)

rows是一个局部变量,仅在input方法中可用,在其他任何地方均不可用。该方法完成后,局部变量将丢失。

如果您希望数据可用于类对象的所有方法,则需要使用实例变量。

@rows = Integer.get_chomp

然后做

@rows.times do |n|

@rows.times do |_n|

答案 1 :(得分:-1)

您缺少红宝石的基本概念。