На некоторых платформах (Windows)не поддерживается Ruby, создавая исключение NotImplemented. У меня есть код, который может работать с символическими ссылками или без них, поэтому он должен адаптироваться.Как определить, поддерживается ли File.symlink
Единственный способ я придумал, чтобы выяснить, действительно ли или не поддерживаются символические ссылки, чтобы попытаться создать:
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
Это медленно (много операций файловой системы!), И кажется неуклюжим. Медленным может быть обработано memoization, но это просто добавляет больше машин к уже неуклюжим методу.
Есть ли более быстрый или элегантный способ узнать, поддерживается ли File.symlink?
Faster _and_ более изящный. Благодаря! –