4

我正在我的项目中使用Twitter-text gem,但我遇到了一些错误。我需要覆盖该 gem 的一个常量。

我在 StackOverflow 上看到一些关于方法覆盖的问题,这些问题对我有帮助,但我仍然遇到问题。我创建了一个名为twitter-text.rbin的文件/config/initializers/并编写了以下代码:

module Twitter
  class Regex
    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end

(这个正则表达式允许我用除空格之外的任何字符编写主题标签)。

我也在尝试覆盖一个方法,但它似乎也不起作用。按照我的代码(在同一个文件上):

module Twitter
  module Autolink
    def auto_link_hashtags(text, options = {})  # :yields: hashtag_text
      text = text.downcase
      options = options.dup
      (...)
    end
  end
end

我刚刚在此方法中添加了以下行:text = text.downcase. 那么,我能做些什么来覆盖这个方法和属性/常量呢?

4

1 回答 1

9

您可以尝试先删除常量,然后重新定义它:

module Twitter
  class Regex
    remove_const(:HASHTAG_CHARACTERS) if (defined?(HASHTAG_CHARACTERS))

    HASHTAG_CHARACTERS = "/[[^ ]_#{LATIN_ACCENTS}]/io"
  end
end

不过,这是超级丑陋的猴子补丁领域。

于 2013-04-17T18:50:41.287 回答