Ruby学习笔记(1)

Ruby 是"程序员的最佳朋友"。Ruby是一个完美的面向对象语言。使用 Ruby 的语法比使用 Smalltalk 的语法要容易得多。

Ruby 的特性

  • Ruby 是开源的,在 Web 上免费提供,但需要一个许可证。
  • Ruby 是一种通用的、解释的编程语言。
  • Ruby 是一种真正的面向对象编程语言。
  • Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。
  • Ruby 可以用来编写通用网关接口(CGI)脚本。
  • Ruby 可以被嵌入到超文本标记语言(HTML)。
  • Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby。
  • Ruby 与 C++ 和 Perl 等许多编程语言有着类似的语法。
  • Ruby 可扩展性强,用 Ruby 编写的大程序易于维护。
  • Ruby 可用于开发的 Internet 和 Intranet 应用程序。
  • Ruby 可以安装在 Windows 和 POSIX 环境中。
  • Ruby 支持许多 GUI 工具,比如 Tcl/Tk、GTK 和 OpenGL。
  • Ruby 可以很容易地连接到 DB2、MySQL、Oracle 和 Sybase。
  • Ruby 有丰富的内置函数,可以直接在 Ruby 脚本中使用。
  • 摘自:Ruby 简介 | 菜鸟教程 (runoob.com)

交互式 Ruby(IRb)

交互式 Ruby(IRb)为体验提供了一个 shell。在 IRb shell 内,可以逐行立即查看解释结果;

只需要在命令提示符中键入 irb,一个交互式 Ruby Session 将会开始 。

 输出Hello World!的两种方式

1.交互模式 换行输出 hello world

  1. 打开终端,输入jirb,进入jruby交互模式

  2. 输入 java_import java.lang.System 回车

  3. 输入 System.out.println("hello world") 回车

2 批量模式 非互动模式 换行输出 hello world

  1. 创建文件 hello.jruby touch hello.jruby
  2. 编辑hello.jruby, 输入一下内容
    #!/usr/bin/env jruby
    java_import java.lang.System
    System.out.println("hello world")
    
  3. 给hello.bash增加可执行权限 chmod +x hello.bash
  4. 执行hello.jruby ./hello.jruby

 Ruby 程序中的空白

在 Ruby 代码中的空白字符,如空格和制表符一般会被忽略,除非当它们出现在字符串中时才不会被忽略。然而,有时候它们用于解释模棱两可的语句。当启用 -w 选项时,这种解释会产生警告。

实例:

a + b 被解释为 a+b (这是一个局部变量)
a  +b 被解释为 a(+b) (这是一个方法调用)

Ruby 程序中的行尾

Ruby 把分号和换行符解释为语句的结尾。但是,如果 Ruby 在行尾遇到运算符,比如 +、- 或反斜杠,它们表示一个语句的延续

Ruby 标识符

标识符是变量、常量和方法的名称。Ruby 标识符是大小写敏感的。这意味着 Ram 和 RAM 在 Ruby 中是两个不同的标识符。

Ruby 标识符的名称可以包含字母、数字和下划线字符( _ )。

Ruby 中的 Here Document

"Here Document" 是指建立多行字符串。在 << 之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。

如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意<< 和终止符之间必须没有空格。

#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-
 
print <<EOF
    这是第一种方式创建here document 。
    多行字符串。
EOF
 
print <<"EOF";                # 与上面相同
    这是第二种方式创建here document 。
    多行字符串。
EOF
 
print <<`EOC`                 # 执行命令
    echo hi there
    echo lo there
EOC
 
print <<"foo", <<"bar"          # 您可以把它们进行堆叠
    I said foo.
foo
    I said bar.
bar

 

Ruby BEGIN 语句

语法

BEGIN {
   code
}

声明 code 会在程序运行之前被调用。

实例

#!/usr/bin/ruby 
puts "这是主 Ruby 程序" 
BEGIN {
 puts "初始化 Ruby 程序" 
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序

Ruby END 语句

语法

END {
   code
}

声明 code 会在程序的结尾被调用。

实例

#!/usr/bin/ruby 
puts "这是主 Ruby 程序" 
END { 
    puts "停止 Ruby 程序" 
} 
BEGIN {
 puts "初始化 Ruby 程序" 
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序
停止 Ruby 程序

Ruby 注释   #

注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。

可以注释多行,如下所示:

# 这是注释。 
# 这也是注释。 
# 这也是注释。 
# 这还是注释。

下面是另一种形式。这种块注释会对解释器隐藏 =begin/=end 之间的行:

=begin 
这是注释。 
这也是注释。 
这也是注释。 
这还是注释。 
=end

数组

数组字面量通过[]中以逗号分隔定义,且支持range定义。

  • (1)数组通过[]索引访问
  • (2)通过赋值操作插入、删除、替换元素
  • (3)通过+,-号进行合并和删除元素,且集合做为新集合出现
  • (4)通过<<号向原数据追加元素
  • (5)通过*号重复数组元素
  • (6)通过|和&符号做并集和交集操作(注意顺序)

实例

#!/usr/bin/ruby 
ary = [ "fred", 10, 3.14, "This is a string", "last element", ] 
# 数组遍历
ary.each do |i| 
puts i
end

哈希类型

Ruby 哈希是在大括号内放置一系列键/值对键和值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。

实例

#!/usr/bin/ruby
 
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
    print key, " is ", value, "\n"
end

注意:不能用source + 文件名来执行,会有报错;

范围类型

一个范围表示一个区间。

范围是通过设置一个开始值和一个结束值来表示。范围可使用 s..e 和 s...e 来构造,或者通过 Range.new 来构造。

使用 .. 构造的范围从开始值运行到结束值(包含结束值)。使用 ... 构造的范围从开始值运行到结束值(不包含结束值)。当作为一个迭代器使用时,范围会返回序列中的每个值。

范围 (1..5) 意味着它包含值 1, 2, 3, 4, 5,范围 (1...5) 意味着它包含值 1, 2, 3, 4 。

#!/usr/bin/ruby
 
(10..20).each do |n|
    print n, ' '
end

puts和print的区别

        puts输出会自动换行,print不会; 

Ruby 类中的变量

Ruby 提供了四种类型的变量:

  • 局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。
  • 实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。
  • 类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。
  • 全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。

Ruby 变量

变量是持有可被任何程序使用的任何数据的存储位置。

Ruby 支持五种类型的变量。

  • 一般小写字母、下划线开头:变量(Variable)。
  • $开头:全局变量(Global variable)。
  • @开头:实例变量(Instance variable)。
  • @@开头:类变量(Class variable)类变量被共享在整个继承链中。
  • 大写字母开头:常数(Constant)。

 注意:

  1. 在 Ruby 中,您可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值。
  2. 全局变量与实例变量未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。
  3. 引用一个未初始化的类变量会产生错误;类变量在定义它的类或模块的子类或子模块中可共享使用。
  4. 局部变量的作用域从 class、module、def 或 do 到相对应的结尾或者从左大括号到右大括号 {}。
  5. 常量以大写字母开头。定义在类或模块内的常量可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问。

    常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。

Ruby 伪变量

它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。

  • self: 当前方法的接收器对象。
  • true: 代表 true 的值。
  • false: 代表 false 的值。
  • nil: 代表 undefined 的值。
  • __FILE__: 当前源文件的名称。
  • __LINE__: 当前行在源文件中的编号。

Ruby运算符 

运算符描述
==检查两个操作数的值是否相等,如果相等则条件为真。
!=检查两个操作数的值是否相等,如果不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是则条件为真。
<检查左操作数的值是否小于右操作数的值,如果是则条件为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。
<=>联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -1。
===用于测试 case 语句的 when 子句内的相等。
.eql?如果接收器和参数具有相同的类型和相等的值,则返回 true。
equal?如果接收器和参数具有相同的对象 id,则返回 true。

 

Ruby 赋值运算符

假设变量 a 的值为 10,变量 b 的值为 20,那么:

运算符描述实例
=简单的赋值运算符,把右操作数的值赋给左操作数c = a + b 将把 a + b 的值赋给 c
+=加且赋值运算符,把右操作数加上左操作数的结果赋值给左操作数c += a 相当于 c = c + a
-=减且赋值运算符,把左操作数减去右操作数的结果赋值给左操作数c -= a 相当于 c = c - a
*=乘且赋值运算符,把右操作数乘以左操作数的结果赋值给左操作数c *= a 相当于 c = c * a
/=除且赋值运算符,把左操作数除以右操作数的结果赋值给左操作数c /= a 相当于 c = c / a
%=求模且赋值运算符,求两个操作数的模赋值给左操作数c %= a 相当于 c = c % a
**=指数且赋值运算符,执行指数计算,并赋值给左操作数c **= a 相当于 c = c ** a

注:没有++,-- 

Ruby 并行赋值

Ruby 也支持变量的并行赋值。这使得多个变量可以通过一行的 Ruby 代码进行初始化,即

a, b, c = 10, 20, 30

 

并行赋值在交换两个变量的值时也很有用:

a, b = b, c

Ruby 位运算符

运算符描述实例
&如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(a & b) 将得到 12,即为 0000 1100
|如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。(a | b) 将得到 61,即为 0011 1101
^如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。(a ^ b) 将得到 49,即为 0011 0001
~二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。(~a ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。a << 2 将得到 240,即为 1111 0000
>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。a >> 2 将得到 15,即为 0000 111

 Ruby 逻辑运算符

运算符描述实例
and称为逻辑与运算符。如果两个操作数都为真,则条件为真。(a and b) 为真。
or称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(a or b) 为真。
&&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(a && b) 为真。
||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(a || b) 为真。
!称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(a && b) 为假。
not称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。not(a && b) 为假。

 

Ruby 范围运算符

在 Ruby 中,序列范围用于创建一系列连续的值 - 包含起始值、结束值(视情况而定)和它们之间的值。

在 Ruby 中,这些序列是使用 ".." 和 "..." 范围运算符来创建的。两点形式创建的范围包含起始值和结束值,三点形式创建的范围只包含起始值不包含结束值。

运算符描述实例
..创建一个从开始点到结束点的范围(包含结束点)1..10 创建从 1 到 10 的范围
...创建一个从开始点到结束点的范围(不包含结束点)1...10 创建从 1 到 9 的范围

Ruby defined? 运算符

defined? 是一个特殊的运算符,以方法调用的形式来判断传递的表达式是否已定义。它返回表达式的描述字符串,如果表达式未定义则返回 nil

下面是 defined? 运算符的各种用法:

用法 1

defined? variable # 如果 variable 已经初始化,则为 True

用法 2

defined? method_call # 如果方法已经定义,则为 True

用法 3

# 如果存在可被 super 用户调用的方法,则为 True 
defined? super

用法 4

defined? yield # 如果已传递代码块,则为 True

Ruby 点运算符 "." 和双冒号运算符 "::"

你可以通过在方法名称前加上类或模块名称和 . 来调用类或模块中的方法。你可以使用类或模块名称和两个冒号 :: 来引用类或模块中的常量

:: 是一元运算符,允许在类或模块内定义常量、实例方法和类方法,可以从类或模块外的任何地方进行访问。

请记住:在 Ruby 中,类和方法也可以被当作常量。

你只需要在表达式的常量名前加上 :: 前缀,即可返回适当的类或模块对象。

如果 :: 前的表达式为类或模块名称,则返回该类或模块内对应的常量值;如果 :: 前未没有前缀表达式,则返回主Object类中对应的常量值。 

Ruby 运算符的优先级

下表按照运算符的优先级从高到低列出了所有的运算符。

方法运算符描述
::常量解析运算符
[ ] [ ]=元素引用、元素集合
**指数
! ~ + -非、补、一元加、一元减(最后两个的方法名为 +@ 和 -@)
* / %乘法、除法、求模
+ -加法和减法
>> <<位右移、位左移
&位与
^ |位异或、位或
<= < > >=比较运算符
<=> == === != =~ !~相等和模式匹配运算符(!= 和 !~ 不能被定义为方法)
&&逻辑与
||逻辑或
.. ...范围(包含、不包含)
? :三元 if-then-else
= %= { /= -= += |= &= >>= <<= *= &&= ||= **=赋值
defined?检查指定符号是否已定义
not逻辑否定
or and逻辑组成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值