如何在Ruby中调用局部变量上的方法?

时间:2018-03-30 04:38:08

标签: ruby scope

可能是一个愚蠢的问题,但我跟着this article并且遇到了一些我无法理解的代码。这是:

class CreateArticle
  attr_reader :validate_article, :persist_article

  def initialize(validate_article, persist_article)
    @validate_article = validate_article
    @persist_article = persist_article
  end

  def call(params)
    result = validate_article.call(params)

    if result.success?
      persist_article.call(params)
    end
  end
end

更具体地说,有问题的一行是:

if result.success?

这是我的问题:success?方法来自哪里?它不是Ruby中的默认值,result是一个局部变量,所以它应该在附近。但即使它在代码示例中被省略,在哪里必须定义该行才能工作?我试图定义的每个地方都给了我一个未定义的方法'错误。

例如,我试图在CreateArticle类和(仅提到)ValidateArticle类中定义它,明显的罪魁祸首,但没有骰子。

更新

我问的原因不在于success?的作用,因为我对在我的代码中使用模式感兴趣。因此,例如,我的success?方法版本可能只是检查值是否已更新,或者是否已将项插入到数组中。例如,让我们说它就是这样:

def success? # or self.success?
  return true
end

问题是,我找不到可以放这个有用的地方。我甚至为它创建了一个模块,include将它放入课堂中,但它仍然无法工作(它只返回未定义的方法')。所以我仍然不知道我必须在哪里定义这样一个方法,以便它能够像它应该的那样工作。

3 个答案:

答案 0 :(得分:1)

实际上. success? 内置的ruby方法。检查 here。它实际上做的是检查Stat并返回一个布尔值。

答案 1 :(得分:1)

这是rails附带的一种方法。它检查具有200代码的服务器响应。如果它获得200代码则返回true,否则返回false。阅读有关它的rails API文档... https://apidock.com/rails/v3.2.3/ActiveResource/Response/success%3F

答案 2 :(得分:0)

我在博客上做了更多的挖掘,从我发现我怀疑代码可能正在使用dry-monads gem

  

您可以通过在monadic值上调用failure?success?来明确检查类型。

它在代码摘录中并不明确,但它是唯一有意义的东西。