ruby没有像java那种严格的包管理机制,因此引用起来就有些让人摸不着头脑,所以有人说ruby不适合用于多人协作的大项目,这是有一定道理的。
ruby加载其它的类,一般是通过require来加载的,如:
但是上面加载的是标准类库里面的文件,当然也可以是已安装的gems文件,但是如果是自己在本地写的文件,就不能直接用require了,如有一个hello.rb文件要引用当前目录的print.rb文件内的类或方法,就不能用require,而应该这样:
但是这个如果想直接通过require的方式来引用也是有办法的,那就是在文件头部将当前目录作为ruby加载的路径:
其中File.dirname(__FILE__)代表当前路径,而$LOAD_PATH.unshift方法的目的就是将当前目录作用ruby标准的加载路径。
总的来说,ruby的加载方式并没什么大的问题,虽然看起来没java包管理机制那样简洁,但java那种包管理机制也的确不太适合用于ruby这种动态语言,因为它太庸长了,但java默认就可以使用当前目录的类而不需要import导入,从这点来说,还是个不错的特性。
ruby加载其它的类,一般是通过require来加载的,如:
require 'dbi'
require "rexml/document"
但是上面加载的是标准类库里面的文件,当然也可以是已安装的gems文件,但是如果是自己在本地写的文件,就不能直接用require了,如有一个hello.rb文件要引用当前目录的print.rb文件内的类或方法,就不能用require,而应该这样:
require_relative "print"
但是这个如果想直接通过require的方式来引用也是有办法的,那就是在文件头部将当前目录作为ruby加载的路径:
$LOAD_PATH.unshift(File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.dirname(__FILE__))
require "print"
其中File.dirname(__FILE__)代表当前路径,而$LOAD_PATH.unshift方法的目的就是将当前目录作用ruby标准的加载路径。
总的来说,ruby的加载方式并没什么大的问题,虽然看起来没java包管理机制那样简洁,但java那种包管理机制也的确不太适合用于ruby这种动态语言,因为它太庸长了,但java默认就可以使用当前目录的类而不需要import导入,从这点来说,还是个不错的特性。