我有一个工作逻辑,可以通过接受终端的行数来动态打印金字塔和正方形。在包含“模块,类和开始-结束块”之后,我面临错误。
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>'
答案 0 :(得分:1)
rows
是一个局部变量,仅在input
方法中可用,在其他任何地方均不可用。该方法完成后,局部变量将丢失。
如果您希望数据可用于类对象的所有方法,则需要使用实例变量。
做
@rows = Integer.get_chomp
然后做
@rows.times do |n|
和
@rows.times do |_n|
答案 1 :(得分:-1)
您缺少红宝石的基本概念。
rows
不可见。PatternPrinting
。 PatternPrinting
将尝试调用定义为类方法https://github.com/rubocop-hq/ruby-style-guide#def-self-class-methods的方法pyramid
,而您的接收者PatternPrinting
将找不到该方法,并最终导致缺少调用方法。