类

Ruby一切都是对象,它包含了一个恒定.
例如,可以使用.class物业查看对象的类型,你可以看一下1.class。你会发现常1类型是Fixnum,1但它是Fixnum的一个例子。

Ruby本类class开始 随着end结束。类名首字母的约定是大写。
Ruby中的方法以def開始 以end结束,方法名首字母的约定是小写。
Ruby中的局部变量名首字母的约定是小写。

Ruby中的构造函数名称为initialize。
Ruby中的成员变量(实例变量)前导@符,在initialize里进行声明与初始化。
Ruby中的属性用attr, attr_reader, attr_writer, attr_accessor。
Ruby中的全局变量前导$符。

Ruby中的常数(常量)用大写字母开头,约定是所有大写。

initalize方法

当Ruby创建一个新对象时,它总是会寻找一个名为 initialize 的方法并执行它.因此,我们能够简单通过一个initialize方法向实变量中增加缺省值。

class Person

  def initialize()
puts "hello!"
end # def initialize #()省略一样
# puts "hello!"
# end #參数默认值
# def initialize (param = "1900lab") # 參数带有默认值
# puts "hello! " + param
# end #可变长參数
def youInput(*names)
puts "input #{names.join(",")}!"
end
end p = Person.new()
和 p = Person.new 一样,没有參数()能够省略。

属性

目的是高速生成读写方法

attr :attr1, key
attr_reader :attr1, :attr2
attr_writer :attr1, :attr2
attr_accessor :attr1, :attr2

attr 一般后跟一个符号參数, 第二个參数是一个 bool 參数,用于指示是否为符号參数产生写方法。它的默认值是 false,仅仅产生读方法。不产生写方法。

attr_reader 一般后跟一个符号參数,定义一个或多个仅仅读的属性,用于指示为符号參数产生读方法。
attr_writer 一般后跟一个符号參数,定义一个或多个仅仅写的属性。用于指示为符号參数产生写方法。
attr_accessor 一般后跟一个符号參数。定义一个或多个可读写的属性,用于指示为符号參数产生读写方法。

为什么要用 符号
我们可能会有疑问,为什么 attr 后面要用符号呢(冒号:+ 变量)?

事实上我们不用符号也能够的

class Person

  attr "name",true

end

p = Person.new()
p.name = "xiao ming"
puts p.name

我们须要知道

符号是不可改变的字符串,也不可被GC的 
在大多数情况下,接受符号作为參数的方法也能接受字符串。反过来不成立; 
每个符号在对象空间中仅仅出现一次,用符号要比用字符串省内存

为什么Ruby runtime能够保证每个symbol唯一?

这是由于Ruby把symbol存放在执行时维护的一个符号表里了,而这个符号表实际上是一个atom数据结构,当中存储着当前所有的程序级的name。确保不出现内容同样的多个对象。

差点儿每个语言和系统都会有这样一个符号表,仅仅只是象C/C++那样的语言,这个符号表仅仅是在编译时存在,执行时就没了。而Python、Ruby则在执行时也保留这张表备用。

为什么用符号

仅仅所以用符号不用字符串,我想主要是内存和效率这两个方面吧。
Ruby中两个内容同样的字符串文本量实际上是两个不同的对象。

a = "hello"
    b = "hello"
尽管俩字符串内容都一样,但是,你比什么a和b,你懂的a.object_id != b.object_id。他们指出,是不一样的对象。
假设字的串,p.name = "xiaoming" 和 p.name = "红" 它可能最多2时代记忆。

效率可能是为了避免多个动态生成的字符串,。

ruby简单的基本 3的更多相关文章

  1. ruby简单的基础 5

    方法和代码块 在Ruby中.{}或do...end之间的代码是一个代码块.代码块只能出如今一个方法的后边,它紧接在方法最后一个參数的同一行上,一般由yieldkeyword调用代码块中的代码. 方法是 ...

  2. ruby简单的基本 6

    模 像类似的模块,那里 class method 和 instance method.module 没有new不能生成对象的例子其中 class method 所谓的模块在模块化的方法,它能够直接调用 ...

  3. ruby简单的基础 4

    后缀标点符号 =结尾假设方法名字以=结尾的,那么在调用此方法时能够省略这个=. ?结尾作为一个实用惯例,那些返回布尔值的方法通常都有一个以问号结尾的名字. .结尾这个命名惯例通常时对两种方法区分:以感 ...

  4. ruby简单的基础 2

    1.代码块 代码块是用大括号或者do...end括起来的一系列代码.{ #this is a block} do #this is a blockend [1,2,3,4,5].each {|i| p ...

  5. ruby利用Zip Gem写一个简单的压缩和解压的小工具

    在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合K ...

  6. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  7. ruby和Python简单对比

    前不久学了ruby,发现ruby和Python非常像,于是自个测试对比了下,测完了才知道网上有现成的……下面是测试结果   序列(包括列表和元组等)有分片的特点:可能会比较方便的提取其中特定元素,暂时 ...

  8. 一个简单的ruby生成器例子(用连续体Continuation实现)

    ruby中有很多经典的驱动器结构,比如枚举器和生成器等.这次简单介绍下生成器的概念.生成器是按照功能要求,一次产生一个对象,或称之为生成一个对象的方法.ruby中的连续体正好可以用来完成生成器的功能. ...

  9. Ruby学习笔记2 : 一个简单的Ruby网站,搭建ruby环境

    Ruby on Rails website 的基础是 请求-返回 循环. 首先是浏览器请求服务器, 第二步,Second, in our Rails application, the route ta ...

随机推荐

  1. Datameer for Hadoop Solution

    Hadoop promises to become a ubiquitous framework for largescale business intelligence, but right now ...

  2. SE 2014年5月9日

    两企业接入到 Internet(A公司和B公司),企业内部的用户及服务器均能够访问到 Internet. 2. A公司规模较大,采用了接入层/汇聚层/核心层的划分模式,接入层划分了多vLan(如图), ...

  3. Yii学习笔记之三(在windows 上安装 advanced )

    首先说一下下载地址: http://www.yiiframework.com/download/ 然后将下载下来的文件进行解压到 你指定的文件夹 解压过程中假设报什么错误 直接忽略掉 我的解压文件夹是 ...

  4. hdu 1251 字典树模板题 ---多串 查找单词出现次数

    这道题题目里没有给定数据范围 我开了2005  疯狂的WA 然后开了50000, A掉  我以为自己模板理解错  然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...

  5. Xamarin C# Android for Visual Studio 平台安装

    原文:Xamarin C# Android for Visual Studio 平台安装 Xamarin是基于Mono的平台,目前主要有以下产品(更具体请见:http://xamarin.com/pr ...

  6. POJ 36666 Making the Grade 简单DP

    题意是: 给出n个数,让你用最小的花费将其改成非递增或非递减的 然后花费就是新序列与原序列各个位置的数的差的绝对值的和 然后可以看到有2000个数,数的范围是10亿 仔细观察可以想象到.其实改变序列中 ...

  7. UNIX网络编程卷1 时间获取程序server TCP 协议相关性

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码:  这是一个简单的时间获取server程序.它和时间获取程序client一道工作. ...

  8. Sliverlight之 画刷

    1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...

  9. Android学习路径(十)如何将Action Bar堆放在布局

    默认情况下,action bar出如今activity窗体的顶部,稍微降低了activity布局的总空间.假设你想隐藏或者显示action bar,在这堂用户体验的课程中,你能够通过调用hide()  ...

  10. 利用Pattern和Mather来禁止特殊字符的输入

    String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}[]‘::”“’.,.?]&q ...