调用函数

时间:2015-09-17 13:03:34

标签: ruby

我在ArgumentError in ArticlesController#scrape

上获得def extract_Articles(source_url:, source_type:, source_key:)

我从不同来源提取文章列表,并将其返回到我的控制器功能。

class ArticleController

  def Scrape
      @get_Articles = Source.new
      articles = @get_Articles.get_Articles
      ...
  end
end

class Source
  def get_Articles
    @articles = Array.new
    @articles = extract_Articles('url1','rss',nil)
    @articles = extract_Articles('url2','rss',nil)
    @articles = extract_Articles('url3','rss',nil)
    @articles = extract_Articles('url4','json','some-value')

  end  
  def extract_Articles(soruce_url:, url_type:, source_key:)
    ...
  end
end

有人可以告诉我这个问题吗?令人惊讶的是,我不确定为什么这实际上不起作用!

3 个答案:

答案 0 :(得分:3)

问题是您的方法被定义为使用命名参数,但您尝试使用位置参数调用它。

使用位置参数定义它:

def extract_Articles(soruce_url, url_type, source_key)
  # ...
end

或者用命名的方法调用它:

@articles = extract_Articles(soruce_url: 'url1', url_type: 'rss', source_key: nil)

答案 1 :(得分:2)

方法参数应该是变量,您还可以设置参数的默认值。

def extract_Articles(soruce_url, url_type, source_key=nil)
    ...
end

@articles = extract_Articles('url1','rss')
@articles = extract_Articles('url4','json','some-value')

您可以从here

获取更多详细信息

答案 2 :(得分:2)

方法参数不能是它们需要变量的符号,因此当通过传递值调用函数时,这些变量将具有该值。

好的,我已经阅读了有关关键字参数的信息,所以这是我更新的答案

你需要像这样传递params

@articles = extract_Articles(soruce_url: 'url1',url_type: 'rss',source_key:nil)