打印输出时出现Ruby模式程序错误

打印输出时出现Ruby模式程序错误,ruby,Ruby,我有一个工作逻辑,通过接受终端的行数来动态打印金字塔和正方形。在包含“模块、类和开始-结束块”后,我面临错误 模块模式打印 班级作业 def输入 放置“输入行数:” 行=整数(gets.chomp) 如果是第10行,则引发StandardError 金字塔(行) 正方形(行) 救援标准错误 raise StandardError,“输入无效,输入的值不在1-10之间” 终止 def金字塔(行) 行。次做| n| 打印“”*(行-n) 放置“*”*(2*n+1) 终止 终止 放置“金字塔行:#{金

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

模块模式打印
班级作业
def输入
放置“输入行数:”
行=整数(gets.chomp)
如果是第10行,则引发StandardError
金字塔(行)
正方形(行)
救援标准错误
raise StandardError,“输入无效,输入的值不在1-10之间”
终止
def金字塔(行)
行。次做| n|
打印“”*(行-n)
放置“*”*(2*n+1)
终止
终止
放置“金字塔行:#{金字塔(行)}”
def方形(行)
行。次做|
将“*”放入*10
终止
终止
放置“Sqaure行:{square(行)}”
终止
终止
开始
res=图案打印::Operation.new
资源输入
终止
但我面临着错误

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>'
pattern.rb:20:in`':用于PatternPrinting的未定义局部变量或方法“rows::Operation:Class(namer
(ror)
from./pattern.rb:3:in`'
from./pattern.rb:2:in`'

是一个局部变量,仅在
输入
方法中可用,其他任何地方都不可用。一旦该方法完成,局部变量就会丢失

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

然后呢

@rows.times do |n|


您缺少ruby中的一个基本概念

  • 阅读ruby隐式和显式接收器
  • 局部变量具有方法/函数范围。因此,第20行的
    不可见
  • 即使如此,假设您的行是可访问的,那么它也应该抛出错误,因为这里隐式接收器self是您的类
    PatternPrinting
    PatternPrinting
    将尝试调用定义为类方法的方法
    pyramid
    ,而您的接收者
    PatternPrinting
    将找不到该方法,并最终导致调用方法丢失
  • 我强烈建议你去看看

如何让程序按照当前逻辑运行?@Shan_Boy:如果您的消息涉及行号,您应该始终在代码列表中指出受影响的行号。你不指望我们帮你数台词吧?至于错误,您有一行
放置“金字塔行:{Pyramid(Rows)}”
。这一行是在类定义进行时执行的。没有名为
rows
的变量(或方法),我不明白为什么要在定义类的过程中
put
某些内容。没有“当前逻辑”,因为这个程序中没有逻辑,所以作为第一步,只需删除这一行。不,你没有。你有一个不同的错误。这是什么?我想这是因为方法
pyramid
不是类方法。它不是用
self.
接收器定义的,也不是在
self中定义的
@rows = Integer.get_chomp
@rows.times do |n|
@rows.times do |_n|