学习 Tadayoshi Funaba 日历程序 (cal.rb)
首先,为日历创建一个星期指定数组,以根据当前日期工作:
require 'date'
fi = Date.new(1, 1, 1)
ve = (fi..fi + 6).collect{|cu|
%w(Вс Пн Вт Ср Чт Пт Сб)[cu.wday]
}
=> ["Сб", "Вс", "Пн", "Вт", "Ср", "Чт", "Пт"]
这里的数组对于任何初学者来说都像往常一样。然后将月份中的天数添加到此数组中,以获得将其转换为给定月份的日历输出所需的存根数组:
ve += (fi..fi + 41).collect{|cu|
if cu.mon == 1 then cu.send(:mday) end.to_s
}
=>
["Сб",
"Вс",
"Пн",
"Вт",
"Ср",
"Чт",
"Пт",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""]
然后我们得到一堆换行符,就像它是一个多字符串,而不是一个数组......它们来自哪里,它是如何工作的?
此外,选择子阵列时将保留这些翻译:
(0..ve.size / 7 - 1).collect{|i| ve[i * 7, 7]}
=>
[["Сб", "Вс", "Пн", "Вт", "Ср", "Чт", "Пт"],
[" 1", " 2", " 3", " 4", " 5", " 6", " 7"],
[" 8", " 9", "10", "11", "12", "13", "14"],
["15", "16", "17", "18", "19", "20", "21"],
["22", "23", "24", "25", "26", "27", "28"],
["29", "30", "31", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "]]
我完全不明白数组会发生什么,也许是没有详细解释的日期模块方法的一些影响?