Ruby

title: 历史.
content: Ruby的作者--松本行弘于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻群组)。之所以称为Ruby是取法自Perl,因为Perl的发音与6月的诞生石pearl(珍珠)相同,Ruby选择以7月的诞生石ruby(红宝石)命名。  Ruby相较之下比其他类似的程序语言(如Perl或Python)年轻,又因为Ruby是日本人发明的,所以早期的非日文资料和程序都比较贫乏,在网上仍然可以找到早期对Ruby的资料太少之类的批评。约于2000年,Ruby开始进入美国,英文的资料开始发展。  2004年,Rails框架诞生,Ruby更加广为人知,Ruby并于2006年为TIOBE获选为年度程序语言。
title: Ruby的理念.
content: 减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计Ruby语言的Matz的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须强调人性化,而不是一味从机器的角度设想。 遵循上述的理念,Ruby语言通常非常直观,按照编程人认为它应该的方式运行。  Ruby的作者认为Ruby > (Smalltalk + Perl) / 2,表示Ruby是一个语法像Smalltalk一样完全面向对象、脚本执行、又有Perl强大的文字处理功能的程序语言。
title: Ruby的版本体系.
content: Ruby版本号的构成形式是(MAJOR).(MINOR).(TEENY),均为只有1位的整数;如“1.8.6”、“1.9.3”。  1.9版系统的TEENY不小于1时为稳定版,TEENY为0的版本是开发版。在1.9之前的版本中偶数MINOR代表稳定版,奇数MINOR代表开发版。
title: Ruby的Hello World程序.
content: 下面是一个在标准输出设备上输出Hello World的简单程序: puts "Hello, world!" 或者是在irb交互式命令列的模式下: »puts "Hello, world!" Hello, world! => nil
title: Ruby的特点.
title: 变量与函数的命名规则.
content: 乍看之下与Perl的命名规则有些类似,不过Perl的命名用来区分纯量、阵列与映射;而Ruby的命名规则用来表示变量与类别的关系。Ruby的变量有以下几种:  有些函数则会加一个后缀,用来表示函数的用法,跟变量命名规则不同,函数的命名规则只是习惯,不具强制性,即使你不照规则命名也不影响程序运作
title: 多种字串表示法.
content: Ruby提供了多种字串的表示方法,方便撰写有大量文字资料的程序。除了来自C语言的引号表示法之外,还有来自于Perl的百分号字面量记法,以及方便书写大量内容的Heredoc记法。Ruby可以方便地以codice_8的方式向字符串中插入变量。 a = '\n这是一个单引号的字符串,反斜线和变量插值不会被转义'  c = "\n这是一个双引号的字符串,反斜线和变量插值会被转义\n#{a}"  e = «BLOCK 这是一个以Heredoc方式书写的常量字符串,可转义,结尾标志不可缩进 BLOCK  f = «-BLOCK  g = «~BLOCK  h = %/\t这是一个可转义的的字符串\n/
title: 动态修改物件、类别.
content: Ruby是动态语言,你可以在程序中修改先前定义过的类别。 也可以在某个类别的实例中定义该实例特有的方法,这叫做原型方法(prototype)。  class MyClass end  mc = MyClass.new def mc.the_method end  mc.the_method
title: 强大的反射机制与元编程.
content: Ruby的反射功能相当惊人,甚至可以自行追踪程序运作,或是取出private变量、拦截方法的呼叫。 常常与『可以动态的修改物件』这项特色结合,做为『元编程』的功能:程序在运行时, 可以由程序员提供的资讯,自行生成、修改类别或物件,这项功能大大的提高了撰写程序码的效率。 在Rails之中,就大量使用了这种特性。  以下为用Rails使用元编程的范例: class Project < ActiveRecord::Base end  在这个例子中,codice_9类别继承codice_10类别,codice_10类别内建的codice_12、codice_13、codice_14方法,便会根据参数来修改Project类别的内容,并自行建立其他相关的方法。程序员可以更专心处理程序的运作,而不必为每个类别重复得撰写程序码。
title: 程序范例.
content: 下面的代码可以在Ruby shell中运行,比如irb交互式命令列,或者保存为文件并运行命令codice_26。  -199.abs # 199 "ruby is cool".length # 12 "Rick Astley".index("c") # 2 "Nice Day Isn't It?".downcase.split(//).sort.uniq.join # " '?acdeinsty" puts "What's your favorite number?" number = gets.chomp outputnumber = number.to_i + 1 puts outputnumber.to_s +'is a bigger and better favorite number.' a = [1,'hi', 3.14, 1, 2, [4, 5]]
title: 集合.
content: p a[2] # 3.14 p a.[](2)# 3.14 p a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1] p a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5] hash = { :water => 'wet', :fire => 'hot' } puts hash[:fire] # Prints: hot  hash.each_pair do |key, value| # Or: hash.each do |key, value| puts "#{key} is #{value}" end  hash.delete :water # Deletes :water => 'wet' hash.delete_if {|k,value| value=='hot'} # Deletes :fire => 'hot' { puts "Hello, World!" } # Note the { braces } do puts "Hello, World!" end def remember(&a_block)
title: 块和迭代器.
content: @block = a_block end  remember {|name| puts "Hello, #{name}!"}  @block.call("Jon") def create_set_and_get(initial_value=0) # Note the default value of 0 end  setter, getter = create_set_and_get # ie. returns two values setter.call(21) getter.call # => 21 def use_hello end  use_hello {|string| puts string} # => 'hello' array = [1, 'hi', 3.14]  像inject()方法可以接收一个参数和一个块。迭代的注入列表的每一个成员,执行函数时保存总和。这同[[函数编程语言]]中的foldl函数相类似,比如: [1,3,5].inject(10) {|sum, element| sum + element} # => 19 首先块接收到了10(inject的参数)当作变量sum,并且1(数组的第一个元素)当作变量element;这会返回11。11又被当作下一步的sum变量,它加上3得到了14。14又被加上了5,最终返回结果19。  File.open('file.txt', 'w') do |file| # 'w' denotes "write mode". end # File is automatically closed here  File.readlines('file.txt').each do |line| puts line end (1..10).collect {|x| x*x} # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
title: 类.
content: 下面的代码定义一个命名为Person的类。含有一个「initialize」方法,用于构选创建一个新对象,它还有两个方法,一个重载了<=>比较运算符(这样codice_27可以使用age排序)另一个重载了codice_28方法(这样codice_29可以格式化输出),codice_30是Ruby中元数据编程的例子:codice_31为实例变量定义了getter和setter方法,codice_30只是一个getter方法。另外,方法中最后的声明是它的返回值,也允许显式的使用「return」语句。 class Person end  group = [  puts group.sort.reverse Bob(33) Ash(23) Chris(16)
title: 各种版本.
content: [[Matz's Ruby interpreter]], 最初也是最常见的Ruby版本, 简称MRI, 用C语言撰写.  [[JRuby]],类似[[Python]]的[[Jython]],一个可于[[Java]]上执行Ruby的语言,支援Java的接口和类别。最新发布版为9.1.6.0(2016-11-09),与Ruby 2.3兼容。它的官方网站为jruby.org。  [[mruby]]是一个轻量级的Ruby解释器,可以嵌入到其它应用程序中,或者作为库链接到应用中。
title: 外部链接.
content: [[Category:Ruby| ]] [[Category:程序设计语言]] [[Category:脚本语言]] [[Category:面向文本编程语言]] [[Category:面向对象的编程语言]] [[Category:基于类的编程语言]] [[Category:ISO标准化编程语言]]

Summary: Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本电脑科学家松本行弘(Matz)设计并开发。

Ruby (Programmiersprache): Ruby ist objektorientiert, unterstützt aber mehrere weitere Programmierparadigmen (unter anderem prozedurale und funktionale Programmierung sowie Nebenläufigkeit), bietet dynamische Typisierung, Reflexion und automatische Speicherbereinigung. Ein Programm in Ruby wird zur Laufzeit interpretiert. 2012 wurde die Ruby-Spezifikation als internationale Norm ISO/IEC 30170 standardisiert.