Ruby的基本使用

文章目录

    • 什么是Ruby?
    • 官方网站
    • 作者介绍
    • ruby安装
        • Windows(本次操作的环境)
    • ruby简单运行
    • 定义一个函数
    • 定义一个对象
    • 面向对象的类操作
        • instance_methods
        • respond_to 和 send
    • 数组操作
        • Ruby中的<<和>>的作用详解
        • 数组定义
        • 数组循环
        • 数组连接

什么是Ruby?

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

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

官方网站

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

作者介绍

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

ruby安装

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

Windows(本次操作的环境)

Ruby的基本使用_第2张图片
Ruby的基本使用_第3张图片
Ruby的基本使用_第4张图片

Ruby的基本使用_第5张图片

  • Linux/Unix
  • MacOS
    • 推荐Homebrew

ruby简单运行

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

Ruby的基本使用_第6张图片

定义一个函数

  • 定义一个函数 :
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

Ruby的基本使用_第7张图片

定义一个对象

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()

Ruby的基本使用_第8张图片

面向对象的类操作

  • 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)

Ruby的基本使用_第9张图片

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的基本使用_第10张图片

数组操作

Ruby中的<<和>>的作用详解

  1. << 和 >>代表左移或右移
    puts 1<<2 
    
    输出结果为:4
    代表1的二进制向左移动4位,即x<
  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循环。
Ruby的基本使用_第11张图片

数组连接

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

输出结果为:a_b_2_你好!

你可能感兴趣的:(ruby,ruby)