Ruby用ruby2d开发报no implicit conversion of nil into String错的修复
报错根因
该报错是Ruby2D窗口启动前必要配置未完成,触发内部空值类型错误导致,对应代码问题如下:
- 你在自定义
Window类中编写了config方法,通过Ruby2D提供的set接口传入窗口宽高、标题、背景色参数,但整个类的执行流程中从未调用过这个config方法:既没有在初始化方法initialize中调用,也没有在启动主循环的mainloop方法中调用。 - Ruby2D的
show方法启动窗口前,会先加载手柄控制器映射配置文件,该流程依赖基础配置完成后拿到正确的资源文件路径。由于你没有传入任何有效配置,内部读取到的映射文件路径为nil,执行File.exist?(nil)做文件存在性校验时,就会抛出no implicit conversion of nil into String的类型错误。
修复方案
核心是在调用show启动窗口前,先执行配置逻辑完成Ruby2D基础初始化。
你可以直接把配置逻辑整合到初始化方法中,不需要单独暴露手动调用的config方法,修正后的自定义Window类代码如下:
require 'ruby2d' require_relative 'rsge_colors' class Window def initialize (w, h) @width = w.to_i @height = h.to_i @title = 'Blank Window' @background = $WHITE # 初始化阶段直接完成Ruby2D配置 set width: @width, height: @height set background: @background set title: @title end def mainloop show end end
如果要保留独立的config方法,只需要在initialize方法末尾添加config调用,或者在mainloop中调用show前先执行config即可,运行效果一致。
修复后原有测试代码不需要改动,运行即可正常弹出800*800的白色空白窗口。
补充:当前写法不存在类名冲突问题,Ruby2D 0.11.x版本的DSL方法(
set/show等)直接定义在顶层作用域,自定义的顶层Window类不会覆盖Ruby2D内部类逻辑。
内容的提问来源于stack exchange,提问作者theLawyer
相关产品推荐
相关产品推荐

