我的课程不能使用像para这样的鞋子方法

时间:2016-10-05 10:04:25

标签: ruby shoes

Tldr:我如何包括鞋子方法'进入Array类和我创建的类,用最少的代码,而不是完全重构一切?

我已经在Ruby中编写了一个正常运行的程序,现在我想从中创建一个Shoes应用程序。

我遇到了手册开头所描述的问题 - Shoes.app本身就是一种阻碍,所以自我总是指它,鞋子的方法就像" para"并不一定会随处可用" put"在Ruby中。但是我没有足够的智慧来修复它(我只是在使用自我并且回归纯粹的Ruby,与我一起承担)

例如,我为Array:putdata创建了一个新方法,它循环显示学生的测试分数数组,并自动显示每个数组:

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

在ruby中工作。不适用于Shoes:Array类无法访问方法段。我试过了:

  • 制作数组<鞋子(它真的不是那样的)
  • 添加stack.app do ...结束程序中的各个位置(无影响)
  • 试图调用Shoes :: para而不是para(farts)
  • 我尝试过使用require'文件,我的所有课程和方法都在.rb'而不是文件中的相同代码(报告没有类的方法)
  • 尝试在调用方法之前直接要求我的代码,以确保我的代码在Shoes的范围内(报告没有类的方法)
  • 制作我的自定义课程(课程和学生)<鞋子,所以它可以访问它的方法(导致运行时错误)

我已经通过以下方式运作: 1.从Array类中删除这段代码,并使其成为浮点/泛型方法而不是Array方法 2.私人方法错误 - >然后改写它而不是一个Array方法(array.putdata)它是一个将数组作为参数的通用方法(putdata(array))

但我真的,真的不想通过我的代码并单独取消组织它。

这是我的第一个1000线计划,有42种方法,我努力使它尽可能保持整洁,所有东西都隐藏在课堂或方法中以便于维护。我从大量的,逐步的通用方法到大量的快速方法中得到了它,这似乎更像是OOP的意图。现在,我可以看到使这项工作的唯一方法是UN-OOP它,没有类方法或任何东西。

我希望我可以从这个整洁,功能性的后端无缝地推送程序:Ruby程序有很多"如果string ==" SAVE&#34 ;, save(student);别的...",所以我希望直接弹出" button.click {save(student)}"使用相同的反码。

我有什么基本的东西让我这么做吗?我能否轻松解决para问题,因为我的所有类都包含显示自己数据的方法?我想要copypasta"包括鞋子方法'"在每个班级的顶部,并完成。

或者我是否需要从一开始就考虑使用GUI?

(关于我的计划的信息:

布局是一系列页面,从侧边栏链接,使用索引与链接页面直接从Nobody Knows Shoes书籍或类书样本中复制。

学生可以输入他们的新关卡,并查看他们当前进度的读数。

主要"部分有通用的方法"该程序包含页面标题和一些指令之类的东西,然后调用学生对象或模块方法按照用户的指示执行操作。

更高级别:学生是一个自定义课程,使用类似"保存","显示扁平化数据","如果此ELSE不在,则为您的级别添加一个" 39; t"和相关的数据位,就像一个包含所有课程对象的数组。

每个课程也是一个自定义类("模块"),它有分数,模块名称等作为变量,以及一些微小的方法,如显示格式化名称,或者在此模块中添加一个。)

1 个答案:

答案 0 :(得分:0)

我很高兴看到关于鞋子的问题,这已经很久了。 你是第一个这样的新人:你的问题太详细了,阅读太多,信息太少,无法帮助你。 你需要提供错误的代码或不做你期望的代码,我们可以接管和尝试的东西。这意味着从您自己运行的代码测试或代码段中提取并显示问题。

我们还需要知道您使用的是哪个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

看跌期权也适用于鞋块,但当然结果不会出现在图形窗口中,而是出现在第一个列表之后的控制台上。