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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值