`
cnetwei
  • 浏览: 177164 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Ruby之旅_2.特色语法

    博客分类:
  • Ruby
 
阅读更多

Ruby语言的主要特色

编程语言总有相同之处,因为它们的目标是一致的,但每一种语言都有自己特有的部分。从开发者角度看,Ruby语言至少有以下几个与众不同的特色:

  • Continuation:
  • 绿色线程 (green thread):
  • 协同例程(coroutine):
  • 迭代器、生成器、闭包和元编程:

。。。。。

 

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版)1

    《Ruby基础教程(第5版)》是一本由日本...总的来说,《Ruby基础教程(第5版)》是一本全面、易懂且充满乐趣的Ruby学习资料,无论你是编程新手还是希望深入理解Ruby的开发者,都可以通过这本书开启或深化你的Ruby之旅。

    Eloquent_ruby

    - 本书是一次流畅而有序的Ruby入门之旅,覆盖了所有核心主题。 - 作者Russ的幽默与智慧使阅读过程既愉快又富有教育意义。 3. **Michael Fogus(Clojure编程语言贡献者,《The Joy of Clojure》作者)**: - Ruby...

    ruby语言入门教程(中文版)[PDF]

    Ruby是一种面向对象的、动态类型的编程语言,由日本的松本行弘(Yukihiro Matsumoto)于1995年设计并开发。...通过阅读并实践教程中的例子,读者可以逐步掌握Ruby编程,并开启在Ruby世界中的探索之旅。

    Launch_School_Intro_to_Programming_with_Ruby

    总之,"Launch School Intro to Programming with Ruby"是一份全面的Ruby入门教程,它将带你走进这个充满魅力的编程世界,开启你的编程之旅。通过系统学习和实践,你将掌握Ruby的基本概念和技巧,为成为一名熟练的...

    RPG MAKER 脚本入门

    ### RPG MAKER脚本入门详解 #### RPG MAKER与脚本的重要性 RPG Maker是一款功能强大的游戏开发软件,尤其在角色扮演游戏(RPG)的创作上有着不可替代的...希望本文能为你的RPG Maker脚本之旅提供有价值的指导和启示。

    RMXP 基础教程

    1. **安装与界面介绍**:首先,你需要了解如何下载并安装RMXP,然后熟悉主界面和各个菜单选项,这将帮助你开始你的游戏创作之旅。 2. **地图编辑**:RMXP内建的地图编辑器允许你绘制游戏世界的地形,包括室内场景和...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    wonderful_editor

    《精彩编辑器——深入探索Ruby编程的艺术》 在IT领域,编辑器是程序员日常工作中不可或缺的工具,"wonderful_editor"无疑是一个旨在...在实际应用中,不断探索和学习,你会发现更多隐藏的宝藏,让编程之旅更加精彩。

    adventofcode2020:https:adventofcode.com2020

    《Advent of Code 2020:Ruby解题之旅》 Advent of Code(AOC)是一项每年圣诞节期间举办的在线编程挑战活动,由程序员和游戏设计师 Eric Wastl 创建。2020年的Advent of Code(AOC2020)同样吸引了全球众多程序员...

    cosme.vim:Vim的化妆品配色方案

    **正文** 《cosme.vim:为Vim增添粉色魅力的化妆品配色方案》 在程序员的世界里,编辑器是日常...无论你是长期使用Vim的老手,还是初尝其魅力的新手,都不妨试试这款粉色佳人,让每一次的代码之旅都变得温馨而美好。

Global site tag (gtag.js) - Google Analytics