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

1、类变量名以@@开始,一个类变量被这个类所有的实例对象共享;实例变量名以@开始,每个实例对象有各自不同的实例变量;

2、类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil;

3、类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问;

代码如下:

class B
    @@number = 11
    @@num = 22
 
    def my_method      #定义实例方法
        puts @@number
    end
 
    def self.my_method  #定义类方法
        puts @@num
    end
end
 
b = B.new()
puts b.my_method() #通过实例方法访问类变量  => 11
puts B.my_method() #通过类方法访问类变量    => 22

4、实例变量也是私有,无法在类外直接引用,可以通过类方法和实例方法访问;

代码如下:

class B
      @num  = 11    #实际上这是“类的实例变量”
      @test = 22
      def my_method      #定义实例方法
          puts @num = 33 #跟前面定义的@num不在一个作用域   =>33
          puts @test     #跟前面定义的@test不在一个作用域里,未赋初值,因此返回nil 
          puts @new = 567  #在实例运行my_method时才定义的实例变量 =>567
      end
      def self.my_method      #定义类方法
         puts @num        #这里的@num就是前面定义过的@num  =>11
         puts @test       # =>22
     end
 end
 
 b = B.new()
 
 b.my_method
 puts "--------------------"
 B.my_method

(0)

相关推荐

  • ruby中的双等号==问题详解

    前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑. 问题根源 其中,在找到的漏洞出现的地方,都存在类似以下这样的 slim 代码: input class='xxx' value==params[:account] 问题就出在双等号 == 上,因为在 slim 跟 ERB 模板(其他模板比

  • 实例解析Ruby中的数值类型以及常量

    数值类型(Number) 整型(Integer) 整型分两种,如果在31位以内(四字节),那为Fixnum实例.如果超过,即为Bignum实例. 整数范围从 -230 到 230-1 或 -262 到 262-1.在这个范围内的整数是类 Fixnum 的对象,在这个范围外的整数存储在类 Bignum 的对象中. 您可以在整数前使用一个可选的前导符号,一个可选的基础指标(0 对应 octal,0x 对应 hex,0b 对应 binary),后跟一串数字.下划线字符在数字字符串中被忽略. 您可以获取

  • Python中类变量和实例变量的区别

    目录 一.前言 二.解决过程 三.总结 一.前言 有人提问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习. 是用英文提问的,当然了英文看上去也不难,有点二级英文基础,也看得懂,实在不行,在线翻译一下也问题不大了. 二.解决过程 这里主要涉及到三个部分,类属性,实例属性,及实例属性的引用对象指向性问题.在该例中counter为类属性,__first为实例属性,print函数中的counter为实例属性的引用对象指向性问题.当ExampleClass类实例化时,__i

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • python“静态”变量、实例变量与本地变量的声明示例

    前言 虽然各种编程语言之间大部分语法存在共通的地方,但是在一些细节的处理上还是千差万别 才接触Python不久(之前是学Java的),实在想吐槽一下语言之间编码格式上的不统一问题,比如Java用分号分隔代码块,Python用空格,这无形之中增加了编码人员的学习成本 作为初学人员,还是老老实实记录一下学习过程中的坑:) 1. "静态"变量的声明 这里的静态变量是借用Java中静态变量的概念(不知道Python中的具体概念是什么),指既可以通过类名直接进行访问,也可以通过类的实例进行访问的

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

    1.类变量名以@@开始,一个类变量被这个类所有的实例对象共享;实例变量名以@开始,每个实例对象有各自不同的实例变量; 2.类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil; 3.类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问; 复制代码 代码如下: class B     @@number = 11     @@num = 22       def my_method      #定义实例方法         puts @@number

  • java中静态变量和实例变量的区别详细介绍

    运行效果: 控制台效果: ================================================== 代码部分 ================================================== /hello_test/src/com/b510/test/StaticTest.java 复制代码 代码如下: /**  *   */ package com.b510.test; /**  * 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例

  • 简单分析python的类变量、实例变量

    1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量: 实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用. 2.访问 类变量 在类的内部和外部类变量都可以直接使用className.类变量的形式访问.但是在类的内部,也可以使用self.类变量来访问,但是这个是用含义就不同了(后面使用代码验证). 实例变量 在类的内部

  • 浅谈静态变量、成员变量、局部变量三者的区别

    静态变量和成员变量的区别: A:所属不同 静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同 静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失    成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失 D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用    成员变量:只能通过对象名调用 成员变量和局部变量的区别: A:在类中的位置不同 成员变量:在类中方法

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

    在Ruby中类实例变量.类实例方法和类变量.类方法的区别比较微妙,而且用法也有相当的区别.本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量.类变量是用于存储类的全局信息,它只属于类,不同与类实例变量(即用@开头定义的变量)每一个类的对象都有一份数据. 类变量是可以被继承的,也就是说如果我们派生一个子类,那么在子类中是可以访问父类的类变量的.子类和父类共享一份数据,对一个类的修改会反映到另一个类中.如下边

  • 实例讲解Ruby中的五种变量

    Ruby 全局变量 全局变量以 $ 开头.未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告. 给全局变量赋值会改变全局状态,所以不建议使用全局变量. 下面的实例显示了全局变量的用法. #!/usr/bin/ruby $global_variable = 10 class Class1 def print_global puts "Global variable in Class1 is #$global_variable" end end class Class2 d

  • JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

    本文实例讲述了JS中类的静态方法,静态变量,实例方法,实例变量区别与用法.分享给大家供大家参考,具体如下: 1.类的静态方法 先来段代码之后分析 // JS类静态函数 function BaseClass() { } // 类添加add函数 BaseClass.add = function() { console.log("BaseClass add()方法被调用"); }; // 类方法(类的静态函数)直接调用 // 类名.类方法名 BaseClass.add(); //BaseCl

随机推荐