【问题标题】:How to understand this code?如何理解这段代码?
【发布时间】:2013-03-29 01:58:45
【问题描述】:
def event_calendar_options
    { 
      :year => @year,
      :month => @month,
      :event_strips => @event_strips,
      :month_name_text => I18n.localize(@shown_month, :format => "%B %Y"),
      :previous_month_text => "<< " + month_link(@shown_month.prev_month),
      :next_month_text => month_link(@shown_month.next_month) + " >>"
    }
end

def event_calendar
  calendar event_calendar_options do |args|
    event = args[:event]
    %(<a href="/events/#{event.id}" title="#{h(event.name)}">#{h(event.name)}</a>)
  end
end

这里整个 event_calendar_options 都用 {} 括起来,所以它只是简单地返回哈希表吗?

其次,为什么event_calendar_options这个模块方法可以作为参数传递给日历?

【问题讨论】:

  • 它可以作为参数传递,因为它返回哈希。

标签: ruby-on-rails plugins calendar


【解决方案1】:

假设它们属于同一类(例如控制器或模型),event_calendar_options 可以由event_calendar 调用。这是课堂上的常见做法。即使它们不是,它们也可以被声明为 public 并被其他类调用(这不太常见)。

而且,是的,event_calendar_options 返回哈希表。在 ruby​​ 中,除非提供了 return 语句,否则将返回最终语句。在这种情况下,它将返回一个哈希表,该哈希表将被 event_calendar 方法迭代。

【讨论】:

  • 那为什么还要在散列周围使用一个类而不是直接定义一个散列呢?
  • 它不是围绕哈希的类,它是一种方法。由于我们处于类(控制器或模型)的上下文中,除了定义方法之外,我们将如何以任何其他方式定义哈希?
  • depa 是正确的。这是一种方法,如果不直接询问作者,我们就无法理解作者的动机。也许它用于多种方法或从其他类调用?如果是这样,这样做将被视为 DRY 方法。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2019-12-30
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多