论坛首页 编程语言技术论坛

变量到重新定义别的类方法中的方法

浏览 2627 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-04   最后修改:2009-09-16
缘由:我定义了一个类(彩票Cp),其中定义了类变量(@@cps)用于记录所有被实例化的对象,并通过类方法(self.get_cps)提供外部接口。
问题是,我要测试我的彩票程序在最近50期的实际情况与模拟产生的数据进行比较,但我只想一次把所有的历史数据都实例化,然后再修改Cp类的get_cps类方法。我的做法是这样的

类定义:
Class Cp 
  @@cps = []

  class << self
    def get_cps
      @@cps
    end

    ...
  end

  def initialize
    @@cps <<  self
  end

  ...
end


测试程序:
...... #产生彩票的所有历史实例

$cps = Cp.get_cps

(1..50).each do |t|
  $n = t
  Cp.class_eval <<-END
    def self.get_cps
      $cps[$n..-1]	#通过两个全局变量传到方法内部
    end
  END

  ...
end


目的是达到了, 但通过全局变量的方式心里总是不怎么舒服,究竟怎么做才更显得Ruby呢?请大家讨论一下。

如果是通过逐步增加彩票实例的方法就不说了,我还要进行多线程同时模拟呢。


另外找到一个更好的方法:
...... #产生彩票的所有历史实例

(1..50).each do |t|
  Cp.class_eval <<-END
   def self.get_cps
      @@cps[#{t}..-1]
    end
  END

  ...
end

   这种方法在本场景下是有效的。也就是说,如果传入的只是数字、字符串等简单对象,可以直接以#{}的方式先计算出字符串的方式改变定义。但如果确实需要复杂对象(比如我确实需要本地得到的cps)的传入,是否有办法呢?
   发表时间:2009-08-04  
好像你2个方法是一样的啊,类变量和全局变量本身就没什么区别。
0 请登录后投票
   发表时间:2009-08-04  
秦汉唐宋明 写道
好像你2个方法是一样的啊,类变量和全局变量本身就没什么区别。


类变量只在类(包括实例)中才能访问。而全局变量可在类外部(全局变量本身就不属于任何类)访问。当然不一样。
0 请登录后投票
   发表时间:2009-08-04  
看了半天不知道楼主想干啥。。。
@@cps[#{t}..-1] 

上面这句是啥意思?

怎么感觉应该是@@cps << t呢?

0 请登录后投票
   发表时间:2009-08-06   最后修改:2009-08-06
Hooopo 写道
看了半天不知道楼主想干啥。。。
@@cps[#{t}..-1] 

上面这句是啥意思?

怎么感觉应该是@@cps << t呢?



前面说了,@@cps保存着所有被实例化的对象。我的主程序就是要在所有这些实例对象的基础上预测出将来对象的元素。由于仿真测试程序是要把最近50期内每期的实际结果对象作为参照,而每期之前的对象作为处理对象。也就是说,在测试程序中,我要逐步屏蔽掉最近50期的数据,所以不是把所有的实例对象都返给处理程序,只取测试当期后面的历史数据对象。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics