代码之家  ›  专栏  ›  技术社区  ›  kris

为什么我的Perl对象找不到它的skip()方法,即使我可以将其作为子例程调用?

  •  1
  • kris  · 技术社区  · 16 年前

    我正在处理一个Perl模块,每当我调用 skip()

    $cursor->skip(4);
    

    Undefined subroutine &MyModule::Cursor::skip called at t/tester.pl line 24.
            (in cleanup) invalid object at t/tester.pl line 24.
    

    当我这样称呼它时:

    MyModule::Cursor::skip($cursor, 4);
    

    Perl找到了!

    奇怪的是,如果我说出你的名字” skip skipper ", " hello )中,此语法起作用:

    $cursor->skipper(4);
    

    我想也许 是一个“秘密”的保留关键字或什么的,但我也有一些方法被命名为 sort() next() (我知道这是保留的),这些工作很好。

    我真的想命名这个方法“ 跳过 “有人知道Perl找不到它的原因吗?

    2 回复  |  直到 16 年前
        1
  •  6
  •   Community Mohan Dere    6 年前

    skip() 出口自 Test::More ,自可执行文件名为 t/tester.pl .

    什么是 ref($cursor) 放弃你?这应该是一个幸福的时刻 MyModule::Cursor 对象,但是“ invalid object “错误可能表明对象构造不正确。

    编辑: perldiag 提供了另一个线索: in cleanup 表示对象的析构函数遇到问题。假设对象中没有析构函数,请创建一个 MyModule::Cursor::DESTROY Data::Dump 这就是现在要看的对象。

        2
  •  2
  •   Andrew Barnett    16 年前

    如果没有实际的代码,很难调试它。

    你…吗 使用MyModule::Cursor 在您的测试代码中?当你更换 跳过 船长 ,您是否以与测试模块完全相同的方式调用它?你能用吗 跳过

    我要做的是查找测试代码中的错误,而不是模块中的错误。

    更新: 您没有在上声明方法之类的操作 MyModule::游标 在两个不同的文件中,是吗?您收到的错误消息告诉我它对类型为的对象有一个幸运的引用 MyModule::游标 ,所以它了解班级;但是它找不到 . 你是否碰巧申报了部分货物 MyModule::游标 在一个文件中,以及 跳过 在另一个文件中,您的测试模块不包括第二个文件?或者,您的定义中是否存在语法错误 跳过 --缺少分号或未配对的花括号?(但话说回来,为什么会这样呢 MyModule::Cursor::skip 在哪里工作 $cursor->跳过 没有吗?)

    推荐文章