首页 > 解决方案 > 如何在Ruby中添加另一个方法之后调用的方法

问题描述

有一个类有很多方法,都返回字符串(url)。我想添加在之前的任何方法之后调用的新方法,这会向 url 添加额外的参数。示例是:
Class.method.my_method
返回
www.domain.com/xxx/xxx?my_method_return
这样做的最佳方法是什么?

还有什么来源可以找到类似问题的解决方案吗?我把它贴在这里,因为我不确定我还能在哪里寻找答案。

标签: rubyoopdesign-patterns

解决方案


您的符号Class.method表示一个类方法。但是您的描述听起来像是一种标准方法Class#method。澄清一下,后者等价于Class.new.method。我在这里假设您的问题与后者有关。

我认为标准策略是使用一个实例变量来保存到目前为止处理的 url 的信息。这是一个例子。

class MyClass
  attr_reader :url  # defines the reading method "url"
  def initialize(baseurl)
    @url = baseurl
  end

  def my_method1
    @url << "?" + "my_method1_return"
  end

  def my_method2
    @url << "?" + "my_method2_return"
  end
end

my_url   = MyClass.new('www.domain.com/xxx/xxx')
string_url0 = my_url.url         # => 'www.domain.com/xxx/xxx'
string_url1 = my_url.my_method1  # => 'www.domain.com/xxx/xxx?my_method1_return'
string_url2 = my_url.my_method2  # => 'www.domain.com/xxx/xxx?my_method1_return?my_method2_return'
my_url.url        # == string_url2 == 'www.domain.com/xxx/xxx?my_method1_return?my_method2_return'

至于一般信息来源,我认为这个问题与 OOP 的基本设计模式有关,正如正确标记的那样。所以,我想不出任何捷径,但程序员多年来通过教科书、实际编程等学习它......


推荐阅读