Ruby语言的主要特色
编程语言总有相同之处,因为它们的目标是一致的,但每一种语言都有自己特有的部分。从开发者角度看,Ruby语言至少有以下几个与众不同的特色:
。。。。。
ruby.lang 之魔幻语法
0、
变量无需申明即可使用,当
变量
首次被赋值时
它
便存在了。
特殊类型的变量有特殊符号作为前缀,Ruby使用一种命名惯例来区分变量的类型:
-
全局变量
以$(美元符号)
为前缀;
-
实例变量
以@(at)
符号开始;
-
类变量
以@@(两个at)
符号开始;
-
局部变量、方法参数和名称
,没有特殊前缀,但要以小写字母或下划线
开始;
-
常量、
类名称、模块名称都必须以一个大写字母开始;
具体示例如下表所示:
1、列表(Array)和映射(hashes)
像Python一样变化有区间
、元组
等
衍生用法。
2、
控制语句,if/unless、case...when、
while/until、for...in...。
控制语句有魔幻用法——语句修饰符
,即可以把控制语句(if、while等)使用在目标语句后面,例如:
puts “Danger, While Robinson" if radiation > 3000
#等效于
if radiation > 3000
puts “Danger, While Robinson"
end
3、类与继承语法
#超类定义
class Car
#构建器(与java不同,构建器方法名称必须是initilalize)
def initialize()
puts 'Car initialize....';
end
end
#子类,继承自 Car
class MyMinCar < Car
#构建器
def initialize(x,y)
super();#子类不会自动调用父类的构建器,需要super()明确调用;
#YOUR CODE
puts 'MyMiniCar ~~~'
end;
#YOUR Other code
end;
#using class...
mycar = MyMinCar.new(1,2);
继承符号
——
< (小于号),可以理解为:子类
(抽象程度更窄化)
小于父类,或者像流操作符一样 把父类的内容都‘流’入子类。另外,默认(即未使用继承符号)
时,父类是
Object对象,
和Java一样是单根继承体系;
super关键字是从子类直接调用父类(同名)
方法的
。
4、实例变量、属性、方法
,实例变量依靠命名惯例中的@前导符号来声明,通常在构建器(initialize方法)中依次为它们符初值,所有的实例变量都是私有的,不能在外部被访问,除非申明属性。属性是特殊的方法、是把实例变量暴露给外部的途径,
就像Java中geter/seter,
但Ruby有方法命名上的特殊要求——geter方法名通常与成员变量的名称一致,而seter方法是成员变量名称后跟=(等号)~似乎是说该属性名称后跟随=等号运算符时调用该方法。另外还有attr_reader、atrr_writer、 attr_accessor 三个助手方法可更方便的声明只读、只写或可读可写的属性——这三个方法的参数是 :(冒号)+成员变量名称。另外,你还可以申明虚拟属性(即未对应成员变量)。除了代表属性的方法申明之外,其余的方法都代表了对象的动作。
当设计一个类的时候,需要要考虑两个方面:1.内部状态、2.外部形态,内部状态保存到实例变量中,而通过方法(或者申明属性)来表现外部形态,我们把一个对象的外部形态称为属性。
5、类变量
和类方法
,
类变量使用@@做前导字符进行声明,
类方法使用ClassName.method_name 来申明。类方法的使用非常常见,例如:.new() 方法,或者一些为方便使用而创建的伪构造器。
一个技巧:在Ruby中私有化默认构造器的方法是:
class MyLogger
#类变量的声明方式
@@logger = nil
#将默认构建器隐藏
private_class_method :new
#申明新的伪构建器,注意这就是类方法的声明方式
def MyLogger.create
#新的构建器
end
end
6、访问控制:public、protected、private
,Ruby共有3个保护级别:公有、保护和私有,未指定时默认是public。指定访问控制的方式有两种:
A、将方法名称作为参数传入 public、protected 或 private:
class MyClass
def method1
#method1.
end;
public :method1,:method4;
protected :method2;
private :method3;
end
B、
public、protected 或 private 关键字之后申明的方法都是对应控制级别的,例如:
class MyClass
def method1 #default is 'public'
#method1.
end;
protected #subsequent methods will be 'protected'
def method2 #will be 'protected'
#...
end
private #subsequent methods will be 'private'
def method3
#
end
public #subsequent methods will be 'public'
def method4 #and this will be 'pulbic'
#...
end
end
7、代码块block、闭包closure、lambda表达式:
block
,
有两种形式:A、包括在{}(花括号中)——适用于单行语句;B、包含在do .... end语句块中——适用于多行语句;block总是出现在方法调用时传入参数的末尾——如果传入参数使用括号()的话,则在右括号)之后,这使得block和目标方法关联起来——在方法中使用yield关键字调用block,可以向block传入参数、也可以从block获得返回值,例如:
def my_fun1(x)
y = yield(x);
puts "yield(#{x})-->#{y}";
x += yield(x);
end
var = my_fun1(x){|param| param * 2};
puts "my_fun1(3)--->#{var}";
closure
,
闭包是把block作为参数传递给一个调用(参数名称以&作为首字符),Ruby运行时会把该block创建成 Proc对象,还使它持有了定义block时的上下文(如:其中的局部变量),即时此刻上下文已不存在,但closure仍然可以使用其中的变量。
lambda表达式,使得block成为Proc对象,并作为方法调用的返回值,返回给调用者。
数组Array
创建
:Array有两种创建方式:A.字面量——[1,2,3,4],即把数组元素放在中括号里;B.使用Array.new 构建一个数字变量;
元素引用
:数组元素以数字索引进行引用,例如:my_array[0]、my_array[1],索引可以是负数;
元素选取
:可以使用my_array[start_index,length]生成一个新的子数组;还可以用区间的方式来指定:my_array[1..3] 或者 my_array[1...3],两个点的形式包含结束位置的元素,而三个点时不包含结束位置;。
修改元素
:修改数字元素有以下几种形式:
A、my_array[index] = 'A',修改索引位置的元素值为A,如果index大于当前的length,则造成的间隙元素以nil填充;
B、my_array[start_index,length] = 'A';将从start_index位置开始的length个元素替换成'A',如果length=0,则在start_index位置之前插入'A',不删除任何元素;
C、my_array[x...y] = 98,99,将区间描述的元素替换成 赋值符号右边的内容;可以使用my_array[0...3]=[](空数组),删除数组前3个元素;
。。。。。。。。。。。。。,未完待续...
参考:
Ruby学习笔记:
http://hi.baidu.com/zhangna_307/blog/item/218f258c98488a00b31bba84.html
http://hi.baidu.com/zhangna_307/blog/item/9d1ca002b17988643812bbf2.html
http://hi.baidu.com/zhangna_307/blog/item/f6b3ee0f414076f437d12229.html
http://hi.baidu.com/zhangna_307/blog/item/7ac78712d3c5a9115aaf53b2.html
http://hi.baidu.com/zhangna_307/blog/item/f951f5cd667ab10300e92820.html
分享到:
相关推荐
《Ruby基础教程(第5版)》是一本由日本...总的来说,《Ruby基础教程(第5版)》是一本全面、易懂且充满乐趣的Ruby学习资料,无论你是编程新手还是希望深入理解Ruby的开发者,都可以通过这本书开启或深化你的Ruby之旅。
- 本书是一次流畅而有序的Ruby入门之旅,覆盖了所有核心主题。 - 作者Russ的幽默与智慧使阅读过程既愉快又富有教育意义。 3. **Michael Fogus(Clojure编程语言贡献者,《The Joy of Clojure》作者)**: - Ruby...
Ruby是一种面向对象的、动态类型的编程语言,由日本的松本行弘(Yukihiro Matsumoto)于1995年设计并开发。...通过阅读并实践教程中的例子,读者可以逐步掌握Ruby编程,并开启在Ruby世界中的探索之旅。
总之,"Launch School Intro to Programming with Ruby"是一份全面的Ruby入门教程,它将带你走进这个充满魅力的编程世界,开启你的编程之旅。通过系统学习和实践,你将掌握Ruby的基本概念和技巧,为成为一名熟练的...
### RPG MAKER脚本入门详解 #### RPG MAKER与脚本的重要性 RPG Maker是一款功能强大的游戏开发软件,尤其在角色扮演游戏(RPG)的创作上有着不可替代的...希望本文能为你的RPG Maker脚本之旅提供有价值的指导和启示。
1. **安装与界面介绍**:首先,你需要了解如何下载并安装RMXP,然后熟悉主界面和各个菜单选项,这将帮助你开始你的游戏创作之旅。 2. **地图编辑**:RMXP内建的地图编辑器允许你绘制游戏世界的地形,包括室内场景和...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
《精彩编辑器——深入探索Ruby编程的艺术》 在IT领域,编辑器是程序员日常工作中不可或缺的工具,"wonderful_editor"无疑是一个旨在...在实际应用中,不断探索和学习,你会发现更多隐藏的宝藏,让编程之旅更加精彩。
《Advent of Code 2020:Ruby解题之旅》 Advent of Code(AOC)是一项每年圣诞节期间举办的在线编程挑战活动,由程序员和游戏设计师 Eric Wastl 创建。2020年的Advent of Code(AOC2020)同样吸引了全球众多程序员...
**正文** 《cosme.vim:为Vim增添粉色魅力的化妆品配色方案》 在程序员的世界里,编辑器是日常...无论你是长期使用Vim的老手,还是初尝其魅力的新手,都不妨试试这款粉色佳人,让每一次的代码之旅都变得温馨而美好。