簡體   English   中英

我的課程不能使用像para這樣的鞋子方法

[英]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。 我試過了:

  • 制作Array <Shoes(它真的不喜歡)
  • 添加stack.app做...結束程序中的各個地方(沒有影響)
  • 試圖叫鞋:: para而不是para(屁)
  • 我已經嘗試使用require'文件包含所有類和方法in.rb'而不是文件中的相同代碼(報告沒有類的方法)
  • 在調用方法之前嘗試直接要求我的代碼,以確保我的代碼在Shoes的范圍內(報告沒有類的方法)
  • 制作我的自定義類(課程和學生)<Shoes,因此它可以訪問其方法(導致運行時錯誤)

我已經通過以下方式實現了以下功能: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM