Ruby语法学习入门篇

作者:袖梨 2022-06-25

1,与java,c#等语言中的try…catch…finally…throw 相对应, ruby中用begin/end …rescue…ensure … raise 来处理异常,retry可以用在rescue中。可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前。
2,$arr < 3,类名首字母要大写,如student,方法名和参数名应该用一个小写字母开头或者用一个下划线开头,如talk,is_prime。
4,@age.to_s的含义是:将数@age转换为字符串。
5,initialize是初始化方法,相当于构造器。attr_writer与attr_reader是getter与setter的简写形式。attr_accessor:a相当于attr_reader:a;  attr_writer:a.
6,class student < person 指的是student类继承person类。子类继承父类的时候,除了重写方法,也可以添加一些新的方法,或是增强父类的方法(用关键字super指明)。
7,ruby语言只有重写,没有完全意义上的重载。
8,ruby 语言中,一个变量被赋予了某个数据类型的值,在程序中你可以随时再赋予这个变量其它数据类型的值。
9,ruby 是动态语言,你可以改变 ruby 程序的结构,功能,在ruby程序运行中。方法、属性可以被加入或去除,新的类或对象可以被建立,新的模块可以出现。
10,方法默认都是公有的(initialize除外,它永远都是私有的)。
11,定义模块用module...end 。模块与类非常相似,但是:
a) 模块不可以有实例对象。
b) 模块不可以有子类。
调用一个模块方法,与定义模块方法一样,要在方法名前加上模块名和一个点号“.”。模块方法提供了一个途径,在模块的外部访问模块内部方法,无须 include 模块。
12,include 方法为一个类的所有对象包含某个模块; extend 方法为一个类的某个对象包含某个模块
13,require包含文件,只加载一次,遇到同一文件时自动忽略;不同路径下的同名文件会多次加载。 load包含文件,加载多次,即使是相同路径下同一文件。
14,print arr.join(", "),"n" 意思是:将数组arr转换成字符串输出,用", "隔开每个元素,并且换行。一个数组可以用join 方法转换成字符串,join( ) 内的参数也是一个字符串,用来分隔数组的每个元素,例如:arr.join(", ")。
15,%q 用来生成单引号字符串;%q用来生成双引号字符串。%q或者%q后面跟着的是分隔符,可以是配对的! !; / /; < >; ( ); [ ] ;{ };等等。
16,ruby中,可以使用构造器显式地创建一个正则表达式,也可以使用字面值形式 /正则模式/ 来创建一个正则表达式。
   匹配一个正则表达式,用“=~” ,不能用“==”。 “=~”用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回nil。
不匹配一个正则表达式,用“!~” ,不能用“!=”。 “!~”用来断言不符合一个正则表达式,返回 true,flase。
 
ruby 语言的冗余性、缺陷性和动态性正是现实世界的真实写照

1,与java,c#等语言中的try…catch…finally…throw 相对应, ruby中用begin/end …rescue…ensure … raise 来处理异常,retry可以用在rescue中。可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前。
2,$arr < 3,类名首字母要大写,如student,方法名和参数名应该用一个小写字母开头或者用一个下划线开头,如talk,is_prime。
4,@age.to_s的含义是:将数@age转换为字符串。
5,initialize是初始化方法,相当于构造器。attr_writer与attr_reader是getter与setter的简写形式。attr_accessor:a相当于attr_reader:a;  attr_writer:a.
6,class student < person 指的是student类继承person类。子类继承父类的时候,除了重写方法,也可以添加一些新的方法,或是增强父类的方法(用关键字super指明)。
7,ruby语言只有重写,没有完全意义上的重载。
8,ruby 语言中,一个变量被赋予了某个数据类型的值,在程序中你可以随时再赋予这个变量其它数据类型的值。
9,ruby 是动态语言,你可以改变 ruby 程序的结构,功能,在ruby程序运行中。方法、属性可以被加入或去除,新的类或对象可以被建立,新的模块可以出现。
10,方法默认都是公有的(initialize除外,它永远都是私有的)。
11,定义模块用module...end 。模块与类非常相似,但是:
a) 模块不可以有实例对象。
b) 模块不可以有子类。
调用一个模块方法,与定义模块方法一样,要在方法名前加上模块名和一个点号“.”。模块方法提供了一个途径,在模块的外部访问模块内部方法,无须 include 模块。
12,include 方法为一个类的所有对象包含某个模块; extend 方法为一个类的某个对象包含某个模块
13,require包含文件,只加载一次,遇到同一文件时自动忽略;不同路径下的同名文件会多次加载。 load包含文件,加载多次,即使是相同路径下同一文件。
14,print arr.join(", "),"n" 意思是:将数组arr转换成字符串输出,用", "隔开每个元素,并且换行。一个数组可以用join 方法转换成字符串,join( ) 内的参数也是一个字符串,用来分隔数组的每个元素,例如:arr.join(", ")。
15,%q 用来生成单引号字符串;%q用来生成双引号字符串。%q或者%q后面跟着的是分隔符,可以是配对的! !; / /; < >; ( ); [ ] ;{ };等等。
16,ruby中,可以使用构造器显式地创建一个正则表达式,也可以使用字面值形式 /正则模式/ 来创建一个正则表达式。
   匹配一个正则表达式,用“=~” ,不能用“==”。 “=~”用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回nil。
不匹配一个正则表达式,用“!~” ,不能用“!=”。 “!~”用来断言不符合一个正则表达式,返回 true,flase。
 
ruby 语言的冗余性、缺陷性和动态性正是现实世界的真实写照

#ruby_pratice_注释.rb  从#开始到行尾单行注释

puts 3/5

=begin
 puts 3/5
 多行注释可以用=begin和=end;
 这也是ruby的内嵌文档rdoc注释,类似javadoc
 可以用命令ri从源文件生产文档
=end

2,标识名和变量

  ruby的标识名区分大小写。关键字,不能用来当作常量,变量,方法,类或模块的名字。
  ruby使用一个约定来帮助它区别一个名字的用法:名字前面的第一个字符表明这个名字的用法。局部变量、方法参数和方法名称应该用一个小写字母开头或者用一个下划线开头;全局变量用美元符作为前缀 $;而实例变量用 @ 开头;类变量用 @@ 开头;类名、模块名和常量应该用大写字母开头。

3,数据类型

  ruby 数据类型有数字,字符串,数组,哈希表,区间,正则表达式。

  数字类型有整数型,浮点型。其中浮点型数据小数点后必须加数字。

  字符串型是在‘’或者“”之间。

  数组的下标也是从0开始,但不同的是ruby数组的元素可以是不同类型的。如:[1,2.2,"hello",[1,2,3]]。

  区间:1..4 表示1,2,3,4;1...4表示1,2,3。

4,ruby基本的赋值用“=”来完成。

  如a=1,b=1+1   结果为:a=1,b=2

  ==比较两个值是否相等,返回true,false                                如:a=1; b=1.0; a==b #true

  eql?比较两个对象的值、类型是否相等,返回true,false             如:a=1; b=1.0; a.eql?(b) #flase(a为整数型,b为浮点型)

  equal?比较两个对象在内存中地址是否相同,返回true,false       如:a=1.0; b=1.0; a.equal?(b) #flase   a=1.0; b=a ; a.equal?(b) # true

  <=> 比较两个对象的大小,大于、等于、小于 分别返回1,0,-1

  === 右边的对象是否在左边区间之内,返回 true, flase

  =~(匹配)用来比较是否符合一个正则表达式,返回模式在字符串中被匹配到的位置,否则返回 nil

  !~ (不匹配) 断言不符合一个正则表达式,返回 true, flase

  <= < > >= 小于等于 小于 大于 大于等于

5,循环

  while,for,case,break等同c、c#、java大同小异,下面是一些比较特别的:times , upto , downto , each ,step
  3.times { print "hi!" } #hi!hi!hi!
  1.upto(9) {|i| print i if i<7 } #123456
  9.downto(1){|i| print i if i<7 } #654321
  (1..9).each {|i| print i if i<7} #123456
  0.step(11,3) {|i| print i } #0369

6,异常与线程

  与c#、java中的try…catch…finally…throw 相对应, ruby中用begin/end …rescue…ensure … raise 来处理异常,retry可以用在rescue中。可以只用rescue或是ensure,两者都使用时,rescue必须在ensure前。

 

相关文章

精彩推荐