Ruby的基本使用

什么是Ruby?

Ruby 是一种面向对象、指令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本计算机科学家松本行弘(Matz)设计并开发。

遵守BSD许可证和Ruby License[10][注 1]。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的Ruby语言替代品。
在这里插入图片描述

官方网站

https://www.ruby-lang.org/zh_cn/

作者介绍

松本行弘(まつもとゆきひろ)
https://ja.wikipedia.org/wiki/Ruby

ruby安装

https://www.ruby-lang.org/zh_cn/downloads/

Windows(本次操作的环境)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • Linux/Unix
  • MacOS
    • 推荐Homebrew

ruby简单运行

irb   # 进入命令行
10+20
10*10
Math.sqrt(9)
puts "hello ruby! hello world!!!"

在这里插入图片描述

定义一个函数

  • 定义一个函数 :
def sayHello()
    puts "hello word!!!"
end
sayHello

在这里插入图片描述

  • 传一个参数
def sayHello(parameter)
    puts "hello word!!! #{parameter}"
end

sayHello('i am parameter')

在这里插入图片描述

  • 给一个默认值
def sayHello(parameter='default parameter!')
    puts "hello word!!! #{parameter}"
end

sayHello

在这里插入图片描述

定义一个对象

class Learning                      # 类名首字母必须大写
    def initialize(name="yanilo")   # 初始化函数,当对象被实例化时会被首先执行的函数,(构造函数)
        @name = name                # 类变量,能被该类或者子类继承使用
    end
    def show()
        puts "Learning: class name ==> #{@name}!!!"
    end
end

qwq = Learning.new()
qwq.show()

qwq = Learning.new("yanilo_test_1")
qwq.show()

qwq = Learning.new("yanilo_test_2")
qwq.show()

在这里插入图片描述

面向对象的类操作

  • nstance_methods(all:bool): 列出对象(类)内部的方法

    • false 只显示自定义的类方法
    • true 显示所有的类方法 default=true
  • respond_to?: 检查对象的方法/属性是否可用

  • send:执行对象的方法

instance_methods

列出对象(类)内部的可用方法,用于调查解析对象的使用。有点像python的dir但没有这么全

class Game
    def initialize(title="罪恶王冠", player, price)
        @title = title
        @player = player
        @price = price
    end
    def show()
        puts "welcome to #{@title}!"
        puts "hello #{@player}"
    end
    def battle()
        puts "#{@player} aunched a war at a price of #{@price}"
        puts "#{@player}#{@price} 的代价发动了一场战争!"
    end
end
puts Game.instance_methods
puts "======================"
puts Game.instance_methods(false)

在这里插入图片描述

respond_to 和 send

通过 respond_to? 和 send 这两个方法,我们可以构造更灵活和稳定的程序,一般用于动态生成的类方法调用等操作

class Game
    def initialize(title="罪恶王冠", player, price)
        @title = title
        @player = player
        @price = price
    end
    def show()
        puts "welcome to #{@title}!"
        puts "hello #{@player}"
    end
    def battle()
        puts "#{@player} aunched a war at a price of #{@price}"
        puts "#{@player}#{@price} 的代价发动了一场战争!"
    end
end

game = Game.new(player='yanilo','50')

methods = "show"
if game.respond_to?(methods)             # 判断对象是否存在show方法   
    game.send(methods)                  # 执行指定的方法
    game.send("battle")					# 执行指定的方法
end

在这里插入图片描述

数组操作

Ruby中的<<和>>的作用详解
  1. << 和 >>代表左移或右移
    puts 1<<2 
    
    输出结果为:4
    代表1的二进制向左移动4位,即x<<y,x*2**y。平时用不到这种方法
  2. 字符串拼接
    test = "hello" 
    txt = " yanilo" 
    puts test<<txt 
    
    输出结果为:hello yanilo
  3. 数组添加元素
    ar = Array.new 
    ar << 3  
    puts ar 
    
    输出结果为:[3]
    字符串拼接和数组添加元素不能使用>>
数组定义
list_data = ['a','b',2,'你好!']
数组循环
list_data = ['a','b',2,'你好!']

# each循环数组
list_data.each do |qwq|
    puts qwq
end
# 带索引循环数组
list_data.each_with_index do |data,index|
    puts "index:#{index},data:#{data}"
end

# for循环数组
for i in list_data do  # 在for循环中 do 可以省略不写
    puts i
end

puts '*************'
## 知识拓展 
"""
foreach的区别主要在于:
    for是通过调用each实现,因此for更慢一些
    for会在each的scope之外创建一个局部变量,这在某些情况下会引发问题
        
"""
# puts list_data
a = []  
for n in [1, 2, 3] do    # 在for循环中 do 可以省略不写

    a << Proc.new {puts "#{n}"}   
    # proc 可以理解是一段能执行的代码,相当于你在函数中插入一段断码
    # Proc.new 创建一个新的代码块
end  
[1, 2, 3].each do |m|  
    a << Proc.new {puts "#{m}"}  
end  

a.each { |p| p.call } # => 3 3 3 1 2 3  
# p.call执行代码块

# for 循环中 相当于一个对象(nil);
# 很显然,for循环的结果不是我们所期待的,因此,结论就是:应该尽可能的使用each替代for循环。

重点: 应该尽可能的使用each替代for循环。
在这里插入图片描述

数组连接
list_data = ['a','b',2,'你好!']
puts list_data.join("_")

输出结果为:a_b_2_你好!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值