ruby - NoMethod - 未定义的方法即使方法已定义也会出错
问题描述
当我在特定方法结束后定义方法时,我得到一个 no method - method undefined 错误。在此之前定义的方法有一个 if..else 语句块,这可能会在这里产生问题
我已经尝试在“问题制造方法”之前定义提到的方法,在这种情况下,我的方法可以正常工作。但是,如果在该特定方法之后定义了任何方法,我会收到相同的错误消息。
def display_board(board)
puts " #{board[0]} | #{board[1]} | #{board[2]} "
puts "-----------"
puts " #{board[3]} | #{board[4]} | #{board[5]} "
puts "-----------"
puts " #{board[6]} | #{board[7]} | #{board[8]} "
end
def input_to_index(pos)
pos = pos.to_i - 1
end
def valid_move?(board, pos)
if pos.between?(0,8)
if board[pos] == " "
return true
else
return false
end
else
return false
end
def move(board, pos, type)
board[pos] = "#{type}"
end
end
理想情况下,它应该通过所有测试用例。但我收到了这个特殊的错误:
1) ./lib/turn.rb #move allows "X" player in the bottom right and "O" in the top left
Failure/Error: move(board, 0, "O")
NoMethodError:
undefined method `move' for #<RSpec::ExampleGroups::LibTurnRb::Move:0x0000000001db90d8>
# ./spec/turn_spec.rb:70:in `block (3 levels) in <top (required)>'
解决方案
您必须valid_move?
在声明新方法之前关闭您的方法(move
)...
def valid_move?(board, pos)
if pos.between?(0,8)
if board[pos] == " "
return true
else
return false
end
else
return false
end
end
def move(board, pos, type)
board[pos] = "#{type}"
end
如果move
在另一个方法中声明方法,在主程序中是不可见的。
推荐阅读
- java - JaVers - 如何在 JSON 中添加额外字段以引用实体
- sql - Oracle SQL:行间的间隙
- java - 如何在android java中显示图像集?
- c# - 如何从 SQL 查询中获取消息到 C# 中的富文本框中
- java - java中月份两个日期之间的差异
- javascript - 将区块链块存储在数组中不是效率低下吗?(Node.js)
- c++ - Implementing/replacement of volatile std::string
- php - php strtotime 中遇到的格式不正确的数值
- apache-spark - 运行 Apache Spark 时出错
- python - Python 不能连接 'str' 和 'datetime.timedelta' 对象