`
nj0308
  • 浏览: 4521 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

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

阅读更多
缘由:我定义了一个类(彩票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)的传入,是否有办法呢?
分享到:
评论
4 楼 nj0308 2009-08-06  
Hooopo 写道
看了半天不知道楼主想干啥。。。
@@cps[#{t}..-1] 

上面这句是啥意思?

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



前面说了,@@cps保存着所有被实例化的对象。我的主程序就是要在所有这些实例对象的基础上预测出将来对象的元素。由于仿真测试程序是要把最近50期内每期的实际结果对象作为参照,而每期之前的对象作为处理对象。也就是说,在测试程序中,我要逐步屏蔽掉最近50期的数据,所以不是把所有的实例对象都返给处理程序,只取测试当期后面的历史数据对象。
3 楼 Hooopo 2009-08-04  
看了半天不知道楼主想干啥。。。
@@cps[#{t}..-1] 

上面这句是啥意思?

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

2 楼 nj0308 2009-08-04  
秦汉唐宋明 写道
好像你2个方法是一样的啊,类变量和全局变量本身就没什么区别。


类变量只在类(包括实例)中才能访问。而全局变量可在类外部(全局变量本身就不属于任何类)访问。当然不一样。
1 楼 秦汉唐宋明 2009-08-04  
好像你2个方法是一样的啊,类变量和全局变量本身就没什么区别。

相关推荐

    C/C++语言中全局变量重复定义问题的解决方法

    宏定义、结构体定义、函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已定义 问题出现的原因 为什么会出现这种...

    定义全局变量 变量 全局

    这里将介绍两种在MFC工程中定义全局变量和全局函数的方法。 方法一:在应用程序类中定义 在MFC中,每个工程都有一个派生自CWinApp的类,例如CxxxApp。你可以将需要全局访问的变量和函数作为此类的成员变量和成员...

    VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量

    VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量...

    STM32F429在SDRAM中定义变量不用指定地址方法

    经过3天的努力,我实现了一种方法,把程序的堆空间完全指定到外部SDRAM,这样在程序中任意定义的全局和静态变量不用指定地址,在编译程序时,编译器自动把这些变量分配到外部SDRAM中。此方法适用于IAR环境,

    资源变量定义方法

    例如,如果有一个图像资源`资源变量定义方法.jpg`,我们可以在`Unit1.pas`中创建一个TImage组件,并在它的`Picture`属性中加载这个资源: ```delphi uses Classes, Graphics; var ImageResource: ...

    定义一个Document类,包含成员变量name,从Document派生出Book类,增加PageCount变量。编写主函数

    - 在Java中,类定义通常包括类名、属性(成员变量)以及方法(成员函数)。 - **示例**: ```java public class Document { private String name; public Document(String name) { this.name = name; } ...

    C#net反射实现访问类中的私有变量或者方法

    在上述代码中,我们定义了一个名为`ChangeValue`的类,该类包含一个私有字符串变量`myValue`和两个公共方法:构造函数和`WriteLine`方法。`Test`类中的`Main`方法则演示了如何使用反射来修改`ChangeValue`类实例中的...

    在程序定义变量的几种方法

    程序定义变量的命名方法是软件开发和程序设计中非常重要的一方面。不同的命名方法可以影响程序的可读性、维护性和易用性。本文将介绍三种常见的程序定义变量的命名方法:匈牙利命名法、骆 驼命名法和帕斯卡命名法。 ...

    C++ 包含类两个类互相调用彼此的类成员变量和方法

    成员对象可以直接访问所属类的所有公有(public)和保护(protected)成员,包括方法和变量。 当我们有两个类A和B,且它们需要互相调用对方的成员时,通常会遇到两个主要问题:前置声明(Forward Declaration)和...

    C++中类使用全局变量

    全局变量`a`可以在整个程序的任何地方访问,包括类的方法中。在类`date`中定义了一个成员函数`printfl()`,该函数用于打印数组`a`的所有元素。 ```cpp const int a[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; ``` ...

    Java类变量和方法.doc

    方法中的变量有不同作用域:成员变量在整个类内有效,局部变量只在其定义的方法或块内有效,方法参数在其所属的方法或构造器内有效,而异常处理参数则局限于特定的异常处理代码。 构造方法是与类同名的方法,用于...

    python检测某个变量是否有定义的方法

    本文将详细介绍几种在Python中检测变量是否已定义的方法,并通过实例来展示这些方法的具体应用。 #### 方法一:使用`locals()`函数 `locals()`函数返回当前作用域内的所有局部变量的字典。可以通过检查这个字典...

    QT 使用全局变量的方法 - 郭小郭的专栏 - CSDN博客1

    1. 在一个头文件(例如`temp.h`)中定义一个类,并在类中声明静态成员变量: ```cpp #ifndef TEMP_H #define TEMP_H class Temp { private: static int x; }; #endif // TEMP_H ``` 2. 在对应的cpp文件(例如`...

    MFC中定义全局变量和全局函数的方法

    MFC项目的复杂性使得简单的全局变量定义变得不再适用,因为这可能会导致难以调试的问题。本文将详细介绍如何在MFC中正确地定义和使用全局变量与全局函数,从而有效地管理项目中的数据流和功能复用。 #### 定义全局...

    Java成员变量局部变量静态变量成员方法全局方法等概念的区

    成员变量可以在类的任何方法中访问,也可以在类的外部通过对象进行访问。 2. 局部变量(Local Variables): 局部变量是在方法、构造器或者块中声明的,它们的作用域仅限于声明它们的代码块。一旦代码块执行完毕,...

    Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc

    ### Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释 #### 背景介绍 在Java编程语言中,局部内部类(Local Inner Class)是一种特殊的内部类形式,它被定义在某个方法或构造器的内部。...

    C# 公有变量 私有变量 静态变量

    在C#编程语言中,变量的访问修饰符和类型对代码的组织和...在实践中,你可能会遇到更多复杂的场景,如属性(Properties)的使用,以及如何通过getter和setter方法来控制变量的访问,这些都是在C#中管理变量的重要补充。

Global site tag (gtag.js) - Google Analytics