在某些平台 (Windows) 上,Ruby 不支持File.symlink ,从而引发NotImplemented异常。我有一些代码可以使用或不使用符号链接,所以它需要适应。
我想出的发现是否支持符号链接的唯一方法是尝试创建一个:
def symlink_supported?
Dir.mktmpdir do |dir|
target_path = File.join(dir, 'target')
symlink_path = File.join(dir, 'symlink')
FileUtils.touch target_path
begin
FileUtils.ln_s target_path, symlink_path
true
rescue NotImplementedError
false
end
end
end
这很慢(很多文件系统操作!)而且看起来很笨重。缓慢可以通过记忆来处理,但这只会给已经很笨重的方法增加更多的机制。
是否有更快或更优雅的方式来发现是否支持File.symlink?