`
flowercat
  • 浏览: 361780 次
社区版块
存档分类
最新评论

Ruby Class里的变量

阅读更多
Class variables:用于描述属于class 的 states,而非属于某个object的states

1.表现形式 @@var

2.属于特定的class而不是object

3.在使用前,必须初始化



class Song

@@plays = 0

def initialize(name, artist, duration)

@name= name

@artist= artist

@duration = duration

@plays= 0

end

def play

@plays += 1# same as @plays = @plays + 1

@@plays += 1

"This song: #@plays plays. Total #@@plays plays."

end

end



*class variable是一种介于instance variables 和 global variables 间的一种variable,它在某些用途上,能够达到global variables的意图,又能避免global variables的副作用



4.class variables 和 instance variables一样如果要被外部访问,必须建立方法,注意不可以使用这样的方法建立:

class Song
@@test=1
attr_reader :test #不支持accessor method
end

song = Song.new
print song.test

结果:

nil



使用下面的方式(请记住,下面的方法,test和test=不是attributes!,attributes仅仅是那些可以访问的instance variables的方法):

class Song
@@test=1
#attr_reader :test
def test #定义一个普通的方法
@@test
end

def test=(t) #定义一个普通的方法

@@test=t

end
end

song = Song.new
print song.test

结果

1



其实除了上面的方式,还可以使用class methods,
def self.属性名称
end

在用法上总结一下,所有属性都可以定义一组方法:

def 属性名字

属性

end



def 属性名字=(a)

属性=a

end



来实现属性的存取,对于instance variables,我们可以使用更好的方法:

attr_reader :属性名 , :属性名

attr_writer :属性名 , :属性名



attr_accessor 一举两得: 同时兼备 attr_reader attr_writer 的作用。
attr 只能带一个符号参数, 第二个参数是一个 bool 参数,用于指示是否为头一个符号参数产生写方法。它的默认值是 false , 不产生写方法。

分享到:
评论

相关推荐

    类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范

    本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、类变量 类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...

    Ruby语言教程:Ruby 变量示例

    ### Ruby语言教程:深入解析Ruby变量类型 #### 一、引言 在编程语言中,变量扮演着极其重要的角色,它们用于存储数据并在程序运行过程中对其进行操作。Ruby 作为一种动态类型的脚本语言,提供了多种变量类型,使得...

    01Ruby 变量.docx

    ### Ruby 变量详解 #### 一、引言 在深入了解 Ruby 变量之前,我们需要先对 Ruby 这门语言有一个基本的认知。Ruby 是一种高度动态的、面向对象的脚本语言,它由日本人松本行弘(Matsumoto Yukihiro)在 1995 年...

    Ruby中类变量和实例变量的比较

    ### Ruby中类变量和实例变量的比较 在Ruby编程语言中,类变量和实例变量都是用来存储数据的重要机制。它们虽然都是变量,但在用途、作用范围、生命周期等方面有着明显的区别。接下来,我们将详细介绍这两者之间的四...

    学习 Ruby 的笔记以及 Demo(简介、语言特性、应用场景、Ruby 注释、Ruby 文件的构造与析构语句Ruby 变量等)

    6、Ruby 变量 变量不能使用保留字,命名规则:小写字母 变量名只能由[a-z_0-1]组成,且只能由字母开头 使用 .class 可以获取数据的类型 variable='' # 声明变量 puts variable.class # String【Integer、Float、...

    详细解析Ruby中的变量

    Ruby支持的有五种类型的变量。在前面的章节中已经经历了一个简短描述以及这些变量。本章中介绍的这五种类型的变量。 Ruby的全局变量: 全局变量以$开头。未初始化的全局变量的值是零,并使用-w选项产生警告。 全局...

    Ruby-dotenv从env加载环境变量

    Ruby-dotenv是一个非常有用的Ruby gem,它允许开发者从一个名为`.env`的文件中加载环境变量,以便在开发环境中管理应用程序的配置。这个工具对于保持敏感信息的安全,如API密钥、数据库凭证或其他不应直接存放在代码...

    Ruby类实例变量、类实例方法和类变量、类方法的区别

    在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...

    ruby 局部变量

    ruby> $foo nil ruby> @foo nil ruby> foo ERR: (eval):1: undefined local variable or method `foo’ for main(Object) 对局部变量的第一次赋值做的很像一次声明.如果你指向一个未初始化的局部变量,...

    Ruby 基础语法 视频教程1

    - **类变量**(Class Variables):以`@@`开头,用于在整个类的实例间共享数据,如`@@count = 0`。 - **全局变量**(Global Variables):以`$`开头,其作用域在整个程序中,如`$debug = true`。 - **常量**...

    Ruby-Ruby的面向对象的枚举

    Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举。在本篇文章中,我们将深入探讨Ruby如何实现面向对象的枚举以及它在实际开发中的应用。 首先,让我们...

    Ruby 面向对象知识总结

    - **类的定义**:在Ruby中,类通过`class`关键字开始定义,后面紧跟类名,通常类名首字母大写,采用驼峰命名法(CamelCase),例如`Box`或`MySpecialClass`。类定义以`end`关键字结束。 ```ruby class Box # 类...

    Ruby+编程语言的基础知识:变量、运算符、流程控制

    - 类变量:以`@@`开头,如`@@class_var` - 局部变量:以小写字母或下划线开头,如`local_var` ### 运算符 Ruby提供了多种运算符,包括算术运算符、关系运算符、逻辑运算符和赋值运算符等。以下是一些常用的运算符:...

    RUBY 教程.doc

    1. **变量定义:** RUBY中变量分为局部变量(以小写字母开头)、实例变量(以@开头)、类变量(以@@开头)以及全局变量(以$开头)。例如: ```ruby name = "Ruby" # 局部变量 @age = 20 # 实例变量 @@count = 1...

    ruby语法基础教程及Ruby教程中文版和安装文件

    Ruby中的变量不需要声明类型,它们的类型由赋值决定。变量分为局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)和全局变量(以`$`开头)。 控制流程是编程中的关键部分。Ruby提供了条件语句(如`if`和`...

    Ruby入门教程中文PDF 附实例

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大...

    Ruby元编程pdf

    3. **变量**:Ruby的变量可以在运行时被重新定义。全局变量、实例变量和类变量都可以动态改变,这使得代码可以根据不同的条件改变其行为。 4. **对象**:Ruby中的所有对象都有`class`方法,可以查看或改变其类。...

    二十分钟Ruby入门教程

    Ruby中的变量分为四种:局部变量(以小写字母或下划线开头,如`x`)、实例变量(以`@`开头,如`@name`)、类变量(以`@@`开头,如`@@count`)和全局变量(以`$`开头,如`$global_var`)。 接下来是数据类型。Ruby有...

    Ruby元编程第二版中文

    `instance_variable_get`和`instance_variable_set`用于访问实例变量,而`class_variable`系列方法用于处理类变量。 4. **常量、属性和符号**:Ruby允许在运行时动态地设置和修改常量。`attr_accessor`、`attr_...

    ruby中文教程,从基础到深入的让你学习ruby

    Ruby提供了许多工具来进行元编程,如`eval`函数可以执行字符串中的代码,`class_eval`和`instance_eval`允许在运行时修改类或对象的行为。此外,Ruby的`send`方法可以动态调用方法,`method_missing`可以捕获未定义...

Global site tag (gtag.js) - Google Analytics