gpt4 book ai didi

ruby-on-rails - 如何检测是否通过 Ruby on Rails 调用了 ruby​​ 代码

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:50 25 4
gpt4 key购买 nike

我写了一个小的 .rb 工具,它使用了“空白?”方法。如果由 ruby​​ 直接调用,我希望我的程序继续工作。我使用下面的代码对对象进行了猴子修补,但我不想在 Rails 下运行时进行猴子修补。我能做什么?

class Object
def blank?
respond_to?(:empty?) ? (respond_to?(:strip) ? strip.empty? : !!empty?) : !self
end
end

最佳答案

首先要记住的是,不鼓励直接对类进行猴子修补——即打开一个类来定义一个新方法。它可以工作,但不是很灵活并且被认为是一种代码味道。

一个更明智的猴子修补方法是在 mixin 中定义您的方法,然后将其包含在一个类中。

这也允许您有条件地包含 mixin。例如,Ruby Gems 中的一个常见要求是仅在另一个库(已经)加载时才实现或定义某些内容。一种常见的方法是检查是否定义了该库中的常量。例如,在您的情况下,您可以这样做:

module PresenceExtensions
def blank?
respond_to?(:empty?) ? (respond_to?(:strip) ? strip.empty? : !!empty?) : !self
end
end

unless Module.const_defined?("Rails") || Object.method_defined?(:blank?)
Object.include PresenceExtensions
end

另一种常用技术是尝试加载 gem,然后仅在 gem 不可用时才添加替代的 monkey-patch:

begin
require "active_support/core_ext/object/blank"
rescue LoadError
Object.include PresenceExtensions
end

这种技术的优点是,如果 gem 不可用,它会立即告诉您,这样您就不必担心加载顺序。

关于ruby-on-rails - 如何检测是否通过 Ruby on Rails 调用了 ruby​​ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com