【新手求教】请教ruby的几个语法问题

【新手求教】请教ruby的几个语法问题

1 变量前的某些符号(:、?)起什么作用?除了@、@@、$定义常量和属性以外

printHeader(bd.year, bd.month, bd.day, dd - bd, name_of_week(bd))
print " P=physical, E=emotional, M=mental\n"
print " -------------------------+-------------------------\n"
print " Bad Condition | Good Condition\n"
print " -------------------------+-------------------------\n"

(dd - bd).step(dd - bd + display_period) do |z|
phys, emot, geist = getPosition(z)

printf "%04d.%02d.%02d : ", dd.year, dd.month, dd.day
p = (phys / 2.0 + 0.5).to_i
e = (emot / 2.0 + 0.5).to_i
g = (geist / 2.0 + 0.5).to_i
graph = "." * 51
# 就是这里-----------------------------
graph[25] = ?|
graph[p] = ?P
graph[e] = ?E
graph[g] = ?M
# 就是这里-----------------------------
print graph, "\n"
dd = dd + 1
end


def set_params
@dw = if @opt_j then 3 else 2 end
@mw = (@dw + 1) * 7 - 1
@mn = if @opt_j then 2 else 3 end
@tw = (@mw + 2) * @mn - 2
@k = if @opt_m then 1 else 0 end
# 还有这一句---------------------------------------
@da = if @opt_j then :yday else :mday end
# 还有这一句---------------------------------------
end

为什么 yday 和 mday 前面有:??


2 一些语句后的do是起什么作用的?我感觉好像是对返回的对象执行一条语句,不知对不对
比如: (dd - bd).step(dd - bd + display_period) do |z|
  phys, emot, geist = getPosition(z)

3 为什么我新建的rb文件里require 'tk'后,无法执行?我用的ruby是1.8.6版本的
require 'tk'
root = TkRoot.new { title "Ex1" }
TkLabel.new(root) {
 text 'Hello, World!'
 pack { padx 15 ; pady 15; side 'left' }
}
Tk.mainloop

4 ruby的api在哪查比较方便?最好像php?name=Java" onclick="tagshow(event)" class="t_tag">Java一样,能看到清晰的定义和注释(英文也行)
比如,我如何去查询WIN32OLE库的api,我现在只有看了例子才知道如何调用IE和Excel
http://www.ruby-doc.org