1、代码块

代码块是用大括号或者do...end括起来的一系列代码。
{
#this is a block
}

do
#this is a block
end

[1,2,3,4,5].each {|i| puts i}

[1,2,3,4,5].each do |i|
puts i
end
这2中写法效果是一样的。用{}可能更像C的风格

2、作用域

Ruby程序仅仅会在3个地方关闭前一个作用域。同一时候打开一个新的作用域: 
类定义, class … end
模块定义, module … end
方法定义。 def … end

num = 10
GNum = 3
def test
#puts num;
puts GNum
num = 20
puts num
end test()
puts num

3、变量

局部变量;

1. 命名规则:以小写字母或者下划线开头;

2. Ruby中的方法调用也是以小写字母或下划线开头,并且调用的方法假设没有參数。则能够省略方法后的括号;

3. 局部变量的定义:类、模块、方法的内部。当我们对一个以小写字母开头的变量进行赋值时,就声明了一个局部变量。离开范围局部变量消失;

4. 同意定义顶层局部变量。但在类、方法、模块定义内仍无法訪问该变量。

5. 局部变量不能够在内部类、子类中訪问;类中的方法不能够訪问该类中定义的局部变量(平级)。;

6. 在声明局部变量的类、模块、方法内,局部变量从声明该变量处開始生效,随类、方法、模块的定义结束而结束。

全局变量;

1. 命名规则:以“$”开头;能够在不论什么地方訪问;

2. 通常应避免使用全局变量,由于它的使用会引起各模块间的高耦合。

3. 全局变量无需声明。引用尚未初始化的全局变量,其值为nil;

4. 定义:能够在类、模块、方法的定义中进行全局变量的定义;

5. 全局变量的作用范围是从全局变量的定义语句開始,直到程序结束;

6. 动态语言的特征:当定义一个方法时。该方法根本不会被解释。仅仅有真正调用该方法时。该方法才会被解释。

7. Ruby提供了一系列经常使用的全局变量;如。错误为止,解释器进程ID。

实例变量;

1. 命名规则:以“@”开头。每一个实例变量都是在第一次出现时动态添加对象;

2. 实例变量通常在方法中定义;

当在方法中声明实例变量时,该实例变量其实属于该方法所在的类,而不是该方法。

尽管实例变量是属于类的。但大部分时候我们都是在该类的方法里定义实例变量;

3. Java在创建对象时一次为该对象的全部实例变量都分配了对应的内存空间;

  Ruby语言里的对象全然是动态的,创建对象时该对象没有不论什么实例变量,直到运行到为实例变量定义时,该对象才动态添加该实例变量;

4. 生存范围:与该类对象的生存范围同样,仅仅要该类对象存在,则该对象里的实例变量将一直存在。

但局部变量则会随着方法的消亡而消亡(除非使用闭包);

5. 实例变量的訪问范围总是:private。即在类定义内对实例变量的赋值和读取没有限制。在类外訪问实例变量时,则能够通过方法来訪问。

6. 属性定义:1.用实例变量;2.用Module的方法(四个方法:attr,attr_reader,attr_writer,attr_accessor。演示样例:attr:color。true;);

7. 在模块中定义实例变量,目的是将该实例变量混入其它类中;(模块是无法创建实例的)。

8. 类范围内定义的实例变量是Class对象的实例变量;

9. 实例变量永远都不能暴露为public,仅仅能通过类方法(类名.方法名)暴露;

类变量。

1. 命名规则:以“@@”开头;从第一次開始赋值的地方開始生效;

2. 定义:能够在类、模块、方法的定义中定义类变量;(在方法中定义的变量仅仅有在该方法被调用后,该类变量才会生效)

3. 訪问:能够在类中的特殊方法、实例方法等处对类变量进行引用和赋值。

4. 类变量必须先定义。然后才干够使用,否则异常;

5. 类变量的特殊性:一个类、其子类、它们的实例:的同名类变量共享了同一块内存区域(都引用了同一个变量);

6. 能够在模块中定义类变量,全部混入该模块的类,共享该模块中定义的类变量。仍然共享内存区域;

7. 类变量与常量:

  *类变量能够反复赋值;常量反复赋值时发出警告(不是错误);

  *类变量默认是protected的。不能在类外部直接引用。(可在继承类中以用或赋值);

类变量与实例变量:

  *在类范围内定义的类变量,能够在该类的方法中訪问。而实例变量则不行。

  *类变量可在子类中引用或赋值,但实例变量可在类范围内直接引用或赋值;

伪变量;

1. 伪变量能够方便的訪问Ruby环境信息;

2. 包括伪变量:self、nil、true、false、__FILE__、__LINE__;

3. 伪变量是仅仅读的;

4、方法

用defkeyword来定义方法。以end结束,方法的返回值是方法体中最后一个被运行的表达式的值。

def test1
1 + 1
end puts test1 def test2
return 1 + 1;
end puts test2

5、print。puts,p

print 打印不换行
puts 打印换行
假设给puts传递一个不是字符串的对象,puts会调用该对象的to_s方法,并打印该方法返回的字符串。

p是puts的一个友好替代者。简短、通过inspect方法将对象转换成字符串,有时候会比puts的to_s更直白写。

a = [1,2,3,4,5]
print a 会打印
[1,2,3,4,5] =>nil
puts a 会打印
1
2
3
4
5
=>nil
p a 会打印
[1,2,3,4,5]
=>[1,2,3,4,5]
=>后面为什么有的是nil,有的是[1,2,3。4。5]呢?
这是由于ruby中非常多东西都是表达式,这些表达式有的返回nil,有的返回[1,2,3,4,5]
我们能够測试下
num1 = print 1 #返回nil
num2 = puts 2 #返回nil
num3 = p 3 #返回3
p num1 # nil
p num2 #nil
p num3 #3

ruby简单的基础 2的更多相关文章

  1. ruby简单的基础 5

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

  2. ruby简单的基础 4

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

  3. Ruby自学笔记(二)— Ruby的一些基础知识

    Ruby安装好之后,我们就可以来实践Ruby语言了. 以下是一些学习到的简单基础知识: 1. 如何执行Ruby文件? 我们编写的Ruby文件是以rb为后缀名的,例如:XXX.rb.当要执行ruby文件 ...

  4. ruby迭代起基础

    “循环”会用在程序中的各种地方.而在循环的地方善用“迭代器”,则是熟练进行Ruby程序设计的重要关键. 不过,迭代器确实有比较抽象的地方,语法也有点怪异(尤其是yield的用法),光是依靠文字说明.看 ...

  5. ruby简单的基本 3

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

  6. 【Ruby】【基础】

    # [Ruby 块]=begin1 块由大量代码构成2 块中代码包含在{}内3 从与其相同名称的函数调用4 可以使用yield语句调用块=enddef test p '在test方法内' yield ...

  7. [您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)

    这次,我们来继续学习博弈论的知识.今天我们会学习更多的基础模型,以及SJ定理的应用. 首先,我们来看博弈论在DAG上的应用.首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出 ...

  8. SQLHelper简单版(基础版)

    using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...

  9. ruby简单的基本 6

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

随机推荐

  1. python3--__repr_和__str__会返回字符串表达形式

    __repr_和__str__会返回字符串表达形式 下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法.字符串格式把self.data对 ...

  2. [uiautomator篇] python uiautomatorDemo

    #coding=utf-8 """ @version: 1.0 @author: @prerequisite: based on Python 2.7 @usage: 1 ...

  3. LDP协议详解-上

    MPLS基础 模式 标签分配模式(label allocation)本地为一条路由前缀绑定一个label标签的条件.独立控制模式(independent control)本地RIB学习到的路由(除BG ...

  4. 【bzoj3671】[Noi2014]随机数生成器 贪心

    题目描述 输入 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M 的排列来填入她 N ...

  5. BZOJ 3209: 花神的数论题【数位dp】

    Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...

  6. TeraTerm设定(窗体大小,字体字号)保存为默认值

    Tera Term是一款很好的SSH工具,大家经常遇到一个头疼的问题,每次打开的时候,都要自己重新设置一遍Font. 介绍一下把自己喜欢的字体,设置好后,保存到默认配置中的方法. 设置窗体大小: 设置 ...

  7. 黑匣子_NOI导刊2010提高 (对顶堆)

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  8. bzoj2144 跳跳棋 二分

    [bzoj2144]跳跳棋 Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位 ...

  9. SQL Server中的@@ROWCOUNT

    SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...

  10. excel打乱各行的顺序,实现无序随机排列

    由于公司做活动,经常会发些激活码过来,为了让激活码能够充分使用,经常要打乱激活码的顺序,百度了下,看了下网上的介绍,还不错,挺实用,记录下来. 具体方法如下: 1.将文本里的内容复制到Excel里的任 ...