ruby 实例变量如何解释

问题描述

class T1 @v1 = "abc" def get_v1 return @v1 end def self.get_v1 return @v1 endendputs T1.new.get_v1 # nilputs T1.get_v1 # abc  为什么会这样,实例变量 通过创建类的实例引用却返回nil http://arkxu.iteye.com/blog/225145 看了这个,却看不明白。

解决方案

ruby是继承的,我们的社区也应该。这个事在之前有过讨论08年的时候?参考下面这些,你应该会清楚不少,必然不用我多废话http://www.iteye.com/problems/2268http://sunnyshuhai.iteye.com/blog/286970http://www.iteye.com/topic/200720
解决方案二:
看来要有@@,而不是@这个我也经常用@的。

时间: 2024-09-30 21:39:38

ruby 实例变量如何解释的相关文章

《Effective Ruby:改善Ruby程序的48条建议》一第15条:优先使用实例变量而非类变量

第15条:优先使用实例变量而非类变量 Ruby语言存在两种用@标识的变量:实例变量和类变量.每个运行中的Ruby程序都有自己的私有实例变量集,如你所知,它们的名字都以"@"符号开头.修改对象的实例变量不会影响另一个对象的同名实例变量.(但是改变变量就是另外一回事儿了:如果两个对象共享第三个对象的引用,那么修改自然会影响到另一个了.详见第16条). 类变量(那些以"@@"开头的变量)则被区别对待.不同于绑定在单个上对象,类变量被绑定到一个类型之上,并且它们对于那个类的

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

  这篇文章主要介绍了Ruby中类变量和实例变量的比较,本文讲解了4点类变量和实例变量的不同之处,并给出了代码实例,需要的朋友可以参考下 1.类变量名以@@开始,一个类变量被这个类所有的实例对象共享;实例变量名以@开始,每个实例对象有各自不同的实例变量; 2.类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil; 3.类变量是私有的,在类外无法直接访问,可以通过类方法和实例方法访问; 复制代码 代码如下: class B @@number = 11 @@nu

ruby之instance_variable_get,函数不指定参数自动寻找实例变量

在users/index视图中,仅仅通过一句代码就能自动生成分页链接: <%= will_paginate %> 我并未告诉它改对哪个目标数组进行分页,然而它能智能定位到 @users 变量. 太神奇了,忍不住好奇,看了下代码 def will_paginate(collection = nil, options = {})   .   .   .   collection ||= infer_collection_from_controller   .   . end 发现集合对象会通过 i

ruby类实例变量魔法的详解

学习ruby类相关的语法遇到的关于类相关变量的一点小体会. ruby很灵活,语法看似很随意,比如看下下面的代码 class Foo     attr_accessor :name     def initialize         @name = '小明'     end     def say         puts @name         puts self.name         puts name     end end Foo.new.say 执行这些代码将得到如下输出: 小

ruby中的类变量与类实例变量

首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下面的代码: class IntelligentLife @@home_planet = nil def self.home_planet @@home_planet end def self.home_planet=(x) @@home_planet = x end #... end class Terran < IntelligentLife @@home_planet = "Earth" end class Mar

Ruby中类变量和实例变量的比较_ruby专题

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

Ruby的变量与赋值简析

变量与赋值 至此,你是否注意到前面所有的示例代码中都缺少某种东西?难道你必须输入常数,实例变量或类变量?绝对不是!这正是Ruby的真正面向对象的天性的一部分.为此,首先让我们看一下Ruby中以前的普通变量.至此,你已经创建了很多Rectangle实例,但是你并没有把它们保留多长时间.比方说,你想要把一个变量赋值给你创建的一个Rectangle实例: myRectangle=Rectangle.new(4,5) 在Ruby中这是完全有效的代码,而且根本不需要另一行代码来把myRectangle类型

手动设定实例变量的KVO实现监听

手动设定实例变量的KVO实现监听 如果将一个对象设定成属性,这个属性是自动支持KVO的,如果这个对象是一个实例变量,那么,这个KVO是需要我们自己来实现的. 以下给出源码供君测试: Student.h 与 Student.m // // Student.h // SuperNotification // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <Foundation/Foundation.h> @interface

ruby的变量

Ruby有三类变量,一种常量和两种严格意义上的伪变量(pseudo-variables).变量和常量都没有类型.虽然无类型变量存在一定的缺点,但却有更多的优点并很好的符合Ruby快速简便(quick and easy)的哲学精神. 在大多数语言里,变量都必须指定其类型,可更改性(是不是个常数)和范围;由于类型的不存在,剩下的东西也可由变量名字很快确定(你马上会看见),在Ruby里我们不需要变量声明. 由首字母标识符将其分类: $ 全局变量 @ 实变量 [a-z] 局部变量 [A-Z] 常量 唯一