Ruby快速入门

推荐网站:http://ruby-for-beginners.rubymonstas.org/index.html
源码参考:https://gitee.com/komavideo/LearnRuby.git

tips:任何等级标题右侧都可以展开全文目录

1. Ruby的基本语法语句

1.1 puts语句——输出”hello, world”

(任何一门语言的开始——输出一段文字)

puts "hello, world"

换行:

puts "第一行\n第二行\r第三行"

1.2 注释(三种方法)

  第一种注释方法。
=begin
    第二章注释方法,多行注释
=end
__END__
    第三种注释方法,后面的部分全部为注释

1.3 运算符(操作符)

  • Ruby的基本运算符与大多数编程语言类似,不再详细介绍,仅需注意Ruby有乘方运算符为:**
  • 三目运算符::类似于python的三目运算符。
point=40
puts point >= 30 ? "高分球员" : "一般球员"
等价于
if point >= 30 then
    puts "高分球员"
else
    puts "一般球员"
end
  • 字符串运算符:用于字符串的拼接与合并。
a = "litec";
b = "dows";
+:字符拼接
puts a + " " + b;
<

1.4 字符串中引号的使用

Ruby中的单引号与双引号的使用与shell语法相似,即 双引号可以 转义或插入变量与运算,而 单引号会将其中的内容 全部当作字符串

p1 = "欢迎关注\nlitecdows"
p2 = '欢迎关注这个博主\nlitecdows'
puts p1
puts p2
mvp = "#{50+40+90}"
puts mvp
mvp = '#{50+40+90}'
puts mvp

1.5 哈希变量(键值对)

类似于python的字典。
这里直接使用小马老师Gitee源码

mvp_rank = {"curry" => 28.1,"harden" => 30.3,"lebron" => 26}
puts mvp_rank
puts mvp_rank["harden"]

类似JSON使用
player = {name: "harden",age: 28,point: 30.3}
puts player
puts player[:name] + ", " + player[:age].to_s + ", " + player[:point].to_s

1.6 类型转换

  • 字符或小数to整数:to_i;
  • 数值to字符:to_s;
  • 数值或字符to小数:to_f;
g = "23.56"
puts g.to_i
puts g.to_f

1.7 数组

数组里面可以是字符串或数字,先上源码:

games = ["绝地逃生", "永劫无间", "荒野大镖客",23.76,37]
puts games[3]+games[4]
puts games

数组循环:

games.each do |game|
    puts "我喜欢<>"
end

games.each_with_index do |game,i|
    puts "#{i+1}.#{game}"
end

数组合并

puts games.join(";")

2. Ruby中的基本函数样式

定义一个基本的函数,包括 传参参数初始化

def sayHello(name="tony") #默认为tony
    #puts中调用变量使用 #{}
    puts "Hello #{name}."
end

sayHello("Ruby") #传入参数Ruby
sayHello #调用默认值

3. Ruby中的类

定义一个基本类, initialize为构造函数, {@+变量名}相当于类内的全局变量

class Player
    #构造函数 @name为模板级变量,定义后可在类中访问。
    def initialize(name = "Koma")
        @name = name
    end
    def show()
        puts "player: #{@name}"
    end
end

实例化一个基本类:

koma = Player.new()
koma.show()

curry = Player.new("Curry")
curry.show()

3.1 与类相关的一些基本方法:

  • instance_methods(false):列出类(class)内部的方法,一般为false,表示仅列举出定义了的方法。即使方法(函数)为空,也会被列举出来。
puts Class.instance_methods(false)
  • respond_to?:调查对象(object)的方法/属性是否可用。一般类会对自身的属性或方法作出外部调用的限制,输出true或false。
puts "Ist es möglich anzurufen: " + object.respond_to?("title").to_s
  • send:执行对象(object)相应的方法。
if object.respond_to?("show") #判断对象是否存在show方法
   object.send("show")       #执行指定的方法
end

3.2 外部修改object的属性值:

类内的属性(Attribute)默认为私密状态。

class Game
    attr_accessor :price, :title #可以被外部调用修改
    def initialize(title = "怪物猎人世界", price = 200)
        @title = title
        @price = price
    end
    def show()
        puts "标题: #{@title}"
        puts "价格: #{@price}"
    end
end
mygame = Game.new() #实例化( instantiate )

to_s用于puts输出
puts "title is " + mygame.respond_to?("title").to_s
puts "price is " + mygame.respond_to?("price").to_s
由于均被设置为可以获取,故下面语句不会报错。
mygame.title = "Super Mario World"
mygame.price = 150
mygame.show()

3.3 静态方法——self

self.Methods只能被类本身(class)而不能被实例(object)调用

class Game
    def initialize(id, title, price)
        @id = id
        @title = title
        @price = price
    end

    def showGame
        puts @id + ", " + @title + ", " + @price.to_s
    end

    def self.toStr
        puts "I love this game."
    end
end

zelda = Game.new("zelda", "ゼルダの伝説", 350)
zelda.showGame
#zelda.toStr #去掉注释会报错
以下两种调用方式均可。
Game.toStr
Game::toStr

3.4 Class继承

面向对象的编程必然会涉及到继承的问题。Ruby的继承的基本思路与其他编程语言类似。
Ruby使用”

#继承上一段代码的类
class SteamGame < Game
    def SteamInfo
        puts "G胖说了,STEAM要统一各个平台,完成Game All In One。"
    end
end
SteamGame.toStr
mygame = SteamGame.new("nobunaga-taishi", "信長の野望・大志", 450)
mygame.showGame
mygame.SteamInfo

3.5 Ruby模块的定义

module是Ruby中模块的关键字。module的使用仅与类有一点相似。可以使用模块名访问其自身的属性与静态方法。但不可以通过模块名访问一般方法。
模块的定义

module BaseFunc
    Version = "0.0.1"

    def v
        return Version
    end

    def add(a, b)
        return a + b
    end

    def self.showVersion #静态方法
        return Version
    end

    #将v方法定义范围静态方法
    module_function :v
end

通过模块名访问

puts BaseFunc::Version
#self两种访问方法
puts BaseFunc.showVersion
puts BaseFunc::showVersion
puts BaseFunc.v
#puts BaseFunc.add(10, 30) #会报错,使用模块名无法访问一般方法。

类include模块

class BaseClass include BaseFunc
end
puts BaseClass::Version #可以访问
#self等私有方法属性是该模块自身的不会被include。
puts BaseClass.showVersion
puts BaseClass.v
myCls = BaseClass.new
#模块中的一般方法可以被include该模块的类的object继承。
puts myCls.add(10,20)

4. Ruby中的控制语句

参考源码(有现成的就用现成的吧,博主懒得敲了doge)

4.1 判断语句

4.1.1 if语句
if point_per_game >= 30
    puts "3500万美元/年"
elsif point_per_game >= 20
    puts "2000万美元/年"
else
    puts "中产合同吧"
end
4.1.2 unless语句
PUBG_SteamPrice = 40
#unless=只要不
unless PUBG_SteamPrice < 50
    #大于等于50的时候
    puts "《绝地求生》这个游戏虽然好玩,但是价格太贵,我还是玩学习版吧。"
else
    #小于50的时候
    puts "《绝地求生》降价了,大家要支持正版啊!剁手买!"
end
4.1.3 case 语句
week_day = 13

case week_day
    when 0,7
        puts "星期日"
    when 1
        puts "星期一"
    when 2
        puts "星期二"
    when 3
        puts "星期三"
    when 4
        puts "星期四"
    when 5
        puts "星期五"
    when 6
        puts "星期六"
    else
        raise Exception.new("没这天")
end

4.2 循环

其实自己用的话,也就只会用那么几种。但是不得不说Ruby的循环样式很多。

#循环数组
gamelist = ["塞尔达传说", "超级马里奥", "开心剪纸"]
for game in gamelist do
    puts game
end

#循环1-5
for num in 1..5 do
    puts num
end

#循环1-4
for num in 1...5 do
    puts num
end

#while循环
index = 0
while index < 5 do
    puts "while.index=" + index.to_s
    index+=1
end

#untile
index = 0
until index == 5 do
    puts "until.index=" + index.to_s
    index+=1
end

#each循环
gamelist = ["塞尔达传说", "超级马里奥", "开心剪纸"]

gamelist.each { |game|
    puts game
}

gamelist.each do |game|
    puts game
end

gamelist.each_with_index do |game,i|
    puts i.to_s + "." + game
end

#times循环
5.times do |i|
    puts "第 #{i} 次times循环"
end

#step循环
1.step(10,1) do |i|
    puts "#{i}"
end

#upto
2.upto(5) do |i|
    puts "updo=" + i.to_s
end

#downto
5.downto(2) do |i|
    puts "downto=" + i.to_s
end

4.3 例外处理

类似于python的例外处理。

begin
    #有可能发生错误的处理
    puts ">处理开始"
    #raise "my raise error!"
    #10 / 0
rescue => e
    #错误发生时
    puts "X错误发生!"
    puts e
else
    #正常处理时
    puts "O正常处理"
ensure
    #最后处理,无论是否发生处理(final)
    puts "_最后的扫尾处理"
end

Original: https://www.cnblogs.com/litecdows/p/15865570.html
Author: litecdows
Title: Ruby快速入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609962/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 关于连接服务器redis的教程

    第一步:下载RedisDesktopManager 这个百度一搜就有了,但是现在的版本ssh用不了建议找可以用的版本,这个百度,懂得都懂。 第二步:服务器宝塔redis设置 在配置…

    Linux 2023年6月11日
    092
  • 账号分享

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月8日
    0120
  • 对比powershell,点评:《七年老运维实战中的 Shell 开发经验总结》

    前言: 《七年老运维实战中的 Shell 开发经验总结》是不错的帖子,建议shell用户搜看。 点评:《七年老运维实战中的 Shell 开发经验总结》 shell除了上述问题外,还…

    Linux 2023年6月14日
    097
  • 循环通过逗号分隔的shell变量

    假设我有一个Unix shell变量,如下所示 variable=abc,def,ghij 我想使用for循环提取所有值(abc,def和ghij),并将每个值传递给一个过程。 脚…

    Linux 2023年5月28日
    091
  • 上篇:34个JavaScript栗子,从易到难。

    alert("hello world") document.write("hello world") console.log("好…

    Linux 2023年6月7日
    093
  • Spring事务(四)-事务隔离级别

    Spring @Transactional注解isolation属性 @Transactional注解通过isolation属性设置事务隔离级别。如下: @Transactiona…

    Linux 2023年6月6日
    076
  • CentOS7安装MYSQL8.X详细教程

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 1-首先查看系统是否存在mysql,无则不返回 rpm -qa|grep mysql 2-安装wget yum -y insta…

    Linux 2023年5月27日
    0124
  • Linux下PAM模块学习总结

    Linux下PAM模块学习总结 转载自 https://www.cnblogs.com/kevingrace/p/8671964.html Original: https://ww…

    Linux 2023年6月7日
    0107
  • Ubuntu常用命令

    Ubuntu(18.04)下更改用户名和主机名 更改主机名字: (1)修改hostname文件 这个文件中的内容是用来显示主机名的,修改这个文件后,立刻重启 (2)修改hosts文…

    Linux 2023年6月13日
    094
  • 有道云笔记迁移到为知笔记

    背景 &#x4E4B;&#x524D;&#x4E00;&#x76F4;&#x7528;&#x7684;&#x6709;&am…

    Linux 2023年6月14日
    0114
  • 插入排序算法C语言实现

    插入排序算法C语言实现 我写出来的排序算法用printf一步步解读,与google algorithm APP上模拟的单步执行不一致。 于是参考了https://www.cnblo…

    Linux 2023年6月14日
    0131
  • zabbix4.0 本地安装详解及步骤

    安装前说明下,下面安装过程中涉及selinux部分仅供参考,可能会导致启动服务时产生各种报错,作者也是在折腾了无数日夜后报错不断而放弃治疗,直接永久关闭了selinux(啊,没有s…

    Linux 2023年6月8日
    0104
  • Java秒杀系统四:高并发优化

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0107
  • FusionCompute制作Linux虚拟机模板

    创建虚拟机 创建虚拟机下一步这里实验就创建红帽7.4选择存储磁盘精简创建先在存储上传红帽镜像挂载镜像VNC登录安装安装完成配置yum源安装bzip*(因为最小化安装没有bzip程序…

    Linux 2023年6月8日
    0145
  • Linux_shell基础

    注意, 这里在运行时一定要写成./test.sh,而不是 test.sh, 运行其它二进制的程序也一样,直接写 test.sh,Linux 系统会去 PATH(环境变量) 里寻找有…

    Linux 2023年5月27日
    0120
  • Ubuntu 18.04替换默认软件源

    安装Ubuntu 18.04后,默认源在国外,可以替换为国内的源以提升访问速度 参考https://mirrors.ustc.edu.cn/repogen/ sudo vi /et…

    Linux 2023年6月6日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球