当前位置:  开发笔记 > 后端 > 正文

你如何检查是否已加载库/ ruby​​-gem?

如何解决《你如何检查是否已加载库/ruby​​-gem?》经验,为你挑选了4个好方法。

在ruby代码中,我如何检查加载了哪些外部库?例如,

require 'some-library'
if is-loaded?('some-library')
  puts "this will run"
end

要么

# require 'some-library' Don't load it in here
if is-loaded?('some-library')
  puts "this will not run"
end

有没有办法做到这一点?

请注意我为什么需要这个:我正在研究繁荣,在Windows上,它将尝试包含'Win32/Console/ANSI',以启用ANSI颜色代码,如\ e [36m.我要做的是,如果系统是Windows并且未加载"Win32/Console/ANSI",它将附加颜色代码,因此不输出颜色代码.这是文件.



1> yfeldblum..:

大多数库通常会定义顶级常量.通常要做的是检查是否定义了常量.

> defined?(CSV)
#=> nil

> require "csv"
#=> true

> defined?(CSV)
#=> "constant"

> puts "loaded!" if defined?(CSV)
loaded!
#=> nil


const_defined?甚至

2> declan..:

require如果找不到您要加载的库,将抛出LoadError.所以你可以这样检查一下

begin
  require 'some-library'
  puts 'This will run.'
rescue LoadError
  puts 'This will not run'
  # error handling code here
end



3> Carl Zulauf..:

如果您想安全地尝试要求可能有或没有可用的gem /库,请使用以下内容:

begin
  require 'securerandom'
rescue LoadError
  # We just won't get securerandom
end

即使已经要求有问题的宝石,这也有效.在那种情况下,require语句将不执行任何操作,并且rescue块将永远不会执行.

如果您只是对已经加载的gem /库感兴趣,请检查其中是否存在其中一个常量.如果加载了ActiveSupport,我会这样做以动态加载其他功能:

if defined?(ActiveSupport)
  require "active_support/cache/redis_store"
end

如果gem/library不存在,您也可以使用相反的方法加载兼容层.例如,我使用了HashRuby核心Hash实现中不存在的一些方法,但是由ActiveSupport添加.因此,当我的gem在不存在ActiveSupport的环境中运行时,我定义了这些方法.

require 'core_ext/hash' unless defined?(ActiveSupport)



4> Joshua Pinte..:

除非已加载,否则需要库

为简单起见,这里是如何加载库,除非它已经加载:

require 'RMagick' unless defined?(Magick)

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有