Gab*_*abi 1 ruby arrays loops ruby-on-rails map
请让我知道这些操作之间的区别.第一个代码工作正常:
1) for elem in(mr)
elem.shedule = Date.new(date.year, date.month, date.day)
end
Run Code Online (Sandbox Code Playgroud)
但我想用map:
2) mr.map!{ |elem| elem.shedule = Date.new(date.year, date.month, date.day) }
Run Code Online (Sandbox Code Playgroud)
第二个代码返回一个错误:
NoMethodError in Events#index
Showing C:/Sites/calend/app/views/events/_calendar.html.erb where line #9 raised:
undefined method `shedule' for Thu, 04 Apr 2013:Date
Extracted source (around line #9):
6: </h2>
7: <%= calendar_for(@repeats, :year => @date.year, :month => @date.month) do |calendar| %>
8: <%= calendar.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') %>
9: <%= calendar.day(:day_method => :shedule) do |date, events| %>
10: <%= date.day %> <%= link_to '+', new_event_path(date: date) %>
11: <ul>
12: <% for event in events %>
Run Code Online (Sandbox Code Playgroud)
您使用map的方式错误,应该使用each.你的代码应该是:
mr.each do |elem|
elem.shedule = Date.new(date.year, date.month, date.day)
end
Run Code Online (Sandbox Code Playgroud)
map使用块返回的值替换Array中的每个元素(请参阅下面的Linuxios注释),在该示例中,块返回Date对象.map!在没有创建新数组的情况下执行相同的操作,因此在您的示例中mr是Date对象的数组而不是事件.
此外,for在Ruby代码中使用非常罕见,它通常被替换为each:
[1, 2, 3].each do |x|
puts x
end
Run Code Online (Sandbox Code Playgroud)
几乎相当于(见MladenJablanović对这个差异的答案的评论):
for x in [1, 2, 3]
puts x
end
Run Code Online (Sandbox Code Playgroud)
前者被认为更"红宝石".