`
lemonzc
  • 浏览: 12149 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

类中的成员变量可以这样声明, 但访问不能用@

阅读更多
大家先看下面代码:
class Person < Struct.new(:age)
	def say_age
		puts "say age: #{age}" if age != nil
	end
	
	def hello_age
		puts "hello age: #{age}" if age!=nil
	end
end

p = Person.new(30)

p.say_age
p.hello_age

p.age = 20
p.say_age
p.hello_age


输出是:
say age: 30
hello age: 30
say age: 20
hello age: 20

如果使用:

	def say_age
		puts "say age: #{@age}" if @age != nil
	end
	
	def hello_age
		puts "hello age: #{@age}" if @age!=nil
	end

那么什么都不输出,应为@age 为nil

如果使用:
	def say_age
		puts "say age: #{:age}" if :age != nil
	end
	
	def hello_age
		puts "hello age: #{:age}" if :age!=nil
	end

那么输出是:
say age: age
hello age: age
say age: age
hello age: age

:age 符号而已

ActiveRecord的低层有使用这种方式申明class

class ColumnDefinition < Struct.new(:base, :name, :type, :limit, :precision, :scale, :default, :null) #:nodoc:
..
..
..
end


文件:schema_definitions.rb
路径:%RUBY_HOME%\\lib\ruby\gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract
分享到:
评论
2 楼 lemonzc 2007-12-21  
例子:
   # Create a structure with a name in Struct
   Struct.new("Customer", :name, :address)    #=> Struct::Customer
   Struct::Customer.new("Dave", "123 Main")   #=> #<Struct::Customer name="Dave", address="123 Main">

   # Create a structure named by its constant
   Customer = Struct.new(:name, :address)     #=> Customer
   Customer.new("Dave", "123 Main")           #=> #<Customer name="Dave", address="123 Main">


感觉就是最纯洁的 Java Bean了。 哈哈。。。。。Ruby Stone
1 楼 lemonzc 2007-12-21  

哎哦哦。。。查了文档才知道自己自作多情了。晕

A Struct is a convenient way to bundle a number of attributes together, using accessor methods, without having to write an explicit class.

The Struct class is a generator of specific classes, each one of which is defined to hold a set of variables and their accessors. In these examples, we‘ll call the generated class ``CustomerClass,’’ and we‘ll show an example instance of that class as ``CustomerInst.’‘

In the descriptions that follow, the parameter symbol refers to a symbol, which is either a quoted string or a Symbol (such as :name).

相关推荐

    C++在类的成员函数中对成员变量进行操作和输出

    使用成员变量时,我们需要先创建一个类,并在类中定义成员变量。然后,我们可以创建类的对象,并...通过创建类的对象,我们可以通过对象来访问和修改成员变量的值,并且可以在类的成员函数中对成员变量进行操作和输出。

    php中静态类与静态变量用法类.zip

    直接调用类方法量:class::attribute/function,无论是静态/非静态都可以,静态static:声明类成员或方法为 static,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外),静态成员属于类,不...

    c++访问私有private成员变量的常用方法

    类的对象不能直接访问类声明的私有成员变量,否则破坏了信息隐藏的目的。 在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直接访问。 ...

    实验二 数组与类的声明

    2、设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改。 程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主...

    C++课程实验三代码大全.zip

    1 、定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取...

    JAVA基础知识精华总结 收藏

    (1) 类可以嵌入另一个类中,但不能嵌入接口中。 (2) 在静态方法或其他方法中,不能直接创建内部类对象,需通过手段来取得。 手段有两种: class A { class B {} B getB() { B b = new B(); return b; } }...

    C++设计一个学生信息类.txt

    设计一个学生信息类。 类的声明,指的是描述一个类所拥有的结构。类的声明主要包含两个部分:成员变量和成员函数。

    static关键字简介

    这样的成员 成员变量声明前必须加上关键字 static 成员声明为 static 后 在创建该类的 任何对象之前就可以访问它 例如 类中的 main 方法声明为 static 所以不用创建该类 的实例就可以由 Java 运行时的系统调用 main ...

    Java中static变量作用和用法步骤

    static表示“全局”或者“静态”的意思,用来修饰成员...  用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

    C++静态成员变量和静态成员函数的使用方法总结

    一.静态成员变量: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态...//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。 }; xxx.cpp文件 co

    Java关键字及其作用

    private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 所有类...

    【后端】java基础(5.3)java高级基础之java的修饰符——访问控制符

    java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制...以上表格中“√”表示可以访问,“×”表示不能访问,我们可以看出,p

    java内部类的使用

    内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明...

    【05-面向对象(下)】

    在外部类内部使用内部类-不要在外部类的静态成员中使用非静态内部类,因为静态成员不能访问非静态成 员。 • 2.在外部类以外使用非静态内部类。  –private 修饰的内部类只能在外部类内部使用。  –在外部...

    c#学习笔记——学习心得

    密封类:密封类不能作为基类被继承,但可以继承别的类或接口,密封类中不能声明受保护的成员或虚成员,密封类不能声明为抽象的,声明密封类用sealed.密封方法只能用于对基类的虚方法进行实现,声明密封方法时同时...

    MFC常用的类及其成员函数简介

    在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派生关系判断等成员函数。每一个从CObject类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的访问权限(见下面的例子)来允许或禁止其它对象对它的 访问。 我们先定义一个类 Point。 例子...

    C++课后答案

    私有 private 成员只能被该类中的其他成员访问,而程序中的其它代码是不能直接 访问这些变量的。 公用 public 成员既可以被该类的其他成员访问,也可以被程序中的其它代码访问。 类中的公用成员对外部代码是开放的,...

    Java面向对象程序设计(“方法”相关文档)共57张.pptx

    类主体的结构: &lt;类首声明&gt; { //类首,以下为类主体 &lt;成员变量的声明&gt; &lt;成员方法的声明及实现&gt; } 成员变量即类的数据,反映了类的属性和状态。 成员方法即类的行为(对数据的操作) 例4.2.1:声明一个日期类Date1 ...

    C语言中结构体变量私有化详解

    背景介绍 操作系统 : CentOS7.3.1611_x64 ...C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 将结构体的定义放入源码件中实现,头文件只放声明。 比如有

Global site tag (gtag.js) - Google Analytics