在Ruby中,我可以引用另一个文件中定义的lambda吗?

时间:2014-12-15 14:49:48

标签: ruby lambda scope visibility

我将lambda add_links_to_descriptions从文件A移动到文件B,但现在我从文件A收到错误:

  

未定义的局部变量或方法`add_links_to_descriptions' for main:Object(NameError)

有没有办法解决这个问题?

这是文件A:

gallery = ViewableGallery.new(gallery_config.title, gallery_config.description, gallery_config.slug, \
  gallery_config.sources, gallery_config.upload_date, gallery_config.map_url, gallery_config.map_title, \
  gallery_config.year, viewable_photos).
  update_using( \
    add_tabs_before_every_description_line(2), \
    add_links_to_descriptions, \
    for_each_photo(&add_tabs_before_every_description_line(3)), \
    for_each_photo(&add_links_to_descriptions), \
    for_each_photo(&remove_final_empty_line))

这是文件B:

def add_tabs_before_every_description_line(how_many_tabs)
  return lambda do |mutable_viewable_content|
    mutable_viewable_content.description = add_tabs_before_every_line(mutable_viewable_content.description, how_many_tabs)
return mutable_viewable_content
  end
end

add_links_to_descriptions = lambda do |mutable_viewable_content|
  mutable_viewable_content.description = add_links_to_sources(mutable_viewable_content.description)
  return mutable_viewable_content
end

所以add_tabs_before_every_description_line我们引用的很好,我假设因为它是一种方法。  但lambda add_links_to_descriptions不可见。

1 个答案:

答案 0 :(得分:2)

以小写字母开头的变量是局部变量。局部变量是它们定义范围的本地变量(这就是为什么它们被称为"本地"变量)。

在您的示例中,add_links_to_descriptions是脚本B.rb的本地,只能在B.rb的脚本范围内访问。

你必须使用局部变量以外的东西:试图调用lambda的对象的实例变量,试图调用lambda的对象可以访问的对象的方法,常量,全局变量变量是一些可能性。其中哪一个是#34;正确的一个"取决于项目的整体设计。