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)

大家都在看

  • sublime 3同步编辑线上代码

    1.打开编辑器输入框(Ctrl+Shift+P),并执行 2.回车后输入sftp 3.回车,安装,等待 4.右键项目 5.修改配置信息,保存 Original: https://w…

    Linux 2023年6月7日
    096
  • Linux系统僵尸进程详解

    大安好,我是良许。 在本文中,我们将讨论什么是僵尸进程,如何创建僵尸进程,以及如何终止僵尸进程。 [En] In this article, we will discuss wha…

    Linux 2023年5月27日
    0112
  • 安装Redis6.x

    gcc安装完毕以后,接下来可以按照redis了,解压redis6安装包 tar -zxvf redis-6.0.9.tar.gz * 查看日志,表示运行成功 vim /usr/lo…

    Linux 2023年5月28日
    088
  • redis后台启动

    打开redis.conf文件 把daemonize设置为yes posted @2021-11-25 15:30 HongMaJu 阅读(73 ) 评论() 编辑 Original…

    Linux 2023年5月28日
    0104
  • Common LISP 命令大全

    书籍下载地址: Ansi Common Lisp 中文版|百度网盘 实用Common.Lisp编程 .pdf|百度网盘 LISP指令速查网站推荐: Simplified Commo…

    Linux 2023年6月6日
    0132
  • php连接mysql数据库大批量执行sql语句出现“Mysql server has gong away”错误

    php代码中加入以下代码 set_time_limit(3600); ini_set(‘memory_limit’, ‘1024M’); mysql客户端执行以下命令 set gl…

    Linux 2023年6月13日
    0103
  • docker学习笔记—基本命令

    1、docker start/stop/restart/kill 启动/停止/重启/杀掉容器 实例操作如下: 2、docker run 创建并启动一个新的容器 常用参数如下: 实例…

    Linux 2023年6月8日
    0132
  • docker容器资源限制:限制容器对内存/CPU的访问

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    094
  • k8s之部署metrics-server 转载

    Metrics Server是Kubernetes内置自动缩放管道的可扩展,高效的容器资源指标来源。 Metrics Server从Kubelet收集资源指标,并通过Metrics…

    Linux 2023年6月14日
    089
  • MySQL注入与informantion_schema库

    只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_s…

    Linux 2023年6月6日
    0123
  • 保罗·艾伦的故事

    上周,保罗·艾伦逝世。《财新周刊》约我写一篇纪念文章,发表在他们杂志上面 一些个人新闻:最近,我了解到我在2009年与之抗争的非霍奇金淋巴瘤已经复发。我已经开始治疗,我的医生很乐观…

    Linux 2023年6月14日
    0127
  • [ Perl ] 多线程 并发编程

    记录一些常用的 模块 / 方法 。 多线程 use 5.010; use threads; 定义一个需要并发的子函数 sub func { my $id = shift; slee…

    Linux 2023年6月7日
    0101
  • Linux tcpdump抓包命令排查

    bash;gutter:true; tcpdump命令行参数介绍:</p> <p>-A 以ASCII格式打印出所有分组,并将链路层的头最小化。 -c 在收到…

    Linux 2023年6月13日
    0106
  • WSL2+Docker+IDEA一站式开发调试

    WSL2+Docker+IDEA一站式开发调试 前言 ​ 我们知道,Docker是一个容器引擎;对于开发者来说,使用Dokcer容器部署各种开发需要的中间件(比如myql、redi…

    Linux 2023年6月7日
    0125
  • 罗德岛

    自从转行以后就建博了,一直没有动手写内容,今天开始写。 主要记录技术上的积累和项目上的工作感悟。 这里就是罗德岛,就在这里跳。 Original: https://www.cnbl…

    Linux 2023年6月6日
    0104
  • 如何在shell脚本中传变量的值传给curl

    随着即时通讯的发展,大量的报警媒介已经从以往的邮件转为钉钉,企业微信等聊天工具。当我使用shell脚本来监控 Keepalived的时候,在给curl传递变量的时候无法生效,经过查…

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