[英]My classes can't use Shoes methods like para
Tldr:如何在沒有完全重構所有內容的情況下,使用最少的代碼將Array方法包含在我們創建的Array類和類中?
我已經在Ruby中編寫了一個正常運行的程序,現在我想用它制作一個Shoes應用程序。
我遇到了本手冊開頭所描述的問題 - Shoes.app本身就是一種塊,所以自我總是指它,而像“para”這樣的鞋子方法並不一定能隨處可見“puts”在Ruby中。 但是我不夠聰明才能修復它(我只是用自己的頭腦來回歸純粹的紅寶石,請耐心等待)
例如,我為Array:putdata創建了一個新方法,它循環遍歷學生的測試分數數組,每個數組自動顯示一個列表:
self.each do |ea|
puts/para "#{ea.topic}: #{ea.score}"
end
適用於紅寶石。 在Shoes中不起作用:Array類無法訪問方法para。 我試過了:
我已經通過以下方式實現了以下功能:1。從Array類中刪除這段代碼,並使其成為浮點/泛型方法而不是Array方法2.私有方法錯誤 - >然后重新編寫它而不是數組method(array.putdata)它是一個將數組作為參數的通用方法(putdata(array))
但我真的,真的不想通過我的代碼並單獨解組它。
這是我的第一個1000行程序,有42種方法,我努力使它盡可能保持整潔,所有東西都隱藏在類或方法中以便於維護。 我從大量的,逐步的通用方法到大量的快速方法中得到了它,這似乎更像是OOP的意圖。 現在,我能看到的唯一方法就是UN-OOP,沒有類方法或任何東西。
我希望我可以從這個整潔,功能性的后端無縫地完成程序:Ruby程序有很多“if string ==”SAVE“,save(student); else ......”所以我希望能使用相同的后退代碼直接彈出“button.click {save(student)}”。
#我有什么基本的東西讓我這么做嗎? 我能否輕松解決para問題,因為我的所有類都包含顯示自己數據的方法? 我想在每個班級的頂部復制“包括'鞋子方法'”並完成。
或者我是否需要從一開始就考慮使用GUI?
(關於我的計划的信息:
布局是一系列頁面,從側邊欄鏈接,使用索引與鏈接頁面直接從Nobody Knows Shoes書籍或類書樣本中復制。
學生可以輸入他們的新關卡,並查看他們當前進度的讀數。
程序的主要“部分”有通用的方法,它們具有頁面標題和一些指令之類的東西,然后調用學生對象或模塊方法來按照用戶的指示執行操作。
更高:學生是一個自定義類,使用“保存”,“顯示扁平化數據”,“如果此ELSE不添加一個級別”等方法,以及相關的數據位,例如包含所有課程對象的數組在。
每個課程也是一個自定義類(“模塊”),它有分數,模塊名稱等作為變量,以及一些微小的方法,如顯示格式化名稱,或添加一個到這個模塊。)
我很高興看到關於鞋子的問題,這已經很久了。 你是第一個這樣的新人:你的問題太詳細了,閱讀太多,信息太少,無法幫助你。 你需要提供錯誤的代碼或不做你期望的代碼,我們可以接管和嘗試的東西。 這意味着從您自己運行的代碼測試或代碼片段中提取並顯示問題。
我們還需要知道您使用的是哪個Ruby版本以及哪種版本和顏色的鞋子。 我將使用的例子是綠色鞋子。
我確定以下內容並不完全是你所追求的,但我根據你對一個數組的描述做了一個樣本,需要通過puts和para列出。
如果這不是您所追求的,請更改問題或制作新問題。
require 'green_shoes'
s = Struct.new(:topic, :score)
s1 = s.new("test1", 1)
s2 = s.new("test2", 2)
A = [s1, s2]
class Array
def putsdata(shoes = nil)
if shoes.class == Shoes::App
self.each do |ea|
shoes.para "#{ea.topic}: #{ea.score}"
end
else
self.each do |ea|
puts "#{ea.topic}: #{ea.score}"
end
end
end
end
A.putsdata
# gives in the console
# test1: 1
# test2: 2
Shoes.app do
A.putsdata(self)
end
# gives in a graphic window
# test1: 1
# test2: 2
看跌期權也適用於鞋子塊,但當然結果不會出現在圖形窗口中,而是出現在第一個列表之后的控制台上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.