Gem 是否应该假设其他 gem 已加载?
Should Gem assumes that other gem is loaded?
我们有一个 gem,其中我们有一个方法 #display_name
,如果定义了 I18n gem,此方法 returns 本地化名称,否则回退到 default_display_name.
以下是当前的实现:
def display_name
if Module.const_defined?(:I18n)
localized_display_name
else
default_display_name
end
end
我们想在我们调用的每个方法调用上重构它 Module#const_defined?
。
以下是建议的实现。
if Module.const_defined?(:I18n)
def display_name
localized_display_name
end
else
def display_name
default_display_name
end
end
从表面上看,这看起来不错,但我们担心现在我们假设的要求顺序为 gem。所以,我的问题是,gem 是否应该假设另一个 gem 已加载(在本例中为 I18n),或者它应该像当前实现一样延迟检查。
欢迎对 refactoring/optimizations 提出任何其他建议。提前致谢!
require(name) → true or false
Loads the given name
, returning true
if successful and false
if the feature is already loaded.
这意味着如果您 require
没有多次加载 file\gem。因此,我将在您的程序的入口点明确说明要求。
您始终可以使用
测试是否存在 rubygem
Gem.loaded_specs.has_key? 'gem-name'
我们有一个 gem,其中我们有一个方法 #display_name
,如果定义了 I18n gem,此方法 returns 本地化名称,否则回退到 default_display_name.
以下是当前的实现:
def display_name
if Module.const_defined?(:I18n)
localized_display_name
else
default_display_name
end
end
我们想在我们调用的每个方法调用上重构它 Module#const_defined?
。
以下是建议的实现。
if Module.const_defined?(:I18n)
def display_name
localized_display_name
end
else
def display_name
default_display_name
end
end
从表面上看,这看起来不错,但我们担心现在我们假设的要求顺序为 gem。所以,我的问题是,gem 是否应该假设另一个 gem 已加载(在本例中为 I18n),或者它应该像当前实现一样延迟检查。
欢迎对 refactoring/optimizations 提出任何其他建议。提前致谢!
require(name) → true or false
Loads the givenname
, returningtrue
if successful andfalse
if the feature is already loaded.
这意味着如果您 require
没有多次加载 file\gem。因此,我将在您的程序的入口点明确说明要求。
您始终可以使用
测试是否存在 rubygemGem.loaded_specs.has_key? 'gem-name'