Ruby学习: 类变量和类方法
一、类变量
在ruby中,可以为类定义类变量,类变量的值为类的所有实例(对象)所共享。
有点类似其它语言(如java)中的静态变量,但与java中的静态变量的区别是,
类变量是私有的,无法在类的外部访问,只能通过类的方法访问。
类变量通过 @@符号来标识(连续的两个@符号)。
举例说明:
class Demo
@@a = 1
def plus
@@a += 1
end def print
puts @@a
end
end #创建对象,调用对象的方法
demo1= Demo.new
demo1.print
demo1.plus
demo1.print demo2= Demo.new
demo2.print
demo2.plus
demo2.print demo1.print
运行上面的代码,通过输出可以看出类变量的特性。
需要说明的是,类变量必须被初始化后才能访问,所以一般都是在类中直接声明,而不像实例变量一般是在构造函数(或其它方法)中声明。
因为在构造函数中声明和初始化,则创建多个对象会被相互覆盖。在类中直接声明和初始化,只会被初始化一次。
二、类方法
在rbuy中,可以定义类方法,有点类似java中的静态方法。我们直接上例子:
class Demo
@@b=2
def initialize
@a=1
end def print
puts @a
puts @@b
end def Demo.test #类方法
puts @a #返回nil
@a = 5
puts @a
puts @@b
end def Demo.test1 #类方法
puts @a
end
end demo = Demo.new
demo.print
Demo.test
Demo.test1
demo.print
查看上面代码和运行的结果,会发现类方法有如下特点:
1)类方法的定义和引用都需要前面加类名
2)类方法可以访问类变量
3)类方法中引用的 @a 并不是类的实例变量,而是另外一个命名空间的
Ruby学习: 类变量和类方法的更多相关文章
- Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- python学习笔记(二十二)实例变量、实例方法、类变量、类方法、属性方法、静态方法
实例变量:在类的声明中,属性是用变量来表示的.这种变量就称为实例变量,也就是成员变量. 实例方法:在类中声明的方法,例如:my(self),必须实例化之后才可以使用,否则会报错. 类变量:公共的变量, ...
- ruby 学习笔记 1
写ruby blog 系统的记录下.也是对我学ruby的点滴记录. 先介绍下我的学习环境.系统:ubuntu12.04文档:techotopia ,ruby文档,the hard way learn ...
- Ruby学习心得之 Linux下搭建Ruby环境
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...
- Ruby学习之mixin
直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet! ...
- ruby学习网站
Ruby官方中文网(推荐): https://www.ruby-lang.org/zh_cn/ 国内非常不错的Ruby学习教程网站(推荐): http://www.yiibai.com/ruby Ru ...
- JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- Ruby学习笔记4: 动态web app的建立
Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...
- ruby学习笔记(1)-puts,p,print的区别
ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将 ...
随机推荐
- [每日一题] OCP1z0-047 :2013-08-22 正则表达式---[^Ale|ax.r$]'
正确答案:DE 一.Oracle正则表达式的相关知识点 '[^Ale|ax.r$]': ^:匹配行的开始字符 $:匹配行的结束字符 []:方括号表示指定一个匹配列表,该列表匹配列表中显示的任何表达式. ...
- POJ 1679:The Unique MST(次小生成树&&Kruskal)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19941 Accepted: 6999 D ...
- 行内元素有哪些?块级元素有哪些?CSS的盒模型?转载
块级元素:div p h1 h2 h3 h4 form ul行内元素: a b br i span input selectCss盒模型:内容,border ,margin,padding css中的 ...
- iOS网络开发-AFNetworking请求asp.net WebService
看到园子有位朋友需要使用AFN框架请求 WebService,所以就整理了一下,demo下载链接在底部 编写WebService可以看这篇博客 http://www.cnblogs.com/linmi ...
- Tomcat启动报Error listenerStart错误
http://xpenxpen.iteye.com/blog/1545648 今天启动Tomcat启动不了,报以下错: org.apache.catalina.core.StandardContext ...
- Java调用R——rJava的安装和配置
rJava是Java通过JRI调用R所要安装的包.配置起来比较麻烦,我参考网上进行配置,使用rJava包中example里面的示例测试,控制台显示: Cannot find JRI native li ...
- BZOJ 3224: Tyvj 1728 普通平衡树(BST)
treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...
- php开发中的一些常用统计的日期
<?php echo '<br>今天:<br>'; echo date("Y-m-d",strtotime("now")), &q ...
- 0520 python
配置python环境变量我的电脑->右键->属性->高级系统设置->环境变量->(1)用户变量->新建 Path=C:\Python27(2)系统变量->编辑 ...
- 10min系列之二日志可视化进阶
10min系列之二日志可视化进阶(作者原创,同步发布在github) 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 本文所有的demo,都是浏览器下展示的 原创 ...