未定义的方法`存在?' - 功能......还是bug?

时间:2017-11-25 18:09:51

标签: ruby

我在Ruby中发现了一些意想不到的(对我而言)行为。这种行为是错误还是功能?我在编写项目时偶然发现了这种情况。

尽可能简洁地说:如果一个班级' name以:: File结尾,并且该类继承自另一个类,那么通常的File类不会与" File"一起使用,而是使用当前的类。

(是的,这很简洁,因为我可以弄清楚如何制作它。)

考虑以下代码,它产生[feature | bug]

class MyClass
end

class MyClass::File < MyClass
    def check
        File.exist?('./whatever.txt')
    end
end

myfile = MyClass::File.new
myfile.check

该代码产生以下错误:

./dev.rb:8:in `check': undefined method `exist?' for MyClass::File:Class (NoMethodError)
Did you mean?  exit
               exit!
    from ./dev.rb:13:in `<main>'

奇怪的是(对我而言),如果MyClass :: File没有从MyClass继承,那么错误就不会发生。也就是说,如果你删除&#34;&lt; MyClass的&#34;那部分没有错误。

现在,我可以听到一些程序员嘀咕他们的拿铁咖啡:你不应该用:: File结束一个类名,那只是糟糕的形式。好吧,我真的希望我的类名为:: File,因为它是它所代表的对象的类型。我只是喜欢这个东西,我喜欢给类有意义的名字。

我通过调用Object :: File而不仅仅是File:

找到了解决方法
Object::File.exist?('./whatever.txt')

我甚至不知道我是怎么想出来的......我无法对这个[功能| bug]进行任何搜索,但我在20个猜测中想出来了。幸运的是,我猜。

因此...

1)这是一个功能还是一个错误? 2)我使用了正确的解决方法吗?

0 个答案:

没有答案