12月11日Ruby基础语法

puts 输出,\在ruby里是转义符号

2**(1/4) 指数运算:结果是0  #1与4的商为0,然后2的0次方为1

16**(1/4.0)    结果是2   #1与4.0的商为0.25(四分之一),然后开四次方根

#{ expr } 替换任意 Ruby 表达式的值为一个字符串  功能强大,可以无视内部符号,即使与外部符号冲突也不影响,如"#{a+",a"}"

 

\n 换行符 (0x0a)
\r 回车符 (0x0d)
\f 换页符 (0x0c)
\b 退格键 (0x08)
\a 报警符 Bell (0x07)
\e 转义符 (0x1b)
\s 空格符 (0x20)
\nnn 八进制表示法 (n 是 0-7)
\xnn 十六进制表示法 (n 是 0-9、a-f 或 A-F)
\cx, \C-x Control-x
\M-x Meta-x (c | 0x80)
\M-\C-x Meta-Control-x
\x 字符 x

遍历:  object.each do | |  

创建对象:class Customer end

 

Ruby 类中的变量

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

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

在 Ruby 中,您可以使用类的方法 new 创建对象

 

Ruby 类中的成员函数

在 Ruby 中,函数被称为方法。中的每个方法是以关键字 def 开始,后跟方法名。

方法名总是以小写字母开头。在 Ruby 中,您可以使用关键字 end 来结束一个方法。用end结束一个类。

Ruby 变量

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

Ruby 支持五种类型的变量。

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

Ruby 点运算符 "." 和双冒号运算符 "::"  ::指全局,.指调用类或模块中的方法

MR_COUNT = 0 # 定义在主 Object 类上的常量

module Foo

MR_COUNT = 0 # 局部变量

::MR_COUNT = 1 # 设置全局计数为 1

MR_COUNT = 2 # 设置局部计数为 2

end

puts MR_COUNT # 这是全局常量  结果为1

puts Foo::MR_COUNT # 这是 "Foo" 的局部常量   结果为2

Ruby 伪变量

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

  • self: 当前方法的接收器对象。
  • true: 代表 true 的值。
  • false: 代表 false 的值。
  • nil: 代表 undefined 的值。
  • __FILE__: 当前源文件的名称。
  • __LINE__: 当前行在源文件中的编号。
<=> 联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -1。 (a <=> b) 返回 -1。
=== 用于测试 case 语句的 when 子句内的相等。 (1...10) === 5 返回 true。
.eql? 如果接收器和参数具有相同的类型和相等的值,则返回 true。   (==只匹配值,低级判断,常用) 1 == 1.0 返回 true,但是 1.eql?(1.0) 返回 false。
equal? 如果接收器和参数具有相同的对象 id,(内存地址,最高层匹配)则返回 true。 如果 aObj 是 bObj 的副本,那么 aObj == bObj 返回 true,a.equal?bObj 返回 false,但是 a.equal?aObj 返回 true。

三元运算符:     ? :

 ruby之三元运算符比if更为强大简洁。案例

puts 1 < 2 ?  "One is less than two!" : "One is not less than two."

 

三元运算符:journal_date = journal_issue ? journal_issue.year : nil

等价于

if !journal_issue.nil?

  journal_date = journal_issue.yer

end

 

Ruby 范围运算符

 ".." 和 "..." 的区别:前者不包含结束点,后者包含结束点

 

 defined? 运算符

defined? object  假如object创建了   返回true,否则返回nil  (未定义)

 

匿名函数:

 

proc{代码块 }   可以使用call方法调用函数,执行代码

Ruby unless 语句

语法


unless conditional [then] code [else code ] end

unless式和 if式作用相反,即如果 conditional 为假,则执行 code。如果 conditional 为真,则执行 else 子句中指定的 code

Ruby if...else 语句

语法


if conditional [then] code... [elsif conditional [then] code...]... [else code...] end

if 表达式用于条件执行。值 false 和 nil 为假,其他值都为真。请注意,Ruby 使用 elsif,不是使用 else if 和 elif。

如果 conditional 为真,则执行 code。如果 conditional 不为真,则执行 else 子句中指定的 code

通常我们省略保留字 then 。若想在一行内写出完整的 if 式,则必须以 then 隔开条件式和程式区块

提示:if 0 在ruby 里是true

 

Ruby case 语句

语法


case expression [when expression [, expression ...] [then] code ]... [else code ] end

case先对一个 expression 进行匹配判断,然后根据匹配结果进行分支选择。

它使用 ===运算符比较 when 指定的 expression,若一致的话就执行 when 部分的内容。

通常我们省略保留字 then 。若想在一行内写出完整的 when 式,则必须以 then 隔开条件式和程式区块。

当case的"表达式"部分被省略时,将计算第一个when条件部分为真的表达式。
foo = false bar = true quu = false case when foo then puts 'foo is true' when bar then puts 'bar is true' when quu then puts 'quu is true' end # 显示 "bar is true"

Ruby while 语句

语法


while conditional [do] code end

或者

语法


while conditional [:] code end

当 conditional 为真时,执行 code

语法中 do 或 : 可以省略不写。但若要在一行内写出 while 式,则必须以 do 或 : 隔开条件式或程式区块。

Ruby while 修饰符

语法


code while condition 或者 begin code end while conditional

当 conditional 为真时,执行 code

如果 while 修饰符跟在一个没有 rescue 或 ensure 子句的 begin 语句后面,code 会在 conditional 判断之前执行一次。

Ruby until 语句

语法


until conditional [do] code end

当 conditional 为假时,执行 code

语法中 do 可以省略不写。

Ruby for 语句

语法


for variable [, variable ...] in expression [do] code end

先计算表达式得到一个对象,然后针对 expression 中的每个元素分别执行一次 code

 

for...in 循环几乎是完全等价于:
(expression).each do |variable[, variable...]| code end

一般多用each do 

 

break 退出循环,next 跳到下一次循环,

next

跳到循环的下一个迭代。如果在块内调用,则终止块的执行(yield 表达式返回 nil)。

redo

重新开始最内部循环的该次迭代,不检查循环条件。如果在块内调用,则重新开始 yield 或 call

 

Ruby方法

方法名应以小写字母开头。如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用。

方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常。

 

返回值

Ruby 中的每个方法默认都会返回一个值。这个返回的值是最后一个语句的值。

假如有return,如果给出超过两个的表达式,包含这些值的数组将是返回值。如果未给出表达式,nil 将是返回值

 

参数:

*test 不定长参数,test.leng 变量长度/参数长度  

 

类方法

当方法定义在类的外部,方法默认标记为 private。另一方面,如果方法定义在类中的,则默认标记为 public。

Ruby alias 语句

alias foo bar alias $MATCH $&

在这里,我们已经为 bar 定义了别名为 foo,为 $& 定义了别名为 $MATCH。

这个语句用于为方法或全局变量起别名。别名不能在方法主体内定义。即使方法被重写,方法的别名也保持方法的当前定义。

Ruby undef 语句

这个语句用于取消方法定义。undef 不能出现在方法主体内。

 

Ruby include 语句

您可以在类中嵌入模块。为了在类中嵌入模块,您可以在类中使用 include 语句

Ruby 中的 Mixins

uby 不直接支持多重继承,但是 Ruby 的模块(Module)有另一个神奇的功能。它几乎消除了多重继承的需要,提供了一种名为 mixin 的装置。

Ruby 没有真正实现多重继承机制,而是采用成为mixin技术作为替代品。将模块include到类定义中,模块中的方法就mix进了类中。

 

 

 

 

 

https://www.cnblogs.com/wangbaobao/p/7239597.html  ubuntu安装ruby的url

你可能感兴趣的:(原创,学习笔记)