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-1.8.7.352-13.el6.x86_64.rpm ruby-1.8.7.352-13.el6.x86_64.rpm
SignalFx的Ruby客户端库_Ruby_Shell_下载.zip
Ruby自动分级器_Ruby_HTML_下载.zip
Beginning_Ruby_From_Novice_to_Professional.pdf
Alexa网络信息服务_Ruby_Shell_下载.zip
redmine里程碑插件_Ruby_JavaScript_下载.zip
RetroArch游戏手柄自动配置文件_Ruby_Makefile_下载.zip
TravisCI构建配置处理_Ruby_HTML_下载.zip
RailsPostgres的简单推荐引擎_Ruby_HTML_下载.zip
LearnEnoughActionCabletoBeDangerous的聊天应用程序_Ruby_HTML_下载.zip
推荐系统的协同过滤_Ruby_Shell_下载.zip
使用Alexa控制色调灯_Ruby_JavaScript_下载.zip
tagteam-dev_html_javascript_ruby_css_源码.rar
Ruby算法和数据结构。C扩展_Ruby_C_下载.zip
有主见的及时电影选择_Ruby_CoffeeScript_下载.zip
Primer设计系统的ViewComponents_Ruby_CSS_下载.zip
Rails确认替换为SweetAlert_Ruby_HTML_下载.zip
Ruby编写的面向行的搜索引擎源码_Ruby_CSS_下载.zip
基于Sidekiq的Travis后台作业处理器_Ruby_HTML_下载.zip