2016-10-05 52 views
1

Tldr:我如何將'Shoes方法'包含到Array類和類中?使用最少的代碼創建,而不需要完全重構所有內容?我的課程不能使用鞋子方法,如第

我已經在Ruby中編寫了一個功能正常的程序,現在我想從中創建一個Shoes應用程序。

我遇到了手冊開頭描述的問題 - Shoes.app本身就是一種塊,所以自我總是指它,鞋類方法如「para」不一定會成爲無處不在的方式「放」是在Ruby中。但我沒有足夠的智能來修復它(我只是用自己的頭來回報純Ruby,忍受着我)

例如,我爲Array創建了一個新方法:putdata ,它通過一個學生的測試成績陣列循環作爲列表自動顯示每個:

self.each do |ea| 
    puts/para "#{ea.topic}: #{ea.score}" 
end 

工程在紅寶石。在Shoes中無效:Array類無法訪問方法段。我已經試過:

  • 使得陣列<鞋(它真的不喜歡)
  • 加入stack.app做......最終在各種各樣的地方在程序(沒有影響)
  • 嘗試呼籲鞋:: para而不是para(屁)
  • 我試過使用require'文件與我所有的類和方法in.rb'而不是相同的代碼在文件中(報告沒有類的方法)
  • 在調用方法之前直接嘗試要求我的代碼,以確保我的代碼在Shoes範圍內(報告沒有課程方法)
  • 使我的自定義類(課程和學生)<鞋,所以它會訪問其方法(導致運行時錯誤)

我知道了通過發揮作用: 1.刪除此代碼從Array類,並使其成爲浮動/通用的方法,而不是一個數組方法 2.私有方法錯誤 - >然後改寫它,而不是一個數組方法(array.putdata)它是一個通用的方法,它需要一個數組作爲參數(putdata(數組))

但我真的,真的不想通過我的代碼,並單獨取消組織它像這樣。

這是我的第一個1000行程序,有42個方法,我努力使它儘可能保持和整潔,所有東西都放在類或方法中,以便維護。我從大量的,逐步的通用方法到一些活潑的方法,從一切中獲得了它,這看起來更像是OOP如何去做的。現在我能看到做這項工作的唯一方法就是UN-OOP,並且沒有任何類方法或任何東西。我希望能夠從這個整潔的,功能性的後端無縫地實現程序:Ruby程序有很多「if string ==」SAVE「,save(student); else ...」,所以我希望用相同的後面代碼直接彈出「button.click {save(student)}」。

有沒有什麼根本我想念讓我這樣做?我能否輕鬆解決para問題,因爲我所有的類都包含顯示自己數據的方法?我想在每個課程的頂部複製「包含'鞋子方法'」並完成。

或者我需要從未來的一開始就用GUI來記住GUI?

(信息關於我的程序:

佈局是一系列的頁面,從側邊欄鏈接,使用帶有鏈接的網頁索引直接從沒人知道鞋的書,或者類書樣本複製

學生可以輸入自己的新的水平,並查看他們的當前進度的讀數。

有該程序的主要「部分」,其中有事情喜歡網頁的標題,而一些指令,以及通用的方法然後根據用戶的指示調用學生對象或Module方法來執行這些操作。

更高:學生是一個自定義類,有「保存」,「顯示展平數據」,「如果這個ELSE沒有添加一個關卡」和相關的數據位,如數組他們所有的課程對象都在。

每門課程也是一個自定義類(「模塊」),它有分數,模塊名稱等變量,以及一些微小的方法,如顯示格式化名稱,或添加一個模塊)

+0

你有沒有試過我的解決方案呢? – peter

回答

0

我很高興看到有關鞋子的問題,這已經很長時間了。 你是新來的,所以首先:你的問題太複雜了,太多的閱讀和太少的信息來幫助你。 你需要提供錯誤代碼或不做你期望的代碼,我們可以接管和嘗試的東西。這意味着從您的代碼測試或自己運行的代碼片段中提取並顯示問題。

我們還需要知道您使用的是哪個Ruby版本以及哪種版本和顏色的鞋子。我將使用的例子是綠色的鞋子。

我確定以下內容並不完全符合您的想法,但是我已經根據您對需要由puts和para列出的Array的描述進行了示例。

如果這不是你想要的,請更改問題或創建一個新問題。

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 

賣出期權也適用於蹄塊,但結果當然不來在圖形窗口,但在您開始在控制檯上,第一個列表之後。

相關問題