ruby简单的基础 2

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、方法

用def关键字来定义方法,以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]

puts a 会打印

1

2

3

4

5

p a 会打印

[1,2,3,4,5]

ruby简单的基础 2,布布扣,bubuko.com

时间: 2024-10-13 07:31:56

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

ruby简单的基础

好久没写记录东西了,最近决定记录写ruby方面的东西,大家一起学习. ruby 基础语法 1.注释 单行注释 ##开始到行末是单行注释 多行注释 =begin =end多行注释以=begin开始 以=end结束,=begin和=end前不能有其他字符,包括空格.一般=begin 和 =end独占一行,这样看起来比较清晰. Ruby中用;来表示一个语句结束.如果一行有多个语句,每个语句可以用:隔开,最后一个:可以省略. 换行表示一行结束,如果语句太长的话,我们可以用\连接下一行,表示这行还没有结束

ruby简单的基础 5

方法和代码块 在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,一般由yield关键字调用代码块中的代码. 方法是一个有名的代码块,是与一个或者多个对象相关联的参数化代码.调用方法时必须要给出方法名.所在对象(接受者),以及零个或者多个参数值,方法中最后一个表达式的值将作为方法调用的返回值. 代码块不是ruby可操作的对象,一般我们用一个Proc对象代表一个代码块.有两种方式的Proc对象,一种是proc,一种是lam

ruby简单的基础 3

类 Ruby中一切都是对象,包括一个常数.比如可以用.class属性来查看一个对象的类型,你可以看下1.class,会发现常数1的类型是Fixnum,1不过是Fixnum的一个实例. Ruby中的类以class开始 以end结束,类名首字母的约定是大写.Ruby中的方法以def开始 以end结束,方法名首字母的约定是小写.Ruby中的局部变量名首字母的约定是小写.Ruby中的构造函数名称为initialize.Ruby中的成员变量(实例变量)前导@符,在initialize里进行声明与初始化.R

ruby简单的基础 6

模块 模块同类一样,也有 class method 和 instance method.module 没有new不能生成实例对象其中 class method 在模块中称为模块方法,是可以直接调用的. module Foo def self.hello puts 'hello world!' end def Foo.dear #module全局作用域内的self还是没有变,就是Module: puts 'dear..' end NUM = 100 end Foo.hello   #=>  'he

ruby简单的基础 4

后缀标点符号 =结尾假设方法名字以=结尾的,那么在调用此方法时能够省略这个=. ?结尾作为一个实用惯例,那些返回布尔值的方法通常都有一个以问号结尾的名字. .结尾这个命名惯例通常时对两种方法区分:以感叹号结尾的方法一般会改变调用它们的对象,不以感叹号结尾的方法则不会改动调用它们的对象.而是改动原始对象的一个拷贝. 圆括号在ruby中,圆括号一般是可选的而且一般都被省略掉,尤其是在调用那些不带參数的方法时更是如此. 字符串内插 由双引號""引起来的字符串中能够包括不论什么ruby表达式.

Linux简单的基础命令

CentOS6.5的一些简单的基础命令和大家分享一下 cd  进入某个路径 cd .. 返回上一级 cd - 返回上一次的路径 cd~ 进入家目录 touch  创建新文件 mkdir  创建新目录 mkdir -p  递归创建新目录 rm -f  免交互删除 rm -rf  免交互递归删除 cp  从某个路径复制到某个路径 cp -r  递归式从某个路径复制到某个路径 mv  从某个路径移动到某个路径  ls  列表文件内的目录及文件 ls -a  列表文件内的目录及文件包括隐藏文件 ls -

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

这次,我们来继续学习博弈论的知识.今天我们会学习更多的基础模型,以及SJ定理的应用. 首先,我们来看博弈论在DAG上的应用.首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出点移动,双方轮流操作,无法操作者输,问是否先手必胜. 考虑一下我们之前的Nim游戏,如果我们把后继状态看成后继点的话,不难发现Nim游戏的互相转移也是一个DAG.因此,DAG上出度为0的点的sg值为0,再用上一篇博客提到的mex操作来求每个点的值就可以了(注意,这并不是一个"大"子图,不能

jQuery很简单很基础的

一.了解jQuery 1.jQuery是一个JavaScript库:极大地简化了JavaScript编程:易学. 2.jQuery库可以通过一行简单标记添加到网页中 特征:HTML元素选取.操作:CSS操作:HTML事件函数:JavaScript特效和动画:HTML DOM遍历和修改:AJAX:Utility. 3.添加jQuery库(位于一个JavaScript文件中,其中包含了所有的jQuery函数),<script>标签应该位于页面的<head>部分 1 2 3 <he

多线程一些简单的基础

一.进程:进程是受操作系统管理的基本运行单位: 二.线程:在进程中独立运行的子任务: 三.多线程的好处: 可以在同一时间内运行更多不同种类的任务: 单任务的特点是排队执行,也就是同步,CPU利用率很低: 多任务的特点也就是多线程,同时执行,异步操作,CPU快速切换,提高利用率: 四.Java里面的多线程基础 1.实现多线程的两种方式,继承Thread类,实现Runnable接口,一般最好实现Runnable接口,因为Java是单继承机制,如果继承Thread类,就不能继承其他类,会给程序带来很大