我最近重新發現了Ruby Shoes框架,它是一個小圖形框架,使用Ruby內部DSL功能,更具體地說是Shoes4。Ruby Shoes4:Sample13如何工作?
其中一個例子(位於./samples中)給我留下了特別的印象:sample13.rb,我不能完全理解。
運行此示例,您將看到一個名爲「new」的按鈕。每次按下此按鈕時,畫布上都會添加一個新圖形(程序中名爲框)(具有隨機形狀和顏色)。但更重要的是,您可以隨後點擊這些數字,然後移開它們。
的代碼是出奇的短:
Shoes.app :width => 300, :height => 300 do
COLORS = Shoes::COLORS
i = 45
button 'new' do
i += 5
box = rand(2) == 0 ? rect(i, i, 20) : oval(i, i, 20)
box.style :fill => send(COLORS.keys[rand(COLORS.keys.size)])
@flag = false
box.click{@flag = true; @box = box}
box.release{@flag = false}
end
motion{|left, top| @box.move(left-10, top-10) if @flag}
end
我想這個代碼是如何工作的解釋。
似乎每個創建的圖都存儲在某個地方,但究竟在哪裏?有沒有辦法獲得新創建的人物的收藏?
此外,如圖所示,還增加了一個數字方法,如點擊和版本。一般情況下,鞋子中的每個對象都是這種情況(我無法在Shoes網站上找到)?
好的。不平凡的部分是關於範圍機制,目前尚不清楚,所以我不願意驗證你的答案。 – JCLL
我只是試圖擴大一些塊的範圍。這是否解釋了它?如果沒有 - 還不清楚? – PragTob
我還是沒有明白。在執行過程中,局部變量(如框)被刪除,在塊的結尾,不是?所以通常(正如我瞭解Ruby),只有最後一個受到@box(instance)影響的盒子才能被移動(在「motion」方法中)。 – JCLL