我在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)我使用了正确的解决方法吗?