ruby基础语法

首发:个人博客,更新&纠错&回复

学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}。

这种事情毫无技术含量又毫无乐趣可言,但极大地影响流畅度,所以这次再看ruby语法,决定把基础语法记下来,方便以后查看。

代码放到了这里,目前只有ruby,待以后用别的语言时再陆续添加。

内容如下,都是最基础的用法,需要时一看就明白。

#参考:《Ruby完全自学手册》第三章、第四章

#常量大写字母开头,变量小写字母开头
CHANG_LIANG = 1
bian_liang = 2
bian_liang = "2"#弱类型

##分支控制
#if
if 2 > 1 then
    #
elsif 2>2 then
    #
else
    #
end
#if后置
puts "if后置" if 2 > 1
#unless
unless 2 > 1 then
    #
else
    #
end
#case
case 1+1
when 2 then
    #
when 3 then
    #
else
    #
end

##循环控制
#while
while 1>2
    #
end
#until
until 1<2
    #
end
#for
for i in (1..3)
   #
end
#foreach的另一种写法
(1..3).each do |i|
    #可以用break和next控制,next相当于其他语言的continue
end

##面向对象
module MyModule#定义模块
    #定义类
    class MyClass#类名首字母大写
        attr_accessor :myAttr#定义实例变量
        def initialize
            @myAttr2 = "@定义的实例变量"
        end
        public#访问控制级别public/protected/private
        def myMethod#定义实例方法
            puts "在实例方法中输出" + myAttr + @myAttr2
        end
    end
    #继承
    class MySubClass < MyClass
    end
    #定义模块方法
    def moduleMethod
        puts "MyModule的模块方法"
    end
end#模块定义的end
#使用
myClass = MyModule::MyClass.new#实例化对象
myClass.myAttr = "实例变量的值"#为实例变量赋值
myClass.myMethod#调用实例方法
#动态添加方法
def myClass.newMethod
    puts "动态添加的方法"
end
myClass.newMethod
#加载另一个文件中声明的模块中的类
load 'ruby_another_module.rb'
anotherClass = AnotherModule::AnotherClass.new#另一个文件中声明的对象
anotherClass.print#调用其方法
#混入
class UseMixin
    include MyModule
    extend MyModule
end
UseMixin.new.moduleMethod#include语句的作用,成为类的实例方法
UseMixin.moduleMethod#extend语句的作用,成为类的类方法

##代码段
def blockMethod#调用代码段的方法,其中yield表示运行代码段
    yield
end
blockMethod {puts "匿名代码段"}
#带参数的代码段
def blockMethodWithParam(arg, &b)#定义显式使用代码段的函数
    b.call arg
end
block = Proc.new{|x| puts x}#定义非匿名代码段
blockMethodWithParam("非匿名代码段", &block)#使用非匿名代码段
blockMethodWithParam("也可以这样使用"){|x| puts x}

##异常处理
begin
    #正常代码运行的地方
rescue Error#相当于其他语言的catch
    #进行一些调整
    retry#重新尝试执行
ensure
    #相当于其他语言的finally,无论如何都会运行的地方
end

##基本类型
#整数
a=123_456#可以加下划线
b=0b101010#二进制
c=0123#八进制
d=0xaa#十六进制
e=?a#ascii码
puts d
#浮点数略
#字符串
str = "hello, world"
str = %{你好, "world"}#方便含有引号的内容
str[0] = ""
puts str
#符号略
#区间
(1..3).each{|a| puts a}
#数组
[1,2,3].each{|a| puts a}
#字典
map = {"键甲"=>"键甲的值", "键乙"=>"键乙的值"}
puts map["键甲"]
#正则表达式
"ab12cd".scan(/d/){|m| puts m}#正则表达式字面量
puts /d/.match("ab12cd")[0]#match方法

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432

原文地址:https://www.cnblogs.com/zidafone/p/5038666.html