Skip to content
reference/docs/ruby.md at main · jaywcjlove/reference · GitHub
Skip to content
\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e

Latest commit

 

History

History
2458 lines (2025 loc) · 53 KB

File metadata and controls

2458 lines (2025 loc) · 53 KB

Ruby 备忘清单

入门

安装

# Debian, Ubuntu
$ sudo apt-get install ruby-full
# Windows
$ winget install RubyInstallerTeam.Ruby 
$ brew install ruby # macOS
$ docker run -it --rm ruby:latest # Docker
$ docker run -it --rm ruby:2.7

使用包管理器安装 rbenv

$ brew install rbenv ruby-build # macOS
# Debian、ubuntu 和其他衍生产品
$ sudo apt install rbenv

使用 rbenv 安装 ruby

# 列出最新的稳定版本
$ rbenv install -l
# 列出所有本地版本
$ rbenv install -L
# 安装 Ruby 版本
$ rbenv install 3.1.2
$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本
# 或者
$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本
$ rbenv local --unset
$ rbenv version # 显示当前活动的 Ruby 版本
=> 1.9.3-p327 (set by /Users/sam/.rbenv/version)

使用 RVM 安装 ruby

$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm list          # Ruby 版本列表
$ rvm install 3.0.1 # 安装 3.0.1
$ rvm use 3.0.1     # 使用 3.0.1

如何安装 ruby gem 管理器, bundler gem

# 访问 bash 以执行以下命令
$ docker run -it --rm ruby:latest bash
$ gem install bundler
$ bundle -v
$ gem update bundler
$ gem uninstall bundler

什么是 Gemfile 和 Gemfile.lock

Gemfile 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)

# 在项目根目录的 Gemfile 中指定 gem
ruby '2.5.6'

source 'https://rubygems.org'
gem 'nokogiri'
gem 'rack', '~>1.1'
gem 'rspec', :require => 'spec'

安装 Gemfile 中的所有 gem

$ bundle install

解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题

bundle lock --add-platform x86_64-linux

安装特定 ruby gem 的特定版本

$ gem install bundler -v 1.17
$ gem install minitest -v 5.8.4

使用 Bundler 更新 gem

# 使用 Bundler 更新单个 gem
$ bundle update nokogiri
# 使用 Bundler 更新 Gemfile 中的每个 gem
$ bundle update

保留字

保留字 描述
__ENCODING__ 当前文件的脚本编码
__LINE__ 当前文件中此关键字的行号
__FILE__ 当前文件的路径
BEGIN 包含在 { } 中的代码在程序运行之前运行
END 包含在 { } 中以在程序结束时运行
alias 为现有方法、运算符、全局变量创建别名
and 逻辑与运算符
begin 开始一段代码
break 终止循环
case 将表达式与匹配的 when 子句进行比较,其中
以 end 结束
class 定义一个类
def 定义函数/方法
defined? 检查某个变量、函数是否存在
do 开始一个代码块并执行块中的代码,以
end关键字结束
else 如果先前的条件不成立,则执行以下代码
elsif if 表达式的替代条件
end 用于结束以 begin、class、def、do、if 等关键字开头的代码块
ensure 总是在块终止时执行
false 逻辑布尔假值
for 开始一个 for 循环
if 如果 if 的条件语句为 true,则执行代码块
in 与 for 循环一起使用
module 定义一个模块
next 跳转到循环条件评估之前的点
nil 为空或无效或始终为假
not 逻辑否定运算符
or 逻辑或运算符
redo 条件循环后跳转
rescue 在引发异常后评估表达式
retry • 在救援之外调用时,重复方法调用
• 在救援内部调用时,跳转到块顶部
return 从方法或代码块返回值
self 当前对象
super 调用超类中的同名方法
then 与 if、unless、when、case、rescue 一起使用的分隔符
true 逻辑布尔真
undef 使当前类中的方法/函数未定义
until 在条件语句为假时执行代码块
when 在 case 语句下开始一个子句
while 执行代码块,直到条件语句变为假
yield 执行传递给方法的代码块

注释

# 单行注释
=begin
多行
注释
=end
=begin 注释第 1 行 =end
puts "Hello world!"  # 代码的内联注释

运算符

逻辑运算符

  • and
  • or
  • not
  • &&
  • ||
  • !

位运算符

  • &
  • |
  • ^
  • ~
  • <<
  • >>

算术运算符

  • +
  • -
  • *
  • /
  • %
  • **

比较运算符

  • ==
  • !=
  • >
  • <
  • >=
  • <=
  • <=>
  • ===
  • eql?
  • equal?

运算符示例

# 添加
1 + 1   #=> 2
# 减法
2 - 1   #=> 1
# 乘法
2 * 2   #=> 4
# 分配
10 / 5  #=> 2
17 / 5    #=> 3, not 3.4
17 / 5.0  #=> 3.4
# 指数
2 ** 2  #=> 4
3 ** 4  #=> 81
# 模数(求除法的余数)
8 % 2   #=> 0  (8 / 2 = 4; 没有剩余)
10 % 4  #=> 2  (10 / 4 = 2 余数为 2)
a = 10
b = 20
a == b #=> false
a != b #=> true
a > b #=> false
a < b #=> true
a >= b #=> false
a <= b #=> true

# 比较运算符
a <=> b #=> -1
c = 20
c <=> b #=> 0
c <=> a  #=> 1
# 用于测试 case 语句的 when 子句中的相等性
(1...10) === 5 #=> true
# 如果接收者和参数具有相同的类型和相等的值,则为真
1.eql?(1.0) #=> false
c = a + b  #=> 30
c += a #=> 40
c -= a #=> 30
c *= a #=> 300
c /= a #=> 30
c %= a #=> 3
c **= a #=> 59049

# Ruby 并行赋值
a = 10
b = 20
c = 30
a, b, c = 10, 20, 30
# Ruby 位运算符
a = 60
b = 13
# & 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。
a & b #=> 12
# | 如果二进制或运算符存在于任一操作数中,则复制一个位。
a | b #=> 61
# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。
a ^ b #=> 49
# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。
~a
# << 二进制左移运算符。 左操作数的值被移动
# 左操作数指定的位数。
a << 2
# >> 二进制右移运算符。 左操作数的值被移动
# 右操作数指定的位数。
a >> 2

# Ruby 逻辑运算符
a and b #=> true.
a or b #=> true.
a && b #=> true.
(a || b) #=> true.
!(a && b) #=> false.
not(a && b) #=> false.
# Ruby 三元运算符
# ? :
# 如果条件为真? 然后值 X :否则值 Y
a == 10 ? puts 'Right' : puts 'Wrong'
# Ruby 范围运算符
# .. 创建从起点到终点的范围(含)
1..10 #=> 创建从 1 到 10 的范围(包括 1 到 10)
# ... 创建一个从起点到终点的范围,不包括在内
1...10 #=> 创建一个从 1 到 10 的独占范围

运算符优先级表

  • !, ~, unary +
  • **
  • unary -
  • *, /, %
  • +, -
  • <<, >>
  • &
  • ^
  • >, >=, <, <=
  • <=>, ==, ===, !=, =~, !~
  • &&
  • ?, :
  • modifier-rescue
  • =, +=, -=, *=, /=, %=
  • defined
  • not
  • or, and
  • modifier-if, modifier-unless, modifier-while, modifier-until
  • { } 块
  • do ... end 块

变量和范围

名字 范围 示例 说明
[a-z] 或 _ 本地的 count = 10 或 _count = 10 必须初始化局部变量
@ 实例变量 @id = [] 实例变量在初始化之前具有“nil”值
@@ 类变量 @@name = [] 必须初始化类变量
$ 全局变量 $version = "0.8.9" 全局变量在初始化之前具有“nil”值
[A-Z] 持续的 PI = 3.14 常量变量必须初始化,您可以更改常量,但您会收到警告

有五种不同类型的变量。第一个字符确定范围

局部变量

current_weather = "rainy"
_weather = "sunny"

必须以下划线或小写字母开头

实例变量

# 实例类变量
@current_weather = "rainy"
# 全局变量
$current_weather = "rainy"
# 常量变量
WEATHER = "rainy".freeze

伪变量

名字 说明
self 当前方法的接收者对象
true TrueClass 的实例
false FalseClass 的实例
nil NilClass 的实例
__FILE__ 当前源文件名
__LINE__ 当前源文件的当前行号

选项变量

名字 说明
$-0 $/ 的别名
$-a 如果设置了选项 -a,则为真。只读变量
$-d $DEBUG 的别名
$-F $; 的别名
$-i 在就地编辑模式下,此变量保存扩展,否则为零
可以指定启用(或禁用)就地编辑模式
$-I $: 的别名
$-l 如果选项 -lis 设置为真。只读变量
$-p 如果选项 -pi 设置为真。只读变量
$-v $VERBOSE 的别名

预定义变量

名字 说明
$! 异常信息消息。raise 设置此变量
$@ 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in `methodname'”(助记符:发生异常的地方)
$& 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 &)这个变量是只读的
$` 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的
$' 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)
$+ 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)
$1, $2... 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \digit)这些变量都是只读的
$~ 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 $&、$+、$1、$2.. 等。第 n 个子表达式可以通过 $~[nth] 检索。 (助记符:~ 用于匹配)这个变量是局部作用域的
$= 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)
$/ 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)
$\ print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)
$, 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)
$; String#split 的默认分隔符。
$. 读取的最后一个文件的当前输入行号。
$< 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 $<.file 返回当前文件名。 (助记符:$< 是一个 shell 输入源)
$> print 的默认输出,printf。 $stdout 默认情况下。 (助记符:$> 用于 shell 输出)
$_ 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)
$0 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)
$* 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)
$$ 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)
$? 最后执行的子进程的状态。
$: 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 -I 命令行开关的参数组成,然后是默认的 Ruby 库,probabl "/usr/local/lib/ruby",然后是 ".",表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)
$" 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)
$DEBUG -d 开关的状态。
$FILENAME 与$<.filename 相同
$LOAD_PATH $: 的别名
$stdin 当前的标准输入
$stdout 当前的标准输出
$stderr 当前标准错误输出
$VERBOSE 详细标志,由 -v 开关设置到 Ruby 解释器

预定义的全局常量

名字 说明
TRUE 典型的真值。在 Ruby 中,所有非 false 值(除了 nil 和 false 之外的所有值)都是 true
FALSE 虚假本身
NIL 零本身
STDIN 标准输入。$stdin 默认值
STDOUT 标准输出。$stdout 默认值
STDERR 标准错误输出。$stderr 默认值
ENV 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境
ARGF $< 的别名
ARGV $* 的别名
DATA 脚本的文件对象,就在 END 之后。 除非未从文件中读取脚本,否则未定义
VERSION Ruby 版本字符串
RUBY_RELEASE_DATE 发布日期字符串
RUBY_PLATFORM 平台标识符

检查变量的范围

defined? count
"local-variable"
defined? @id
"instance-variable"
defined? @@name
"class variable"
defined? $version
"global-variable"
defined? PI
"constant"

数据类型

类型 示例 Class 文档
Integer a = 17 a.class > Integer
a.class.superclass > Numeric
#
Float a = 87.23 a.class > Float
a.class.superclass > Numeric
#
String a = "Hello universe" a.class > String #
Array a = [12, 34] a.class > Array #
Hash a = {type: "tea", count: 10} a.class > Hash #
Boolean a = false
a = true
a.class > FalseClass
a.class > TrueClass
TrueClass FalseClass
Symbol a = :status a.class > Symbol #
Range a = 1..3 a.class > Range #
Nil a = nil a.class > NilClass #

进一步阅读

检查数据类型

# 两者都是同义词
a = 37
a.kind_of? Integer
# true
a.is_a? Integer
# true

Symbol

week_days = {sunday: 11, monday: 222}

整数有用的方法

2.even?
# true
3.even?
# false

范围

.. 用于创建包含范围

range = 1..10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

... 用于创建专属范围

range = 1...10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9]

一些有用的方法

Method name Output
cover? (1..5).cover?(5) => true
end ('a'..'z').end => "z"
first (1..5).first => 1
first(3) ('A'..'Z').first(2) => ["A", "B"]
eql? ((0..2).eql?(0..5) => false

在 Range 中使用 step

(1..20).step(2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

条件结构

if 修饰符

num = 2
puts 'two' if num == 2 

如果条件为真,则执行代码

if elsif else 语句

temp = 19
if temp >= 25
  puts "hot"
elsif temp < 25 && temp >= 18
  puts "normal"
else
  puts "cold"
end
# 输出 => normal

除非语句

# 除非与 if 相反,当语句为假时进行评估
name = "rob"
# if name != "bob"
unless name == "bob"
  puts "hello stranger"
else
  puts "hello bob"
end
# 输出 => hello stranger
num = 6
puts 'not two' unless num == 2
# 输出 => not two

case 陈述

# case 返回最后执行的表达式的值
case input
# 检查一个整数,19
when 19
  puts "It's 19"
  # 检查浮点数,33.3
when 33.3
  puts "It's 33.3"
  # 检查一个确切的字符串,“Zaman”
when "Zaman"
  puts "Hi Zaman"
when 10
  puts "It's 10"
  # 检查范围
when 7..11
  puts "It's between 7 and 11"
  # 检查多个值,“咖啡”
when "tea", "coffee"
  puts "Happy days"
  # 检查正则表达式“aA6”
when /^a[A-Z]+[0-6]+$/
  puts "It's a valid match"
  # 通过与 String 类“任何字符串”
  # 进行比较来检查任何字符串
when String
  puts "It's a String"
end

case 简短的语法

case input
  when 19 then puts "It's 19"
end

case 可选的失败

case input
  when 19 then puts "It's 19"
else
  puts "It's not 19"
end

case 获取返回值

marks = 86
result = case marks
        when 0..49 then "Fail"
        when 50..64 then "Pass"
        when 65..74 then "Credit"
        when 75..84 then "Distinction"
        when 85..100 then "High Distinction"
        else "Invalid marks"
        end

puts result
# High Distinction

字符串

字符串插值

name = "World"
puts "Hello #{name}"
puts "The total is #{1+1}"
# "the total is 2"

字符串插值允许您将字符串组合在一起

提取子字符串

string = "abc123"
string[0,3]
# "abc"
string[3,3]
# "123"
string[0..-2]
# "abc12"
#remove or replace the substring
string[0..2] = ""
puts string
# "123"

子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾

将字符串转换为小写或大写

"HELLO World".downcase  # "hello world"
"hello worlD".upcase    # "HELLO WORLD"
"hEllo wOrlD".capitalize # "Hello world"
"hEllo WOrlD".swapcase  # "HeLLO woRLd"

有用的方法

函数名称 Output Note
length or size "HELLO World".length => 11
"HELLO World".size => 11
返回字符串的长度
reverse "hello worlD".reverse => "Dlrow olleh" 返回反转的字符串
include? other_str "hEllo wOrlD".include? "w" => true 如果字符串或字符存在则返回 true,否则返回 false
gsub(pattern, replacement) "hEllo wOrlD".gsub(" ", "_") => "hEllo_wOrlD" gsub 或全局替换用提供的字符串替换一个或多个字符串
gsub(pattern, hash) "organization".gsub("z", 'z' => 's') => "organisation" gsub 或全局替换用提供的哈希替换一个或多个字符串
gsub(pattern) { |match| block} "Price of the phone is 1000 AUD".gsub(/\d+/) { |s| '$'+s }
"Price of the phone is $1000 AUD"
gsub 或全局替换用提供的块替换一个或多个字符串
strip " hEllo WOrlD ".strip
"hEllo WOrlD"
它将删除(修剪)以下任何前导和尾随字符:null(“\x00”)、水平制表符(“\t”)、换行符(\n)、垂直制表符(“\v”)、换页符(f)、回车(\r)、空格(" ")
prepend a = "world" <br> a.prepend("hello ")
"hello world"
在另一个字符串之前添加字符串
insert a = "hello" <br> a.insert(a.length, " world")
"hello world"
在特定位置插入字符串
start_with? string = "ruby programming"
string.start_with? "ruby"
true
检查字符串是否以特定前缀开头
end_with? string = "ruby programming"
string.end_with? "ruby"
false
检查字符串是否以特定前缀结尾
delete_suffix string = "sausage is expensive"
string.delete_suffix(" is expensive")
"sausage"
从字符串中删除后缀
delete_prefix string = "sausage is expensive"
string.delete_prefix("sausage")
" is expensive"
从字符串中删除前缀
split string = "a b c d" <br> string.split
["a", "b", "c", "d"]
将字符串转换为字符数组
join arr = ['a', 'b', 'c'] <br> arr.join => "abc" 将数组转换为字符串
to_i a = "49" <br> a.to_i => 49 将字符串转换为整数
chop "abcd?".chop("?") => "abcd" 从字符串中删除最后一个字符
count str = "aaab" <br> str.count("a")
3
计算字符串中的字符
to_f a = "49"
a.to_f
49.0
将字符串转换为浮点数
to_sym a = "key"
a.to_sym
:key
将字符串转换为符号
match "abcd?".match(/ab/) => #<MatchData "ab"> 将模式转换为正则表达式并在字符串上调用其匹配方法
empty? "hello".empty? => false 如果字符串的长度为零,则返回 true
squeeze "Booook".squeeze => "Bok" 返回字符串的副本,其中相同字符的运行被单个字符替换
* puts "Ruby " * 4 => Ruby Ruby Ruby Ruby 返回多个 self 副本的串联
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
eql? s = 'foo' => true
s.eql?('foo') => true
如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接

方法

声明一个方法

def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    parameter1 + parameter2
end

res = method_name(20, 10)
# 输出 => 30
def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2
end
# 输出 => 30

调用方法

res = method_name(parameter1, parameter2)
# 可以调用不带括号的方法
res = method_name parameter1, parameter2

类方法

类方法是类级别的方法。 有多种定义类方法的方法

class Mobile
    def self.ring
        "ring ring ring..."
    end
end

Mobile.ring

class Mobile
    def Mobile.ring
        "ring ring ring..."
    end
end
Mobile.ring

class Mobile
    class << self
    def ring
        "ring ring ring..."
       end
    end
end
Mobile.ring

类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)

Mobile = Class.new do
    def self.ring
        "ring ring ring..."
    end
end
Mobile.ring
Mobile = Class.new
class << Mobile
    def ring
        "ring ring ring..."
    end
end
Mobile.ring

使用另一个参数作为默认值

def method_name(num1, num2 = num1)
    return num1 + num2
end
res = method_name(10)
# 输出 => 20

为方法参数定义默认值

def method_name(parameter1, parameter2, type = "ADD")
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2 if type == "ADD"
    return parameter1 - parameter2 if type == "SUB"
end
res = method_name(20, 10)
# 输出 => 30

将可变长度参数传递给方法参数

def method_name(type, *values)
    return values.reduce(:+) if type == "ADD"
    return values.reduce(:-) if type == "SUB"
end
numbers = [2, 2, 2, 3, 3, 3]
res = method_name("ADD", *numbers)
# 输出 => 15
res = method_name("SUB", *numbers)
# 输出 => -11
# 或者您可以提供这样的值
res = method_name("ADD", 2, 2, 2, 3, 3, 3)
# 输出 => 15

修改对象

a = ["Drama", "Mystery", "Crime",
"Sci-fi", "Disaster", "Thriller"]
a.sort
puts a
# 我们没有修改对象
# Drama
# Mystery
# Crime
# Sci-fi
# Disaster
# Thriller
a.sort!
puts a
# 修改对象
# Crime
# Disaster
# Drama
# Mystery
# Sci-fi
# Thriller

当您要修改对象时,在方法之后使用 !

布尔方法

在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false

"some text".nil?
# false
nil.nil?
# true

您可以拥有自己的布尔方法

def is_vowel?(char)
    ['a','e','i','o','u'].include? char
end
is_vowel? 'a'
# true
is_vowel? 'b'
# false

Blocks (块)

块示例

# return value
def give_me_data
    data = yield
    puts "data = #{data}"
end
give_me_data { "Big data" }
# 输出 => data = Big data

do 和 end(用于多行)或花括号 { 和 }(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 (|arg1, arg2|)

单行块

salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# puts s = block body
# |s| = block arugments

多行块

salary.each do |s|
    a = 10
    res = a * s
    puts res
end
# 块体
# a = 10
# res = a * s
# puts res
# 块参数
# |s|

块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句

隐式传递一个块

def give_me_data
    puts "I am inside give_me_data method"
    yield
    puts "I am back in give_me_data method"
end

give_me_data { puts "Big data" }

# 输出
# I am inside give_me_data method
# Big data
# I am back in give_me_data method

多次调用

def give_me_data
    yield
    yield
    yield
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data
# Big data

使用块参数调用

def give_me_data
    yield 10
    yield 100
    yield 30
end

give_me_data { |data| puts "Big data #{data} TB" }

# 输出
# Big data 10 TB
# Big data 100 TB
# Big data 30 TB

使用多个块参数调用

def give_me_data
    yield "Big data", 10, "TB"
    yield "Big data", 100, "GB"
    yield "Big data", 30, "MB"
end

give_me_data { |text, data, unit| puts "#{text} #{data} #{unit}" }

# 输出
# Big data 10 TB
# Big data 100 GB
# Big data 30 MB

块将尝试从当前上下文返回

give_me_data
    puts "我在 give_me_data 方法里面"
end

def test
  puts "我在测试方法里面"
  give_me_data { return 10 } # 代码从这里返回
  puts "I am back in test method"
end

return_value = test

# 输出
# 我在测试方法里面
# 我在 give_me_data 方法里面
# 10

通过使用 & 参数显式传递块

def give_me_data(&block)
    block.call
    block.call
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data

检查是否给出了块

def give_me_data
    yield
end

give_me_data

# 输出
# LocalJumpError: no block given (yield)

处理异常并使块可选的方法

def give_me_data
    return "no block" unless block_given?
    yield
end

give_me_data { puts "Big data" }
give_me_data

# 输出
# Big data

Procs

Procs 示例

p = Proc.new { puts "Hello World" }

def give_me_data(proc)
    proc.call
end

give_me_data p

# 输出
# Hello World

proc 就像一个可以存储在变量中的块

任意参数

p = Proc.new { |count| "Hello World " * count }

def give_me_data(proc)
    proc.call 5, 2
end

give_me_data p

# 输出
# "Hello World Hello World Hello World Hello World Hello World "

proc 将尝试从当前上下文返回

p = Proc.new { return 10 }
p.call
# 输出
LocalJumpError: unexpected return

不能从顶级上下文返回

def give_me_data
    puts "我在 give_me_data 方法里面"
    p = Proc.new { return 10 }
    p.call # 代码从这里返回
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# 我在 give_me_data 方法里面
# 10

Lambdas

声明一个 lambda

l = lambda { puts "Hello World" }
# 速记
l = -> { puts "Hello World" }
# 调用 lambda
l.call
# 输出 => Hello World

有多种方法可以调用 lambda

l.()
l[]

严格的 arguments

l = -> (count) { "Hello World " * count }
l.call 5
# 输出
# "Hello World Hello World Hello World Hello World Hello World "
l.call 5, 2
# 输出
wrong number of arguments (given 2, expected 1)

块中声明一个 lambda

def give_me_data
    puts "I am inside give_me_data method"
    l = -> { return 10 }
    l.call
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# I am inside give_me_data method
# I am back in give_me_data method
# nil # because puts return nil

lambdas 从 lambda 本身返回,就像常规方法一样

l = -> { return 10 }
l.call

# 输出 => 10

数组

初始化一个空数组

array = Array.new   #=> []
# or
array = []

包含不同类型的对象的数组

array = [1, "two", 3.0] 
#=> [1, "two", 3.0]

用初始大小和默认对象填充数组

numbers = Array.new(3)       
#=> [nil, nil, nil]
numbers = Array.new(3, 7)    
#=> [7, 7, 7]
numbers = Array.new(3, true) 
#=> [true, true, true]
numbers = []
numbers.fill(7, 0..2)   #=> [7, 7, 7]

不同哈希值的数组

array_with_hashes = Array.new(2) { {} } #=> [{}, {}]
array_with_hashes[0][:name] = "Bob"
array_with_hashes[0][:id] = 10          #=> [{:name=>"Bob", :id=>10}, {}]

二维数组

temperature_data = [
              ["A908", 38],
              ["A909", 37],
              ["A910", 38],
          ]
temperature_data[0]    #=> ["A908", 38]
temperature_data[0][0] #=> "A908"
temperature_data[0][1] #=> 38

数组索引

str_array = [
  "This", "is", "a", "small", "array"
]
str_array[0]            #=> "This"
str_array[1]            #=> "is"
str_array[4]            #=> "array"

负索引

str_array = [
  "This", "is", "a", "small", "array"
]
# 索引 -1 表示最后一个元素
str_array[-1]        #=> "array"
# 索引 -2 表示倒数第二个元素
str_array[-2]        #=> "small"
str_array[-6]        #=> nil

数组方法 at

str_array = [
  "This", "is", "a", "small", "array"
]

puts str_array.at(0)      #=> "This"

范围获取

arr = [1, 2, 3, 4, 5, 6]
arr[100]                  #=> nil
arr[-3]                   #=> 4
arr[2, 3]                 #=> [3, 4, 5]
arr[1..4]                 #=> [2, 3, 4, 5]
arr[1..-3]                #=> [2, 3, 4]

数组方法 fetch

arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100)
#=> IndexError: 数组边界外的索引 100:-6...6
arr.fetch(100, "oops")    #=> "oops"

超出边界,给默认值

获取数组元素

arr = [1, 2, 3, 4, 5, 6]

arr.first     # 第一个值 => 1
arr.last      # 最后一个值 => 6
# take 返回前 n 个元素
arr.take(3)   #=> [1, 2, 3]
# drop 在 n 个元素被删除之后
arr.drop(3)   #=> [4, 5, 6]

在数组末尾添加值 push

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.push(11)          
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
numbers.push(12, 13, 14)  
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

数组末尾删除值 pop

num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_array.pop             #=> 10
num_array
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

在数组的开头添加值 unshift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(0)          
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(-3, -2, -1) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

检索并同时删除第一个元素 shift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.shift #=> 1
numbers
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

删除特定索引处的元素 delete_at

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_at(2) #=> 4
numbers             
#=> [2, 3, 5, 6, 7, 8, 9, 10]

删除数组中任意位置的特定元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete(2) #=> 2
numbers           #=> [3, 5, 6, 7, 8, 9, 10]

在给定索引处插入值 insert

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, 0)           
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, -3, -2, -1)  
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

numbers.insert(-1, 12, 13, 14) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
numbers.insert(-4, 11)         
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

一个块来填充数组的值

numbers = Array.new(10) { |n| n = n * 2 } 
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

填充数组变得更容易

numbers = Array(100..110)
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

# 或者我们可以将范围转换为数组
(100..110).to_a 
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

从数组中删除 nil 值

arr = ['foo', 0, nil, 'bar', 7, nil]
arr.compact  #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, nil, 'bar', 7, nil]
arr.compact! #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, 'bar', 7]

去重 uniq

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]

检查数组中是否存在值(include?)

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.include? "Mars"
# 输出 => true
planets.include? "Pluto"
# 输出 => false

获取数组大小

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.size
# 输出 => 8
planets.length
# 输出 => 8

您可以使用大小或长度,两者都是同义词

清除数组

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.clear
# 输出 => []

获取数组的第一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0]
# or
numbers.first
# 输出 => 1

获取数组的最后一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[-1]
# or
numbers.last
# 输出 => 10

合并两个数组

a = ["tom", "mot", "otm"]
b = [2, 3, 5]
a.zip(b)
# 输出
# [["tom", 2], ["mot", 3], ["otm", 5]]

对数组进行排序

primes = [7, 2, 3, 5]
sorted_primes = primes.sort
puts "#{sorted_primes}"
# 输出 => [2, 3, 5, 7]

or in-place sort

primes = [7, 2, 3, 5]
primes.sort!
puts "#{primes}"
# 输出 => [2, 3, 5, 7]
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.sort
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p }
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p.length }
# 输出
# ["Mars", "Earth", "Venus", "Saturn", "Uranus", "Neptune", "Jupiter", "Mercury"]

从数组中获取最大值

primes = [7, 2, 3, 5]
primes.max_by { |p| p }
# 输出 => 7

使用范围获取数组元素

# numbers[start..end], both index are inclusive
puts numbers[0..3]
# 1
# 2
# 3
# 4
# numbers[start..end], end index is exclusive
puts numbers[0...3]
# 1
# 2
# 3
# or numbers[start..length]
puts numbers[0, 1]
# 1

获取数组的前n个元素

primes = [7, 2, 3, 5]
primes.take(3)
# [7, 2, 3]

访问元素

primes = [7, 2, 3, 5]
primes.fetch(3)
# 5
# Fetch will throw an error if the element does not exist
primes.fetch(10)
# (index 10 outside of array bounds: -4...4)
# or get an default value
primes.fetch(10, -1)
# -1

从数组中删除重复元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]
numbers.uniq
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

删除前 n 个元素

primes = [7, 2, 3, 5]
primes.drop(3)
# [5]

删除第一个元素

primes = [7, 2, 3, 5]
primes.shift
# [2, 3, 5]

删除最后一个元素

primes = [7, 2, 3, 5]
primes.pop
# [7, 2, 3]

删除带有索引的元素

primes = [7, 2, 3, 5]
primes.delete_at(-1)
# [7, 2, 3]

删除所有出现的元素

primes = [7, 2, 3, 5, 5]
primes.delete(5)
# [7, 2, 3]

each

# 当你有单行块时
salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# 输出
# 399
# 234
# 566
# 533
# 233

当你有一个多行块时,你可以用 do 和 end 替换花括号 {}

salary.each do |s|
  a = 10
  res = a * s
  puts res
end
# 输出
# 3990
# 2340
# 5660
# 5330
# 2330

或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情

salary.each { |s| a = 10 ; res = a * s ; puts res }

each_with_index

salary = [399, 234, 566, 533, 233]
salary.each_with_index { |value, index| puts "#{index} #{value}" }
# 输出
# 0 399
# 1 234
# 2 566
# 3 533
# 4 233

each_index

salary = [399, 234, 566, 533, 233]
salary.each_index { |i| puts i}
# 输出
# 0
# 1
# 2
# 3
# 4

map

salary = [399, 234, 566, 533, 233]
salary.map { |s|  s * 10  }
# 返回
# [3990, 2340, 5660, 5330, 2330]
# 另一方面,每个都返回原始值
salary = [399, 234, 566, 533, 233]
salary.each { |s|  s * 10  }
# 返回
# [399, 234, 566, 533, 233]

collect

salary = [399, 234, 566, 533, 233]
salary.collect { |s| s > 400 }
# 输出
# [false, false, true, true, false]

for

for value in [2, 3, 5, 7]
    puts value
end

each_with_object

colors = [
  {color: "red", count: 3}, {color: "red", count: 5}, {color: "black", count: 4}
]
colors.each_with_object(Hash.new(0)) { |color, hash| hash["color_"+color[:color]] = color[:color].upcase; hash["count_"+color[:color]] += color[:count] }
# 输出
{"color_red"=>"RED", "count_red"=>8, "color_black"=>"BLACK", "count_black"=>4}

[1, 2, 3].each_with_object(0) { |number, sum| sum += number}
# 输出
# 0
# 因为0是不可变的,由于初始对象是0,所以方法返回0

while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
while index < planets.size
    puts "#{planets[index]}"
    index += 1
end

a = 1
star = '*'
while a <= 10
    puts star
    star += '*'
    a += 1
end

do while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
loop do
    puts "#{planets[index]}"
    index += 1
    break if planets[index] == "Mars" or index > planets.size
end

until

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = planets.size - 1
until index < 0
    puts "#{planets[index]}"
    index -= 1
end
a = 1
star = '*'
until star.length > 10
    puts star
    star += '*'
    a += 1
end

times

10.times { puts "#{rand(1..100)}"}
# 输出
# 将打印 10 个随机数

仅仅因为你可以并不意味着你应该像这样迭代一个数组

data_sample = [2, 3, 5, 7]
data_sample.size.times { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3
# 5
# 7

upto

data_sample = [2, 3, 5, 7]
0.upto((data_sample.size - 1) / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3

downto

data_sample = [2, 3, 5, 7]
(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 7
# 5

step

1.step(20, 2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

19.step(1, -2) { |number| puts "#{number}"}
# 输出
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1

inject

numbers = [2, 2, 2, 2, 2]
numbers.inject{ |res, n| res + n }
# 输出是所有数字之和的结果
# 如果不给res设置初始值,则数组的第一个元素作为res的初始值
# 10
# 现在将 res 的值设置为 11
numbers = [2, 2, 2, 2, 2]
numbers.inject(11) { |res, n| res + n }
# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2
# 21
# using symbol
numbers = [2, 2, 2, 2, 2]
numbers.inject(:+)
# 输出
# 10

使用初始值和符号

numbers = [2, 2, 2, 2, 2]
numbers.inject(11, :+)
# 输出
# 21

reduce

numbers = [2, 2, 2, 2, 2]
numbers.reduce(11, :+)
# 输出
# 21

detect

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.detect { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth
salary = [399, 234, 566, 533, 233]
salary.detect { |s| s > 1000 }
# output
# nil

find

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.find { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth

select

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.select { |n| n % 2 == 0 }
# 现在你有一个偶数数组
# [2, 4, 6, 8, 10]
# 如果没有满足您的逻辑的值,则返回一个空数组
[1, 1, 1].select { |n| n % 2 == 0 }
# no even numbers
# []

reject

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.reject { |n| n % 2 == 0 }
# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组
# [1, 3, 5, 7, 9]

keep_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.keep_if { |n| n % 2 == 0 }
# numbers 数组仅包含偶数
# [2, 4, 6, 8, 10]

delete_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_if { |n| n % 2 == 0 }
# numbers 数组仅包含奇数
# [1, 3, 5, 7, 9]

drop_while

numbers = [1, 2, 3, 1, 2, 3, 0]
numbers.drop_while { |n| n < 3 }
# 是 3 小于 3,返回 false,所以删除 1, 2
# [3, 1, 2, 3, 0]

reverse_each

words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first "

布尔可枚举方法

布尔可枚举方法

Name When to use
all? 当您想检查所有元素是否满足您的条件时
any? 当您想检查至少一项是否满足您的条件时
one? 当您想检查一个元素是否满足您的要求时
none? 当您想检查是否没有任何项目满足您的条件时,相反?
empty? 当你想检查对象是否为空时
include? 当你想检查元素是否存在于对象中时

all?

[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# true
[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# false

any?

[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }
# true
[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }
# false

one?

[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }
# true
[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }
# false

none?

[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# true
[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# false

empty?

[].empty?
# true
[1, 3, 5, 7, 9].empty?
# false

组合方法

组合方法

  • & 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目
  • intersection 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目
  • + 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素
  • - 返回一个数组,其中包含在给定数组中找不到的所有 self 元素
  • union 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项
  • difference 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素
  • product 返回或产生来自 self 和给定数组的所有元素组合

&

[0, 1, 2, 3] & [1, 2] # => [1, 2]
[0, 1, 0, 1] & [0, 1] # => [0, 1]

intersection

[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]
[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]

+

a = [0, 1] + [2, 3]
a # => [0, 1, 2, 3]

-

[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] 
# => [0, 2, 3]
[0, 1, 2, 3] - [3, 0] 
# => [1, 2]
[0, 1, 2] - [4] 
# => [0, 1, 2]

union

[0, 1, 2, 3].union([4, 5], [6, 7]) 
# => [0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 1].union([2, 1], [3, 1]) 
# => [0, 1, 2, 3]
[0, 1, 2, 3].union([3, 2], [1, 0]) 
# => [0, 1, 2, 3]

difference

[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])
# => [0, 2, 3]
[0, 1, 2, 3].difference([3, 0], [1, 3])
# => [2]
[0, 1, 2].difference([4])
# => [0, 1, 2]

product

a = [0, 1, 2]
a1 = [3, 4]
p = a.product(a1)
p.size # => 6 # a.size * a1.size
p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]

循环

while 循环

# variable count
count = 4
# using while loop
# here conditional is count i.e. 4
while count >= 1
  # statements to be executed
  puts "Ruby Cheatsheet"
  count = count - 1
  # while loop ends here
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

for 循环

# loop using range as expression
text = "Ruby Cheatsheet"
# using for loop with the range
for count in 1..5 do
  puts text
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

do..while 循环

# starting of do..while loop
loop do
  puts "Ruby Cheatsheet"
  val = '7'
  # using boolean expressions
  if val == '7'
    break
  end
  # ending of ruby do..while loop
end

输出

Ruby Cheatsheet

until 循环

var = 7
# here do is optional
until var == 11 do
  # code to be executed
  puts var * 10
  var = var + 1
  # here loop ends
end

输出

70
80
90
100

跳出循环

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  break if s == 566
  puts s
end
# 输出
# 399
# 234

通过使用 break 关键字

在循环内跳过

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  next if s == 533
  puts s
end
# 输出
# 399
# 234
# 566
# 233

通过使用 next 关键字

重复当前迭代

data = [456, 3000]
retry_count = 0
status = "network failure"
sum = 0
data.each do |d|
    if retry_count == 3
        status = "connection established"
        retry_count = 0
        redo
    elsif status == "network failure" and retry_count < 5
        puts "network failure #{retry_count}"
        retry_count += 1
        redo
    elsif status == "connection established"
        puts d
        sum += d
    end
end
# output of sum
# 3456

重新开始循环

numbers = [2, 2, 44, 44]
sum = 0
begin
    numbers.each do |s|
        if rand(1..10) == 5
            puts "hi 5, let's do it again!"
            sum = 0
            raise "hi 5"
        end
        puts s
        sum += s
    end
rescue
    retry
end

Classes

Classes 示例

class Person
    # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java
    # def initialize(name, number)
    #    @name = name
    #    @number = number
    # end
    # instance variable
    # @name
    # class variable
    # @@count
    # attr_accessor acts as a getter and setter for the following instance attributes
    attr_accessor :name, :number
    # class variable must be initialized
    @@count = 0
    def self.count
        @@count
    end
    def self.count=(count)
        @@count = count
    end
    def initialize
        @@count += 1
    end
end
# create an instance of the Person class
p1 = Person.new
# set attributes of the Person class
p1.name = "Yukihiro Matsumoto"
p1.number = 9999999999
# get attributes of the Person class
puts "#{p1.name}"
puts "#{p1.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 1
p2 = Person.new
p2.name = "Yukihiro Matsumoto"
p2.number = 9999999999
# get attributes of the Person class
puts "#{p2.name}"
puts "#{p2.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 2
# set class variable
Person.count = 3
puts "#{Person.count}"
# 3

继承一个类

class Person
    attr_accessor :name, :number
end
# 使用 < 符号从父类继承方法和属性
class Student < Person
    attr_accessor :id
end
s = Student.new
s.name = "James Bond"
s.number = 700
s.id = 678
puts "#{p.name}"
James Bond
puts "#{p.number}"
700
puts "#{p.id}"
678

检查实例类型

class Vehicle; end
class Car < Vehicle; end
class Audi < Car; end
car = Car.new
car.instance_of? Vehicle
false
car.instance_of? Car
true
car.instance_of? Audi
false
a = 7
a.instance_of? Integer
true
a.instance_of? Numeric
false

如果对象是给定类的实例,而不是子类或超类,则返回 true

打印一个类的所有方法名

puts (String.methods).sort
# 排除从 Object 类继承的方法
puts (String.methods - Object.public_instance_methods).sort

检查一个类是否有特定的方法

String.respond_to?(:prepend)
true
String.respond_to?(:append)
false

另见

\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$+\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$1\u003c/code\u003e, \u003ccode\u003e$2...\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \\digit)这些变量都是只读的\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$~\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 \u003ccode\u003e$\u0026amp;、$+、$1、$2..\u003c/code\u003e 等。第 n 个子表达式可以通过 \u003ccode\u003e$~[nth]\u003c/code\u003e 检索。 (助记符:\u003ccode\u003e~\u003c/code\u003e 用于匹配)这个变量是局部作用域的\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$=\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$/\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$\\\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eprint 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$,\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eString#split 的默认分隔符。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$.\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e读取的最后一个文件的当前输入行号。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$\u0026lt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 \u003ccode\u003e$\u0026lt;.file\u003c/code\u003e 返回当前文件名。 (助记符:\u003ccode\u003e$\u0026lt;\u003c/code\u003e 是一个 shell 输入源)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eprint\u003c/code\u003e 的默认输出,\u003ccode\u003eprintf\u003c/code\u003e。 \u003ccode\u003e$stdout\u003c/code\u003e 默认情况下。 (助记符:\u003ccode\u003e$\u0026gt;\u003c/code\u003e 用于 shell 输出)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$_\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$0\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$*\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e最后执行的子进程的状态。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$:\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 \u003ccode\u003e-I\u003c/code\u003e 命令行开关的参数组成,然后是默认的 Ruby 库,probabl \u003ccode\u003e\"/usr/local/lib/ruby\"\u003c/code\u003e,然后是 \u003ccode\u003e\".\"\u003c/code\u003e,表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$DEBUG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e-d\u003c/code\u003e 开关的状态。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$FILENAME\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e与\u003ccode\u003e$\u0026lt;.filename\u003c/code\u003e 相同\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$LOAD_PATH\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e$:\u003c/code\u003e 的别名\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$stdin\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前的标准输入\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$stdout\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前的标准输出\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$stderr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当前标准错误输出\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003e$VERBOSE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e详细标志,由 \u003ccode\u003e-v\u003c/code\u003e 开关设置到 Ruby 解释器\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e预定义的全局常量\u003c/h3\u003e\u003ca id=\"user-content-预定义的全局常量\" class=\"anchor\" aria-label=\"Permalink: 预定义的全局常量\" href=\"#预定义的全局常量\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e名字\u003c/th\u003e\n\u003cth\u003e说明\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eTRUE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e典型的真值。在 Ruby 中,所有非 \u003ccode\u003efalse\u003c/code\u003e 值(除了 \u003ccode\u003enil\u003c/code\u003e 和 \u003ccode\u003efalse\u003c/code\u003e 之外的所有值)都是 \u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eFALSE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e虚假本身\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eNIL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e零本身\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eSTDIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e标准输入。\u003ccode\u003e$stdin\u003c/code\u003e 默认值\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eSTDOUT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e标准输出。\u003ccode\u003e$stdout\u003c/code\u003e 默认值\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eSTDERR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e标准错误输出。\u003ccode\u003e$stderr\u003c/code\u003e 默认值\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eENV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eARGF\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e$\u0026lt;\u003c/code\u003e 的别名\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eARGV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e$*\u003c/code\u003e 的别名\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eDATA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e脚本的文件对象,就在 \u003cstrong\u003eEND\u003c/strong\u003e 之后。 除非未从文件中读取脚本,否则未定义\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eVERSION\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRuby 版本字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eRUBY_RELEASE_DATE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e发布日期字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eRUBY_PLATFORM\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e平台标识符\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查变量的范围\u003c/h3\u003e\u003ca id=\"user-content-检查变量的范围\" class=\"anchor\" aria-label=\"Permalink: 检查变量的范围\" href=\"#检查变量的范围\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"defined? count\n\u0026quot;local-variable\u0026quot;\ndefined? @id\n\u0026quot;instance-variable\u0026quot;\ndefined? @@name\n\u0026quot;class variable\u0026quot;\ndefined? $version\n\u0026quot;global-variable\u0026quot;\ndefined? PI\n\u0026quot;constant\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003edefined?\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ecount\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"local-variable\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003edefined?\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e@id\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"instance-variable\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003edefined?\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e@@name\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"class variable\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003edefined?\u003c/span\u003e $version\n\u003cspan class=\"pl-s\"\u003e\"global-variable\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003edefined?\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ePI\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"constant\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数据类型\u003c/h3\u003e\u003ca id=\"user-content-数据类型\" class=\"anchor\" aria-label=\"Permalink: 数据类型\" href=\"#数据类型\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e类型\u003c/th\u003e\n\u003cth\u003e示例\u003c/th\u003e\n\u003cth\u003eClass\u003c/th\u003e\n\u003cth\u003e文档\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eInteger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = 17\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Integer \u003cbr\u003ea.class.superclass \u0026gt; Numeric\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Integer.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eFloat\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = 87.23\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Float \u003cbr\u003ea.class.superclass \u0026gt; Numeric\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Float.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eString\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = \"Hello universe\"\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; String\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/String.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eArray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = [12, 34]\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Array\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Array.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eHash\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = {type: \"tea\", count: 10}\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Hash\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Hash.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eBoolean\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = false\u003cbr\u003ea = true\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; FalseClass \u003cbr\u003ea.class \u0026gt; TrueClass\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/TrueClass.html\" rel=\"nofollow\"\u003eTrueClass\u003c/a\u003e \u003ca href=\"https://ruby-doc.org/core-3.1.2/FalseClass.html\" rel=\"nofollow\"\u003eFalseClass\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eSymbol\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = :status\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Symbol\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Symbol.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eRange\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = 1..3\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; Range\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/Range.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eNil\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea = nil\u003c/td\u003e\n\u003ctd\u003ea.class \u0026gt; NilClass\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://ruby-doc.org/core-3.1.2/NilClass.html\" rel=\"nofollow\"\u003e#\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://www.digitalocean.com/community/tutorials/understanding-data-types-in-ruby\" rel=\"nofollow\"\u003e进一步阅读\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查数据类型\u003c/h3\u003e\u003ca id=\"user-content-检查数据类型\" class=\"anchor\" aria-label=\"Permalink: 检查数据类型\" href=\"#检查数据类型\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 两者都是同义词\na = 37\na.kind_of? Integer\n# true\na.is_a? Integer\n# true\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# 两者都是同义词\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e37\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ekind_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eInteger\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eis_a?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eInteger\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSymbol\u003c/h3\u003e\u003ca id=\"user-content-symbol\" class=\"anchor\" aria-label=\"Permalink: Symbol\" href=\"#symbol\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"week_days = {sunday: 11, monday: 222}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eweek_days\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003esunday\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003emonday\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e222\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e整数有用的方法\u003c/h3\u003e\u003ca id=\"user-content-整数有用的方法\" class=\"anchor\" aria-label=\"Permalink: 整数有用的方法\" href=\"#整数有用的方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"2.even?\n# true\n3.even?\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeven?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeven?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e范围\u003c/h3\u003e\u003ca id=\"user-content-范围\" class=\"anchor\" aria-label=\"Permalink: 范围\" href=\"#范围\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e..\u003c/code\u003e 用于创建包含范围\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"range = 1..10\nrange.to_a\n# 输出 =\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erange\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erange\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eto_a\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e...\u003c/code\u003e 用于创建专属范围\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"range = 1...10\nrange.to_a\n# 输出 =\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erange\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e...\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erange\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eto_a\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e一些有用的方法\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003eMethod name\u003c/th\u003e\n\u003cth\u003eOutput\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003ecover?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e(1..5).cover?(5)\u003c/code\u003e =\u0026gt; \u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eend\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e('a'..'z').end\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"z\"\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003efirst\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e(1..5).first\u003c/code\u003e =\u0026gt; \u003ccode\u003e1\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003efirst(3)\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e('A'..'Z').first(2)\u003c/code\u003e =\u0026gt; \u003ccode\u003e[\"A\", \"B\"]\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eeql?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e((0..2).eql?(0..5)\u003c/code\u003e =\u0026gt; \u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e在 Range 中使用 step\u003c/h3\u003e\u003ca id=\"user-content-在-range-中使用-step\" class=\"anchor\" aria-label=\"Permalink: 在 Range 中使用 step\" href=\"#在-range-中使用-step\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(1..20).step(2) { |number| puts \u0026quot;#{number}\u0026quot;}\n# 输出\n# 1\n# 3\n# 5\n# 7\n# 9\n# 11\n# 13\n# 15\n# 17\n# 19\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003estep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 7\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 9\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 11\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 13\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 15\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 17\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 19\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e条件结构\u003c/h2\u003e\u003ca id=\"user-content-条件结构\" class=\"anchor\" aria-label=\"Permalink: 条件结构\" href=\"#条件结构\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eif 修饰符\u003c/h3\u003e\u003ca id=\"user-content-if-修饰符\" class=\"anchor\" aria-label=\"Permalink: if 修饰符\" href=\"#if-修饰符\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"num = 2\nputs 'two' if num == 2 \"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'two'\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e \u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果条件为真,则执行代码\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eif elsif else 语句\u003c/h3\u003e\u003ca id=\"user-content-if-elsif-else-语句\" class=\"anchor\" aria-label=\"Permalink: if elsif else 语句\" href=\"#if-elsif-else-语句\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"temp = 19\nif temp \u0026gt;= 25\n puts \u0026quot;hot\u0026quot;\nelsif temp \u0026lt; 25 \u0026amp;\u0026amp; temp \u0026gt;= 18\n puts \u0026quot;normal\u0026quot;\nelse\n puts \u0026quot;cold\u0026quot;\nend\n# 输出 =\u0026gt; normal\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u0026gt;= \u003cspan class=\"pl-c1\"\u003e25\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"hot\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eelsif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-c1\"\u003e25\u003c/span\u003e \u0026amp;\u0026amp; \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u0026gt;= \u003cspan class=\"pl-c1\"\u003e18\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"normal\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"cold\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; normal\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e除非语句\u003c/h3\u003e\u003ca id=\"user-content-除非语句\" class=\"anchor\" aria-label=\"Permalink: 除非语句\" href=\"#除非语句\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 除非与 if 相反,当语句为假时进行评估\nname = \u0026quot;rob\u0026quot;\n# if name != \u0026quot;bob\u0026quot;\nunless name == \u0026quot;bob\u0026quot;\n puts \u0026quot;hello stranger\u0026quot;\nelse\n puts \u0026quot;hello bob\u0026quot;\nend\n# 输出 =\u0026gt; hello stranger\nnum = 6\nputs 'not two' unless num == 2\n# 输出 =\u0026gt; not two\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# 除非与 if 相反,当语句为假时进行评估\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"rob\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# if name != \"bob\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eunless\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"bob\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"hello stranger\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"hello bob\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; hello stranger\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'not two'\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eunless\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; not two\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ecase 陈述\u003c/h3\u003e\u003ca id=\"user-content-case-陈述\" class=\"anchor\" aria-label=\"Permalink: case 陈述\" href=\"#case-陈述\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# case 返回最后执行的表达式的值\ncase input\n# 检查一个整数,19\nwhen 19\n puts \u0026quot;It's 19\u0026quot;\n # 检查浮点数,33.3\nwhen 33.3\n puts \u0026quot;It's 33.3\u0026quot;\n # 检查一个确切的字符串,“Zaman”\nwhen \u0026quot;Zaman\u0026quot;\n puts \u0026quot;Hi Zaman\u0026quot;\nwhen 10\n puts \u0026quot;It's 10\u0026quot;\n # 检查范围\nwhen 7..11\n puts \u0026quot;It's between 7 and 11\u0026quot;\n # 检查多个值,“咖啡”\nwhen \u0026quot;tea\u0026quot;, \u0026quot;coffee\u0026quot;\n puts \u0026quot;Happy days\u0026quot;\n # 检查正则表达式“aA6”\nwhen /^a[A-Z]+[0-6]+$/\n puts \u0026quot;It's a valid match\u0026quot;\n # 通过与 String 类“任何字符串”\n # 进行比较来检查任何字符串\nwhen String\n puts \u0026quot;It's a String\u0026quot;\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# case 返回最后执行的表达式的值\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ecase\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einput\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 检查一个整数,19\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's 19\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 检查浮点数,33.3\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e33.3\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's 33.3\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 检查一个确切的字符串,“Zaman”\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Zaman\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hi Zaman\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's 10\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 检查范围\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's between 7 and 11\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 检查多个值,“咖啡”\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"tea\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"coffee\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Happy days\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 检查正则表达式“aA6”\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-sr\"\u003e/^a[A-Z]+[0-6]+$/\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's a valid match\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 通过与 String 类“任何字符串”\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# 进行比较来检查任何字符串\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eString\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's a String\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ecase 简短的语法\u003c/h3\u003e\u003ca id=\"user-content-case-简短的语法\" class=\"anchor\" aria-label=\"Permalink: case 简短的语法\" href=\"#case-简短的语法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"case input\n when 19 then puts \u0026quot;It's 19\u0026quot;\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003ecase\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einput\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's 19\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ecase 可选的失败\u003c/h3\u003e\u003ca id=\"user-content-case-可选的失败\" class=\"anchor\" aria-label=\"Permalink: case 可选的失败\" href=\"#case-可选的失败\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"case input\n when 19 then puts \u0026quot;It's 19\u0026quot;\nelse\n puts \u0026quot;It's not 19\u0026quot;\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003ecase\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einput\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's 19\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"It's not 19\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ecase 获取返回值\u003c/h3\u003e\u003ca id=\"user-content-case-获取返回值\" class=\"anchor\" aria-label=\"Permalink: case 获取返回值\" href=\"#case-获取返回值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"marks = 86\nresult = case marks\n when 0..49 then \u0026quot;Fail\u0026quot;\n when 50..64 then \u0026quot;Pass\u0026quot;\n when 65..74 then \u0026quot;Credit\u0026quot;\n when 75..84 then \u0026quot;Distinction\u0026quot;\n when 85..100 then \u0026quot;High Distinction\u0026quot;\n else \u0026quot;Invalid marks\u0026quot;\n end\n\nputs result\n# High Distinction\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003emarks\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e86\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ecase\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emarks\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e49\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Fail\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e50\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e64\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Pass\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e65\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e74\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Credit\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e75\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e84\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Distinction\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhen\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e85\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ethen\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"High Distinction\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Invalid marks\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# High Distinction\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e字符串\u003c/h2\u003e\u003ca id=\"user-content-字符串\" class=\"anchor\" aria-label=\"Permalink: 字符串\" href=\"#字符串\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e字符串插值\u003c/h3\u003e\u003ca id=\"user-content-字符串插值\" class=\"anchor\" aria-label=\"Permalink: 字符串插值\" href=\"#字符串插值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"name = \u0026quot;World\u0026quot;\nputs \u0026quot;Hello #{name}\u0026quot;\nputs \u0026quot;The total is #{1+1}\u0026quot;\n# \u0026quot;the total is 2\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"World\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hello \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"The total is \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e+\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"the total is 2\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e字符串插值允许您将字符串组合在一起\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e提取子字符串\u003c/h3\u003e\u003ca id=\"user-content-提取子字符串\" class=\"anchor\" aria-label=\"Permalink: 提取子字符串\" href=\"#提取子字符串\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"string = \u0026quot;abc123\u0026quot;\nstring[0,3]\n# \u0026quot;abc\u0026quot;\nstring[3,3]\n# \u0026quot;123\u0026quot;\nstring[0..-2]\n# \u0026quot;abc12\u0026quot;\n#remove or replace the substring\nstring[0..2] = \u0026quot;\u0026quot;\nputs string\n# \u0026quot;123\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"abc123\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"abc\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"123\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..-\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"abc12\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#remove or replace the substring\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estring\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"123\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e将字符串转换为小写或大写\u003c/h3\u003e\u003ca id=\"user-content-将字符串转换为小写或大写\" class=\"anchor\" aria-label=\"Permalink: 将字符串转换为小写或大写\" href=\"#将字符串转换为小写或大写\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\u0026quot;HELLO World\u0026quot;.downcase # \u0026quot;hello world\u0026quot;\n\u0026quot;hello worlD\u0026quot;.upcase # \u0026quot;HELLO WORLD\u0026quot;\n\u0026quot;hEllo wOrlD\u0026quot;.capitalize # \u0026quot;Hello world\u0026quot;\n\u0026quot;hEllo WOrlD\u0026quot;.swapcase # \u0026quot;HeLLO woRLd\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s\"\u003e\"HELLO World\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edowncase\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# \"hello world\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"hello worlD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eupcase\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# \"HELLO WORLD\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"hEllo wOrlD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecapitalize\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# \"Hello world\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"hEllo WOrlD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eswapcase\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# \"HeLLO woRLd\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e有用的方法\u003c/h3\u003e\u003ca id=\"user-content-有用的方法\" class=\"anchor\" aria-label=\"Permalink: 有用的方法\" href=\"#有用的方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003e函数名称\u003c/th\u003e\n\u003cth\u003eOutput\u003c/th\u003e\n\u003cth\u003eNote\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003elength or size\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"HELLO World\".length\u003c/code\u003e =\u0026gt; \u003ccode\u003e11\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"HELLO World\".size\u003c/code\u003e =\u0026gt; \u003ccode\u003e11\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回字符串的长度\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003ereverse\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"hello worlD\".reverse\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"Dlrow olleh\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回反转的字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003einclude? other_str\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"hEllo wOrlD\".include? \"w\"\u003c/code\u003e =\u0026gt; \u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e如果字符串或字符存在则返回 true,否则返回 false\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003egsub(pattern, replacement)\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"hEllo wOrlD\".gsub(\" \", \"_\")\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"hEllo_wOrlD\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003egsub 或全局替换用提供的字符串替换一个或多个字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003egsub(pattern, hash)\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"organization\".gsub(\"z\", 'z' =\u0026gt; 's')\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"organisation\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003egsub 或全局替换用提供的哈希替换一个或多个字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003egsub(pattern) { |match| block}\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"Price of the phone is 1000 AUD\".gsub(/\\d+/) { |s| '

Latest commit

 

History

History
2458 lines (2025 loc) · 53 KB

File metadata and controls

2458 lines (2025 loc) · 53 KB

Ruby 备忘清单

入门

安装

# Debian, Ubuntu
$ sudo apt-get install ruby-full
# Windows
$ winget install RubyInstallerTeam.Ruby 
$ brew install ruby # macOS
$ docker run -it --rm ruby:latest # Docker
$ docker run -it --rm ruby:2.7

使用包管理器安装 rbenv

$ brew install rbenv ruby-build # macOS
# Debian、ubuntu 和其他衍生产品
$ sudo apt install rbenv

使用 rbenv 安装 ruby

# 列出最新的稳定版本
$ rbenv install -l
# 列出所有本地版本
$ rbenv install -L
# 安装 Ruby 版本
$ rbenv install 3.1.2
$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本
# 或者
$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本
$ rbenv local --unset
$ rbenv version # 显示当前活动的 Ruby 版本
=> 1.9.3-p327 (set by /Users/sam/.rbenv/version)

使用 RVM 安装 ruby

$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm list          # Ruby 版本列表
$ rvm install 3.0.1 # 安装 3.0.1
$ rvm use 3.0.1     # 使用 3.0.1

如何安装 ruby gem 管理器, bundler gem

# 访问 bash 以执行以下命令
$ docker run -it --rm ruby:latest bash
$ gem install bundler
$ bundle -v
$ gem update bundler
$ gem uninstall bundler

什么是 Gemfile 和 Gemfile.lock

Gemfile 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)

# 在项目根目录的 Gemfile 中指定 gem
ruby '2.5.6'

source 'https://rubygems.org'
gem 'nokogiri'
gem 'rack', '~>1.1'
gem 'rspec', :require => 'spec'

安装 Gemfile 中的所有 gem

$ bundle install

解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题

bundle lock --add-platform x86_64-linux

安装特定 ruby gem 的特定版本

$ gem install bundler -v 1.17
$ gem install minitest -v 5.8.4

使用 Bundler 更新 gem

# 使用 Bundler 更新单个 gem
$ bundle update nokogiri
# 使用 Bundler 更新 Gemfile 中的每个 gem
$ bundle update

保留字

保留字 描述
__ENCODING__ 当前文件的脚本编码
__LINE__ 当前文件中此关键字的行号
__FILE__ 当前文件的路径
BEGIN 包含在 { } 中的代码在程序运行之前运行
END 包含在 { } 中以在程序结束时运行
alias 为现有方法、运算符、全局变量创建别名
and 逻辑与运算符
begin 开始一段代码
break 终止循环
case 将表达式与匹配的 when 子句进行比较,其中
以 end 结束
class 定义一个类
def 定义函数/方法
defined? 检查某个变量、函数是否存在
do 开始一个代码块并执行块中的代码,以
end关键字结束
else 如果先前的条件不成立,则执行以下代码
elsif if 表达式的替代条件
end 用于结束以 begin、class、def、do、if 等关键字开头的代码块
ensure 总是在块终止时执行
false 逻辑布尔假值
for 开始一个 for 循环
if 如果 if 的条件语句为 true,则执行代码块
in 与 for 循环一起使用
module 定义一个模块
next 跳转到循环条件评估之前的点
nil 为空或无效或始终为假
not 逻辑否定运算符
or 逻辑或运算符
redo 条件循环后跳转
rescue 在引发异常后评估表达式
retry • 在救援之外调用时,重复方法调用
• 在救援内部调用时,跳转到块顶部
return 从方法或代码块返回值
self 当前对象
super 调用超类中的同名方法
then 与 if、unless、when、case、rescue 一起使用的分隔符
true 逻辑布尔真
undef 使当前类中的方法/函数未定义
until 在条件语句为假时执行代码块
when 在 case 语句下开始一个子句
while 执行代码块,直到条件语句变为假
yield 执行传递给方法的代码块

注释

# 单行注释
=begin
多行
注释
=end
=begin 注释第 1 行 =end
puts "Hello world!"  # 代码的内联注释

运算符

逻辑运算符

  • and
  • or
  • not
  • &&
  • ||
  • !

位运算符

  • &
  • |
  • ^
  • ~
  • <<
  • >>

算术运算符

  • +
  • -
  • *
  • /
  • %
  • **

比较运算符

  • ==
  • !=
  • >
  • <
  • >=
  • <=
  • <=>
  • ===
  • eql?
  • equal?

运算符示例

# 添加
1 + 1   #=> 2
# 减法
2 - 1   #=> 1
# 乘法
2 * 2   #=> 4
# 分配
10 / 5  #=> 2
17 / 5    #=> 3, not 3.4
17 / 5.0  #=> 3.4
# 指数
2 ** 2  #=> 4
3 ** 4  #=> 81
# 模数(求除法的余数)
8 % 2   #=> 0  (8 / 2 = 4; 没有剩余)
10 % 4  #=> 2  (10 / 4 = 2 余数为 2)
a = 10
b = 20
a == b #=> false
a != b #=> true
a > b #=> false
a < b #=> true
a >= b #=> false
a <= b #=> true

# 比较运算符
a <=> b #=> -1
c = 20
c <=> b #=> 0
c <=> a  #=> 1
# 用于测试 case 语句的 when 子句中的相等性
(1...10) === 5 #=> true
# 如果接收者和参数具有相同的类型和相等的值,则为真
1.eql?(1.0) #=> false
c = a + b  #=> 30
c += a #=> 40
c -= a #=> 30
c *= a #=> 300
c /= a #=> 30
c %= a #=> 3
c **= a #=> 59049

# Ruby 并行赋值
a = 10
b = 20
c = 30
a, b, c = 10, 20, 30
# Ruby 位运算符
a = 60
b = 13
# & 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。
a & b #=> 12
# | 如果二进制或运算符存在于任一操作数中,则复制一个位。
a | b #=> 61
# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。
a ^ b #=> 49
# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。
~a
# << 二进制左移运算符。 左操作数的值被移动
# 左操作数指定的位数。
a << 2
# >> 二进制右移运算符。 左操作数的值被移动
# 右操作数指定的位数。
a >> 2

# Ruby 逻辑运算符
a and b #=> true.
a or b #=> true.
a && b #=> true.
(a || b) #=> true.
!(a && b) #=> false.
not(a && b) #=> false.
# Ruby 三元运算符
# ? :
# 如果条件为真? 然后值 X :否则值 Y
a == 10 ? puts 'Right' : puts 'Wrong'
# Ruby 范围运算符
# .. 创建从起点到终点的范围(含)
1..10 #=> 创建从 1 到 10 的范围(包括 1 到 10)
# ... 创建一个从起点到终点的范围,不包括在内
1...10 #=> 创建一个从 1 到 10 的独占范围

运算符优先级表

  • !, ~, unary +
  • **
  • unary -
  • *, /, %
  • +, -
  • <<, >>
  • &
  • ^
  • >, >=, <, <=
  • <=>, ==, ===, !=, =~, !~
  • &&
  • ?, :
  • modifier-rescue
  • =, +=, -=, *=, /=, %=
  • defined
  • not
  • or, and
  • modifier-if, modifier-unless, modifier-while, modifier-until
  • { } 块
  • do ... end 块

变量和范围

名字 范围 示例 说明
[a-z] 或 _ 本地的 count = 10 或 _count = 10 必须初始化局部变量
@ 实例变量 @id = [] 实例变量在初始化之前具有“nil”值
@@ 类变量 @@name = [] 必须初始化类变量
$ 全局变量 $version = "0.8.9" 全局变量在初始化之前具有“nil”值
[A-Z] 持续的 PI = 3.14 常量变量必须初始化,您可以更改常量,但您会收到警告

有五种不同类型的变量。第一个字符确定范围

局部变量

current_weather = "rainy"
_weather = "sunny"

必须以下划线或小写字母开头

实例变量

# 实例类变量
@current_weather = "rainy"
# 全局变量
$current_weather = "rainy"
# 常量变量
WEATHER = "rainy".freeze

伪变量

名字 说明
self 当前方法的接收者对象
true TrueClass 的实例
false FalseClass 的实例
nil NilClass 的实例
__FILE__ 当前源文件名
__LINE__ 当前源文件的当前行号

选项变量

名字 说明
$-0 $/ 的别名
$-a 如果设置了选项 -a,则为真。只读变量
$-d $DEBUG 的别名
$-F $; 的别名
$-i 在就地编辑模式下,此变量保存扩展,否则为零
可以指定启用(或禁用)就地编辑模式
$-I $: 的别名
$-l 如果选项 -lis 设置为真。只读变量
$-p 如果选项 -pi 设置为真。只读变量
$-v $VERBOSE 的别名

预定义变量

名字 说明
$! 异常信息消息。raise 设置此变量
$@ 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in `methodname'”(助记符:发生异常的地方)
$& 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 &)这个变量是只读的
$` 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的
$' 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)
$+ 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)
$1, $2... 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \digit)这些变量都是只读的
$~ 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 $&、$+、$1、$2.. 等。第 n 个子表达式可以通过 $~[nth] 检索。 (助记符:~ 用于匹配)这个变量是局部作用域的
$= 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)
$/ 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)
$\ print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)
$, 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)
$; String#split 的默认分隔符。
$. 读取的最后一个文件的当前输入行号。
$< 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 $<.file 返回当前文件名。 (助记符:$< 是一个 shell 输入源)
$> print 的默认输出,printf。 $stdout 默认情况下。 (助记符:$> 用于 shell 输出)
$_ 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)
$0 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)
$* 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)
$$ 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)
$? 最后执行的子进程的状态。
$: 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 -I 命令行开关的参数组成,然后是默认的 Ruby 库,probabl "/usr/local/lib/ruby",然后是 ".",表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)
$" 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)
$DEBUG -d 开关的状态。
$FILENAME 与$<.filename 相同
$LOAD_PATH $: 的别名
$stdin 当前的标准输入
$stdout 当前的标准输出
$stderr 当前标准错误输出
$VERBOSE 详细标志,由 -v 开关设置到 Ruby 解释器

预定义的全局常量

名字 说明
TRUE 典型的真值。在 Ruby 中,所有非 false 值(除了 nil 和 false 之外的所有值)都是 true
FALSE 虚假本身
NIL 零本身
STDIN 标准输入。$stdin 默认值
STDOUT 标准输出。$stdout 默认值
STDERR 标准错误输出。$stderr 默认值
ENV 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境
ARGF $< 的别名
ARGV $* 的别名
DATA 脚本的文件对象,就在 END 之后。 除非未从文件中读取脚本,否则未定义
VERSION Ruby 版本字符串
RUBY_RELEASE_DATE 发布日期字符串
RUBY_PLATFORM 平台标识符

检查变量的范围

defined? count
"local-variable"
defined? @id
"instance-variable"
defined? @@name
"class variable"
defined? $version
"global-variable"
defined? PI
"constant"

数据类型

类型 示例 Class 文档
Integer a = 17 a.class > Integer
a.class.superclass > Numeric
#
Float a = 87.23 a.class > Float
a.class.superclass > Numeric
#
String a = "Hello universe" a.class > String #
Array a = [12, 34] a.class > Array #
Hash a = {type: "tea", count: 10} a.class > Hash #
Boolean a = false
a = true
a.class > FalseClass
a.class > TrueClass
TrueClass FalseClass
Symbol a = :status a.class > Symbol #
Range a = 1..3 a.class > Range #
Nil a = nil a.class > NilClass #

进一步阅读

检查数据类型

# 两者都是同义词
a = 37
a.kind_of? Integer
# true
a.is_a? Integer
# true

Symbol

week_days = {sunday: 11, monday: 222}

整数有用的方法

2.even?
# true
3.even?
# false

范围

.. 用于创建包含范围

range = 1..10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

... 用于创建专属范围

range = 1...10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9]

一些有用的方法

Method name Output
cover? (1..5).cover?(5) => true
end ('a'..'z').end => "z"
first (1..5).first => 1
first(3) ('A'..'Z').first(2) => ["A", "B"]
eql? ((0..2).eql?(0..5) => false

在 Range 中使用 step

(1..20).step(2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

条件结构

if 修饰符

num = 2
puts 'two' if num == 2 

如果条件为真,则执行代码

if elsif else 语句

temp = 19
if temp >= 25
  puts "hot"
elsif temp < 25 && temp >= 18
  puts "normal"
else
  puts "cold"
end
# 输出 => normal

除非语句

# 除非与 if 相反,当语句为假时进行评估
name = "rob"
# if name != "bob"
unless name == "bob"
  puts "hello stranger"
else
  puts "hello bob"
end
# 输出 => hello stranger
num = 6
puts 'not two' unless num == 2
# 输出 => not two

case 陈述

# case 返回最后执行的表达式的值
case input
# 检查一个整数,19
when 19
  puts "It's 19"
  # 检查浮点数,33.3
when 33.3
  puts "It's 33.3"
  # 检查一个确切的字符串,“Zaman”
when "Zaman"
  puts "Hi Zaman"
when 10
  puts "It's 10"
  # 检查范围
when 7..11
  puts "It's between 7 and 11"
  # 检查多个值,“咖啡”
when "tea", "coffee"
  puts "Happy days"
  # 检查正则表达式“aA6”
when /^a[A-Z]+[0-6]+$/
  puts "It's a valid match"
  # 通过与 String 类“任何字符串”
  # 进行比较来检查任何字符串
when String
  puts "It's a String"
end

case 简短的语法

case input
  when 19 then puts "It's 19"
end

case 可选的失败

case input
  when 19 then puts "It's 19"
else
  puts "It's not 19"
end

case 获取返回值

marks = 86
result = case marks
        when 0..49 then "Fail"
        when 50..64 then "Pass"
        when 65..74 then "Credit"
        when 75..84 then "Distinction"
        when 85..100 then "High Distinction"
        else "Invalid marks"
        end

puts result
# High Distinction

字符串

字符串插值

name = "World"
puts "Hello #{name}"
puts "The total is #{1+1}"
# "the total is 2"

字符串插值允许您将字符串组合在一起

提取子字符串

string = "abc123"
string[0,3]
# "abc"
string[3,3]
# "123"
string[0..-2]
# "abc12"
#remove or replace the substring
string[0..2] = ""
puts string
# "123"

子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾

将字符串转换为小写或大写

"HELLO World".downcase  # "hello world"
"hello worlD".upcase    # "HELLO WORLD"
"hEllo wOrlD".capitalize # "Hello world"
"hEllo WOrlD".swapcase  # "HeLLO woRLd"

有用的方法

函数名称 Output Note
length or size "HELLO World".length => 11
"HELLO World".size => 11
返回字符串的长度
reverse "hello worlD".reverse => "Dlrow olleh" 返回反转的字符串
include? other_str "hEllo wOrlD".include? "w" => true 如果字符串或字符存在则返回 true,否则返回 false
gsub(pattern, replacement) "hEllo wOrlD".gsub(" ", "_") => "hEllo_wOrlD" gsub 或全局替换用提供的字符串替换一个或多个字符串
gsub(pattern, hash) "organization".gsub("z", 'z' => 's') => "organisation" gsub 或全局替换用提供的哈希替换一个或多个字符串
gsub(pattern) { |match| block} "Price of the phone is 1000 AUD".gsub(/\d+/) { |s| '$'+s }
"Price of the phone is $1000 AUD"
gsub 或全局替换用提供的块替换一个或多个字符串
strip " hEllo WOrlD ".strip
"hEllo WOrlD"
它将删除(修剪)以下任何前导和尾随字符:null(“\x00”)、水平制表符(“\t”)、换行符(\n)、垂直制表符(“\v”)、换页符(f)、回车(\r)、空格(" ")
prepend a = "world" <br> a.prepend("hello ")
"hello world"
在另一个字符串之前添加字符串
insert a = "hello" <br> a.insert(a.length, " world")
"hello world"
在特定位置插入字符串
start_with? string = "ruby programming"
string.start_with? "ruby"
true
检查字符串是否以特定前缀开头
end_with? string = "ruby programming"
string.end_with? "ruby"
false
检查字符串是否以特定前缀结尾
delete_suffix string = "sausage is expensive"
string.delete_suffix(" is expensive")
"sausage"
从字符串中删除后缀
delete_prefix string = "sausage is expensive"
string.delete_prefix("sausage")
" is expensive"
从字符串中删除前缀
split string = "a b c d" <br> string.split
["a", "b", "c", "d"]
将字符串转换为字符数组
join arr = ['a', 'b', 'c'] <br> arr.join => "abc" 将数组转换为字符串
to_i a = "49" <br> a.to_i => 49 将字符串转换为整数
chop "abcd?".chop("?") => "abcd" 从字符串中删除最后一个字符
count str = "aaab" <br> str.count("a")
3
计算字符串中的字符
to_f a = "49"
a.to_f
49.0
将字符串转换为浮点数
to_sym a = "key"
a.to_sym
:key
将字符串转换为符号
match "abcd?".match(/ab/) => #<MatchData "ab"> 将模式转换为正则表达式并在字符串上调用其匹配方法
empty? "hello".empty? => false 如果字符串的长度为零,则返回 true
squeeze "Booook".squeeze => "Bok" 返回字符串的副本,其中相同字符的运行被单个字符替换
* puts "Ruby " * 4 => Ruby Ruby Ruby Ruby 返回多个 self 副本的串联
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
eql? s = 'foo' => true
s.eql?('foo') => true
如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接

方法

声明一个方法

def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    parameter1 + parameter2
end

res = method_name(20, 10)
# 输出 => 30
def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2
end
# 输出 => 30

调用方法

res = method_name(parameter1, parameter2)
# 可以调用不带括号的方法
res = method_name parameter1, parameter2

类方法

类方法是类级别的方法。 有多种定义类方法的方法

class Mobile
    def self.ring
        "ring ring ring..."
    end
end

Mobile.ring

class Mobile
    def Mobile.ring
        "ring ring ring..."
    end
end
Mobile.ring

class Mobile
    class << self
    def ring
        "ring ring ring..."
       end
    end
end
Mobile.ring

类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)

Mobile = Class.new do
    def self.ring
        "ring ring ring..."
    end
end
Mobile.ring
Mobile = Class.new
class << Mobile
    def ring
        "ring ring ring..."
    end
end
Mobile.ring

使用另一个参数作为默认值

def method_name(num1, num2 = num1)
    return num1 + num2
end
res = method_name(10)
# 输出 => 20

为方法参数定义默认值

def method_name(parameter1, parameter2, type = "ADD")
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2 if type == "ADD"
    return parameter1 - parameter2 if type == "SUB"
end
res = method_name(20, 10)
# 输出 => 30

将可变长度参数传递给方法参数

def method_name(type, *values)
    return values.reduce(:+) if type == "ADD"
    return values.reduce(:-) if type == "SUB"
end
numbers = [2, 2, 2, 3, 3, 3]
res = method_name("ADD", *numbers)
# 输出 => 15
res = method_name("SUB", *numbers)
# 输出 => -11
# 或者您可以提供这样的值
res = method_name("ADD", 2, 2, 2, 3, 3, 3)
# 输出 => 15

修改对象

a = ["Drama", "Mystery", "Crime",
"Sci-fi", "Disaster", "Thriller"]
a.sort
puts a
# 我们没有修改对象
# Drama
# Mystery
# Crime
# Sci-fi
# Disaster
# Thriller
a.sort!
puts a
# 修改对象
# Crime
# Disaster
# Drama
# Mystery
# Sci-fi
# Thriller

当您要修改对象时,在方法之后使用 !

布尔方法

在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false

"some text".nil?
# false
nil.nil?
# true

您可以拥有自己的布尔方法

def is_vowel?(char)
    ['a','e','i','o','u'].include? char
end
is_vowel? 'a'
# true
is_vowel? 'b'
# false

Blocks (块)

块示例

# return value
def give_me_data
    data = yield
    puts "data = #{data}"
end
give_me_data { "Big data" }
# 输出 => data = Big data

do 和 end(用于多行)或花括号 { 和 }(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 (|arg1, arg2|)

单行块

salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# puts s = block body
# |s| = block arugments

多行块

salary.each do |s|
    a = 10
    res = a * s
    puts res
end
# 块体
# a = 10
# res = a * s
# puts res
# 块参数
# |s|

块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句

隐式传递一个块

def give_me_data
    puts "I am inside give_me_data method"
    yield
    puts "I am back in give_me_data method"
end

give_me_data { puts "Big data" }

# 输出
# I am inside give_me_data method
# Big data
# I am back in give_me_data method

多次调用

def give_me_data
    yield
    yield
    yield
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data
# Big data

使用块参数调用

def give_me_data
    yield 10
    yield 100
    yield 30
end

give_me_data { |data| puts "Big data #{data} TB" }

# 输出
# Big data 10 TB
# Big data 100 TB
# Big data 30 TB

使用多个块参数调用

def give_me_data
    yield "Big data", 10, "TB"
    yield "Big data", 100, "GB"
    yield "Big data", 30, "MB"
end

give_me_data { |text, data, unit| puts "#{text} #{data} #{unit}" }

# 输出
# Big data 10 TB
# Big data 100 GB
# Big data 30 MB

块将尝试从当前上下文返回

give_me_data
    puts "我在 give_me_data 方法里面"
end

def test
  puts "我在测试方法里面"
  give_me_data { return 10 } # 代码从这里返回
  puts "I am back in test method"
end

return_value = test

# 输出
# 我在测试方法里面
# 我在 give_me_data 方法里面
# 10

通过使用 & 参数显式传递块

def give_me_data(&block)
    block.call
    block.call
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data

检查是否给出了块

def give_me_data
    yield
end

give_me_data

# 输出
# LocalJumpError: no block given (yield)

处理异常并使块可选的方法

def give_me_data
    return "no block" unless block_given?
    yield
end

give_me_data { puts "Big data" }
give_me_data

# 输出
# Big data

Procs

Procs 示例

p = Proc.new { puts "Hello World" }

def give_me_data(proc)
    proc.call
end

give_me_data p

# 输出
# Hello World

proc 就像一个可以存储在变量中的块

任意参数

p = Proc.new { |count| "Hello World " * count }

def give_me_data(proc)
    proc.call 5, 2
end

give_me_data p

# 输出
# "Hello World Hello World Hello World Hello World Hello World "

proc 将尝试从当前上下文返回

p = Proc.new { return 10 }
p.call
# 输出
LocalJumpError: unexpected return

不能从顶级上下文返回

def give_me_data
    puts "我在 give_me_data 方法里面"
    p = Proc.new { return 10 }
    p.call # 代码从这里返回
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# 我在 give_me_data 方法里面
# 10

Lambdas

声明一个 lambda

l = lambda { puts "Hello World" }
# 速记
l = -> { puts "Hello World" }
# 调用 lambda
l.call
# 输出 => Hello World

有多种方法可以调用 lambda

l.()
l[]

严格的 arguments

l = -> (count) { "Hello World " * count }
l.call 5
# 输出
# "Hello World Hello World Hello World Hello World Hello World "
l.call 5, 2
# 输出
wrong number of arguments (given 2, expected 1)

块中声明一个 lambda

def give_me_data
    puts "I am inside give_me_data method"
    l = -> { return 10 }
    l.call
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# I am inside give_me_data method
# I am back in give_me_data method
# nil # because puts return nil

lambdas 从 lambda 本身返回,就像常规方法一样

l = -> { return 10 }
l.call

# 输出 => 10

数组

初始化一个空数组

array = Array.new   #=> []
# or
array = []

包含不同类型的对象的数组

array = [1, "two", 3.0] 
#=> [1, "two", 3.0]

用初始大小和默认对象填充数组

numbers = Array.new(3)       
#=> [nil, nil, nil]
numbers = Array.new(3, 7)    
#=> [7, 7, 7]
numbers = Array.new(3, true) 
#=> [true, true, true]
numbers = []
numbers.fill(7, 0..2)   #=> [7, 7, 7]

不同哈希值的数组

array_with_hashes = Array.new(2) { {} } #=> [{}, {}]
array_with_hashes[0][:name] = "Bob"
array_with_hashes[0][:id] = 10          #=> [{:name=>"Bob", :id=>10}, {}]

二维数组

temperature_data = [
              ["A908", 38],
              ["A909", 37],
              ["A910", 38],
          ]
temperature_data[0]    #=> ["A908", 38]
temperature_data[0][0] #=> "A908"
temperature_data[0][1] #=> 38

数组索引

str_array = [
  "This", "is", "a", "small", "array"
]
str_array[0]            #=> "This"
str_array[1]            #=> "is"
str_array[4]            #=> "array"

负索引

str_array = [
  "This", "is", "a", "small", "array"
]
# 索引 -1 表示最后一个元素
str_array[-1]        #=> "array"
# 索引 -2 表示倒数第二个元素
str_array[-2]        #=> "small"
str_array[-6]        #=> nil

数组方法 at

str_array = [
  "This", "is", "a", "small", "array"
]

puts str_array.at(0)      #=> "This"

范围获取

arr = [1, 2, 3, 4, 5, 6]
arr[100]                  #=> nil
arr[-3]                   #=> 4
arr[2, 3]                 #=> [3, 4, 5]
arr[1..4]                 #=> [2, 3, 4, 5]
arr[1..-3]                #=> [2, 3, 4]

数组方法 fetch

arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100)
#=> IndexError: 数组边界外的索引 100:-6...6
arr.fetch(100, "oops")    #=> "oops"

超出边界,给默认值

获取数组元素

arr = [1, 2, 3, 4, 5, 6]

arr.first     # 第一个值 => 1
arr.last      # 最后一个值 => 6
# take 返回前 n 个元素
arr.take(3)   #=> [1, 2, 3]
# drop 在 n 个元素被删除之后
arr.drop(3)   #=> [4, 5, 6]

在数组末尾添加值 push

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.push(11)          
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
numbers.push(12, 13, 14)  
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

数组末尾删除值 pop

num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_array.pop             #=> 10
num_array
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

在数组的开头添加值 unshift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(0)          
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(-3, -2, -1) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

检索并同时删除第一个元素 shift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.shift #=> 1
numbers
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

删除特定索引处的元素 delete_at

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_at(2) #=> 4
numbers             
#=> [2, 3, 5, 6, 7, 8, 9, 10]

删除数组中任意位置的特定元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete(2) #=> 2
numbers           #=> [3, 5, 6, 7, 8, 9, 10]

在给定索引处插入值 insert

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, 0)           
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, -3, -2, -1)  
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

numbers.insert(-1, 12, 13, 14) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
numbers.insert(-4, 11)         
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

一个块来填充数组的值

numbers = Array.new(10) { |n| n = n * 2 } 
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

填充数组变得更容易

numbers = Array(100..110)
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

# 或者我们可以将范围转换为数组
(100..110).to_a 
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

从数组中删除 nil 值

arr = ['foo', 0, nil, 'bar', 7, nil]
arr.compact  #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, nil, 'bar', 7, nil]
arr.compact! #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, 'bar', 7]

去重 uniq

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]

检查数组中是否存在值(include?)

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.include? "Mars"
# 输出 => true
planets.include? "Pluto"
# 输出 => false

获取数组大小

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.size
# 输出 => 8
planets.length
# 输出 => 8

您可以使用大小或长度,两者都是同义词

清除数组

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.clear
# 输出 => []

获取数组的第一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0]
# or
numbers.first
# 输出 => 1

获取数组的最后一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[-1]
# or
numbers.last
# 输出 => 10

合并两个数组

a = ["tom", "mot", "otm"]
b = [2, 3, 5]
a.zip(b)
# 输出
# [["tom", 2], ["mot", 3], ["otm", 5]]

对数组进行排序

primes = [7, 2, 3, 5]
sorted_primes = primes.sort
puts "#{sorted_primes}"
# 输出 => [2, 3, 5, 7]

or in-place sort

primes = [7, 2, 3, 5]
primes.sort!
puts "#{primes}"
# 输出 => [2, 3, 5, 7]
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.sort
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p }
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p.length }
# 输出
# ["Mars", "Earth", "Venus", "Saturn", "Uranus", "Neptune", "Jupiter", "Mercury"]

从数组中获取最大值

primes = [7, 2, 3, 5]
primes.max_by { |p| p }
# 输出 => 7

使用范围获取数组元素

# numbers[start..end], both index are inclusive
puts numbers[0..3]
# 1
# 2
# 3
# 4
# numbers[start..end], end index is exclusive
puts numbers[0...3]
# 1
# 2
# 3
# or numbers[start..length]
puts numbers[0, 1]
# 1

获取数组的前n个元素

primes = [7, 2, 3, 5]
primes.take(3)
# [7, 2, 3]

访问元素

primes = [7, 2, 3, 5]
primes.fetch(3)
# 5
# Fetch will throw an error if the element does not exist
primes.fetch(10)
# (index 10 outside of array bounds: -4...4)
# or get an default value
primes.fetch(10, -1)
# -1

从数组中删除重复元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]
numbers.uniq
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

删除前 n 个元素

primes = [7, 2, 3, 5]
primes.drop(3)
# [5]

删除第一个元素

primes = [7, 2, 3, 5]
primes.shift
# [2, 3, 5]

删除最后一个元素

primes = [7, 2, 3, 5]
primes.pop
# [7, 2, 3]

删除带有索引的元素

primes = [7, 2, 3, 5]
primes.delete_at(-1)
# [7, 2, 3]

删除所有出现的元素

primes = [7, 2, 3, 5, 5]
primes.delete(5)
# [7, 2, 3]

each

# 当你有单行块时
salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# 输出
# 399
# 234
# 566
# 533
# 233

当你有一个多行块时,你可以用 do 和 end 替换花括号 {}

salary.each do |s|
  a = 10
  res = a * s
  puts res
end
# 输出
# 3990
# 2340
# 5660
# 5330
# 2330

或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情

salary.each { |s| a = 10 ; res = a * s ; puts res }

each_with_index

salary = [399, 234, 566, 533, 233]
salary.each_with_index { |value, index| puts "#{index} #{value}" }
# 输出
# 0 399
# 1 234
# 2 566
# 3 533
# 4 233

each_index

salary = [399, 234, 566, 533, 233]
salary.each_index { |i| puts i}
# 输出
# 0
# 1
# 2
# 3
# 4

map

salary = [399, 234, 566, 533, 233]
salary.map { |s|  s * 10  }
# 返回
# [3990, 2340, 5660, 5330, 2330]
# 另一方面,每个都返回原始值
salary = [399, 234, 566, 533, 233]
salary.each { |s|  s * 10  }
# 返回
# [399, 234, 566, 533, 233]

collect

salary = [399, 234, 566, 533, 233]
salary.collect { |s| s > 400 }
# 输出
# [false, false, true, true, false]

for

for value in [2, 3, 5, 7]
    puts value
end

each_with_object

colors = [
  {color: "red", count: 3}, {color: "red", count: 5}, {color: "black", count: 4}
]
colors.each_with_object(Hash.new(0)) { |color, hash| hash["color_"+color[:color]] = color[:color].upcase; hash["count_"+color[:color]] += color[:count] }
# 输出
{"color_red"=>"RED", "count_red"=>8, "color_black"=>"BLACK", "count_black"=>4}

[1, 2, 3].each_with_object(0) { |number, sum| sum += number}
# 输出
# 0
# 因为0是不可变的,由于初始对象是0,所以方法返回0

while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
while index < planets.size
    puts "#{planets[index]}"
    index += 1
end

a = 1
star = '*'
while a <= 10
    puts star
    star += '*'
    a += 1
end

do while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
loop do
    puts "#{planets[index]}"
    index += 1
    break if planets[index] == "Mars" or index > planets.size
end

until

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = planets.size - 1
until index < 0
    puts "#{planets[index]}"
    index -= 1
end
a = 1
star = '*'
until star.length > 10
    puts star
    star += '*'
    a += 1
end

times

10.times { puts "#{rand(1..100)}"}
# 输出
# 将打印 10 个随机数

仅仅因为你可以并不意味着你应该像这样迭代一个数组

data_sample = [2, 3, 5, 7]
data_sample.size.times { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3
# 5
# 7

upto

data_sample = [2, 3, 5, 7]
0.upto((data_sample.size - 1) / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3

downto

data_sample = [2, 3, 5, 7]
(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 7
# 5

step

1.step(20, 2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

19.step(1, -2) { |number| puts "#{number}"}
# 输出
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1

inject

numbers = [2, 2, 2, 2, 2]
numbers.inject{ |res, n| res + n }
# 输出是所有数字之和的结果
# 如果不给res设置初始值,则数组的第一个元素作为res的初始值
# 10
# 现在将 res 的值设置为 11
numbers = [2, 2, 2, 2, 2]
numbers.inject(11) { |res, n| res + n }
# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2
# 21
# using symbol
numbers = [2, 2, 2, 2, 2]
numbers.inject(:+)
# 输出
# 10

使用初始值和符号

numbers = [2, 2, 2, 2, 2]
numbers.inject(11, :+)
# 输出
# 21

reduce

numbers = [2, 2, 2, 2, 2]
numbers.reduce(11, :+)
# 输出
# 21

detect

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.detect { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth
salary = [399, 234, 566, 533, 233]
salary.detect { |s| s > 1000 }
# output
# nil

find

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.find { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth

select

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.select { |n| n % 2 == 0 }
# 现在你有一个偶数数组
# [2, 4, 6, 8, 10]
# 如果没有满足您的逻辑的值,则返回一个空数组
[1, 1, 1].select { |n| n % 2 == 0 }
# no even numbers
# []

reject

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.reject { |n| n % 2 == 0 }
# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组
# [1, 3, 5, 7, 9]

keep_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.keep_if { |n| n % 2 == 0 }
# numbers 数组仅包含偶数
# [2, 4, 6, 8, 10]

delete_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_if { |n| n % 2 == 0 }
# numbers 数组仅包含奇数
# [1, 3, 5, 7, 9]

drop_while

numbers = [1, 2, 3, 1, 2, 3, 0]
numbers.drop_while { |n| n < 3 }
# 是 3 小于 3,返回 false,所以删除 1, 2
# [3, 1, 2, 3, 0]

reverse_each

words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first "

布尔可枚举方法

布尔可枚举方法

Name When to use
all? 当您想检查所有元素是否满足您的条件时
any? 当您想检查至少一项是否满足您的条件时
one? 当您想检查一个元素是否满足您的要求时
none? 当您想检查是否没有任何项目满足您的条件时,相反?
empty? 当你想检查对象是否为空时
include? 当你想检查元素是否存在于对象中时

all?

[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# true
[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# false

any?

[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }
# true
[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }
# false

one?

[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }
# true
[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }
# false

none?

[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# true
[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# false

empty?

[].empty?
# true
[1, 3, 5, 7, 9].empty?
# false

组合方法

组合方法

  • & 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目
  • intersection 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目
  • + 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素
  • - 返回一个数组,其中包含在给定数组中找不到的所有 self 元素
  • union 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项
  • difference 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素
  • product 返回或产生来自 self 和给定数组的所有元素组合

&

[0, 1, 2, 3] & [1, 2] # => [1, 2]
[0, 1, 0, 1] & [0, 1] # => [0, 1]

intersection

[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]
[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]

+

a = [0, 1] + [2, 3]
a # => [0, 1, 2, 3]

-

[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] 
# => [0, 2, 3]
[0, 1, 2, 3] - [3, 0] 
# => [1, 2]
[0, 1, 2] - [4] 
# => [0, 1, 2]

union

[0, 1, 2, 3].union([4, 5], [6, 7]) 
# => [0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 1].union([2, 1], [3, 1]) 
# => [0, 1, 2, 3]
[0, 1, 2, 3].union([3, 2], [1, 0]) 
# => [0, 1, 2, 3]

difference

[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])
# => [0, 2, 3]
[0, 1, 2, 3].difference([3, 0], [1, 3])
# => [2]
[0, 1, 2].difference([4])
# => [0, 1, 2]

product

a = [0, 1, 2]
a1 = [3, 4]
p = a.product(a1)
p.size # => 6 # a.size * a1.size
p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]

循环

while 循环

# variable count
count = 4
# using while loop
# here conditional is count i.e. 4
while count >= 1
  # statements to be executed
  puts "Ruby Cheatsheet"
  count = count - 1
  # while loop ends here
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

for 循环

# loop using range as expression
text = "Ruby Cheatsheet"
# using for loop with the range
for count in 1..5 do
  puts text
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

do..while 循环

# starting of do..while loop
loop do
  puts "Ruby Cheatsheet"
  val = '7'
  # using boolean expressions
  if val == '7'
    break
  end
  # ending of ruby do..while loop
end

输出

Ruby Cheatsheet

until 循环

var = 7
# here do is optional
until var == 11 do
  # code to be executed
  puts var * 10
  var = var + 1
  # here loop ends
end

输出

70
80
90
100

跳出循环

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  break if s == 566
  puts s
end
# 输出
# 399
# 234

通过使用 break 关键字

在循环内跳过

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  next if s == 533
  puts s
end
# 输出
# 399
# 234
# 566
# 233

通过使用 next 关键字

重复当前迭代

data = [456, 3000]
retry_count = 0
status = "network failure"
sum = 0
data.each do |d|
    if retry_count == 3
        status = "connection established"
        retry_count = 0
        redo
    elsif status == "network failure" and retry_count < 5
        puts "network failure #{retry_count}"
        retry_count += 1
        redo
    elsif status == "connection established"
        puts d
        sum += d
    end
end
# output of sum
# 3456

重新开始循环

numbers = [2, 2, 44, 44]
sum = 0
begin
    numbers.each do |s|
        if rand(1..10) == 5
            puts "hi 5, let's do it again!"
            sum = 0
            raise "hi 5"
        end
        puts s
        sum += s
    end
rescue
    retry
end

Classes

Classes 示例

class Person
    # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java
    # def initialize(name, number)
    #    @name = name
    #    @number = number
    # end
    # instance variable
    # @name
    # class variable
    # @@count
    # attr_accessor acts as a getter and setter for the following instance attributes
    attr_accessor :name, :number
    # class variable must be initialized
    @@count = 0
    def self.count
        @@count
    end
    def self.count=(count)
        @@count = count
    end
    def initialize
        @@count += 1
    end
end
# create an instance of the Person class
p1 = Person.new
# set attributes of the Person class
p1.name = "Yukihiro Matsumoto"
p1.number = 9999999999
# get attributes of the Person class
puts "#{p1.name}"
puts "#{p1.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 1
p2 = Person.new
p2.name = "Yukihiro Matsumoto"
p2.number = 9999999999
# get attributes of the Person class
puts "#{p2.name}"
puts "#{p2.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 2
# set class variable
Person.count = 3
puts "#{Person.count}"
# 3

继承一个类

class Person
    attr_accessor :name, :number
end
# 使用 < 符号从父类继承方法和属性
class Student < Person
    attr_accessor :id
end
s = Student.new
s.name = "James Bond"
s.number = 700
s.id = 678
puts "#{p.name}"
James Bond
puts "#{p.number}"
700
puts "#{p.id}"
678

检查实例类型

class Vehicle; end
class Car < Vehicle; end
class Audi < Car; end
car = Car.new
car.instance_of? Vehicle
false
car.instance_of? Car
true
car.instance_of? Audi
false
a = 7
a.instance_of? Integer
true
a.instance_of? Numeric
false

如果对象是给定类的实例,而不是子类或超类,则返回 true

打印一个类的所有方法名

puts (String.methods).sort
# 排除从 Object 类继承的方法
puts (String.methods - Object.public_instance_methods).sort

检查一个类是否有特定的方法

String.respond_to?(:prepend)
true
String.respond_to?(:append)
false

另见

+s }\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"Price of the phone is $1000 AUD\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003egsub 或全局替换用提供的块替换一个或多个字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003estrip\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\" hEllo WOrlD \".strip\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"hEllo WOrlD\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e它将删除(修剪)以下任何前导和尾随字符:null(“\\x00”)、水平制表符(“\\t”)、换行符(\\n)、垂直制表符(“\\v”)、换页符(f)、回车(\\r)、空格(\" \")\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eprepend\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea = \"world\" \u0026lt;br\u0026gt; a.prepend(\"hello \")\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"hello world\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e在另一个字符串之前添加字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003einsert\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea = \"hello\" \u0026lt;br\u0026gt; a.insert(a.length, \" world\")\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"hello world\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e在特定位置插入字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003estart_with?\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estring = \"ruby programming\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003estring.start_with? \"ruby\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e检查字符串是否以特定前缀开头\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eend_with?\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estring = \"ruby programming\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003estring.end_with? \"ruby\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e检查字符串是否以特定前缀结尾\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003edelete_suffix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estring = \"sausage is expensive\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003estring.delete_suffix(\" is expensive\")\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\"sausage\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e从字符串中删除后缀\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003edelete_prefix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estring = \"sausage is expensive\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003estring.delete_prefix(\"sausage\")\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e\" is expensive\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e从字符串中删除前缀\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003esplit\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estring = \"a b c d\" \u0026lt;br\u0026gt; string.split\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e[\"a\", \"b\", \"c\", \"d\"]\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将字符串转换为字符数组\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003ejoin\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003earr = ['a', 'b', 'c'] \u0026lt;br\u0026gt; arr.join\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"abc\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将数组转换为字符串\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eto_i\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea = \"49\" \u0026lt;br\u0026gt; a.to_i\u003c/code\u003e =\u0026gt; \u003ccode\u003e49\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将字符串转换为整数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003echop\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"abcd?\".chop(\"?\")\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"abcd\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e从字符串中删除最后一个字符\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003ecount\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr = \"aaab\" \u0026lt;br\u0026gt; str.count(\"a\")\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e3\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e计算字符串中的字符\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eto_f\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea = \"49\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003ea.to_f\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e49.0\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将字符串转换为浮点数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eto_sym\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ea = \"key\"\u003c/code\u003e \u003cbr\u003e \u003ccode\u003ea.to_sym\u003c/code\u003e \u003cbr\u003e \u003ccode\u003e:key\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将字符串转换为符号\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003ematch\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"abcd?\".match(/ab/)\u003c/code\u003e =\u0026gt; \u003ccode\u003e#\u0026lt;MatchData \"ab\"\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e将模式转换为正则表达式并在字符串上调用其匹配方法\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eempty?\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"hello\".empty?\u003c/code\u003e =\u0026gt; \u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e如果字符串的长度为零,则返回 true\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003esqueeze\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"Booook\".squeeze\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"Bok\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回字符串的副本,其中相同字符的运行被单个字符替换\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e*\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eputs \"Ruby \" * 4\u003c/code\u003e =\u0026gt; \u003ccode\u003eRuby Ruby Ruby Ruby\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回多个 self 副本的串联\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e+\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"sammy \" + \"shark\"\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"sammyshark\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回 self 和给定的其他字符串的连接\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003eeql?\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003es = 'foo'\u003c/code\u003e =\u0026gt; \u003ccode\u003etrue\u003c/code\u003e \u003cbr\u003e \u003ccode\u003es.eql?('foo')\u003c/code\u003e =\u0026gt; \u003ccode\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e+\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"sammy \" + \"shark\"\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"sammyshark\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回 self 和给定的其他字符串的连接\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e+\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e\"sammy \" + \"shark\"\u003c/code\u003e =\u0026gt; \u003ccode\u003e\"sammyshark\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e返回 self 和给定的其他字符串的连接\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e方法\u003c/h2\u003e\u003ca id=\"user-content-方法\" class=\"anchor\" aria-label=\"Permalink: 方法\" href=\"#方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e声明一个方法\u003c/h3\u003e\u003ca id=\"user-content-声明一个方法\" class=\"anchor\" aria-label=\"Permalink: 声明一个方法\" href=\"#声明一个方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def method_name(parameter1, parameter2)\n puts \u0026quot;#{parameter1} #{parameter2}\u0026quot;\n parameter1 + parameter2\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"res = method_name(20, 10)\n# 输出 =\u0026gt; 30\ndef method_name(parameter1, parameter2)\n puts \u0026quot;#{parameter1} #{parameter2}\u0026quot;\n return parameter1 + parameter2\nend\n# 输出 =\u0026gt; 30\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 30\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 30\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e调用方法\u003c/h3\u003e\u003ca id=\"user-content-调用方法\" class=\"anchor\" aria-label=\"Permalink: 调用方法\" href=\"#调用方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"res = method_name(parameter1, parameter2)\n# 可以调用不带括号的方法\nres = method_name parameter1, parameter2\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 可以调用不带括号的方法\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eparameter2\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e类方法\u003c/h3\u003e\u003ca id=\"user-content-类方法\" class=\"anchor\" aria-label=\"Permalink: 类方法\" href=\"#类方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cp dir=\"auto\"\u003e类方法是类级别的方法。 有多种定义类方法的方法\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Mobile\n def self.ring\n \u0026quot;ring ring ring...\u0026quot;\n end\nend\n\nMobile.ring\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"ring ring ring...\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Mobile\n def Mobile.ring\n \u0026quot;ring ring ring...\u0026quot;\n end\nend\nMobile.ring\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"ring ring ring...\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Mobile\n class \u0026lt;\u0026lt; self\n def ring\n \u0026quot;ring ring ring...\u0026quot;\n end\n end\nend\nMobile.ring\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u0026lt;\u0026lt; \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"ring ring ring...\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Mobile = Class.new do\n def self.ring\n \u0026quot;ring ring ring...\u0026quot;\n end\nend\nMobile.ring\"\u003e\u003cpre\u003e\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eClass\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"ring ring ring...\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Mobile = Class.new\nclass \u0026lt;\u0026lt; Mobile\n def ring\n \u0026quot;ring ring ring...\u0026quot;\n end\nend\nMobile.ring\"\u003e\u003cpre\u003e\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eClass\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u0026lt;\u0026lt; \u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"ring ring ring...\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eMobile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ering\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用另一个参数作为默认值\u003c/h3\u003e\u003ca id=\"user-content-使用另一个参数作为默认值\" class=\"anchor\" aria-label=\"Permalink: 使用另一个参数作为默认值\" href=\"#使用另一个参数作为默认值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def method_name(num1, num2 = num1)\n return num1 + num2\nend\nres = method_name(10)\n# 输出 =\u0026gt; 20\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enum1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum2\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enum1\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003enum2\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 20\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e为方法参数定义默认值\u003c/h3\u003e\u003ca id=\"user-content-为方法参数定义默认值\" class=\"anchor\" aria-label=\"Permalink: 为方法参数定义默认值\" href=\"#为方法参数定义默认值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def method_name(parameter1, parameter2, type = \u0026quot;ADD\u0026quot;)\n puts \u0026quot;#{parameter1} #{parameter2}\u0026quot;\n return parameter1 + parameter2 if type == \u0026quot;ADD\u0026quot;\n return parameter1 - parameter2 if type == \u0026quot;SUB\u0026quot;\nend\nres = method_name(20, 10)\n# 输出 =\u0026gt; 30\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"ADD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"ADD\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameter1\u003c/span\u003e - \u003cspan class=\"pl-s1\"\u003eparameter2\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"SUB\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 30\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e将可变长度参数传递给方法参数\u003c/h3\u003e\u003ca id=\"user-content-将可变长度参数传递给方法参数\" class=\"anchor\" aria-label=\"Permalink: 将可变长度参数传递给方法参数\" href=\"#将可变长度参数传递给方法参数\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def method_name(type, *values)\n return values.reduce(:+) if type == \u0026quot;ADD\u0026quot;\n return values.reduce(:-) if type == \u0026quot;SUB\u0026quot;\nend\nnumbers = [2, 2, 2, 3, 3, 3]\nres = method_name(\u0026quot;ADD\u0026quot;, *numbers)\n# 输出 =\u0026gt; 15\nres = method_name(\u0026quot;SUB\u0026quot;, *numbers)\n# 输出 =\u0026gt; -11\n# 或者您可以提供这样的值\nres = method_name(\u0026quot;ADD\u0026quot;, 2, 2, 2, 3, 3, 3)\n# 输出 =\u0026gt; 15\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e *\u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ereduce\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:+\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"ADD\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ereduce\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:-\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"SUB\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"ADD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e *\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 15\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"SUB\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e *\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; -11\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 或者您可以提供这样的值\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emethod_name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"ADD\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 15\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e修改对象\u003c/h3\u003e\u003ca id=\"user-content-修改对象\" class=\"anchor\" aria-label=\"Permalink: 修改对象\" href=\"#修改对象\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = [\u0026quot;Drama\u0026quot;, \u0026quot;Mystery\u0026quot;, \u0026quot;Crime\u0026quot;,\n\u0026quot;Sci-fi\u0026quot;, \u0026quot;Disaster\u0026quot;, \u0026quot;Thriller\u0026quot;]\na.sort\nputs a\n# 我们没有修改对象\n# Drama\n# Mystery\n# Crime\n# Sci-fi\n# Disaster\n# Thriller\na.sort!\nputs a\n# 修改对象\n# Crime\n# Disaster\n# Drama\n# Mystery\n# Sci-fi\n# Thriller\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Drama\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mystery\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Crime\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"Sci-fi\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Disaster\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Thriller\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 我们没有修改对象\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Drama\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Mystery\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Crime\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Sci-fi\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Disaster\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Thriller\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort!\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 修改对象\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Crime\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Disaster\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Drama\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Mystery\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Sci-fi\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Thriller\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e当您要修改对象时,在方法之后使用 \u003ccode\u003e!\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e布尔方法\u003c/h3\u003e\u003ca id=\"user-content-布尔方法\" class=\"anchor\" aria-label=\"Permalink: 布尔方法\" href=\"#布尔方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\u0026quot;some text\u0026quot;.nil?\n# false\nnil.nil?\n# true\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s\"\u003e\"some text\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enil?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enil?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e您可以拥有自己的布尔方法\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def is_vowel?(char)\n ['a','e','i','o','u'].include? char\nend\nis_vowel? 'a'\n# true\nis_vowel? 'b'\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eis_vowel?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'a'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'e'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'i'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'o'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'u'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einclude?\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003echar\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eis_vowel?\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'a'\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eis_vowel?\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'b'\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBlocks (块)\u003c/h2\u003e\u003ca id=\"user-content-blocks-块\" class=\"anchor\" aria-label=\"Permalink: Blocks (块)\" href=\"#blocks-块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e块示例\u003c/h3\u003e\u003ca id=\"user-content-块示例\" class=\"anchor\" aria-label=\"Permalink: 块示例\" href=\"#块示例\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# return value\ndef give_me_data\n data = yield\n puts \u0026quot;data = #{data}\u0026quot;\nend\ngive_me_data { \u0026quot;Big data\u0026quot; }\n# 输出 =\u0026gt; data = Big data\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# return value\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"data = \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; data = Big data\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003edo\u003c/code\u003e 和 \u003ccode\u003eend\u003c/code\u003e(用于多行)或花括号 \u003ccode\u003e{\u003c/code\u003e 和 \u003ccode\u003e}\u003c/code\u003e(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 \u003ccode\u003e(|arg1, arg2|)\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e单行块\u003c/h3\u003e\u003ca id=\"user-content-单行块\" class=\"anchor\" aria-label=\"Permalink: 单行块\" href=\"#单行块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.each { |s| puts s }\n# puts s = block body\n# |s| = block arugments\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# puts s = block body\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# |s| = block arugments\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e多行块\u003c/h3\u003e\u003ca id=\"user-content-多行块\" class=\"anchor\" aria-label=\"Permalink: 多行块\" href=\"#多行块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary.each do |s|\n a = 10\n res = a * s\n puts res\nend\n# 块体\n# a = 10\n# res = a * s\n# puts res\n# 块参数\n# |s|\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e|\n \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e * \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 块体\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# a = 10\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# res = a * s\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# puts res\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 块参数\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# |s|\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e隐式传递一个块\u003c/h3\u003e\u003ca id=\"user-content-隐式传递一个块\" class=\"anchor\" aria-label=\"Permalink: 隐式传递一个块\" href=\"#隐式传递一个块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n puts \u0026quot;I am inside give_me_data method\u0026quot;\n yield\n puts \u0026quot;I am back in give_me_data method\u0026quot;\nend\n\ngive_me_data { puts \u0026quot;Big data\u0026quot; }\n\n# 输出\n# I am inside give_me_data method\n# Big data\n# I am back in give_me_data method\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am inside give_me_data method\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am back in give_me_data method\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# I am inside give_me_data method\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# I am back in give_me_data method\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e多次调用\u003c/h3\u003e\u003ca id=\"user-content-多次调用\" class=\"anchor\" aria-label=\"Permalink: 多次调用\" href=\"#多次调用\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n yield\n yield\n yield\nend\n\ngive_me_data { puts \u0026quot;Big data\u0026quot; }\n\n# 输出\n# Big data\n# Big data\n# Big data\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用块参数调用\u003c/h3\u003e\u003ca id=\"user-content-使用块参数调用\" class=\"anchor\" aria-label=\"Permalink: 使用块参数调用\" href=\"#使用块参数调用\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n yield 10\n yield 100\n yield 30\nend\n\ngive_me_data { |data| puts \u0026quot;Big data #{data} TB\u0026quot; }\n\n# 输出\n# Big data 10 TB\n# Big data 100 TB\n# Big data 30 TB\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e TB\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 10 TB\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 100 TB\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 30 TB\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用多个块参数调用\u003c/h3\u003e\u003ca id=\"user-content-使用多个块参数调用\" class=\"anchor\" aria-label=\"Permalink: 使用多个块参数调用\" href=\"#使用多个块参数调用\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n yield \u0026quot;Big data\u0026quot;, 10, \u0026quot;TB\u0026quot;\n yield \u0026quot;Big data\u0026quot;, 100, \u0026quot;GB\u0026quot;\n yield \u0026quot;Big data\u0026quot;, 30, \u0026quot;MB\u0026quot;\nend\n\ngive_me_data { |text, data, unit| puts \u0026quot;#{text} #{data} #{unit}\u0026quot; }\n\n# 输出\n# Big data 10 TB\n# Big data 100 GB\n# Big data 30 MB\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"TB\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"GB\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e30\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"MB\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eunit\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 10 TB\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 100 GB\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data 30 MB\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e块将尝试从当前上下文返回\u003c/h3\u003e\u003ca id=\"user-content-块将尝试从当前上下文返回\" class=\"anchor\" aria-label=\"Permalink: 块将尝试从当前上下文返回\" href=\"#块将尝试从当前上下文返回\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"give_me_data\n puts \u0026quot;我在 give_me_data 方法里面\u0026quot;\nend\n\ndef test\n puts \u0026quot;我在测试方法里面\u0026quot;\n give_me_data { return 10 } # 代码从这里返回\n puts \u0026quot;I am back in test method\u0026quot;\nend\n\nreturn_value = test\n\n# 输出\n# 我在测试方法里面\n# 我在 give_me_data 方法里面\n# 10\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"我在 give_me_data 方法里面\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"我在测试方法里面\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# 代码从这里返回\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am back in test method\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ereturn_value\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003etest\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 我在测试方法里面\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 我在 give_me_data 方法里面\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 10\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e通过使用 \u0026amp; 参数显式传递块\u003c/h3\u003e\u003ca id=\"user-content-通过使用--参数显式传递块\" class=\"anchor\" aria-label=\"Permalink: 通过使用 \u0026amp; 参数显式传递块\" href=\"#通过使用--参数显式传递块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data(\u0026amp;block)\n block.call\n block.call\nend\n\ngive_me_data { puts \u0026quot;Big data\u0026quot; }\n\n# 输出\n# Big data\n# Big data\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u0026amp;\u003cspan class=\"pl-s1\"\u003eblock\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eblock\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eblock\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查是否给出了块\u003c/h3\u003e\u003ca id=\"user-content-检查是否给出了块\" class=\"anchor\" aria-label=\"Permalink: 检查是否给出了块\" href=\"#检查是否给出了块\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n yield\nend\n\ngive_me_data\n\n# 输出\n# LocalJumpError: no block given (yield)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# LocalJumpError: no block given (yield)\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e处理异常并使块可选的方法\u003c/h3\u003e\u003ca id=\"user-content-处理异常并使块可选的方法\" class=\"anchor\" aria-label=\"Permalink: 处理异常并使块可选的方法\" href=\"#处理异常并使块可选的方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n return \u0026quot;no block\u0026quot; unless block_given?\n yield\nend\n\ngive_me_data { puts \u0026quot;Big data\u0026quot; }\ngive_me_data\n\n# 输出\n# Big data\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"no block\"\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eunless\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eblock_given?\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eyield\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Big data\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Big data\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eProcs\u003c/h2\u003e\u003ca id=\"user-content-procs\" class=\"anchor\" aria-label=\"Permalink: Procs\" href=\"#procs\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eProcs 示例\u003c/h3\u003e\u003ca id=\"user-content-procs-示例\" class=\"anchor\" aria-label=\"Permalink: Procs 示例\" href=\"#procs-示例\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"p = Proc.new { puts \u0026quot;Hello World\u0026quot; }\n\ndef give_me_data(proc)\n proc.call\nend\n\ngive_me_data p\n\n# 输出\n# Hello World\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eProc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hello World\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eproc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eproc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Hello World\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eproc 就像一个可以存储在变量中的块\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e任意参数\u003c/h3\u003e\u003ca id=\"user-content-任意参数\" class=\"anchor\" aria-label=\"Permalink: 任意参数\" href=\"#任意参数\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"p = Proc.new { |count| \u0026quot;Hello World \u0026quot; * count }\n\ndef give_me_data(proc)\n proc.call 5, 2\nend\n\ngive_me_data p\n\n# 输出\n# \u0026quot;Hello World Hello World Hello World Hello World Hello World \u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eProc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e| \u003cspan class=\"pl-s\"\u003e\"Hello World \"\u003c/span\u003e * \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eproc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eproc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"Hello World Hello World Hello World Hello World Hello World \"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eproc 将尝试从当前上下文返回\u003c/h3\u003e\u003ca id=\"user-content-proc-将尝试从当前上下文返回\" class=\"anchor\" aria-label=\"Permalink: proc 将尝试从当前上下文返回\" href=\"#proc-将尝试从当前上下文返回\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"p = Proc.new { return 10 }\np.call\n# 输出\nLocalJumpError: unexpected return\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eProc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eLocalJumpError\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eunexpected\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e不能从顶级上下文返回\u003c/h3\u003e\u003ca id=\"user-content-不能从顶级上下文返回\" class=\"anchor\" aria-label=\"Permalink: 不能从顶级上下文返回\" href=\"#不能从顶级上下文返回\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n puts \u0026quot;我在 give_me_data 方法里面\u0026quot;\n p = Proc.new { return 10 }\n p.call # 代码从这里返回\n puts \u0026quot;I am back in give_me_data method\u0026quot;\nend\n\nreturn_value = give_me_data\nputs return_value\n\n# 输出\n# 我在 give_me_data 方法里面\n# 10\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"我在 give_me_data 方法里面\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eProc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# 代码从这里返回\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am back in give_me_data method\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ereturn_value\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereturn_value\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 我在 give_me_data 方法里面\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 10\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLambdas\u003c/h2\u003e\u003ca id=\"user-content-lambdas\" class=\"anchor\" aria-label=\"Permalink: Lambdas\" href=\"#lambdas\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e声明一个 lambda\u003c/h3\u003e\u003ca id=\"user-content-声明一个-lambda\" class=\"anchor\" aria-label=\"Permalink: 声明一个 lambda\" href=\"#声明一个-lambda\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"l = lambda { puts \u0026quot;Hello World\u0026quot; }\n# 速记\nl = -\u0026gt; { puts \u0026quot;Hello World\u0026quot; }\n# 调用 lambda\nl.call\n# 输出 =\u0026gt; Hello World\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hello World\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 速记\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hello World\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 调用 lambda\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; Hello World\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e有多种方法可以调用 lambda\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"l.()\nl[]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e严格的 arguments\u003c/h3\u003e\u003ca id=\"user-content-严格的-arguments\" class=\"anchor\" aria-label=\"Permalink: 严格的 arguments\" href=\"#严格的-arguments\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"l = -\u0026gt; (count) { \u0026quot;Hello World \u0026quot; * count }\nl.call 5\n# 输出\n# \u0026quot;Hello World Hello World Hello World Hello World Hello World \u0026quot;\nl.call 5, 2\n# 输出\nwrong number of arguments (given 2, expected 1)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Hello World \"\u003c/span\u003e * \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# \"Hello World Hello World Hello World Hello World Hello World \"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003ewrong\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eof\u003c/span\u003e \u003cspan class=\"pl-en\"\u003earguments\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-en\"\u003egiven\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eexpected\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e块中声明一个 lambda\u003c/h3\u003e\u003ca id=\"user-content-块中声明一个-lambda\" class=\"anchor\" aria-label=\"Permalink: 块中声明一个 lambda\" href=\"#块中声明一个-lambda\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def give_me_data\n puts \u0026quot;I am inside give_me_data method\u0026quot;\n l = -\u0026gt; { return 10 }\n l.call\n puts \u0026quot;I am back in give_me_data method\u0026quot;\nend\n\nreturn_value = give_me_data\nputs return_value\n\n# 输出\n# I am inside give_me_data method\n# I am back in give_me_data method\n# nil # because puts return nil\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am inside give_me_data method\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"I am back in give_me_data method\"\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003ereturn_value\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egive_me_data\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereturn_value\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# I am inside give_me_data method\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# I am back in give_me_data method\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# nil # because puts return nil\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003elambdas 从 lambda 本身返回,就像常规方法一样\u003c/h3\u003e\u003ca id=\"user-content-lambdas-从-lambda-本身返回就像常规方法一样\" class=\"anchor\" aria-label=\"Permalink: lambdas 从 lambda 本身返回,就像常规方法一样\" href=\"#lambdas-从-lambda-本身返回就像常规方法一样\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"l = -\u0026gt; { return 10 }\nl.call\n\n# 输出 =\u0026gt; 10\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003el\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecall\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 10\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数组\u003c/h2\u003e\u003ca id=\"user-content-数组\" class=\"anchor\" aria-label=\"Permalink: 数组\" href=\"#数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e初始化一个空数组\u003c/h3\u003e\u003ca id=\"user-content-初始化一个空数组\" class=\"anchor\" aria-label=\"Permalink: 初始化一个空数组\" href=\"#初始化一个空数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"array = Array.new #=\u0026gt; []\n# or\narray = []\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earray\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; []\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# or\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earray\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e包含不同类型的对象的数组\u003c/h3\u003e\u003ca id=\"user-content-包含不同类型的对象的数组\" class=\"anchor\" aria-label=\"Permalink: 包含不同类型的对象的数组\" href=\"#包含不同类型的对象的数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"array = [1, \u0026quot;two\u0026quot;, 3.0] \n#=\u0026gt; [1, \u0026quot;two\u0026quot;, 3.0]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earray\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"two\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3.0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [1, \"two\", 3.0]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e用初始大小和默认对象填充数组\u003c/h3\u003e\u003ca id=\"user-content-用初始大小和默认对象填充数组\" class=\"anchor\" aria-label=\"Permalink: 用初始大小和默认对象填充数组\" href=\"#用初始大小和默认对象填充数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = Array.new(3) \n#=\u0026gt; [nil, nil, nil]\nnumbers = Array.new(3, 7) \n#=\u0026gt; [7, 7, 7]\nnumbers = Array.new(3, true) \n#=\u0026gt; [true, true, true]\nnumbers = []\nnumbers.fill(7, 0..2) #=\u0026gt; [7, 7, 7]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [nil, nil, nil]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [7, 7, 7]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [true, true, true]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efill\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [7, 7, 7]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e不同哈希值的数组\u003c/h3\u003e\u003ca id=\"user-content-不同哈希值的数组\" class=\"anchor\" aria-label=\"Permalink: 不同哈希值的数组\" href=\"#不同哈希值的数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"array_with_hashes = Array.new(2) { {} } #=\u0026gt; [{}, {}]\narray_with_hashes[0][:name] = \u0026quot;Bob\u0026quot;\narray_with_hashes[0][:id] = 10 #=\u0026gt; [{:name=\u0026gt;\u0026quot;Bob\u0026quot;, :id=\u0026gt;10}, {}]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earray_with_hashes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [{}, {}]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earray_with_hashes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Bob\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earray_with_hashes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:id\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [{:name=\u0026gt;\"Bob\", :id=\u0026gt;10}, {}]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e二维数组\u003c/h3\u003e\u003ca id=\"user-content-二维数组\" class=\"anchor\" aria-label=\"Permalink: 二维数组\" href=\"#二维数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"temperature_data = [\n [\u0026quot;A908\u0026quot;, 38],\n [\u0026quot;A909\u0026quot;, 37],\n [\u0026quot;A910\u0026quot;, 38],\n ]\ntemperature_data[0] #=\u0026gt; [\u0026quot;A908\u0026quot;, 38]\ntemperature_data[0][0] #=\u0026gt; \u0026quot;A908\u0026quot;\ntemperature_data[0][1] #=\u0026gt; 38\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003etemperature_data\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A908\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e38\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A909\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e37\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"A910\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e38\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etemperature_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [\"A908\", 38]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etemperature_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"A908\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etemperature_data\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 38\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数组索引\u003c/h3\u003e\u003ca id=\"user-content-数组索引\" class=\"anchor\" aria-label=\"Permalink: 数组索引\" href=\"#数组索引\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"str_array = [\n \u0026quot;This\u0026quot;, \u0026quot;is\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;small\u0026quot;, \u0026quot;array\u0026quot;\n]\nstr_array[0] #=\u0026gt; \u0026quot;This\u0026quot;\nstr_array[1] #=\u0026gt; \u0026quot;is\u0026quot;\nstr_array[4] #=\u0026gt; \u0026quot;array\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"This\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"is\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"a\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"small\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"array\"\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"This\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"is\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"array\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e负索引\u003c/h3\u003e\u003ca id=\"user-content-负索引\" class=\"anchor\" aria-label=\"Permalink: 负索引\" href=\"#负索引\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"str_array = [\n \u0026quot;This\u0026quot;, \u0026quot;is\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;small\u0026quot;, \u0026quot;array\u0026quot;\n]\n# 索引 -1 表示最后一个元素\nstr_array[-1] #=\u0026gt; \u0026quot;array\u0026quot;\n# 索引 -2 表示倒数第二个元素\nstr_array[-2] #=\u0026gt; \u0026quot;small\u0026quot;\nstr_array[-6] #=\u0026gt; nil\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"This\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"is\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"a\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"small\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"array\"\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 索引 -1 表示最后一个元素\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"array\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 索引 -2 表示倒数第二个元素\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"small\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; nil\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数组方法 at\u003c/h3\u003e\u003ca id=\"user-content-数组方法-at\" class=\"anchor\" aria-label=\"Permalink: 数组方法 at\" href=\"#数组方法-at\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"str_array = [\n \u0026quot;This\u0026quot;, \u0026quot;is\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;small\u0026quot;, \u0026quot;array\u0026quot;\n]\n\nputs str_array.at(0) #=\u0026gt; \u0026quot;This\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"This\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"is\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"a\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"small\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"array\"\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estr_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eat\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"This\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e范围获取\u003c/h3\u003e\u003ca id=\"user-content-范围获取\" class=\"anchor\" aria-label=\"Permalink: 范围获取\" href=\"#范围获取\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"arr = [1, 2, 3, 4, 5, 6]\narr[100] #=\u0026gt; nil\narr[-3] #=\u0026gt; 4\narr[2, 3] #=\u0026gt; [3, 4, 5]\narr[1..4] #=\u0026gt; [2, 3, 4, 5]\narr[1..-3] #=\u0026gt; [2, 3, 4]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; nil\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 4\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [3, 4, 5]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [2, 3, 4, 5]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..-\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [2, 3, 4]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数组方法 fetch\u003c/h3\u003e\u003ca id=\"user-content-数组方法-fetch\" class=\"anchor\" aria-label=\"Permalink: 数组方法 fetch\" href=\"#数组方法-fetch\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"arr = ['a', 'b', 'c', 'd', 'e', 'f']\narr.fetch(100)\n#=\u0026gt; IndexError: 数组边界外的索引 100:-6...6\narr.fetch(100, \u0026quot;oops\u0026quot;) #=\u0026gt; \u0026quot;oops\u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'a'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'b'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'c'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'd'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'e'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'f'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efetch\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; IndexError: 数组边界外的索引 100:-6...6\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efetch\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"oops\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"oops\"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e超出边界,给默认值\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e获取数组元素\u003c/h3\u003e\u003ca id=\"user-content-获取数组元素\" class=\"anchor\" aria-label=\"Permalink: 获取数组元素\" href=\"#获取数组元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"arr = [1, 2, 3, 4, 5, 6]\n\narr.first # 第一个值 =\u0026gt; 1\narr.last # 最后一个值 =\u0026gt; 6\n# take 返回前 n 个元素\narr.take(3) #=\u0026gt; [1, 2, 3]\n# drop 在 n 个元素被删除之后\narr.drop(3) #=\u0026gt; [4, 5, 6]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efirst\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# 第一个值 =\u0026gt; 1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elast\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# 最后一个值 =\u0026gt; 6\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# take 返回前 n 个元素\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etake\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [1, 2, 3]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# drop 在 n 个元素被删除之后\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edrop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [4, 5, 6]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e在数组末尾添加值 push\u003c/h3\u003e\u003ca id=\"user-content-在数组末尾添加值-push\" class=\"anchor\" aria-label=\"Permalink: 在数组末尾添加值 push\" href=\"#在数组末尾添加值-push\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.push(11) \n#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\nnumbers.push(12, 13, 14) \n#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e13\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e14\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e数组末尾删除值 pop\u003c/h3\u003e\u003ca id=\"user-content-数组末尾删除值-pop\" class=\"anchor\" aria-label=\"Permalink: 数组末尾删除值 pop\" href=\"#数组末尾删除值-pop\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnum_array.pop #=\u0026gt; 10\nnum_array\n#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enum_array\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enum_array\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 10\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enum_array\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e在数组的开头添加值 unshift\u003c/h3\u003e\u003ca id=\"user-content-在数组的开头添加值-unshift\" class=\"anchor\" aria-label=\"Permalink: 在数组的开头添加值 unshift\" href=\"#在数组的开头添加值-unshift\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.unshift(0) \n#=\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.unshift(-3, -2, -1) \n#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检索并同时删除第一个元素 shift\u003c/h3\u003e\u003ca id=\"user-content-检索并同时删除第一个元素-shift\" class=\"anchor\" aria-label=\"Permalink: 检索并同时删除第一个元素 shift\" href=\"#检索并同时删除第一个元素-shift\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.shift #=\u0026gt; 1\nnumbers\n#=\u0026gt; [2, 3, 4, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除特定索引处的元素 delete_at\u003c/h3\u003e\u003ca id=\"user-content-删除特定索引处的元素-delete_at\" class=\"anchor\" aria-label=\"Permalink: 删除特定索引处的元素 delete_at\" href=\"#删除特定索引处的元素-delete_at\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.delete_at(2) #=\u0026gt; 4\nnumbers \n#=\u0026gt; [2, 3, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edelete_at\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 4\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [2, 3, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除数组中任意位置的特定元素\u003c/h3\u003e\u003ca id=\"user-content-删除数组中任意位置的特定元素\" class=\"anchor\" aria-label=\"Permalink: 删除数组中任意位置的特定元素\" href=\"#删除数组中任意位置的特定元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.delete(2) #=\u0026gt; 2\nnumbers #=\u0026gt; [3, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edelete\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; 2\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [3, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e在给定索引处插入值 insert\u003c/h3\u003e\u003ca id=\"user-content-在给定索引处插入值-insert\" class=\"anchor\" aria-label=\"Permalink: 在给定索引处插入值 insert\" href=\"#在给定索引处插入值-insert\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.insert(0, 0) \n#=\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.insert(0, -3, -2, -1) \n#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n\nnumbers.insert(-1, 12, 13, 14) \n#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]\nnumbers.insert(-4, 11) \n#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einsert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einsert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einsert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e13\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e14\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einsert\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e一个块来填充数组的值\u003c/h3\u003e\u003ca id=\"user-content-一个块来填充数组的值\" class=\"anchor\" aria-label=\"Permalink: 一个块来填充数组的值\" href=\"#一个块来填充数组的值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = Array.new(10) { |n| n = n * 2 } \n#=\u0026gt; [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e * \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e填充数组变得更容易\u003c/h3\u003e\u003ca id=\"user-content-填充数组变得更容易\" class=\"anchor\" aria-label=\"Permalink: 填充数组变得更容易\" href=\"#填充数组变得更容易\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = Array(100..110)\n#=\u0026gt; [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]\n\n# 或者我们可以将范围转换为数组\n(100..110).to_a \n#=\u0026gt; [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eArray\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e110\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# 或者我们可以将范围转换为数组\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e110\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eto_a\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e#=\u0026gt; [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e从数组中删除 nil 值\u003c/h3\u003e\u003ca id=\"user-content-从数组中删除-nil-值\" class=\"anchor\" aria-label=\"Permalink: 从数组中删除 nil 值\" href=\"#从数组中删除-nil-值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"arr = ['foo', 0, nil, 'bar', 7, nil]\narr.compact #=\u0026gt; ['foo', 0, 'bar', 7]\narr #=\u0026gt; ['foo', 0, nil, 'bar', 7, nil]\narr.compact! #=\u0026gt; ['foo', 0, 'bar', 7]\narr #=\u0026gt; ['foo', 0, 'bar', 7]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'foo'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'bar'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecompact\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; ['foo', 0, 'bar', 7]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; ['foo', 0, nil, 'bar', 7, nil]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecompact!\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; ['foo', 0, 'bar', 7]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; ['foo', 0, 'bar', 7]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e去重 uniq\u003c/h3\u003e\u003ca id=\"user-content-去重-uniq\" class=\"anchor\" aria-label=\"Permalink: 去重 uniq\" href=\"#去重-uniq\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]\narr.uniq #=\u0026gt; [2, 5, 6, 556, 8, 9, 0, 123]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e556\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e123\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e556\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003earr\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003euniq\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; [2, 5, 6, 556, 8, 9, 0, 123]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查数组中是否存在值(\u003ccode\u003einclude?\u003c/code\u003e)\u003c/h3\u003e\u003ca id=\"user-content-检查数组中是否存在值include\" class=\"anchor\" aria-label=\"Permalink: 检查数组中是否存在值(include?)\" href=\"#检查数组中是否存在值include\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nplanets.include? \u0026quot;Mars\u0026quot;\n# 输出 =\u0026gt; true\nplanets.include? \u0026quot;Pluto\u0026quot;\n# 输出 =\u0026gt; false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einclude?\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; true\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einclude?\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Pluto\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e获取数组大小\u003c/h3\u003e\u003ca id=\"user-content-获取数组大小\" class=\"anchor\" aria-label=\"Permalink: 获取数组大小\" href=\"#获取数组大小\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nplanets.size\n# 输出 =\u0026gt; 8\nplanets.length\n# 输出 =\u0026gt; 8\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 8\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elength\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 8\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e您可以使用大小或长度,两者都是同义词\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e清除数组\u003c/h3\u003e\u003ca id=\"user-content-清除数组\" class=\"anchor\" aria-label=\"Permalink: 清除数组\" href=\"#清除数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.clear\n# 输出 =\u0026gt; []\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclear\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; []\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e获取数组的第一个元素\u003c/h3\u003e\u003ca id=\"user-content-获取数组的第一个元素\" class=\"anchor\" aria-label=\"Permalink: 获取数组的第一个元素\" href=\"#获取数组的第一个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers[0]\n# or\nnumbers.first\n# 输出 =\u0026gt; 1\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# or\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efirst\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 1\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e获取数组的最后一个元素\u003c/h3\u003e\u003ca id=\"user-content-获取数组的最后一个元素\" class=\"anchor\" aria-label=\"Permalink: 获取数组的最后一个元素\" href=\"#获取数组的最后一个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers[-1]\n# or\nnumbers.last\n# 输出 =\u0026gt; 10\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# or\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elast\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 10\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e合并两个数组\u003c/h3\u003e\u003ca id=\"user-content-合并两个数组\" class=\"anchor\" aria-label=\"Permalink: 合并两个数组\" href=\"#合并两个数组\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = [\u0026quot;tom\u0026quot;, \u0026quot;mot\u0026quot;, \u0026quot;otm\u0026quot;]\nb = [2, 3, 5]\na.zip(b)\n# 输出\n# [[\u0026quot;tom\u0026quot;, 2], [\u0026quot;mot\u0026quot;, 3], [\u0026quot;otm\u0026quot;, 5]]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"tom\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"mot\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"otm\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ezip\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eb\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [[\"tom\", 2], [\"mot\", 3], [\"otm\", 5]]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e对数组进行排序\u003c/h3\u003e\u003ca id=\"user-content-对数组进行排序\" class=\"anchor\" aria-label=\"Permalink: 对数组进行排序\" href=\"#对数组进行排序\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nsorted_primes = primes.sort\nputs \u0026quot;#{sorted_primes}\u0026quot;\n# 输出 =\u0026gt; [2, 3, 5, 7]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esorted_primes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esorted_primes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; [2, 3, 5, 7]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eor in-place sort\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.sort!\nputs \u0026quot;#{primes}\u0026quot;\n# 输出 =\u0026gt; [2, 3, 5, 7]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort!\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; [2, 3, 5, 7]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nplanets.sort\n# 输出\n# [\u0026quot;Earth\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Mercury\u0026quot;, \u0026quot;Neptune\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Venus\u0026quot;]\nplanets.sort_by { |p| p }\n# 输出\n# [\u0026quot;Earth\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Mercury\u0026quot;, \u0026quot;Neptune\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Venus\u0026quot;]\nplanets.sort_by { |p| p.length }\n# 输出\n# [\u0026quot;Mars\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Mercury\u0026quot;]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [\"Earth\", \"Jupiter\", \"Mars\", \"Mercury\", \"Neptune\", \"Saturn\", \"Uranus\", \"Venus\"]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort_by\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [\"Earth\", \"Jupiter\", \"Mars\", \"Mercury\", \"Neptune\", \"Saturn\", \"Uranus\", \"Venus\"]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort_by\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [\"Mars\", \"Earth\", \"Venus\", \"Saturn\", \"Uranus\", \"Neptune\", \"Jupiter\", \"Mercury\"]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e从数组中获取最大值\u003c/h3\u003e\u003ca id=\"user-content-从数组中获取最大值\" class=\"anchor\" aria-label=\"Permalink: 从数组中获取最大值\" href=\"#从数组中获取最大值\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.max_by { |p| p }\n# 输出 =\u0026gt; 7\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emax_by\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出 =\u0026gt; 7\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用范围获取数组元素\u003c/h3\u003e\u003ca id=\"user-content-使用范围获取数组元素\" class=\"anchor\" aria-label=\"Permalink: 使用范围获取数组元素\" href=\"#使用范围获取数组元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# numbers[start..end], both index are inclusive\nputs numbers[0..3]\n# 1\n# 2\n# 3\n# 4\n# numbers[start..end], end index is exclusive\nputs numbers[0...3]\n# 1\n# 2\n# 3\n# or numbers[start..length]\nputs numbers[0, 1]\n# 1\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# numbers[start..end], both index are inclusive\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 4\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# numbers[start..end], end index is exclusive\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e...\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# or numbers[start..length]\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-en\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e获取数组的前n个元素\u003c/h3\u003e\u003ca id=\"user-content-获取数组的前n个元素\" class=\"anchor\" aria-label=\"Permalink: 获取数组的前n个元素\" href=\"#获取数组的前n个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.take(3)\n# [7, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etake\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [7, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e访问元素\u003c/h3\u003e\u003ca id=\"user-content-访问元素\" class=\"anchor\" aria-label=\"Permalink: 访问元素\" href=\"#访问元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.fetch(3)\n# 5\n# Fetch will throw an error if the element does not exist\nprimes.fetch(10)\n# (index 10 outside of array bounds: -4...4)\n# or get an default value\nprimes.fetch(10, -1)\n# -1\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efetch\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Fetch will throw an error if the element does not exist\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efetch\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# (index 10 outside of array bounds: -4...4)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# or get an default value\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efetch\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# -1\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e从数组中删除重复元素\u003c/h3\u003e\u003ca id=\"user-content-从数组中删除重复元素\" class=\"anchor\" aria-label=\"Permalink: 从数组中删除重复元素\" href=\"#从数组中删除重复元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]\nnumbers.uniq\n# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003euniq\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除前 n 个元素\u003c/h3\u003e\u003ca id=\"user-content-删除前-n-个元素\" class=\"anchor\" aria-label=\"Permalink: 删除前 n 个元素\" href=\"#删除前-n-个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.drop(3)\n# [5]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edrop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [5]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除第一个元素\u003c/h3\u003e\u003ca id=\"user-content-删除第一个元素\" class=\"anchor\" aria-label=\"Permalink: 删除第一个元素\" href=\"#删除第一个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.shift\n# [2, 3, 5]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [2, 3, 5]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除最后一个元素\u003c/h3\u003e\u003ca id=\"user-content-删除最后一个元素\" class=\"anchor\" aria-label=\"Permalink: 删除最后一个元素\" href=\"#删除最后一个元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.pop\n# [7, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [7, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除带有索引的元素\u003c/h3\u003e\u003ca id=\"user-content-删除带有索引的元素\" class=\"anchor\" aria-label=\"Permalink: 删除带有索引的元素\" href=\"#删除带有索引的元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5]\nprimes.delete_at(-1)\n# [7, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edelete_at\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e-\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [7, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e删除所有出现的元素\u003c/h3\u003e\u003ca id=\"user-content-删除所有出现的元素\" class=\"anchor\" aria-label=\"Permalink: 删除所有出现的元素\" href=\"#删除所有出现的元素\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"primes = [7, 2, 3, 5, 5]\nprimes.delete(5)\n# [7, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eprimes\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edelete\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [7, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eeach\u003c/h3\u003e\u003ca id=\"user-content-each\" class=\"anchor\" aria-label=\"Permalink: each\" href=\"#each\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 当你有单行块时\nsalary = [399, 234, 566, 533, 233]\nsalary.each { |s| puts s }\n# 输出\n# 399\n# 234\n# 566\n# 533\n# 233\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# 当你有单行块时\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 399\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 234\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 566\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 533\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 233\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e当你有一个多行块时,你可以用 \u003ccode\u003edo\u003c/code\u003e 和 \u003ccode\u003eend\u003c/code\u003e 替换花括号 \u003ccode\u003e{}\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary.each do |s|\n a = 10\n res = a * s\n puts res\nend\n# 输出\n# 3990\n# 2340\n# 5660\n# 5330\n# 2330\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e|\n \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e * \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3990\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2340\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5660\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5330\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2330\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary.each { |s| a = 10 ; res = a * s ; puts res }\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e * \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eeach_with_index\u003c/h3\u003e\u003ca id=\"user-content-each_with_index\" class=\"anchor\" aria-label=\"Permalink: each_with_index\" href=\"#each_with_index\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.each_with_index { |value, index| puts \u0026quot;#{index} #{value}\u0026quot; }\n# 输出\n# 0 399\n# 1 234\n# 2 566\n# 3 533\n# 4 233\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach_with_index\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 0 399\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1 234\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2 566\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3 533\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 4 233\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eeach_index\u003c/h3\u003e\u003ca id=\"user-content-each_index\" class=\"anchor\" aria-label=\"Permalink: each_index\" href=\"#each_index\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.each_index { |i| puts i}\n# 输出\n# 0\n# 1\n# 2\n# 3\n# 4\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach_index\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 0\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 4\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003emap\u003c/h3\u003e\u003ca id=\"user-content-map\" class=\"anchor\" aria-label=\"Permalink: map\" href=\"#map\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.map { |s| s * 10 }\n# 返回\n# [3990, 2340, 5660, 5330, 2330]\n# 另一方面,每个都返回原始值\nsalary = [399, 234, 566, 533, 233]\nsalary.each { |s| s * 10 }\n# 返回\n# [399, 234, 566, 533, 233]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emap\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e * \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 返回\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [3990, 2340, 5660, 5330, 2330]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 另一方面,每个都返回原始值\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e * \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 返回\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [399, 234, 566, 533, 233]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ecollect\u003c/h3\u003e\u003ca id=\"user-content-collect\" class=\"anchor\" aria-label=\"Permalink: collect\" href=\"#collect\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.collect { |s| s \u0026gt; 400 }\n# 输出\n# [false, false, true, true, false]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecollect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-c1\"\u003e400\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [false, false, true, true, false]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003efor\u003c/h3\u003e\u003ca id=\"user-content-for\" class=\"anchor\" aria-label=\"Permalink: for\" href=\"#for\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"for value in [2, 3, 5, 7]\n puts value\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-en\"\u003evalue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-en\"\u003evalue\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eeach_with_object\u003c/h3\u003e\u003ca id=\"user-content-each_with_object\" class=\"anchor\" aria-label=\"Permalink: each_with_object\" href=\"#each_with_object\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"colors = [\n {color: \u0026quot;red\u0026quot;, count: 3}, {color: \u0026quot;red\u0026quot;, count: 5}, {color: \u0026quot;black\u0026quot;, count: 4}\n]\ncolors.each_with_object(Hash.new(0)) { |color, hash| hash[\u0026quot;color_\u0026quot;+color[:color]] = color[:color].upcase; hash[\u0026quot;count_\u0026quot;+color[:color]] += color[:count] }\n# 输出\n{\u0026quot;color_red\u0026quot;=\u0026gt;\u0026quot;RED\u0026quot;, \u0026quot;count_red\u0026quot;=\u0026gt;8, \u0026quot;color_black\u0026quot;=\u0026gt;\u0026quot;BLACK\u0026quot;, \u0026quot;count_black\u0026quot;=\u0026gt;4}\n\n[1, 2, 3].each_with_object(0) { |number, sum| sum += number}\n# 输出\n# 0\n# 因为0是不可变的,由于初始对象是0,所以方法返回0\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ecolors\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003ecolor\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"red\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003ecount\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003ecolor\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"red\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003ecount\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003ecolor\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"black\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003ecount\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecolors\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach_with_object\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eHash\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ecolor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehash\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ehash\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"color_\"\u003c/span\u003e+\u003cspan class=\"pl-s1\"\u003ecolor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:color\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecolor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:color\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eupcase\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehash\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"count_\"\u003c/span\u003e+\u003cspan class=\"pl-s1\"\u003ecolor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:color\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e += \u003cspan class=\"pl-s1\"\u003ecolor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:count\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"color_red\"\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"RED\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"count_red\"\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"color_black\"\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"BLACK\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"count_black\"\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach_with_object\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e += \u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 0\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 因为0是不可变的,由于初始对象是0,所以方法返回0\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ewhile\u003c/h3\u003e\u003ca id=\"user-content-while\" class=\"anchor\" aria-label=\"Permalink: while\" href=\"#while\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nindex = 0\nwhile index \u0026lt; planets.size\n puts \u0026quot;#{planets[index]}\u0026quot;\n index += 1\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003chr\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = 1\nstar = '*'\nwhile a \u0026lt;= 10\n puts star\n star += '*'\n a += 1\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'*'\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u0026lt;= \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e += \u003cspan class=\"pl-s\"\u003e'*'\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edo while\u003c/h3\u003e\u003ca id=\"user-content-do-while\" class=\"anchor\" aria-label=\"Permalink: do while\" href=\"#do-while\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nindex = 0\nloop do\n puts \u0026quot;#{planets[index]}\u0026quot;\n index += 1\n break if planets[index] == \u0026quot;Mars\u0026quot; or index \u0026gt; planets.size\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eloop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003euntil\u003c/h3\u003e\u003ca id=\"user-content-until\" class=\"anchor\" aria-label=\"Permalink: until\" href=\"#until\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nindex = planets.size - 1\nuntil index \u0026lt; 0\n puts \u0026quot;#{planets[index]}\u0026quot;\n index -= 1\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003euntil\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e -= \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = 1\nstar = '*'\nuntil star.length \u0026gt; 10\n puts star\n star += '*'\n a += 1\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'*'\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003euntil\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elength\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003estar\u003c/span\u003e += \u003cspan class=\"pl-s\"\u003e'*'\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003etimes\u003c/h3\u003e\u003ca id=\"user-content-times\" class=\"anchor\" aria-label=\"Permalink: times\" href=\"#times\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"10.times { puts \u0026quot;#{rand(1..100)}\u0026quot;}\n# 输出\n# 将打印 10 个随机数\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etimes\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003erand\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 将打印 10 个随机数\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e仅仅因为你可以并不意味着你应该像这样迭代一个数组\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"data_sample = [2, 3, 5, 7]\ndata_sample.size.times { |index| puts \u0026quot;#{data_sample[index]}\u0026quot; }\n# 输出\n# 2\n# 3\n# 5\n# 7\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003etimes\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 7\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eupto\u003c/h3\u003e\u003ca id=\"user-content-upto\" class=\"anchor\" aria-label=\"Permalink: upto\" href=\"#upto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"data_sample = [2, 3, 5, 7]\n0.upto((data_sample.size - 1) / 2) { |index| puts \u0026quot;#{data_sample[index]}\u0026quot; }\n# 输出\n# 2\n# 3\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eupto\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e / \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edownto\u003c/h3\u003e\u003ca id=\"user-content-downto\" class=\"anchor\" aria-label=\"Permalink: downto\" href=\"#downto\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"data_sample = [2, 3, 5, 7]\n(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts \u0026quot;#{data_sample[index]}\u0026quot; }\n# 输出\n# 7\n# 5\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edownto\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e / \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003edata_sample\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eindex\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 7\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003estep\u003c/h3\u003e\u003ca id=\"user-content-step\" class=\"anchor\" aria-label=\"Permalink: step\" href=\"#step\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"1.step(20, 2) { |number| puts \u0026quot;#{number}\u0026quot;}\n# 输出\n# 1\n# 3\n# 5\n# 7\n# 9\n# 11\n# 13\n# 15\n# 17\n# 19\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003estep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 7\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 9\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 11\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 13\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 15\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 17\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 19\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"19.step(1, -2) { |number| puts \u0026quot;#{number}\u0026quot;}\n# 输出\n# 19\n# 17\n# 15\n# 13\n# 11\n# 9\n# 7\n# 5\n# 3\n# 1\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003estep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e -\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e| \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 19\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 17\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 15\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 13\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 11\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 9\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 7\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 5\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003einject\u003c/h3\u003e\u003ca id=\"user-content-inject\" class=\"anchor\" aria-label=\"Permalink: inject\" href=\"#inject\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [2, 2, 2, 2, 2]\nnumbers.inject{ |res, n| res + n }\n# 输出是所有数字之和的结果\n# 如果不给res设置初始值,则数组的第一个元素作为res的初始值\n# 10\n# 现在将 res 的值设置为 11\nnumbers = [2, 2, 2, 2, 2]\nnumbers.inject(11) { |res, n| res + n }\n# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2\n# 21\n# using symbol\nnumbers = [2, 2, 2, 2, 2]\nnumbers.inject(:+)\n# 输出\n# 10\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出是所有数字之和的结果\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 如果不给res设置初始值,则数组的第一个元素作为res的初始值\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 10\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 现在将 res 的值设置为 11\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003eres\u003c/span\u003e + \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 21\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# using symbol\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:+\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 10\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用初始值和符号\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [2, 2, 2, 2, 2]\nnumbers.inject(11, :+)\n# 输出\n# 21\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:+\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 21\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ereduce\u003c/h3\u003e\u003ca id=\"user-content-reduce\" class=\"anchor\" aria-label=\"Permalink: reduce\" href=\"#reduce\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [2, 2, 2, 2, 2]\nnumbers.reduce(11, :+)\n# 输出\n# 21\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ereduce\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:+\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 21\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edetect\u003c/h3\u003e\u003ca id=\"user-content-detect\" class=\"anchor\" aria-label=\"Permalink: detect\" href=\"#detect\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nplanets.detect { |name| name.start_with?(\u0026quot;E\u0026quot;) and name.end_with?(\u0026quot;h\u0026quot;) }\n# output\n# Earth\nsalary = [399, 234, 566, 533, 233]\nsalary.detect { |s| s \u0026gt; 1000 }\n# output\n# nil\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edetect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003estart_with?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"E\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eend_with?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"h\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# output\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Earth\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edetect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u0026gt; \u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# output\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# nil\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003efind\u003c/h3\u003e\u003ca id=\"user-content-find\" class=\"anchor\" aria-label=\"Permalink: find\" href=\"#find\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"planets = [\u0026quot;Mercury\u0026quot;, \u0026quot;Venus\u0026quot;, \u0026quot;Earth\u0026quot;, \u0026quot;Mars\u0026quot;, \u0026quot;Jupiter\u0026quot;, \u0026quot;Saturn\u0026quot;, \u0026quot;Uranus\u0026quot;, \u0026quot;Neptune\u0026quot;]\nplanets.find { |name| name.start_with?(\u0026quot;E\u0026quot;) and name.end_with?(\u0026quot;h\u0026quot;) }\n# output\n# Earth\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Mercury\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Venus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Earth\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Mars\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Jupiter\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Saturn\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Uranus\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Neptune\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eplanets\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003efind\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003estart_with?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"E\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eend_with?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"h\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# output\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Earth\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eselect\u003c/h3\u003e\u003ca id=\"user-content-select\" class=\"anchor\" aria-label=\"Permalink: select\" href=\"#select\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.select { |n| n % 2 == 0 }\n# 现在你有一个偶数数组\n# [2, 4, 6, 8, 10]\n# 如果没有满足您的逻辑的值,则返回一个空数组\n[1, 1, 1].select { |n| n % 2 == 0 }\n# no even numbers\n# []\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eselect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 现在你有一个偶数数组\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [2, 4, 6, 8, 10]\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 如果没有满足您的逻辑的值,则返回一个空数组\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eselect\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# no even numbers\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# []\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ereject\u003c/h3\u003e\u003ca id=\"user-content-reject\" class=\"anchor\" aria-label=\"Permalink: reject\" href=\"#reject\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.reject { |n| n % 2 == 0 }\n# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组\n# [1, 3, 5, 7, 9]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ereject\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [1, 3, 5, 7, 9]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ekeep_if\u003c/h3\u003e\u003ca id=\"user-content-keep_if\" class=\"anchor\" aria-label=\"Permalink: keep_if\" href=\"#keep_if\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.keep_if { |n| n % 2 == 0 }\n# numbers 数组仅包含偶数\n# [2, 4, 6, 8, 10]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ekeep_if\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# numbers 数组仅包含偶数\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [2, 4, 6, 8, 10]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edelete_if\u003c/h3\u003e\u003ca id=\"user-content-delete_if\" class=\"anchor\" aria-label=\"Permalink: delete_if\" href=\"#delete_if\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nnumbers.delete_if { |n| n % 2 == 0 }\n# numbers 数组仅包含奇数\n# [1, 3, 5, 7, 9]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edelete_if\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# numbers 数组仅包含奇数\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [1, 3, 5, 7, 9]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edrop_while\u003c/h3\u003e\u003ca id=\"user-content-drop_while\" class=\"anchor\" aria-label=\"Permalink: drop_while\" href=\"#drop_while\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [1, 2, 3, 1, 2, 3, 0]\nnumbers.drop_while { |n| n \u0026lt; 3 }\n# 是 3 小于 3,返回 false,所以删除 1, 2\n# [3, 1, 2, 3, 0]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edrop_while\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003en\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 是 3 小于 3,返回 false,所以删除 1, 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# [3, 1, 2, 3, 0]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ereverse_each\u003c/h3\u003e\u003ca id=\"user-content-reverse_each\" class=\"anchor\" aria-label=\"Permalink: reverse_each\" href=\"#reverse_each\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"words = %w[first second third fourth fifth sixth]\nstr = \u0026quot;\u0026quot;\nwords.reverse_each {|word| str += \u0026quot;#{word} \u0026quot;}\np str #=\u0026gt; \u0026quot;sixth fifth fourth third second first \u0026quot;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ewords\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e%w[\u003c/span\u003e\u003cspan class=\"pl-s\"\u003efirst\u003c/span\u003e \u003cspan class=\"pl-s\"\u003esecond\u003c/span\u003e \u003cspan class=\"pl-s\"\u003ethird\u003c/span\u003e \u003cspan class=\"pl-s\"\u003efourth\u003c/span\u003e \u003cspan class=\"pl-s\"\u003efifth\u003c/span\u003e \u003cspan class=\"pl-s\"\u003esixth\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ewords\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ereverse_each\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e|\u003cspan class=\"pl-s1\"\u003eword\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003estr\u003c/span\u003e += \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eword\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e \"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estr\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e#=\u0026gt; \"sixth fifth fourth third second first \"\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e布尔可枚举方法\u003c/h2\u003e\u003ca id=\"user-content-布尔可枚举方法\" class=\"anchor\" aria-label=\"Permalink: 布尔可枚举方法\" href=\"#布尔可枚举方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e布尔可枚举方法\u003c/h3\u003e\u003ca id=\"user-content-布尔可枚举方法-1\" class=\"anchor\" aria-label=\"Permalink: 布尔可枚举方法\" href=\"#布尔可枚举方法-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth align=\"left\"\u003eName\u003c/th\u003e\n\u003cth\u003eWhen to use\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eall?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当您想检查所有元素是否满足您的条件时\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eany?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当您想检查至少一项是否满足您的条件时\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eone?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当您想检查一个元素是否满足您的要求时\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003enone?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当您想检查是否没有任何项目满足您的条件时,相反?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003eempty?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当你想检查对象是否为空时\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"left\"\u003e\u003ccode\u003einclude?\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e当你想检查元素是否存在于对象中时\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eall?\u003c/h3\u003e\u003ca id=\"user-content-all\" class=\"anchor\" aria-label=\"Permalink: all?\" href=\"#all\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }\n# true\n[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eall?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eall?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eany?\u003c/h3\u003e\u003ca id=\"user-content-any\" class=\"anchor\" aria-label=\"Permalink: any?\" href=\"#any\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }\n# true\n[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eany?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e19\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eany?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eone?\u003c/h3\u003e\u003ca id=\"user-content-one\" class=\"anchor\" aria-label=\"Permalink: one?\" href=\"#one\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }\n# true\n[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eone?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eone?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003enone?\u003c/h3\u003e\u003ca id=\"user-content-none\" class=\"anchor\" aria-label=\"Permalink: none?\" href=\"#none\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }\n# true\n[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enone?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enone?\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e| \u003cspan class=\"pl-s1\"\u003enum\u003c/span\u003e % \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eempty?\u003c/h3\u003e\u003ca id=\"user-content-empty\" class=\"anchor\" aria-label=\"Permalink: empty?\" href=\"#empty\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[].empty?\n# true\n[1, 3, 5, 7, 9].empty?\n# false\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eempty?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# true\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eempty?\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# false\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e组合方法\u003c/h2\u003e\u003ca id=\"user-content-组合方法\" class=\"anchor\" aria-label=\"Permalink: 组合方法\" href=\"#组合方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e组合方法\u003c/h3\u003e\u003ca id=\"user-content-组合方法-1\" class=\"anchor\" aria-label=\"Permalink: 组合方法\" href=\"#组合方法-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e\u0026amp;\u003c/code\u003e 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eintersection\u003c/code\u003e 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e+\u003c/code\u003e 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-\u003c/code\u003e 返回一个数组,其中包含在给定数组中找不到的所有 self 元素\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunion\u003c/code\u003e 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edifference\u003c/code\u003e 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eproduct\u003c/code\u003e 返回或产生来自 self 和给定数组的所有元素组合\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u0026amp;\u003c/h3\u003e\u003ca id=\"\" class=\"anchor\" aria-label=\"Permalink: \u0026amp;\" href=\"#\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[0, 1, 2, 3] \u0026amp; [1, 2] # =\u0026gt; [1, 2]\n[0, 1, 0, 1] \u0026amp; [0, 1] # =\u0026gt; [0, 1]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u0026amp; \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# =\u0026gt; [1, 2]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u0026amp; \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eintersection\u003c/h3\u003e\u003ca id=\"user-content-intersection\" class=\"anchor\" aria-label=\"Permalink: intersection\" href=\"#intersection\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])\n# =\u0026gt; [0, 1]\n[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])\n# =\u0026gt; [0, 1]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eintersection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eintersection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e+\u003c/h3\u003e\u003ca id=\"user-content--1\" class=\"anchor\" aria-label=\"Permalink: +\" href=\"#-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = [0, 1] + [2, 3]\na # =\u0026gt; [0, 1, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e + \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e-\u003c/h3\u003e\u003ca id=\"user-content--\" class=\"anchor\" aria-label=\"Permalink: -\" href=\"#-\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] \n# =\u0026gt; [0, 2, 3]\n[0, 1, 2, 3] - [3, 0] \n# =\u0026gt; [1, 2]\n[0, 1, 2] - [4] \n# =\u0026gt; [0, 1, 2]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e - \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 2, 3]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e - \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [1, 2]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e - \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eunion\u003c/h3\u003e\u003ca id=\"user-content-union\" class=\"anchor\" aria-label=\"Permalink: union\" href=\"#union\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[0, 1, 2, 3].union([4, 5], [6, 7]) \n# =\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7]\n[0, 1, 1].union([2, 1], [3, 1]) \n# =\u0026gt; [0, 1, 2, 3]\n[0, 1, 2, 3].union([3, 2], [1, 0]) \n# =\u0026gt; [0, 1, 2, 3]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunion\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e6\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2, 3, 4, 5, 6, 7]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunion\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2, 3]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunion\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2, 3]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edifference\u003c/h3\u003e\u003ca id=\"user-content-difference\" class=\"anchor\" aria-label=\"Permalink: difference\" href=\"#difference\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])\n# =\u0026gt; [0, 2, 3]\n[0, 1, 2, 3].difference([3, 0], [1, 3])\n# =\u0026gt; [2]\n[0, 1, 2].difference([4])\n# =\u0026gt; [0, 1, 2]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edifference\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 2, 3]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edifference\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [2]\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003edifference\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# =\u0026gt; [0, 1, 2]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eproduct\u003c/h3\u003e\u003ca id=\"user-content-product\" class=\"anchor\" aria-label=\"Permalink: product\" href=\"#product\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a = [0, 1, 2]\na1 = [3, 4]\np = a.product(a1)\np.size # =\u0026gt; 6 # a.size * a1.size\np # =\u0026gt; [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eproduct\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ea1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# =\u0026gt; 6 # a.size * a1.size\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# =\u0026gt; [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e循环\u003c/h2\u003e\u003ca id=\"user-content-循环\" class=\"anchor\" aria-label=\"Permalink: 循环\" href=\"#循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ewhile 循环\u003c/h3\u003e\u003ca id=\"user-content-while-循环\" class=\"anchor\" aria-label=\"Permalink: while 循环\" href=\"#while-循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# variable count\ncount = 4\n# using while loop\n# here conditional is count i.e. 4\nwhile count \u0026gt;= 1\n # statements to be executed\n puts \u0026quot;Ruby Cheatsheet\u0026quot;\n count = count - 1\n # while loop ends here\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# variable count\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# using while loop\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# here conditional is count i.e. 4\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u0026gt;= \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# statements to be executed\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Ruby Cheatsheet\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e - \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# while loop ends here\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e输出\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"Ruby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003efor 循环\u003c/h3\u003e\u003ca id=\"user-content-for-循环\" class=\"anchor\" aria-label=\"Permalink: for 循环\" href=\"#for-循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# loop using range as expression\ntext = \u0026quot;Ruby Cheatsheet\u0026quot;\n# using for loop with the range\nfor count in 1..5 do\n puts text\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# loop using range as expression\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Ruby Cheatsheet\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# using for loop with the range\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etext\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e输出\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"Ruby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\nRuby Cheatsheet\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003edo..while 循环\u003c/h3\u003e\u003ca id=\"user-content-dowhile-循环\" class=\"anchor\" aria-label=\"Permalink: do..while 循环\" href=\"#dowhile-循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# starting of do..while loop\nloop do\n puts \u0026quot;Ruby Cheatsheet\u0026quot;\n val = '7'\n # using boolean expressions\n if val == '7'\n break\n end\n # ending of ruby do..while loop\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# starting of do..while loop\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eloop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Ruby Cheatsheet\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'7'\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# using boolean expressions\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eval\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e'7'\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# ending of ruby do..while loop\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e输出\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"Ruby Cheatsheet\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eRuby Cheatsheet\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003euntil 循环\u003c/h3\u003e\u003ca id=\"user-content-until-循环\" class=\"anchor\" aria-label=\"Permalink: until 循环\" href=\"#until-循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var = 7\n# here do is optional\nuntil var == 11 do\n # code to be executed\n puts var * 10\n var = var + 1\n # here loop ends\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# here do is optional\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003euntil\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evar\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e11\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# code to be executed\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evar\u003c/span\u003e * \u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evar\u003c/span\u003e + \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# here loop ends\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e输出\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"70\n80\n90\n100\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e70\n80\n90\n100\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e跳出循环\u003c/h3\u003e\u003ca id=\"user-content-跳出循环\" class=\"anchor\" aria-label=\"Permalink: 跳出循环\" href=\"#跳出循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.each do |s|\n break if s == 566\n puts s\nend\n# 输出\n# 399\n# 234\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e|\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 399\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 234\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e通过使用 \u003ccode\u003ebreak\u003c/code\u003e 关键字\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e在循环内跳过\u003c/h3\u003e\u003ca id=\"user-content-在循环内跳过\" class=\"anchor\" aria-label=\"Permalink: 在循环内跳过\" href=\"#在循环内跳过\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"salary = [399, 234, 566, 533, 233]\nsalary.each do |s|\n next if s == 533\n puts s\nend\n# 输出\n# 399\n# 234\n# 566\n# 233\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e399\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e234\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e566\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e233\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esalary\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e|\n \u003cspan class=\"pl-k\"\u003enext\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e533\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 输出\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 399\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 234\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 566\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 233\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e通过使用 next 关键字\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e重复当前迭代\u003c/h3\u003e\u003ca id=\"user-content-重复当前迭代\" class=\"anchor\" aria-label=\"Permalink: 重复当前迭代\" href=\"#重复当前迭代\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"data = [456, 3000]\nretry_count = 0\nstatus = \u0026quot;network failure\u0026quot;\nsum = 0\ndata.each do |d|\n if retry_count == 3\n status = \u0026quot;connection established\u0026quot;\n retry_count = 0\n redo\n elsif status == \u0026quot;network failure\u0026quot; and retry_count \u0026lt; 5\n puts \u0026quot;network failure #{retry_count}\u0026quot;\n retry_count += 1\n redo\n elsif status == \u0026quot;connection established\u0026quot;\n puts d\n sum += d\n end\nend\n# output of sum\n# 3456\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e456\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3000\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003estatus\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"network failure\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e|\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003estatus\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"connection established\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n redo\n \u003cspan class=\"pl-k\"\u003eelsif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estatus\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"network failure\"\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"network failure \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eretry_count\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n redo\n \u003cspan class=\"pl-k\"\u003eelsif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estatus\u003c/span\u003e == \u003cspan class=\"pl-s\"\u003e\"connection established\"\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e += \u003cspan class=\"pl-s1\"\u003ed\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# output of sum\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3456\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e重新开始循环\u003c/h3\u003e\u003ca id=\"user-content-重新开始循环\" class=\"anchor\" aria-label=\"Permalink: 重新开始循环\" href=\"#重新开始循环\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"numbers = [2, 2, 44, 44]\nsum = 0\nbegin\n numbers.each do |s|\n if rand(1..10) == 5\n puts \u0026quot;hi 5, let's do it again!\u0026quot;\n sum = 0\n raise \u0026quot;hi 5\u0026quot;\n end\n puts s\n sum += s\n end\nrescue\n retry\nend\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e44\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e44\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003ebegin\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003enumbers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edo\u003c/span\u003e |\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e|\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erand\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e..\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"hi 5, let's do it again!\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eraise\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"hi 5\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esum\u003c/span\u003e += \u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003erescue\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eretry\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eClasses\u003c/h2\u003e\u003ca id=\"user-content-classes\" class=\"anchor\" aria-label=\"Permalink: Classes\" href=\"#classes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eClasses 示例\u003c/h3\u003e\u003ca id=\"user-content-classes-示例\" class=\"anchor\" aria-label=\"Permalink: Classes 示例\" href=\"#classes-示例\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Person\n # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java\n # def initialize(name, number)\n # @name = name\n # @number = number\n # end\n # instance variable\n # @name\n # class variable\n # @@count\n # attr_accessor acts as a getter and setter for the following instance attributes\n attr_accessor :name, :number\n # class variable must be initialized\n @@count = 0\n def self.count\n @@count\n end\n def self.count=(count)\n @@count = count\n end\n def initialize\n @@count += 1\n end\nend\n# create an instance of the Person class\np1 = Person.new\n# set attributes of the Person class\np1.name = \u0026quot;Yukihiro Matsumoto\u0026quot;\np1.number = 9999999999\n# get attributes of the Person class\nputs \u0026quot;#{p1.name}\u0026quot;\nputs \u0026quot;#{p1.number}\u0026quot;\nputs \u0026quot;#{Person.count}\u0026quot;\n# Yukihiro Matsumoto\n# 9999999999\n# 1\np2 = Person.new\np2.name = \u0026quot;Yukihiro Matsumoto\u0026quot;\np2.number = 9999999999\n# get attributes of the Person class\nputs \u0026quot;#{p2.name}\u0026quot;\nputs \u0026quot;#{p2.number}\u0026quot;\nputs \u0026quot;#{Person.count}\u0026quot;\n# Yukihiro Matsumoto\n# 9999999999\n# 2\n# set class variable\nPerson.count = 3\nputs \u0026quot;#{Person.count}\u0026quot;\n# 3\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# when you create a new object, it looks for a method named initialize and executes it, like a constructor in java\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# def initialize(name, number)\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# @name = name\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# @number = number\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# end\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# instance variable\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# @name\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# class variable\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# @@count\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# attr_accessor acts as a getter and setter for the following instance attributes\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eattr_accessor\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:number\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# class variable must be initialized\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003e@@count\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecount\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003e@@count\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eself\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003e@@count\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize\u003c/span\u003e\n \u003cspan class=\"pl-c1\"\u003e@@count\u003c/span\u003e += \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# create an instance of the Person class\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# set attributes of the Person class\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Yukihiro Matsumoto\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9999999999\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# get attributes of the Person class\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ep1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ep1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Yukihiro Matsumoto\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 9999999999\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 1\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep2\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Yukihiro Matsumoto\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ep2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e9999999999\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# get attributes of the Person class\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ep2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ep2\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Yukihiro Matsumoto\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 9999999999\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 2\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# set class variable\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 3\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e继承一个类\u003c/h3\u003e\u003ca id=\"user-content-继承一个类\" class=\"anchor\" aria-label=\"Permalink: 继承一个类\" href=\"#继承一个类\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Person\n attr_accessor :name, :number\nend\n# 使用 \u0026lt; 符号从父类继承方法和属性\nclass Student \u0026lt; Person\n attr_accessor :id\nend\ns = Student.new\ns.name = \u0026quot;James Bond\u0026quot;\ns.number = 700\ns.id = 678\nputs \u0026quot;#{p.name}\u0026quot;\nJames Bond\nputs \u0026quot;#{p.number}\u0026quot;\n700\nputs \u0026quot;#{p.id}\u0026quot;\n678\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eattr_accessor\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:name\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:number\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 使用 \u0026lt; 符号从父类继承方法和属性\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eStudent\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-v\"\u003ePerson\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eattr_accessor\u003c/span\u003e \u003cspan class=\"pl-pds\"\u003e:id\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eStudent\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"James Bond\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e700\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003es\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eid\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e678\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eJames\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eBond\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enumber\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003e700\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e#{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eid\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003e678\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查实例类型\u003c/h3\u003e\u003ca id=\"user-content-检查实例类型\" class=\"anchor\" aria-label=\"Permalink: 检查实例类型\" href=\"#检查实例类型\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Vehicle; end\nclass Car \u0026lt; Vehicle; end\nclass Audi \u0026lt; Car; end\ncar = Car.new\ncar.instance_of? Vehicle\nfalse\ncar.instance_of? Car\ntrue\ncar.instance_of? Audi\nfalse\na = 7\na.instance_of? Integer\ntrue\na.instance_of? Numeric\nfalse\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eVehicle\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eCar\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-v\"\u003eVehicle\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eAudi\u003c/span\u003e \u0026lt; \u003cspan class=\"pl-v\"\u003eCar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eend\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecar\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eCar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003enew\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einstance_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eVehicle\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einstance_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eCar\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecar\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einstance_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eAudi\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e7\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einstance_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eInteger\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einstance_of?\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eNumeric\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果对象是给定类的实例,而不是子类或超类,则返回 true\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e打印一个类的所有方法名\u003c/h3\u003e\u003ca id=\"user-content-打印一个类的所有方法名\" class=\"anchor\" aria-label=\"Permalink: 打印一个类的所有方法名\" href=\"#打印一个类的所有方法名\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"puts (String.methods).sort\n# 排除从 Object 类继承的方法\nputs (String.methods - Object.public_instance_methods).sort\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emethods\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# 排除从 Object 类继承的方法\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003eputs\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003emethods\u003c/span\u003e - \u003cspan class=\"pl-v\"\u003eObject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epublic_instance_methods\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003esort\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e检查一个类是否有特定的方法\u003c/h3\u003e\u003ca id=\"user-content-检查一个类是否有特定的方法\" class=\"anchor\" aria-label=\"Permalink: 检查一个类是否有特定的方法\" href=\"#检查一个类是否有特定的方法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-ruby notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"String.respond_to?(:prepend)\ntrue\nString.respond_to?(:append)\nfalse\"\u003e\u003cpre\u003e\u003cspan class=\"pl-v\"\u003eString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003erespond_to?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:prepend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eString\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003erespond_to?\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-pds\"\u003e:append\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e另见\u003c/h2\u003e\u003ca id=\"user-content-另见\" class=\"anchor\" aria-label=\"Permalink: 另见\" href=\"#另见\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.ruby-lang.org/en/\" rel=\"nofollow\"\u003eRuby 官网\u003c/a\u003e \u003cem\u003e(ruby-lang.org)\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lifeparticle/Ruby-Cheatsheet\"\u003eRuby Cheatsheet\u003c/a\u003e \u003cem\u003e(github.com)\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":null},"codeViewLayoutRoute":{"repo":{"id":540917299,"defaultBranch":"main","name":"reference","ownerLogin":"jaywcjlove","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-09-24T17:49:19.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1680273?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"LRLE3ct7gSWRn3AwqA0rnNHlBnVDBTiqF443K5Hgxwy5PYeCBh1vycgiT1bjYLfwWkqjkdwTJGVQJ_xK6gpKXQ","allShortcutsEnabled":false,"treeExpanded":true,"path":"docs/ruby.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1779705630.0","canEdit":false,"currentOid":"6f382a13d72f3c4ce67f3d6f3f38f6f930d01a6c"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"docs":{"items":[{"name":"7zip.md","path":"docs/7zip.md","contentType":"file"},{"name":"adb.md","path":"docs/adb.md","contentType":"file"},{"name":"adobe-ae.md","path":"docs/adobe-ae.md","contentType":"file"},{"name":"adobe-illustrator.md","path":"docs/adobe-illustrator.md","contentType":"file"},{"name":"adobe-lightroom.md","path":"docs/adobe-lightroom.md","contentType":"file"},{"name":"adobe-photoshop.md","path":"docs/adobe-photoshop.md","contentType":"file"},{"name":"adobe-pr.md","path":"docs/adobe-pr.md","contentType":"file"},{"name":"adobe-xd.md","path":"docs/adobe-xd.md","contentType":"file"},{"name":"ai-tools.md","path":"docs/ai-tools.md","contentType":"file"},{"name":"android-studio.md","path":"docs/android-studio.md","contentType":"file"},{"name":"ansible.md","path":"docs/ansible.md","contentType":"file"},{"name":"apt.md","path":"docs/apt.md","contentType":"file"},{"name":"ascii-code.md","path":"docs/ascii-code.md","contentType":"file"},{"name":"aspect-ratio.md","path":"docs/aspect-ratio.md","contentType":"file"},{"name":"awk.md","path":"docs/awk.md","contentType":"file"},{"name":"bash.md","path":"docs/bash.md","contentType":"file"},{"name":"blender.md","path":"docs/blender.md","contentType":"file"},{"name":"bun.md","path":"docs/bun.md","contentType":"file"},{"name":"c.md","path":"docs/c.md","contentType":"file"},{"name":"canvas.md","path":"docs/canvas.md","contentType":"file"},{"name":"cargo.md","path":"docs/cargo.md","contentType":"file"},{"name":"chatgpt.md","path":"docs/chatgpt.md","contentType":"file"},{"name":"chmod.md","path":"docs/chmod.md","contentType":"file"},{"name":"chown.md","path":"docs/chown.md","contentType":"file"},{"name":"cisco-devices.md","path":"docs/cisco-devices.md","contentType":"file"},{"name":"claude.md","path":"docs/claude.md","contentType":"file"},{"name":"cmake.md","path":"docs/cmake.md","contentType":"file"},{"name":"cmd.md","path":"docs/cmd.md","contentType":"file"},{"name":"cocoapods.md","path":"docs/cocoapods.md","contentType":"file"},{"name":"codex-cli.md","path":"docs/codex-cli.md","contentType":"file"},{"name":"colors-named.md","path":"docs/colors-named.md","contentType":"file"},{"name":"conan.md","path":"docs/conan.md","contentType":"file"},{"name":"conda.md","path":"docs/conda.md","contentType":"file"},{"name":"coreldraw.md","path":"docs/coreldraw.md","contentType":"file"},{"name":"cpp.md","path":"docs/cpp.md","contentType":"file"},{"name":"cron.md","path":"docs/cron.md","contentType":"file"},{"name":"cs.md","path":"docs/cs.md","contentType":"file"},{"name":"css.md","path":"docs/css.md","contentType":"file"},{"name":"curl.md","path":"docs/curl.md","contentType":"file"},{"name":"cursor-cli.md","path":"docs/cursor-cli.md","contentType":"file"},{"name":"dart.md","path":"docs/dart.md","contentType":"file"},{"name":"django.md","path":"docs/django.md","contentType":"file"},{"name":"docker-compose.md","path":"docs/docker-compose.md","contentType":"file"},{"name":"docker.md","path":"docs/docker.md","contentType":"file"},{"name":"dockerfile.md","path":"docs/dockerfile.md","contentType":"file"},{"name":"dotnet-cli.md","path":"docs/dotnet-cli.md","contentType":"file"},{"name":"ejs.md","path":"docs/ejs.md","contentType":"file"},{"name":"elasticsearch.md","path":"docs/elasticsearch.md","contentType":"file"},{"name":"electron.md","path":"docs/electron.md","contentType":"file"},{"name":"elixir.md","path":"docs/elixir.md","contentType":"file"},{"name":"emacs.md","path":"docs/emacs.md","contentType":"file"},{"name":"emmet.md","path":"docs/emmet.md","contentType":"file"},{"name":"emoji.md","path":"docs/emoji.md","contentType":"file"},{"name":"erlang.md","path":"docs/erlang.md","contentType":"file"},{"name":"es6.md","path":"docs/es6.md","contentType":"file"},{"name":"excel-fn.md","path":"docs/excel-fn.md","contentType":"file"},{"name":"expressjs.md","path":"docs/expressjs.md","contentType":"file"},{"name":"fastapi.md","path":"docs/fastapi.md","contentType":"file"},{"name":"feds.md","path":"docs/feds.md","contentType":"file"},{"name":"ffmpeg.md","path":"docs/ffmpeg.md","contentType":"file"},{"name":"figma.md","path":"docs/figma.md","contentType":"file"},{"name":"find.md","path":"docs/find.md","contentType":"file"},{"name":"finder.md","path":"docs/finder.md","contentType":"file"},{"name":"firefox.md","path":"docs/firefox.md","contentType":"file"},{"name":"flask.md","path":"docs/flask.md","contentType":"file"},{"name":"flutter.md","path":"docs/flutter.md","contentType":"file"},{"name":"ftp.md","path":"docs/ftp.md","contentType":"file"},{"name":"gdb.md","path":"docs/gdb.md","contentType":"file"},{"name":"gemini-cli.md","path":"docs/gemini-cli.md","contentType":"file"},{"name":"gemma4.md","path":"docs/gemma4.md","contentType":"file"},{"name":"git.md","path":"docs/git.md","contentType":"file"},{"name":"github-actions.md","path":"docs/github-actions.md","contentType":"file"},{"name":"github-cli.md","path":"docs/github-cli.md","contentType":"file"},{"name":"github-copilot.md","path":"docs/github-copilot.md","contentType":"file"},{"name":"github.md","path":"docs/github.md","contentType":"file"},{"name":"gitlab-ci.md","path":"docs/gitlab-ci.md","contentType":"file"},{"name":"gitlab.md","path":"docs/gitlab.md","contentType":"file"},{"name":"glances.md","path":"docs/glances.md","contentType":"file"},{"name":"gmail.md","path":"docs/gmail.md","contentType":"file"},{"name":"golang.md","path":"docs/golang.md","contentType":"file"},{"name":"google-chrome.md","path":"docs/google-chrome.md","contentType":"file"},{"name":"google-search.md","path":"docs/google-search.md","contentType":"file"},{"name":"graphql.md","path":"docs/graphql.md","contentType":"file"},{"name":"grep.md","path":"docs/grep.md","contentType":"file"},{"name":"grok-cli.md","path":"docs/grok-cli.md","contentType":"file"},{"name":"grok.md","path":"docs/grok.md","contentType":"file"},{"name":"helm.md","path":"docs/helm.md","contentType":"file"},{"name":"homebrew.md","path":"docs/homebrew.md","contentType":"file"},{"name":"hook.md","path":"docs/hook.md","contentType":"file"},{"name":"html-char.md","path":"docs/html-char.md","contentType":"file"},{"name":"html.md","path":"docs/html.md","contentType":"file"},{"name":"htmx.md","path":"docs/htmx.md","contentType":"file"},{"name":"htop.md","path":"docs/htop.md","contentType":"file"},{"name":"http-status-code.md","path":"docs/http-status-code.md","contentType":"file"},{"name":"huawei-devices.md","path":"docs/huawei-devices.md","contentType":"file"},{"name":"ini.md","path":"docs/ini.md","contentType":"file"},{"name":"intelli-j-idea.md","path":"docs/intelli-j-idea.md","contentType":"file"},{"name":"iptables.md","path":"docs/iptables.md","contentType":"file"},{"name":"iso-3166-1.md","path":"docs/iso-3166-1.md","contentType":"file"},{"name":"iso-639-1.md","path":"docs/iso-639-1.md","contentType":"file"},{"name":"java.md","path":"docs/java.md","contentType":"file"},{"name":"javascript.md","path":"docs/javascript.md","contentType":"file"},{"name":"jest.md","path":"docs/jest.md","contentType":"file"},{"name":"jq.md","path":"docs/jq.md","contentType":"file"},{"name":"jquery.md","path":"docs/jquery.md","contentType":"file"},{"name":"json.md","path":"docs/json.md","contentType":"file"},{"name":"julia.md","path":"docs/julia.md","contentType":"file"},{"name":"jupyter.md","path":"docs/jupyter.md","contentType":"file"},{"name":"justfile.md","path":"docs/justfile.md","contentType":"file"},{"name":"koajs.md","path":"docs/koajs.md","contentType":"file"},{"name":"kotlin.md","path":"docs/kotlin.md","contentType":"file"},{"name":"kubernetes.md","path":"docs/kubernetes.md","contentType":"file"},{"name":"laravel.md","path":"docs/laravel.md","contentType":"file"},{"name":"latex.md","path":"docs/latex.md","contentType":"file"},{"name":"leaf.md","path":"docs/leaf.md","contentType":"file"},{"name":"lerna.md","path":"docs/lerna.md","contentType":"file"},{"name":"lessjs.md","path":"docs/lessjs.md","contentType":"file"},{"name":"linux-command.md","path":"docs/linux-command.md","contentType":"file"},{"name":"lsof.md","path":"docs/lsof.md","contentType":"file"},{"name":"lua.md","path":"docs/lua.md","contentType":"file"},{"name":"make.md","path":"docs/make.md","contentType":"file"},{"name":"markdown.md","path":"docs/markdown.md","contentType":"file"},{"name":"matlab.md","path":"docs/matlab.md","contentType":"file"},{"name":"mime.md","path":"docs/mime.md","contentType":"file"},{"name":"minio.md","path":"docs/minio.md","contentType":"file"},{"name":"mitmproxy.md","path":"docs/mitmproxy.md","contentType":"file"},{"name":"mongodb.md","path":"docs/mongodb.md","contentType":"file"},{"name":"mysql.md","path":"docs/mysql.md","contentType":"file"},{"name":"neo4j.md","path":"docs/neo4j.md","contentType":"file"},{"name":"nestjs.md","path":"docs/nestjs.md","contentType":"file"},{"name":"netcat.md","path":"docs/netcat.md","contentType":"file"},{"name":"netstat.md","path":"docs/netstat.md","contentType":"file"},{"name":"nextjs.md","path":"docs/nextjs.md","contentType":"file"},{"name":"nginx.md","path":"docs/nginx.md","contentType":"file"},{"name":"nix.md","path":"docs/nix.md","contentType":"file"},{"name":"npm.md","path":"docs/npm.md","contentType":"file"},{"name":"nvm.md","path":"docs/nvm.md","contentType":"file"},{"name":"openssl.md","path":"docs/openssl.md","contentType":"file"},{"name":"oracle.md","path":"docs/oracle.md","contentType":"file"},{"name":"package.json.md","path":"docs/package.json.md","contentType":"file"},{"name":"pacman.md","path":"docs/pacman.md","contentType":"file"},{"name":"pandoc.md","path":"docs/pandoc.md","contentType":"file"},{"name":"php.md","path":"docs/php.md","contentType":"file"},{"name":"phpstorm.md","path":"docs/phpstorm.md","contentType":"file"},{"name":"pinia.md","path":"docs/pinia.md","contentType":"file"},{"name":"pip.md","path":"docs/pip.md","contentType":"file"},{"name":"pm2.md","path":"docs/pm2.md","contentType":"file"},{"name":"pnpm.md","path":"docs/pnpm.md","contentType":"file"},{"name":"ports.md","path":"docs/ports.md","contentType":"file"},{"name":"postgres.md","path":"docs/postgres.md","contentType":"file"},{"name":"powershell.md","path":"docs/powershell.md","contentType":"file"},{"name":"ps.md","path":"docs/ps.md","contentType":"file"},{"name":"pycharm.md","path":"docs/pycharm.md","contentType":"file"},{"name":"python.md","path":"docs/python.md","contentType":"file"},{"name":"pytorch.md","path":"docs/pytorch.md","contentType":"file"},{"name":"quickreference.md","path":"docs/quickreference.md","contentType":"file"},{"name":"r.md","path":"docs/r.md","contentType":"file"},{"name":"react-native.md","path":"docs/react-native.md","contentType":"file"},{"name":"react.md","path":"docs/react.md","contentType":"file"},{"name":"reactrouter.md","path":"docs/reactrouter.md","contentType":"file"},{"name":"redis.md","path":"docs/redis.md","contentType":"file"},{"name":"regex.md","path":"docs/regex.md","contentType":"file"},{"name":"resolutions.md","path":"docs/resolutions.md","contentType":"file"},{"name":"ruby.md","path":"docs/ruby.md","contentType":"file"},{"name":"rust.md","path":"docs/rust.md","contentType":"file"},{"name":"rxjs.md","path":"docs/rxjs.md","contentType":"file"},{"name":"sass.md","path":"docs/sass.md","contentType":"file"},{"name":"scala.md","path":"docs/scala.md","contentType":"file"},{"name":"screen.md","path":"docs/screen.md","contentType":"file"},{"name":"sdkman.md","path":"docs/sdkman.md","contentType":"file"},{"name":"sed.md","path":"docs/sed.md","contentType":"file"},{"name":"semver.md","path":"docs/semver.md","contentType":"file"},{"name":"sketch.md","path":"docs/sketch.md","contentType":"file"},{"name":"springboot.md","path":"docs/springboot.md","contentType":"file"},{"name":"sqlite.md","path":"docs/sqlite.md","contentType":"file"},{"name":"ssh.md","path":"docs/ssh.md","contentType":"file"},{"name":"styled-components.md","path":"docs/styled-components.md","contentType":"file"},{"name":"stylex.md","path":"docs/stylex.md","contentType":"file"},{"name":"stylus.md","path":"docs/stylus.md","contentType":"file"},{"name":"sublime-text.md","path":"docs/sublime-text.md","contentType":"file"},{"name":"subversion.md","path":"docs/subversion.md","contentType":"file"},{"name":"swift.md","path":"docs/swift.md","contentType":"file"},{"name":"swiftui.md","path":"docs/swiftui.md","contentType":"file"},{"name":"symbol-code.md","path":"docs/symbol-code.md","contentType":"file"},{"name":"sysdig.md","path":"docs/sysdig.md","contentType":"file"},{"name":"systemd.md","path":"docs/systemd.md","contentType":"file"},{"name":"tailwindcss.md","path":"docs/tailwindcss.md","contentType":"file"},{"name":"tar.md","path":"docs/tar.md","contentType":"file"},{"name":"taskset.md","path":"docs/taskset.md","contentType":"file"},{"name":"tauri.md","path":"docs/tauri.md","contentType":"file"},{"name":"time-zones.md","path":"docs/time-zones.md","contentType":"file"},{"name":"tmux.md","path":"docs/tmux.md","contentType":"file"},{"name":"toml.md","path":"docs/toml.md","contentType":"file"},{"name":"twitter.md","path":"docs/twitter.md","contentType":"file"},{"name":"typescript.md","path":"docs/typescript.md","contentType":"file"},{"name":"uv.md","path":"docs/uv.md","contentType":"file"},{"name":"vim.md","path":"docs/vim.md","contentType":"file"},{"name":"vimium.md","path":"docs/vimium.md","contentType":"file"},{"name":"vscode.md","path":"docs/vscode.md","contentType":"file"},{"name":"vue.md","path":"docs/vue.md","contentType":"file"},{"name":"vue2.md","path":"docs/vue2.md","contentType":"file"},{"name":"wails.md","path":"docs/wails.md","contentType":"file"},{"name":"webstorm.md","path":"docs/webstorm.md","contentType":"file"},{"name":"xcode.md","path":"docs/xcode.md","contentType":"file"},{"name":"xpath.md","path":"docs/xpath.md","contentType":"file"},{"name":"yaml.md","path":"docs/yaml.md","contentType":"file"},{"name":"yarn.md","path":"docs/yarn.md","contentType":"file"},{"name":"yazi.md","path":"docs/yazi.md","contentType":"file"},{"name":"yum.md","path":"docs/yum.md","contentType":"file"},{"name":"zed.md","path":"docs/zed.md","contentType":"file"},{"name":"zip.md","path":"docs/zip.md","contentType":"file"}],"totalCount":211},"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":".husky","path":".husky","contentType":"directory"},{"name":"appicon","path":"appicon","contentType":"directory"},{"name":"assets","path":"assets","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"icons","path":"icons","contentType":"directory"},{"name":".dockerignore","path":".dockerignore","contentType":"file"},{"name":".editorconfig","path":".editorconfig","contentType":"file"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".lintstagedrc","path":".lintstagedrc","contentType":"file"},{"name":".markdownlint.json","path":".markdownlint.json","contentType":"file"},{"name":".npmrc","path":".npmrc","contentType":"file"},{"name":".prettierignore","path":".prettierignore","contentType":"file"},{"name":".prettierrc","path":".prettierrc","contentType":"file"},{"name":".refsrc.json","path":".refsrc.json","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"Dockerfile","path":"Dockerfile","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"netlify.toml","path":"netlify.toml","contentType":"file"},{"name":"package.json","path":"package.json","contentType":"file"},{"name":"renovate.json","path":"renovate.json","contentType":"file"}],"totalCount":23}},"fileTreeProcessingTime":47.636998,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1779705630.0","canEdit":false,"refType":"branch","currentOid":"6f382a13d72f3c4ce67f3d6f3f38f6f930d01a6c","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"docs/ruby.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/jaywcjlove/reference/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"ruby.md","displayUrl":"https://github.com/jaywcjlove/reference/blob/main/docs/ruby.md?raw=true","headerInfo":{"blobSize":"53 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"f1a1ff2","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fjaywcjlove%2Freference%2Fblob%2Fmain%2Fdocs%2Fruby.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"2458","truncatedSloc":"2025"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/jaywcjlove/reference/blob/main/docs/ruby.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/jaywcjlove/reference/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/jaywcjlove/reference/raw/refs/heads/main/docs/ruby.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["Ruby 备忘清单","===","","入门","---","","### 安装","\u003c!--rehype:wrap-class=row-span-4--\u003e","","```bash","# Debian, Ubuntu","$ sudo apt-get install ruby-full","# Windows","$ winget install RubyInstallerTeam.Ruby ","$ brew install ruby # macOS","$ docker run -it --rm ruby:latest # Docker","$ docker run -it --rm ruby:2.7","```","","使用包管理器安装 [rbenv](https://github.com/rbenv/rbenv#readme)","","```bash","$ brew install rbenv ruby-build # macOS","# Debian、ubuntu 和其他衍生产品","$ sudo apt install rbenv","```","","使用 [rbenv](https://github.com/rbenv/rbenv#readme) 安装 ruby","","```bash","# 列出最新的稳定版本","$ rbenv install -l","# 列出所有本地版本","$ rbenv install -L","# 安装 Ruby 版本","$ rbenv install 3.1.2","$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本","# 或者","$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本","$ rbenv local --unset","$ rbenv version # 显示当前活动的 Ruby 版本","=\u003e 1.9.3-p327 (set by /Users/sam/.rbenv/version)","```","","使用 [RVM](https://www.ruby-lang.org/en/documentation/installation/#rvm) 安装 ruby","","```bash","$ curl -sSL https://get.rvm.io | bash -s stable","$ rvm list # Ruby 版本列表","$ rvm install 3.0.1 # 安装 3.0.1","$ rvm use 3.0.1 # 使用 3.0.1","```","","如何安装 ruby gem 管理器, [bundler](https://bundler.io/) gem","","```bash","# 访问 bash 以执行以下命令","$ docker run -it --rm ruby:latest bash","$ gem install bundler","$ bundle -v","$ gem update bundler","$ gem uninstall bundler","```","","### 什么是 Gemfile 和 Gemfile.lock","\u003c!--rehype:wrap-class=row-span-2--\u003e","","[Gemfile](https://bundler.io/v2.3/man/gemfile.5.html) 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)","","```ruby","# 在项目根目录的 Gemfile 中指定 gem","ruby '2.5.6'","","source 'https://rubygems.org'","gem 'nokogiri'","gem 'rack', '~\u003e1.1'","gem 'rspec', :require =\u003e 'spec'","```","","安装 Gemfile 中的所有 gem","","```bash","$ bundle install","```","","解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题","","```bash","bundle lock --add-platform x86_64-linux","```","","### 安装特定 ruby gem 的特定版本","","```bash","$ gem install bundler -v 1.17","$ gem install minitest -v 5.8.4","```","","### 使用 Bundler 更新 gem","","```bash","# 使用 Bundler 更新单个 gem","$ bundle update nokogiri","# 使用 Bundler 更新 Gemfile 中的每个 gem","$ bundle update","```","","### 保留字","\u003c!--rehype:wrap-class=row-span-5--\u003e","","保留字 | 描述",":-|-","| `__ENCODING__` | 当前文件的脚本编码","| `__LINE__` | 当前文件中此关键字的行号","| `__FILE__` | 当前文件的路径","| `BEGIN` | 包含在 `{ }` 中的代码在程序运行之前运行","| `END` | 包含在 `{ }` 中以在程序结束时运行","| `alias` | 为现有方法、运算符、全局变量创建别名","| `and` | 逻辑与运算符","| `begin` | 开始一段代码","| `break` | 终止循环","| `case` | 将表达式与匹配的 `when` 子句进行比较,其中 \u003cbr/\u003e 以 `end` 结束","| `class` | 定义一个类","| `def` | 定义函数/方法","| `defined?` | 检查某个变量、函数是否存在","| `do` | 开始一个代码块并执行块中的代码,以\u003cbr/\u003e **end关键字**结束","| `else` | 如果先前的条件不成立,则执行以下代码","| `elsif` | if 表达式的替代条件","| `end` | 用于结束以 `begin`、`class`、`def`、`do`、`if` 等关键字开头的代码块","| `ensure` | 总是在块终止时执行","| `false` | 逻辑布尔假值","| `for` | 开始一个 `for` 循环","| `if` | 如果 `if` 的条件语句为 `true`,则执行代码块","| `in` | 与 `for` 循环一起使用","| `module` | 定义一个模块","| `next` | 跳转到循环条件评估之前的点","| `nil` | 为空或无效或始终为假","| `not` | 逻辑否定运算符","| `or` | 逻辑或运算符","| `redo` | 条件循环后跳转","| `rescue` | 在引发异常后评估表达式","| `retry` | • 在救援之外调用时,重复方法调用\u003cbr/\u003e• 在救援内部调用时,跳转到块顶部","| `return` | 从方法或代码块返回值","| `self` | 当前对象","| `super` | 调用超类中的同名方法","| `then` | 与 `if`、`unless`、`when`、`case`、`rescue` 一起使用的分隔符","| `true` | 逻辑布尔真","| `undef` | 使当前类中的方法/函数未定义","| `until` | 在条件语句为假时执行代码块","| `when` | 在 case 语句下开始一个子句","| `while` | 执行代码块,直到条件语句变为假","| `yield` | 执行传递给方法的代码块","","### 注释","","```ruby","# 单行注释","=begin","多行","注释","=end","=begin 注释第 1 行 =end","puts \"Hello world!\" # 代码的内联注释","```","","### 运算符","\u003c!--rehype:wrap-class=row-span-7--\u003e","","#### 逻辑运算符","","- `and`","- `or`","- `not`","- `\u0026\u0026`","- `||`","- `!`","\u003c!--rehype:className=cols-3 style-none--\u003e","","#### 位运算符","","- `\u0026`","- `|`","- `^`","- `~`","- `\u003c\u003c`","- `\u003e\u003e`","\u003c!--rehype:className=cols-3 style-none--\u003e","","#### 算术运算符","","- `+`","- `-`","- `*`","- `/`","- `%`","- `**`","\u003c!--rehype:className=cols-3 style-none--\u003e","","#### 比较运算符","","- `==`","- `!=`","- `\u003e`","- `\u003c`","- `\u003e=`","- `\u003c=`","- `\u003c=\u003e`","- `===`","- `eql?`","- `equal?`","\u003c!--rehype:className=cols-3 style-none--\u003e","","#### 运算符示例","","```bash","# 添加","1 + 1 #=\u003e 2","# 减法","2 - 1 #=\u003e 1","# 乘法","2 * 2 #=\u003e 4","# 分配","10 / 5 #=\u003e 2","17 / 5 #=\u003e 3, not 3.4","17 / 5.0 #=\u003e 3.4","# 指数","2 ** 2 #=\u003e 4","3 ** 4 #=\u003e 81","# 模数(求除法的余数)","8 % 2 #=\u003e 0 (8 / 2 = 4; 没有剩余)","10 % 4 #=\u003e 2 (10 / 4 = 2 余数为 2)","a = 10","b = 20","a == b #=\u003e false","a != b #=\u003e true","a \u003e b #=\u003e false","a \u003c b #=\u003e true","a \u003e= b #=\u003e false","a \u003c= b #=\u003e true","","# 比较运算符","a \u003c=\u003e b #=\u003e -1","c = 20","c \u003c=\u003e b #=\u003e 0","c \u003c=\u003e a #=\u003e 1","# 用于测试 case 语句的 when 子句中的相等性","(1...10) === 5 #=\u003e true","# 如果接收者和参数具有相同的类型和相等的值,则为真","1.eql?(1.0) #=\u003e false","c = a + b #=\u003e 30","c += a #=\u003e 40","c -= a #=\u003e 30","c *= a #=\u003e 300","c /= a #=\u003e 30","c %= a #=\u003e 3","c **= a #=\u003e 59049","","# Ruby 并行赋值","a = 10","b = 20","c = 30","a, b, c = 10, 20, 30","# Ruby 位运算符","a = 60","b = 13","# \u0026 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。","a \u0026 b #=\u003e 12","# | 如果二进制或运算符存在于任一操作数中,则复制一个位。","a | b #=\u003e 61","# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。","a ^ b #=\u003e 49","# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。","~a","# \u003c\u003c 二进制左移运算符。 左操作数的值被移动","# 左操作数指定的位数。","a \u003c\u003c 2","# \u003e\u003e 二进制右移运算符。 左操作数的值被移动","# 右操作数指定的位数。","a \u003e\u003e 2","","# Ruby 逻辑运算符","a and b #=\u003e true.","a or b #=\u003e true.","a \u0026\u0026 b #=\u003e true.","(a || b) #=\u003e true.","!(a \u0026\u0026 b) #=\u003e false.","not(a \u0026\u0026 b) #=\u003e false.","# Ruby 三元运算符","# ? :","# 如果条件为真? 然后值 X :否则值 Y","a == 10 ? puts 'Right' : puts 'Wrong'","# Ruby 范围运算符","# .. 创建从起点到终点的范围(含)","1..10 #=\u003e 创建从 1 到 10 的范围(包括 1 到 10)","# ... 创建一个从起点到终点的范围,不包括在内","1...10 #=\u003e 创建一个从 1 到 10 的独占范围","```","","### 运算符优先级表","\u003c!--rehype:wrap-class=row-span-3--\u003e","","- `!`, `~`, `unary +`","- `**`","- `unary -`","- `*`, `/`, `%`","- `+`, `-`","- `\u003c\u003c`, `\u003e\u003e`","- `\u0026`","- `^`","- `\u003e`, `\u003e=`, `\u003c`, `\u003c=`","- `\u003c=\u003e`, `==`, `===`, `!=`, `=~`, `!~`","- `\u0026\u0026`","- `?`, `:`","- `modifier-rescue`","- `=`, `+=`, `-=`, `*=`, `/=`, `%=`","- `defined`","- `not`","- `or`, `and`","- `modifier-if`, `modifier-unless`, `modifier-while`, `modifier-until`","- `{ }` 块","- `do ... end` 块","\u003c!--rehype:className=style-timeline--\u003e","","### 变量和范围","\u003c!--rehype:wrap-class=col-span-2--\u003e","","名字 | 范围 | 示例 | 说明",":---- | ---- | ---- | -----","`[a-z]` 或 `_` | 本地的 | `count = 10` 或 `_count = 10` | 必须初始化局部变量","`@` | 实例变量 | `@id = []` | 实例变量在初始化之前具有“nil”值","`@@` | 类变量 | `@@name = []` | 必须初始化类变量","` reference/docs/ruby.md at main · jaywcjlove/reference · GitHub
Skip to content
| 全局变量 | `$version = \"0.8.9\"` | 全局变量在初始化之前具有“nil”值","`[A-Z]` | 持续的 | `PI = 3.14` | 常量变量必须初始化,您可以更改常量,但您会收到警告","","有五种不同类型的变量。第一个字符确定范围","","### 局部变量","","```ruby","current_weather = \"rainy\"","_weather = \"sunny\"","```","","必须以下划线或小写字母开头","","### 实例变量","","```ruby","# 实例类变量","@current_weather = \"rainy\"","# 全局变量","$current_weather = \"rainy\"","# 常量变量","WEATHER = \"rainy\".freeze","```","","### 伪变量","","名字 | 说明",":-- | --","`self` | 当前方法的接收者对象","`true` | `TrueClass` 的实例","`false` | `FalseClass` 的实例","`nil` | `NilClass` 的实例","`__FILE__` | 当前源文件名","`__LINE__` | 当前源文件的当前行号","","### 选项变量","","名字 | 说明",":-- | --","`$-0` | `$/` 的别名","`$-a` | 如果设置了选项 `-a`,则为真。只读变量","`$-d` | `$DEBUG` 的别名","`$-F` | `$;` 的别名","`$-i` | 在就地编辑模式下,此变量保存扩展,否则为零\u003cbr/\u003e可以指定启用(或禁用)就地编辑模式","`$-I` | `$:` 的别名","`$-l` | 如果选项 `-lis` 设置为真。只读变量","`$-p` | 如果选项 `-pi` 设置为真。只读变量","`$-v` | `$VERBOSE` 的别名","","### 预定义变量","\u003c!--rehype:wrap-class=col-span-3--\u003e","","名字 | 说明",":-- | --","`$!` | 异常信息消息。raise 设置此变量","`$@` | 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in \\`methodname'”(助记符:发生异常的地方)","`$\u0026` | 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 \u0026)这个变量是只读的","\u003ccode\u003e$\\`\u003c/code\u003e | 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:\\` 通常在带引号的字符串之前)此变量是只读的","`

Latest commit

 

History

History
2458 lines (2025 loc) · 53 KB

File metadata and controls

2458 lines (2025 loc) · 53 KB

Ruby 备忘清单

入门

安装

# Debian, Ubuntu
$ sudo apt-get install ruby-full
# Windows
$ winget install RubyInstallerTeam.Ruby 
$ brew install ruby # macOS
$ docker run -it --rm ruby:latest # Docker
$ docker run -it --rm ruby:2.7

使用包管理器安装 rbenv

$ brew install rbenv ruby-build # macOS
# Debian、ubuntu 和其他衍生产品
$ sudo apt install rbenv

使用 rbenv 安装 ruby

# 列出最新的稳定版本
$ rbenv install -l
# 列出所有本地版本
$ rbenv install -L
# 安装 Ruby 版本
$ rbenv install 3.1.2
$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本
# 或者
$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本
$ rbenv local --unset
$ rbenv version # 显示当前活动的 Ruby 版本
=> 1.9.3-p327 (set by /Users/sam/.rbenv/version)

使用 RVM 安装 ruby

$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm list          # Ruby 版本列表
$ rvm install 3.0.1 # 安装 3.0.1
$ rvm use 3.0.1     # 使用 3.0.1

如何安装 ruby gem 管理器, bundler gem

# 访问 bash 以执行以下命令
$ docker run -it --rm ruby:latest bash
$ gem install bundler
$ bundle -v
$ gem update bundler
$ gem uninstall bundler

什么是 Gemfile 和 Gemfile.lock

Gemfile 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)

# 在项目根目录的 Gemfile 中指定 gem
ruby '2.5.6'

source 'https://rubygems.org'
gem 'nokogiri'
gem 'rack', '~>1.1'
gem 'rspec', :require => 'spec'

安装 Gemfile 中的所有 gem

$ bundle install

解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题

bundle lock --add-platform x86_64-linux

安装特定 ruby gem 的特定版本

$ gem install bundler -v 1.17
$ gem install minitest -v 5.8.4

使用 Bundler 更新 gem

# 使用 Bundler 更新单个 gem
$ bundle update nokogiri
# 使用 Bundler 更新 Gemfile 中的每个 gem
$ bundle update

保留字

保留字 描述
__ENCODING__ 当前文件的脚本编码
__LINE__ 当前文件中此关键字的行号
__FILE__ 当前文件的路径
BEGIN 包含在 { } 中的代码在程序运行之前运行
END 包含在 { } 中以在程序结束时运行
alias 为现有方法、运算符、全局变量创建别名
and 逻辑与运算符
begin 开始一段代码
break 终止循环
case 将表达式与匹配的 when 子句进行比较,其中
以 end 结束
class 定义一个类
def 定义函数/方法
defined? 检查某个变量、函数是否存在
do 开始一个代码块并执行块中的代码,以
end关键字结束
else 如果先前的条件不成立,则执行以下代码
elsif if 表达式的替代条件
end 用于结束以 begin、class、def、do、if 等关键字开头的代码块
ensure 总是在块终止时执行
false 逻辑布尔假值
for 开始一个 for 循环
if 如果 if 的条件语句为 true,则执行代码块
in 与 for 循环一起使用
module 定义一个模块
next 跳转到循环条件评估之前的点
nil 为空或无效或始终为假
not 逻辑否定运算符
or 逻辑或运算符
redo 条件循环后跳转
rescue 在引发异常后评估表达式
retry • 在救援之外调用时,重复方法调用
• 在救援内部调用时,跳转到块顶部
return 从方法或代码块返回值
self 当前对象
super 调用超类中的同名方法
then 与 if、unless、when、case、rescue 一起使用的分隔符
true 逻辑布尔真
undef 使当前类中的方法/函数未定义
until 在条件语句为假时执行代码块
when 在 case 语句下开始一个子句
while 执行代码块,直到条件语句变为假
yield 执行传递给方法的代码块

注释

# 单行注释
=begin
多行
注释
=end
=begin 注释第 1 行 =end
puts "Hello world!"  # 代码的内联注释

运算符

逻辑运算符

  • and
  • or
  • not
  • &&
  • ||
  • !

位运算符

  • &
  • |
  • ^
  • ~
  • <<
  • >>

算术运算符

  • +
  • -
  • *
  • /
  • %
  • **

比较运算符

  • ==
  • !=
  • >
  • <
  • >=
  • <=
  • <=>
  • ===
  • eql?
  • equal?

运算符示例

# 添加
1 + 1   #=> 2
# 减法
2 - 1   #=> 1
# 乘法
2 * 2   #=> 4
# 分配
10 / 5  #=> 2
17 / 5    #=> 3, not 3.4
17 / 5.0  #=> 3.4
# 指数
2 ** 2  #=> 4
3 ** 4  #=> 81
# 模数(求除法的余数)
8 % 2   #=> 0  (8 / 2 = 4; 没有剩余)
10 % 4  #=> 2  (10 / 4 = 2 余数为 2)
a = 10
b = 20
a == b #=> false
a != b #=> true
a > b #=> false
a < b #=> true
a >= b #=> false
a <= b #=> true

# 比较运算符
a <=> b #=> -1
c = 20
c <=> b #=> 0
c <=> a  #=> 1
# 用于测试 case 语句的 when 子句中的相等性
(1...10) === 5 #=> true
# 如果接收者和参数具有相同的类型和相等的值,则为真
1.eql?(1.0) #=> false
c = a + b  #=> 30
c += a #=> 40
c -= a #=> 30
c *= a #=> 300
c /= a #=> 30
c %= a #=> 3
c **= a #=> 59049

# Ruby 并行赋值
a = 10
b = 20
c = 30
a, b, c = 10, 20, 30
# Ruby 位运算符
a = 60
b = 13
# & 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。
a & b #=> 12
# | 如果二进制或运算符存在于任一操作数中,则复制一个位。
a | b #=> 61
# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。
a ^ b #=> 49
# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。
~a
# << 二进制左移运算符。 左操作数的值被移动
# 左操作数指定的位数。
a << 2
# >> 二进制右移运算符。 左操作数的值被移动
# 右操作数指定的位数。
a >> 2

# Ruby 逻辑运算符
a and b #=> true.
a or b #=> true.
a && b #=> true.
(a || b) #=> true.
!(a && b) #=> false.
not(a && b) #=> false.
# Ruby 三元运算符
# ? :
# 如果条件为真? 然后值 X :否则值 Y
a == 10 ? puts 'Right' : puts 'Wrong'
# Ruby 范围运算符
# .. 创建从起点到终点的范围(含)
1..10 #=> 创建从 1 到 10 的范围(包括 1 到 10)
# ... 创建一个从起点到终点的范围,不包括在内
1...10 #=> 创建一个从 1 到 10 的独占范围

运算符优先级表

  • !, ~, unary +
  • **
  • unary -
  • *, /, %
  • +, -
  • <<, >>
  • &
  • ^
  • >, >=, <, <=
  • <=>, ==, ===, !=, =~, !~
  • &&
  • ?, :
  • modifier-rescue
  • =, +=, -=, *=, /=, %=
  • defined
  • not
  • or, and
  • modifier-if, modifier-unless, modifier-while, modifier-until
  • { } 块
  • do ... end 块

变量和范围

名字 范围 示例 说明
[a-z] 或 _ 本地的 count = 10 或 _count = 10 必须初始化局部变量
@ 实例变量 @id = [] 实例变量在初始化之前具有“nil”值
@@ 类变量 @@name = [] 必须初始化类变量
$ 全局变量 $version = "0.8.9" 全局变量在初始化之前具有“nil”值
[A-Z] 持续的 PI = 3.14 常量变量必须初始化,您可以更改常量,但您会收到警告

有五种不同类型的变量。第一个字符确定范围

局部变量

current_weather = "rainy"
_weather = "sunny"

必须以下划线或小写字母开头

实例变量

# 实例类变量
@current_weather = "rainy"
# 全局变量
$current_weather = "rainy"
# 常量变量
WEATHER = "rainy".freeze

伪变量

名字 说明
self 当前方法的接收者对象
true TrueClass 的实例
false FalseClass 的实例
nil NilClass 的实例
__FILE__ 当前源文件名
__LINE__ 当前源文件的当前行号

选项变量

名字 说明
$-0 $/ 的别名
$-a 如果设置了选项 -a,则为真。只读变量
$-d $DEBUG 的别名
$-F $; 的别名
$-i 在就地编辑模式下,此变量保存扩展,否则为零
可以指定启用(或禁用)就地编辑模式
$-I $: 的别名
$-l 如果选项 -lis 设置为真。只读变量
$-p 如果选项 -pi 设置为真。只读变量
$-v $VERBOSE 的别名

预定义变量

名字 说明
$! 异常信息消息。raise 设置此变量
$@ 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in `methodname'”(助记符:发生异常的地方)
$& 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 &)这个变量是只读的
$` 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的
$' 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)
$+ 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)
$1, $2... 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \digit)这些变量都是只读的
$~ 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 $&、$+、$1、$2.. 等。第 n 个子表达式可以通过 $~[nth] 检索。 (助记符:~ 用于匹配)这个变量是局部作用域的
$= 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)
$/ 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)
$\ print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)
$, 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)
$; String#split 的默认分隔符。
$. 读取的最后一个文件的当前输入行号。
$< 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 $<.file 返回当前文件名。 (助记符:$< 是一个 shell 输入源)
$> print 的默认输出,printf。 $stdout 默认情况下。 (助记符:$> 用于 shell 输出)
$_ 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)
$0 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)
$* 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)
$$ 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)
$? 最后执行的子进程的状态。
$: 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 -I 命令行开关的参数组成,然后是默认的 Ruby 库,probabl "/usr/local/lib/ruby",然后是 ".",表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)
$" 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)
$DEBUG -d 开关的状态。
$FILENAME 与$<.filename 相同
$LOAD_PATH $: 的别名
$stdin 当前的标准输入
$stdout 当前的标准输出
$stderr 当前标准错误输出
$VERBOSE 详细标志,由 -v 开关设置到 Ruby 解释器

预定义的全局常量

名字 说明
TRUE 典型的真值。在 Ruby 中,所有非 false 值(除了 nil 和 false 之外的所有值)都是 true
FALSE 虚假本身
NIL 零本身
STDIN 标准输入。$stdin 默认值
STDOUT 标准输出。$stdout 默认值
STDERR 标准错误输出。$stderr 默认值
ENV 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境
ARGF $< 的别名
ARGV $* 的别名
DATA 脚本的文件对象,就在 END 之后。 除非未从文件中读取脚本,否则未定义
VERSION Ruby 版本字符串
RUBY_RELEASE_DATE 发布日期字符串
RUBY_PLATFORM 平台标识符

检查变量的范围

defined? count
"local-variable"
defined? @id
"instance-variable"
defined? @@name
"class variable"
defined? $version
"global-variable"
defined? PI
"constant"

数据类型

类型 示例 Class 文档
Integer a = 17 a.class > Integer
a.class.superclass > Numeric
#
Float a = 87.23 a.class > Float
a.class.superclass > Numeric
#
String a = "Hello universe" a.class > String #
Array a = [12, 34] a.class > Array #
Hash a = {type: "tea", count: 10} a.class > Hash #
Boolean a = false
a = true
a.class > FalseClass
a.class > TrueClass
TrueClass FalseClass
Symbol a = :status a.class > Symbol #
Range a = 1..3 a.class > Range #
Nil a = nil a.class > NilClass #

进一步阅读

检查数据类型

# 两者都是同义词
a = 37
a.kind_of? Integer
# true
a.is_a? Integer
# true

Symbol

week_days = {sunday: 11, monday: 222}

整数有用的方法

2.even?
# true
3.even?
# false

范围

.. 用于创建包含范围

range = 1..10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

... 用于创建专属范围

range = 1...10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9]

一些有用的方法

Method name Output
cover? (1..5).cover?(5) => true
end ('a'..'z').end => "z"
first (1..5).first => 1
first(3) ('A'..'Z').first(2) => ["A", "B"]
eql? ((0..2).eql?(0..5) => false

在 Range 中使用 step

(1..20).step(2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

条件结构

if 修饰符

num = 2
puts 'two' if num == 2 

如果条件为真,则执行代码

if elsif else 语句

temp = 19
if temp >= 25
  puts "hot"
elsif temp < 25 && temp >= 18
  puts "normal"
else
  puts "cold"
end
# 输出 => normal

除非语句

# 除非与 if 相反,当语句为假时进行评估
name = "rob"
# if name != "bob"
unless name == "bob"
  puts "hello stranger"
else
  puts "hello bob"
end
# 输出 => hello stranger
num = 6
puts 'not two' unless num == 2
# 输出 => not two

case 陈述

# case 返回最后执行的表达式的值
case input
# 检查一个整数,19
when 19
  puts "It's 19"
  # 检查浮点数,33.3
when 33.3
  puts "It's 33.3"
  # 检查一个确切的字符串,“Zaman”
when "Zaman"
  puts "Hi Zaman"
when 10
  puts "It's 10"
  # 检查范围
when 7..11
  puts "It's between 7 and 11"
  # 检查多个值,“咖啡”
when "tea", "coffee"
  puts "Happy days"
  # 检查正则表达式“aA6”
when /^a[A-Z]+[0-6]+$/
  puts "It's a valid match"
  # 通过与 String 类“任何字符串”
  # 进行比较来检查任何字符串
when String
  puts "It's a String"
end

case 简短的语法

case input
  when 19 then puts "It's 19"
end

case 可选的失败

case input
  when 19 then puts "It's 19"
else
  puts "It's not 19"
end

case 获取返回值

marks = 86
result = case marks
        when 0..49 then "Fail"
        when 50..64 then "Pass"
        when 65..74 then "Credit"
        when 75..84 then "Distinction"
        when 85..100 then "High Distinction"
        else "Invalid marks"
        end

puts result
# High Distinction

字符串

字符串插值

name = "World"
puts "Hello #{name}"
puts "The total is #{1+1}"
# "the total is 2"

字符串插值允许您将字符串组合在一起

提取子字符串

string = "abc123"
string[0,3]
# "abc"
string[3,3]
# "123"
string[0..-2]
# "abc12"
#remove or replace the substring
string[0..2] = ""
puts string
# "123"

子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾

将字符串转换为小写或大写

"HELLO World".downcase  # "hello world"
"hello worlD".upcase    # "HELLO WORLD"
"hEllo wOrlD".capitalize # "Hello world"
"hEllo WOrlD".swapcase  # "HeLLO woRLd"

有用的方法

函数名称 Output Note
length or size "HELLO World".length => 11
"HELLO World".size => 11
返回字符串的长度
reverse "hello worlD".reverse => "Dlrow olleh" 返回反转的字符串
include? other_str "hEllo wOrlD".include? "w" => true 如果字符串或字符存在则返回 true,否则返回 false
gsub(pattern, replacement) "hEllo wOrlD".gsub(" ", "_") => "hEllo_wOrlD" gsub 或全局替换用提供的字符串替换一个或多个字符串
gsub(pattern, hash) "organization".gsub("z", 'z' => 's') => "organisation" gsub 或全局替换用提供的哈希替换一个或多个字符串
gsub(pattern) { |match| block} "Price of the phone is 1000 AUD".gsub(/\d+/) { |s| '$'+s }
"Price of the phone is $1000 AUD"
gsub 或全局替换用提供的块替换一个或多个字符串
strip " hEllo WOrlD ".strip
"hEllo WOrlD"
它将删除(修剪)以下任何前导和尾随字符:null(“\x00”)、水平制表符(“\t”)、换行符(\n)、垂直制表符(“\v”)、换页符(f)、回车(\r)、空格(" ")
prepend a = "world" <br> a.prepend("hello ")
"hello world"
在另一个字符串之前添加字符串
insert a = "hello" <br> a.insert(a.length, " world")
"hello world"
在特定位置插入字符串
start_with? string = "ruby programming"
string.start_with? "ruby"
true
检查字符串是否以特定前缀开头
end_with? string = "ruby programming"
string.end_with? "ruby"
false
检查字符串是否以特定前缀结尾
delete_suffix string = "sausage is expensive"
string.delete_suffix(" is expensive")
"sausage"
从字符串中删除后缀
delete_prefix string = "sausage is expensive"
string.delete_prefix("sausage")
" is expensive"
从字符串中删除前缀
split string = "a b c d" <br> string.split
["a", "b", "c", "d"]
将字符串转换为字符数组
join arr = ['a', 'b', 'c'] <br> arr.join => "abc" 将数组转换为字符串
to_i a = "49" <br> a.to_i => 49 将字符串转换为整数
chop "abcd?".chop("?") => "abcd" 从字符串中删除最后一个字符
count str = "aaab" <br> str.count("a")
3
计算字符串中的字符
to_f a = "49"
a.to_f
49.0
将字符串转换为浮点数
to_sym a = "key"
a.to_sym
:key
将字符串转换为符号
match "abcd?".match(/ab/) => #<MatchData "ab"> 将模式转换为正则表达式并在字符串上调用其匹配方法
empty? "hello".empty? => false 如果字符串的长度为零,则返回 true
squeeze "Booook".squeeze => "Bok" 返回字符串的副本,其中相同字符的运行被单个字符替换
* puts "Ruby " * 4 => Ruby Ruby Ruby Ruby 返回多个 self 副本的串联
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
eql? s = 'foo' => true
s.eql?('foo') => true
如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接

方法

声明一个方法

def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    parameter1 + parameter2
end

res = method_name(20, 10)
# 输出 => 30
def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2
end
# 输出 => 30

调用方法

res = method_name(parameter1, parameter2)
# 可以调用不带括号的方法
res = method_name parameter1, parameter2

类方法

类方法是类级别的方法。 有多种定义类方法的方法

class Mobile
    def self.ring
        "ring ring ring..."
    end
end

Mobile.ring

class Mobile
    def Mobile.ring
        "ring ring ring..."
    end
end
Mobile.ring

class Mobile
    class << self
    def ring
        "ring ring ring..."
       end
    end
end
Mobile.ring

类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)

Mobile = Class.new do
    def self.ring
        "ring ring ring..."
    end
end
Mobile.ring
Mobile = Class.new
class << Mobile
    def ring
        "ring ring ring..."
    end
end
Mobile.ring

使用另一个参数作为默认值

def method_name(num1, num2 = num1)
    return num1 + num2
end
res = method_name(10)
# 输出 => 20

为方法参数定义默认值

def method_name(parameter1, parameter2, type = "ADD")
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2 if type == "ADD"
    return parameter1 - parameter2 if type == "SUB"
end
res = method_name(20, 10)
# 输出 => 30

将可变长度参数传递给方法参数

def method_name(type, *values)
    return values.reduce(:+) if type == "ADD"
    return values.reduce(:-) if type == "SUB"
end
numbers = [2, 2, 2, 3, 3, 3]
res = method_name("ADD", *numbers)
# 输出 => 15
res = method_name("SUB", *numbers)
# 输出 => -11
# 或者您可以提供这样的值
res = method_name("ADD", 2, 2, 2, 3, 3, 3)
# 输出 => 15

修改对象

a = ["Drama", "Mystery", "Crime",
"Sci-fi", "Disaster", "Thriller"]
a.sort
puts a
# 我们没有修改对象
# Drama
# Mystery
# Crime
# Sci-fi
# Disaster
# Thriller
a.sort!
puts a
# 修改对象
# Crime
# Disaster
# Drama
# Mystery
# Sci-fi
# Thriller

当您要修改对象时,在方法之后使用 !

布尔方法

在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false

"some text".nil?
# false
nil.nil?
# true

您可以拥有自己的布尔方法

def is_vowel?(char)
    ['a','e','i','o','u'].include? char
end
is_vowel? 'a'
# true
is_vowel? 'b'
# false

Blocks (块)

块示例

# return value
def give_me_data
    data = yield
    puts "data = #{data}"
end
give_me_data { "Big data" }
# 输出 => data = Big data

do 和 end(用于多行)或花括号 { 和 }(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 (|arg1, arg2|)

单行块

salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# puts s = block body
# |s| = block arugments

多行块

salary.each do |s|
    a = 10
    res = a * s
    puts res
end
# 块体
# a = 10
# res = a * s
# puts res
# 块参数
# |s|

块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句

隐式传递一个块

def give_me_data
    puts "I am inside give_me_data method"
    yield
    puts "I am back in give_me_data method"
end

give_me_data { puts "Big data" }

# 输出
# I am inside give_me_data method
# Big data
# I am back in give_me_data method

多次调用

def give_me_data
    yield
    yield
    yield
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data
# Big data

使用块参数调用

def give_me_data
    yield 10
    yield 100
    yield 30
end

give_me_data { |data| puts "Big data #{data} TB" }

# 输出
# Big data 10 TB
# Big data 100 TB
# Big data 30 TB

使用多个块参数调用

def give_me_data
    yield "Big data", 10, "TB"
    yield "Big data", 100, "GB"
    yield "Big data", 30, "MB"
end

give_me_data { |text, data, unit| puts "#{text} #{data} #{unit}" }

# 输出
# Big data 10 TB
# Big data 100 GB
# Big data 30 MB

块将尝试从当前上下文返回

give_me_data
    puts "我在 give_me_data 方法里面"
end

def test
  puts "我在测试方法里面"
  give_me_data { return 10 } # 代码从这里返回
  puts "I am back in test method"
end

return_value = test

# 输出
# 我在测试方法里面
# 我在 give_me_data 方法里面
# 10

通过使用 & 参数显式传递块

def give_me_data(&block)
    block.call
    block.call
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data

检查是否给出了块

def give_me_data
    yield
end

give_me_data

# 输出
# LocalJumpError: no block given (yield)

处理异常并使块可选的方法

def give_me_data
    return "no block" unless block_given?
    yield
end

give_me_data { puts "Big data" }
give_me_data

# 输出
# Big data

Procs

Procs 示例

p = Proc.new { puts "Hello World" }

def give_me_data(proc)
    proc.call
end

give_me_data p

# 输出
# Hello World

proc 就像一个可以存储在变量中的块

任意参数

p = Proc.new { |count| "Hello World " * count }

def give_me_data(proc)
    proc.call 5, 2
end

give_me_data p

# 输出
# "Hello World Hello World Hello World Hello World Hello World "

proc 将尝试从当前上下文返回

p = Proc.new { return 10 }
p.call
# 输出
LocalJumpError: unexpected return

不能从顶级上下文返回

def give_me_data
    puts "我在 give_me_data 方法里面"
    p = Proc.new { return 10 }
    p.call # 代码从这里返回
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# 我在 give_me_data 方法里面
# 10

Lambdas

声明一个 lambda

l = lambda { puts "Hello World" }
# 速记
l = -> { puts "Hello World" }
# 调用 lambda
l.call
# 输出 => Hello World

有多种方法可以调用 lambda

l.()
l[]

严格的 arguments

l = -> (count) { "Hello World " * count }
l.call 5
# 输出
# "Hello World Hello World Hello World Hello World Hello World "
l.call 5, 2
# 输出
wrong number of arguments (given 2, expected 1)

块中声明一个 lambda

def give_me_data
    puts "I am inside give_me_data method"
    l = -> { return 10 }
    l.call
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# I am inside give_me_data method
# I am back in give_me_data method
# nil # because puts return nil

lambdas 从 lambda 本身返回,就像常规方法一样

l = -> { return 10 }
l.call

# 输出 => 10

数组

初始化一个空数组

array = Array.new   #=> []
# or
array = []

包含不同类型的对象的数组

array = [1, "two", 3.0] 
#=> [1, "two", 3.0]

用初始大小和默认对象填充数组

numbers = Array.new(3)       
#=> [nil, nil, nil]
numbers = Array.new(3, 7)    
#=> [7, 7, 7]
numbers = Array.new(3, true) 
#=> [true, true, true]
numbers = []
numbers.fill(7, 0..2)   #=> [7, 7, 7]

不同哈希值的数组

array_with_hashes = Array.new(2) { {} } #=> [{}, {}]
array_with_hashes[0][:name] = "Bob"
array_with_hashes[0][:id] = 10          #=> [{:name=>"Bob", :id=>10}, {}]

二维数组

temperature_data = [
              ["A908", 38],
              ["A909", 37],
              ["A910", 38],
          ]
temperature_data[0]    #=> ["A908", 38]
temperature_data[0][0] #=> "A908"
temperature_data[0][1] #=> 38

数组索引

str_array = [
  "This", "is", "a", "small", "array"
]
str_array[0]            #=> "This"
str_array[1]            #=> "is"
str_array[4]            #=> "array"

负索引

str_array = [
  "This", "is", "a", "small", "array"
]
# 索引 -1 表示最后一个元素
str_array[-1]        #=> "array"
# 索引 -2 表示倒数第二个元素
str_array[-2]        #=> "small"
str_array[-6]        #=> nil

数组方法 at

str_array = [
  "This", "is", "a", "small", "array"
]

puts str_array.at(0)      #=> "This"

范围获取

arr = [1, 2, 3, 4, 5, 6]
arr[100]                  #=> nil
arr[-3]                   #=> 4
arr[2, 3]                 #=> [3, 4, 5]
arr[1..4]                 #=> [2, 3, 4, 5]
arr[1..-3]                #=> [2, 3, 4]

数组方法 fetch

arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100)
#=> IndexError: 数组边界外的索引 100:-6...6
arr.fetch(100, "oops")    #=> "oops"

超出边界,给默认值

获取数组元素

arr = [1, 2, 3, 4, 5, 6]

arr.first     # 第一个值 => 1
arr.last      # 最后一个值 => 6
# take 返回前 n 个元素
arr.take(3)   #=> [1, 2, 3]
# drop 在 n 个元素被删除之后
arr.drop(3)   #=> [4, 5, 6]

在数组末尾添加值 push

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.push(11)          
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
numbers.push(12, 13, 14)  
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

数组末尾删除值 pop

num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_array.pop             #=> 10
num_array
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

在数组的开头添加值 unshift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(0)          
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(-3, -2, -1) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

检索并同时删除第一个元素 shift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.shift #=> 1
numbers
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

删除特定索引处的元素 delete_at

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_at(2) #=> 4
numbers             
#=> [2, 3, 5, 6, 7, 8, 9, 10]

删除数组中任意位置的特定元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete(2) #=> 2
numbers           #=> [3, 5, 6, 7, 8, 9, 10]

在给定索引处插入值 insert

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, 0)           
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, -3, -2, -1)  
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

numbers.insert(-1, 12, 13, 14) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
numbers.insert(-4, 11)         
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

一个块来填充数组的值

numbers = Array.new(10) { |n| n = n * 2 } 
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

填充数组变得更容易

numbers = Array(100..110)
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

# 或者我们可以将范围转换为数组
(100..110).to_a 
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

从数组中删除 nil 值

arr = ['foo', 0, nil, 'bar', 7, nil]
arr.compact  #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, nil, 'bar', 7, nil]
arr.compact! #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, 'bar', 7]

去重 uniq

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]

检查数组中是否存在值(include?)

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.include? "Mars"
# 输出 => true
planets.include? "Pluto"
# 输出 => false

获取数组大小

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.size
# 输出 => 8
planets.length
# 输出 => 8

您可以使用大小或长度,两者都是同义词

清除数组

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.clear
# 输出 => []

获取数组的第一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0]
# or
numbers.first
# 输出 => 1

获取数组的最后一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[-1]
# or
numbers.last
# 输出 => 10

合并两个数组

a = ["tom", "mot", "otm"]
b = [2, 3, 5]
a.zip(b)
# 输出
# [["tom", 2], ["mot", 3], ["otm", 5]]

对数组进行排序

primes = [7, 2, 3, 5]
sorted_primes = primes.sort
puts "#{sorted_primes}"
# 输出 => [2, 3, 5, 7]

or in-place sort

primes = [7, 2, 3, 5]
primes.sort!
puts "#{primes}"
# 输出 => [2, 3, 5, 7]
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.sort
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p }
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p.length }
# 输出
# ["Mars", "Earth", "Venus", "Saturn", "Uranus", "Neptune", "Jupiter", "Mercury"]

从数组中获取最大值

primes = [7, 2, 3, 5]
primes.max_by { |p| p }
# 输出 => 7

使用范围获取数组元素

# numbers[start..end], both index are inclusive
puts numbers[0..3]
# 1
# 2
# 3
# 4
# numbers[start..end], end index is exclusive
puts numbers[0...3]
# 1
# 2
# 3
# or numbers[start..length]
puts numbers[0, 1]
# 1

获取数组的前n个元素

primes = [7, 2, 3, 5]
primes.take(3)
# [7, 2, 3]

访问元素

primes = [7, 2, 3, 5]
primes.fetch(3)
# 5
# Fetch will throw an error if the element does not exist
primes.fetch(10)
# (index 10 outside of array bounds: -4...4)
# or get an default value
primes.fetch(10, -1)
# -1

从数组中删除重复元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]
numbers.uniq
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

删除前 n 个元素

primes = [7, 2, 3, 5]
primes.drop(3)
# [5]

删除第一个元素

primes = [7, 2, 3, 5]
primes.shift
# [2, 3, 5]

删除最后一个元素

primes = [7, 2, 3, 5]
primes.pop
# [7, 2, 3]

删除带有索引的元素

primes = [7, 2, 3, 5]
primes.delete_at(-1)
# [7, 2, 3]

删除所有出现的元素

primes = [7, 2, 3, 5, 5]
primes.delete(5)
# [7, 2, 3]

each

# 当你有单行块时
salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# 输出
# 399
# 234
# 566
# 533
# 233

当你有一个多行块时,你可以用 do 和 end 替换花括号 {}

salary.each do |s|
  a = 10
  res = a * s
  puts res
end
# 输出
# 3990
# 2340
# 5660
# 5330
# 2330

或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情

salary.each { |s| a = 10 ; res = a * s ; puts res }

each_with_index

salary = [399, 234, 566, 533, 233]
salary.each_with_index { |value, index| puts "#{index} #{value}" }
# 输出
# 0 399
# 1 234
# 2 566
# 3 533
# 4 233

each_index

salary = [399, 234, 566, 533, 233]
salary.each_index { |i| puts i}
# 输出
# 0
# 1
# 2
# 3
# 4

map

salary = [399, 234, 566, 533, 233]
salary.map { |s|  s * 10  }
# 返回
# [3990, 2340, 5660, 5330, 2330]
# 另一方面,每个都返回原始值
salary = [399, 234, 566, 533, 233]
salary.each { |s|  s * 10  }
# 返回
# [399, 234, 566, 533, 233]

collect

salary = [399, 234, 566, 533, 233]
salary.collect { |s| s > 400 }
# 输出
# [false, false, true, true, false]

for

for value in [2, 3, 5, 7]
    puts value
end

each_with_object

colors = [
  {color: "red", count: 3}, {color: "red", count: 5}, {color: "black", count: 4}
]
colors.each_with_object(Hash.new(0)) { |color, hash| hash["color_"+color[:color]] = color[:color].upcase; hash["count_"+color[:color]] += color[:count] }
# 输出
{"color_red"=>"RED", "count_red"=>8, "color_black"=>"BLACK", "count_black"=>4}

[1, 2, 3].each_with_object(0) { |number, sum| sum += number}
# 输出
# 0
# 因为0是不可变的,由于初始对象是0,所以方法返回0

while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
while index < planets.size
    puts "#{planets[index]}"
    index += 1
end

a = 1
star = '*'
while a <= 10
    puts star
    star += '*'
    a += 1
end

do while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
loop do
    puts "#{planets[index]}"
    index += 1
    break if planets[index] == "Mars" or index > planets.size
end

until

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = planets.size - 1
until index < 0
    puts "#{planets[index]}"
    index -= 1
end
a = 1
star = '*'
until star.length > 10
    puts star
    star += '*'
    a += 1
end

times

10.times { puts "#{rand(1..100)}"}
# 输出
# 将打印 10 个随机数

仅仅因为你可以并不意味着你应该像这样迭代一个数组

data_sample = [2, 3, 5, 7]
data_sample.size.times { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3
# 5
# 7

upto

data_sample = [2, 3, 5, 7]
0.upto((data_sample.size - 1) / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3

downto

data_sample = [2, 3, 5, 7]
(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 7
# 5

step

1.step(20, 2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

19.step(1, -2) { |number| puts "#{number}"}
# 输出
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1

inject

numbers = [2, 2, 2, 2, 2]
numbers.inject{ |res, n| res + n }
# 输出是所有数字之和的结果
# 如果不给res设置初始值,则数组的第一个元素作为res的初始值
# 10
# 现在将 res 的值设置为 11
numbers = [2, 2, 2, 2, 2]
numbers.inject(11) { |res, n| res + n }
# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2
# 21
# using symbol
numbers = [2, 2, 2, 2, 2]
numbers.inject(:+)
# 输出
# 10

使用初始值和符号

numbers = [2, 2, 2, 2, 2]
numbers.inject(11, :+)
# 输出
# 21

reduce

numbers = [2, 2, 2, 2, 2]
numbers.reduce(11, :+)
# 输出
# 21

detect

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.detect { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth
salary = [399, 234, 566, 533, 233]
salary.detect { |s| s > 1000 }
# output
# nil

find

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.find { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth

select

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.select { |n| n % 2 == 0 }
# 现在你有一个偶数数组
# [2, 4, 6, 8, 10]
# 如果没有满足您的逻辑的值,则返回一个空数组
[1, 1, 1].select { |n| n % 2 == 0 }
# no even numbers
# []

reject

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.reject { |n| n % 2 == 0 }
# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组
# [1, 3, 5, 7, 9]

keep_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.keep_if { |n| n % 2 == 0 }
# numbers 数组仅包含偶数
# [2, 4, 6, 8, 10]

delete_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_if { |n| n % 2 == 0 }
# numbers 数组仅包含奇数
# [1, 3, 5, 7, 9]

drop_while

numbers = [1, 2, 3, 1, 2, 3, 0]
numbers.drop_while { |n| n < 3 }
# 是 3 小于 3,返回 false,所以删除 1, 2
# [3, 1, 2, 3, 0]

reverse_each

words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first "

布尔可枚举方法

布尔可枚举方法

Name When to use
all? 当您想检查所有元素是否满足您的条件时
any? 当您想检查至少一项是否满足您的条件时
one? 当您想检查一个元素是否满足您的要求时
none? 当您想检查是否没有任何项目满足您的条件时,相反?
empty? 当你想检查对象是否为空时
include? 当你想检查元素是否存在于对象中时

all?

[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# true
[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# false

any?

[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }
# true
[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }
# false

one?

[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }
# true
[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }
# false

none?

[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# true
[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# false

empty?

[].empty?
# true
[1, 3, 5, 7, 9].empty?
# false

组合方法

组合方法

  • & 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目
  • intersection 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目
  • + 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素
  • - 返回一个数组,其中包含在给定数组中找不到的所有 self 元素
  • union 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项
  • difference 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素
  • product 返回或产生来自 self 和给定数组的所有元素组合

&

[0, 1, 2, 3] & [1, 2] # => [1, 2]
[0, 1, 0, 1] & [0, 1] # => [0, 1]

intersection

[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]
[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]

+

a = [0, 1] + [2, 3]
a # => [0, 1, 2, 3]

-

[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] 
# => [0, 2, 3]
[0, 1, 2, 3] - [3, 0] 
# => [1, 2]
[0, 1, 2] - [4] 
# => [0, 1, 2]

union

[0, 1, 2, 3].union([4, 5], [6, 7]) 
# => [0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 1].union([2, 1], [3, 1]) 
# => [0, 1, 2, 3]
[0, 1, 2, 3].union([3, 2], [1, 0]) 
# => [0, 1, 2, 3]

difference

[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])
# => [0, 2, 3]
[0, 1, 2, 3].difference([3, 0], [1, 3])
# => [2]
[0, 1, 2].difference([4])
# => [0, 1, 2]

product

a = [0, 1, 2]
a1 = [3, 4]
p = a.product(a1)
p.size # => 6 # a.size * a1.size
p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]

循环

while 循环

# variable count
count = 4
# using while loop
# here conditional is count i.e. 4
while count >= 1
  # statements to be executed
  puts "Ruby Cheatsheet"
  count = count - 1
  # while loop ends here
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

for 循环

# loop using range as expression
text = "Ruby Cheatsheet"
# using for loop with the range
for count in 1..5 do
  puts text
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

do..while 循环

# starting of do..while loop
loop do
  puts "Ruby Cheatsheet"
  val = '7'
  # using boolean expressions
  if val == '7'
    break
  end
  # ending of ruby do..while loop
end

输出

Ruby Cheatsheet

until 循环

var = 7
# here do is optional
until var == 11 do
  # code to be executed
  puts var * 10
  var = var + 1
  # here loop ends
end

输出

70
80
90
100

跳出循环

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  break if s == 566
  puts s
end
# 输出
# 399
# 234

通过使用 break 关键字

在循环内跳过

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  next if s == 533
  puts s
end
# 输出
# 399
# 234
# 566
# 233

通过使用 next 关键字

重复当前迭代

data = [456, 3000]
retry_count = 0
status = "network failure"
sum = 0
data.each do |d|
    if retry_count == 3
        status = "connection established"
        retry_count = 0
        redo
    elsif status == "network failure" and retry_count < 5
        puts "network failure #{retry_count}"
        retry_count += 1
        redo
    elsif status == "connection established"
        puts d
        sum += d
    end
end
# output of sum
# 3456

重新开始循环

numbers = [2, 2, 44, 44]
sum = 0
begin
    numbers.each do |s|
        if rand(1..10) == 5
            puts "hi 5, let's do it again!"
            sum = 0
            raise "hi 5"
        end
        puts s
        sum += s
    end
rescue
    retry
end

Classes

Classes 示例

class Person
    # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java
    # def initialize(name, number)
    #    @name = name
    #    @number = number
    # end
    # instance variable
    # @name
    # class variable
    # @@count
    # attr_accessor acts as a getter and setter for the following instance attributes
    attr_accessor :name, :number
    # class variable must be initialized
    @@count = 0
    def self.count
        @@count
    end
    def self.count=(count)
        @@count = count
    end
    def initialize
        @@count += 1
    end
end
# create an instance of the Person class
p1 = Person.new
# set attributes of the Person class
p1.name = "Yukihiro Matsumoto"
p1.number = 9999999999
# get attributes of the Person class
puts "#{p1.name}"
puts "#{p1.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 1
p2 = Person.new
p2.name = "Yukihiro Matsumoto"
p2.number = 9999999999
# get attributes of the Person class
puts "#{p2.name}"
puts "#{p2.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 2
# set class variable
Person.count = 3
puts "#{Person.count}"
# 3

继承一个类

class Person
    attr_accessor :name, :number
end
# 使用 < 符号从父类继承方法和属性
class Student < Person
    attr_accessor :id
end
s = Student.new
s.name = "James Bond"
s.number = 700
s.id = 678
puts "#{p.name}"
James Bond
puts "#{p.number}"
700
puts "#{p.id}"
678

检查实例类型

class Vehicle; end
class Car < Vehicle; end
class Audi < Car; end
car = Car.new
car.instance_of? Vehicle
false
car.instance_of? Car
true
car.instance_of? Audi
false
a = 7
a.instance_of? Integer
true
a.instance_of? Numeric
false

如果对象是给定类的实例,而不是子类或超类,则返回 true

打印一个类的所有方法名

puts (String.methods).sort
# 排除从 Object 类继承的方法
puts (String.methods - Object.public_instance_methods).sort

检查一个类是否有特定的方法

String.respond_to?(:prepend)
true
String.respond_to?(:append)
false

另见

` | 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)","`$+` | 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)","`$1`, `$2...` | 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \\digit)这些变量都是只读的","`$~` | 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 `$\u0026、$+、$1、$2..` 等。第 n 个子表达式可以通过 `$~[nth]` 检索。 (助记符:`~` 用于匹配)这个变量是局部作用域的","`$=` | 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)","`$/` | 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)","`$\\` | print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)","`$,` | 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)","`$;` | String#split 的默认分隔符。","`$.` | 读取的最后一个文件的当前输入行号。","`$\u003c` | 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 `$\u003c.file` 返回当前文件名。 (助记符:`$\u003c` 是一个 shell 输入源)","`$\u003e` | `print` 的默认输出,`printf`。 `$stdout` 默认情况下。 (助记符:`$\u003e` 用于 shell 输出)","`$_` | 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)","`$0` | 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)","`$*` | 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)","`$` | 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)","`$?` | 最后执行的子进程的状态。","`$:` | 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 `-I` 命令行开关的参数组成,然后是默认的 Ruby 库,probabl `\"/usr/local/lib/ruby\"`,然后是 `\".\"`,表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)","`$\"` | 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)","`$DEBUG` | `-d` 开关的状态。","`$FILENAME` | 与`$\u003c.filename` 相同","`$LOAD_PATH` | `$:` 的别名","`$stdin` | 当前的标准输入","`$stdout` | 当前的标准输出","`$stderr` | 当前标准错误输出","`$VERBOSE` | 详细标志,由 `-v` 开关设置到 Ruby 解释器","","### 预定义的全局常量","\u003c!--rehype:wrap-class=col-span-2--\u003e","","名字 | 说明",":-- | --","`TRUE` | 典型的真值。在 Ruby 中,所有非 `false` 值(除了 `nil` 和 `false` 之外的所有值)都是 `true`","`FALSE` | 虚假本身","`NIL` | 零本身","`STDIN` | 标准输入。`$stdin` 默认值","`STDOUT` | 标准输出。`$stdout` 默认值","`STDERR` | 标准错误输出。`$stderr` 默认值","`ENV` | 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境","`ARGF` | `$\u003c` 的别名","`ARGV` | `$*` 的别名","`DATA` | 脚本的文件对象,就在 **END** 之后。 除非未从文件中读取脚本,否则未定义","`VERSION` | Ruby 版本字符串","`RUBY_RELEASE_DATE` | 发布日期字符串","`RUBY_PLATFORM` | 平台标识符","","### 检查变量的范围","","```ruby","defined? count","\"local-variable\"","defined? @id","\"instance-variable\"","defined? @@name","\"class variable\"","defined? $version","\"global-variable\"","defined? PI","\"constant\"","```","","### 数据类型","\u003c!--rehype:wrap-class=col-span-2 row-span-3--\u003e","","类型 | 示例 | Class | 文档",":-- | -- | -- | --","`Integer` | a = 17 | a.class \u003e Integer \u003cbr\u003ea.class.superclass \u003e Numeric | [#][2]","`Float` | a = 87.23 | a.class \u003e Float \u003cbr\u003ea.class.superclass \u003e Numeric | [#][3]","`String` | a = \"Hello universe\" | a.class \u003e String | [#][4]","`Array` | a = [12, 34] | a.class \u003e Array | [#][5]","`Hash` | a = {type: \"tea\", count: 10} | a.class \u003e Hash | [#][6]","`Boolean` | a = false\u003cbr\u003ea = true | a.class \u003e FalseClass \u003cbr\u003ea.class \u003e TrueClass | [TrueClass][7] [FalseClass][8]","`Symbol` | a = :status | a.class \u003e Symbol | [#][9]","`Range` | a = 1..3 | a.class \u003e Range | [#][10]","`Nil` | a = nil | a.class \u003e NilClass | [#][11]","\u003c!--rehype:className=show-header--\u003e","","[进一步阅读](https://www.digitalocean.com/community/tutorials/understanding-data-types-in-ruby)","","### 检查数据类型","","```ruby","# 两者都是同义词","a = 37","a.kind_of? Integer","# true","a.is_a? Integer","# true","```","","### Symbol","","```ruby","week_days = {sunday: 11, monday: 222}","```","","### 整数有用的方法","","```ruby","2.even?","# true","3.even?","# false","```","","### 范围","","`..` 用于创建包含范围","","```ruby","range = 1..10","range.to_a","# 输出 =\u003e [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","```","","`...` 用于创建专属范围","","```ruby","range = 1...10","range.to_a","# 输出 =\u003e [1, 2, 3, 4, 5, 6, 7, 8, 9]","```","","一些有用的方法","","Method name | Output",":----------- | -----","`cover?` | `(1..5).cover?(5)` =\u003e `true`","`end` | `('a'..'z').end` =\u003e `\"z\"`","`first` | `(1..5).first` =\u003e `1`","`first(3)` | `('A'..'Z').first(2)` =\u003e `[\"A\", \"B\"]`","`eql?` | `((0..2).eql?(0..5)` =\u003e `false`","","### 在 Range 中使用 step","","```ruby","(1..20).step(2) { |number| puts \"#{number}\"}","# 输出","# 1","# 3","# 5","# 7","# 9","# 11","# 13","# 15","# 17","# 19","```","","条件结构","---","","### if 修饰符","","```ruby","num = 2","puts 'two' if num == 2 ","```","","如果条件为真,则执行代码","","### if elsif else 语句","","```ruby","temp = 19","if temp \u003e= 25"," puts \"hot\"","elsif temp \u003c 25 \u0026\u0026 temp \u003e= 18"," puts \"normal\"","else"," puts \"cold\"","end","# 输出 =\u003e normal","```","","### 除非语句","","```ruby","# 除非与 if 相反,当语句为假时进行评估","name = \"rob\"","# if name != \"bob\"","unless name == \"bob\""," puts \"hello stranger\"","else"," puts \"hello bob\"","end","# 输出 =\u003e hello stranger","num = 6","puts 'not two' unless num == 2","# 输出 =\u003e not two","```","","### case 陈述","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","# case 返回最后执行的表达式的值","case input","# 检查一个整数,19","when 19"," puts \"It's 19\""," # 检查浮点数,33.3","when 33.3"," puts \"It's 33.3\""," # 检查一个确切的字符串,“Zaman”","when \"Zaman\""," puts \"Hi Zaman\"","when 10"," puts \"It's 10\""," # 检查范围","when 7..11"," puts \"It's between 7 and 11\""," # 检查多个值,“咖啡”","when \"tea\", \"coffee\""," puts \"Happy days\""," # 检查正则表达式“aA6”","when /^a[A-Z]+[0-6]+$/"," puts \"It's a valid match\""," # 通过与 String 类“任何字符串”"," # 进行比较来检查任何字符串","when String"," puts \"It's a String\"","end","```","","### case 简短的语法","","```ruby","case input"," when 19 then puts \"It's 19\"","end","```","","### case 可选的失败","","```ruby","case input"," when 19 then puts \"It's 19\"","else"," puts \"It's not 19\"","end","```","","### case 获取返回值","","```ruby","marks = 86","result = case marks"," when 0..49 then \"Fail\""," when 50..64 then \"Pass\""," when 65..74 then \"Credit\""," when 75..84 then \"Distinction\""," when 85..100 then \"High Distinction\""," else \"Invalid marks\""," end","","puts result","# High Distinction","```","","字符串","---","","### 字符串插值","","```ruby","name = \"World\"","puts \"Hello #{name}\"","puts \"The total is #{1+1}\"","# \"the total is 2\"","```","","字符串插值允许您将字符串组合在一起","","### 提取子字符串","","```ruby","string = \"abc123\"","string[0,3]","# \"abc\"","string[3,3]","# \"123\"","string[0..-2]","# \"abc12\"","#remove or replace the substring","string[0..2] = \"\"","puts string","# \"123\"","```","","子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾","","### 将字符串转换为小写或大写","","```ruby","\"HELLO World\".downcase # \"hello world\"","\"hello worlD\".upcase # \"HELLO WORLD\"","\"hEllo wOrlD\".capitalize # \"Hello world\"","\"hEllo WOrlD\".swapcase # \"HeLLO woRLd\"","```","","### 有用的方法","\u003c!--rehype:wrap-class=col-span-3--\u003e","","函数名称 | Output | Note",":--- | ----- | ------","length or size | `\"HELLO World\".length` =\u003e `11` \u003cbr\u003e `\"HELLO World\".size` =\u003e `11` | 返回字符串的长度","reverse | `\"hello worlD\".reverse` =\u003e `\"Dlrow olleh\"` | 返回反转的字符串","include? other_str | `\"hEllo wOrlD\".include? \"w\"` =\u003e `true` | 如果字符串或字符存在则返回 true,否则返回 false","gsub(pattern, replacement) | `\"hEllo wOrlD\".gsub(\" \", \"_\")` =\u003e `\"hEllo_wOrlD\"` | gsub 或全局替换用提供的字符串替换一个或多个字符串","gsub(pattern, hash) | `\"organization\".gsub(\"z\", 'z' =\u003e 's')` =\u003e `\"organisation\"` | gsub 或全局替换用提供的哈希替换一个或多个字符串","gsub(pattern) { \\|match\\| block} | `\"Price of the phone is 1000 AUD\".gsub(/\\d+/) { \\|s\\| '

Latest commit

 

History

History
2458 lines (2025 loc) · 53 KB

File metadata and controls

2458 lines (2025 loc) · 53 KB

Ruby 备忘清单

入门

安装

# Debian, Ubuntu
$ sudo apt-get install ruby-full
# Windows
$ winget install RubyInstallerTeam.Ruby 
$ brew install ruby # macOS
$ docker run -it --rm ruby:latest # Docker
$ docker run -it --rm ruby:2.7

使用包管理器安装 rbenv

$ brew install rbenv ruby-build # macOS
# Debian、ubuntu 和其他衍生产品
$ sudo apt install rbenv

使用 rbenv 安装 ruby

# 列出最新的稳定版本
$ rbenv install -l
# 列出所有本地版本
$ rbenv install -L
# 安装 Ruby 版本
$ rbenv install 3.1.2
$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本
# 或者
$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本
$ rbenv local --unset
$ rbenv version # 显示当前活动的 Ruby 版本
=> 1.9.3-p327 (set by /Users/sam/.rbenv/version)

使用 RVM 安装 ruby

$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm list          # Ruby 版本列表
$ rvm install 3.0.1 # 安装 3.0.1
$ rvm use 3.0.1     # 使用 3.0.1

如何安装 ruby gem 管理器, bundler gem

# 访问 bash 以执行以下命令
$ docker run -it --rm ruby:latest bash
$ gem install bundler
$ bundle -v
$ gem update bundler
$ gem uninstall bundler

什么是 Gemfile 和 Gemfile.lock

Gemfile 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)

# 在项目根目录的 Gemfile 中指定 gem
ruby '2.5.6'

source 'https://rubygems.org'
gem 'nokogiri'
gem 'rack', '~>1.1'
gem 'rspec', :require => 'spec'

安装 Gemfile 中的所有 gem

$ bundle install

解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题

bundle lock --add-platform x86_64-linux

安装特定 ruby gem 的特定版本

$ gem install bundler -v 1.17
$ gem install minitest -v 5.8.4

使用 Bundler 更新 gem

# 使用 Bundler 更新单个 gem
$ bundle update nokogiri
# 使用 Bundler 更新 Gemfile 中的每个 gem
$ bundle update

保留字

保留字 描述
__ENCODING__ 当前文件的脚本编码
__LINE__ 当前文件中此关键字的行号
__FILE__ 当前文件的路径
BEGIN 包含在 { } 中的代码在程序运行之前运行
END 包含在 { } 中以在程序结束时运行
alias 为现有方法、运算符、全局变量创建别名
and 逻辑与运算符
begin 开始一段代码
break 终止循环
case 将表达式与匹配的 when 子句进行比较,其中
以 end 结束
class 定义一个类
def 定义函数/方法
defined? 检查某个变量、函数是否存在
do 开始一个代码块并执行块中的代码,以
end关键字结束
else 如果先前的条件不成立,则执行以下代码
elsif if 表达式的替代条件
end 用于结束以 begin、class、def、do、if 等关键字开头的代码块
ensure 总是在块终止时执行
false 逻辑布尔假值
for 开始一个 for 循环
if 如果 if 的条件语句为 true,则执行代码块
in 与 for 循环一起使用
module 定义一个模块
next 跳转到循环条件评估之前的点
nil 为空或无效或始终为假
not 逻辑否定运算符
or 逻辑或运算符
redo 条件循环后跳转
rescue 在引发异常后评估表达式
retry • 在救援之外调用时,重复方法调用
• 在救援内部调用时,跳转到块顶部
return 从方法或代码块返回值
self 当前对象
super 调用超类中的同名方法
then 与 if、unless、when、case、rescue 一起使用的分隔符
true 逻辑布尔真
undef 使当前类中的方法/函数未定义
until 在条件语句为假时执行代码块
when 在 case 语句下开始一个子句
while 执行代码块,直到条件语句变为假
yield 执行传递给方法的代码块

注释

# 单行注释
=begin
多行
注释
=end
=begin 注释第 1 行 =end
puts "Hello world!"  # 代码的内联注释

运算符

逻辑运算符

  • and
  • or
  • not
  • &&
  • ||
  • !

位运算符

  • &
  • |
  • ^
  • ~
  • <<
  • >>

算术运算符

  • +
  • -
  • *
  • /
  • %
  • **

比较运算符

  • ==
  • !=
  • >
  • <
  • >=
  • <=
  • <=>
  • ===
  • eql?
  • equal?

运算符示例

# 添加
1 + 1   #=> 2
# 减法
2 - 1   #=> 1
# 乘法
2 * 2   #=> 4
# 分配
10 / 5  #=> 2
17 / 5    #=> 3, not 3.4
17 / 5.0  #=> 3.4
# 指数
2 ** 2  #=> 4
3 ** 4  #=> 81
# 模数(求除法的余数)
8 % 2   #=> 0  (8 / 2 = 4; 没有剩余)
10 % 4  #=> 2  (10 / 4 = 2 余数为 2)
a = 10
b = 20
a == b #=> false
a != b #=> true
a > b #=> false
a < b #=> true
a >= b #=> false
a <= b #=> true

# 比较运算符
a <=> b #=> -1
c = 20
c <=> b #=> 0
c <=> a  #=> 1
# 用于测试 case 语句的 when 子句中的相等性
(1...10) === 5 #=> true
# 如果接收者和参数具有相同的类型和相等的值,则为真
1.eql?(1.0) #=> false
c = a + b  #=> 30
c += a #=> 40
c -= a #=> 30
c *= a #=> 300
c /= a #=> 30
c %= a #=> 3
c **= a #=> 59049

# Ruby 并行赋值
a = 10
b = 20
c = 30
a, b, c = 10, 20, 30
# Ruby 位运算符
a = 60
b = 13
# & 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。
a & b #=> 12
# | 如果二进制或运算符存在于任一操作数中,则复制一个位。
a | b #=> 61
# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。
a ^ b #=> 49
# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。
~a
# << 二进制左移运算符。 左操作数的值被移动
# 左操作数指定的位数。
a << 2
# >> 二进制右移运算符。 左操作数的值被移动
# 右操作数指定的位数。
a >> 2

# Ruby 逻辑运算符
a and b #=> true.
a or b #=> true.
a && b #=> true.
(a || b) #=> true.
!(a && b) #=> false.
not(a && b) #=> false.
# Ruby 三元运算符
# ? :
# 如果条件为真? 然后值 X :否则值 Y
a == 10 ? puts 'Right' : puts 'Wrong'
# Ruby 范围运算符
# .. 创建从起点到终点的范围(含)
1..10 #=> 创建从 1 到 10 的范围(包括 1 到 10)
# ... 创建一个从起点到终点的范围,不包括在内
1...10 #=> 创建一个从 1 到 10 的独占范围

运算符优先级表

  • !, ~, unary +
  • **
  • unary -
  • *, /, %
  • +, -
  • <<, >>
  • &
  • ^
  • >, >=, <, <=
  • <=>, ==, ===, !=, =~, !~
  • &&
  • ?, :
  • modifier-rescue
  • =, +=, -=, *=, /=, %=
  • defined
  • not
  • or, and
  • modifier-if, modifier-unless, modifier-while, modifier-until
  • { } 块
  • do ... end 块

变量和范围

名字 范围 示例 说明
[a-z] 或 _ 本地的 count = 10 或 _count = 10 必须初始化局部变量
@ 实例变量 @id = [] 实例变量在初始化之前具有“nil”值
@@ 类变量 @@name = [] 必须初始化类变量
$ 全局变量 $version = "0.8.9" 全局变量在初始化之前具有“nil”值
[A-Z] 持续的 PI = 3.14 常量变量必须初始化,您可以更改常量,但您会收到警告

有五种不同类型的变量。第一个字符确定范围

局部变量

current_weather = "rainy"
_weather = "sunny"

必须以下划线或小写字母开头

实例变量

# 实例类变量
@current_weather = "rainy"
# 全局变量
$current_weather = "rainy"
# 常量变量
WEATHER = "rainy".freeze

伪变量

名字 说明
self 当前方法的接收者对象
true TrueClass 的实例
false FalseClass 的实例
nil NilClass 的实例
__FILE__ 当前源文件名
__LINE__ 当前源文件的当前行号

选项变量

名字 说明
$-0 $/ 的别名
$-a 如果设置了选项 -a,则为真。只读变量
$-d $DEBUG 的别名
$-F $; 的别名
$-i 在就地编辑模式下,此变量保存扩展,否则为零
可以指定启用(或禁用)就地编辑模式
$-I $: 的别名
$-l 如果选项 -lis 设置为真。只读变量
$-p 如果选项 -pi 设置为真。只读变量
$-v $VERBOSE 的别名

预定义变量

名字 说明
$! 异常信息消息。raise 设置此变量
$@ 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in `methodname'”(助记符:发生异常的地方)
$& 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 &)这个变量是只读的
$` 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的
$' 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)
$+ 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)
$1, $2... 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \digit)这些变量都是只读的
$~ 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 $&、$+、$1、$2.. 等。第 n 个子表达式可以通过 $~[nth] 检索。 (助记符:~ 用于匹配)这个变量是局部作用域的
$= 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)
$/ 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)
$\ print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)
$, 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)
$; String#split 的默认分隔符。
$. 读取的最后一个文件的当前输入行号。
$< 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 $<.file 返回当前文件名。 (助记符:$< 是一个 shell 输入源)
$> print 的默认输出,printf。 $stdout 默认情况下。 (助记符:$> 用于 shell 输出)
$_ 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)
$0 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)
$* 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)
$$ 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)
$? 最后执行的子进程的状态。
$: 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 -I 命令行开关的参数组成,然后是默认的 Ruby 库,probabl "/usr/local/lib/ruby",然后是 ".",表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)
$" 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)
$DEBUG -d 开关的状态。
$FILENAME 与$<.filename 相同
$LOAD_PATH $: 的别名
$stdin 当前的标准输入
$stdout 当前的标准输出
$stderr 当前标准错误输出
$VERBOSE 详细标志,由 -v 开关设置到 Ruby 解释器

预定义的全局常量

名字 说明
TRUE 典型的真值。在 Ruby 中,所有非 false 值(除了 nil 和 false 之外的所有值)都是 true
FALSE 虚假本身
NIL 零本身
STDIN 标准输入。$stdin 默认值
STDOUT 标准输出。$stdout 默认值
STDERR 标准错误输出。$stderr 默认值
ENV 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境
ARGF $< 的别名
ARGV $* 的别名
DATA 脚本的文件对象,就在 END 之后。 除非未从文件中读取脚本,否则未定义
VERSION Ruby 版本字符串
RUBY_RELEASE_DATE 发布日期字符串
RUBY_PLATFORM 平台标识符

检查变量的范围

defined? count
"local-variable"
defined? @id
"instance-variable"
defined? @@name
"class variable"
defined? $version
"global-variable"
defined? PI
"constant"

数据类型

类型 示例 Class 文档
Integer a = 17 a.class > Integer
a.class.superclass > Numeric
#
Float a = 87.23 a.class > Float
a.class.superclass > Numeric
#
String a = "Hello universe" a.class > String #
Array a = [12, 34] a.class > Array #
Hash a = {type: "tea", count: 10} a.class > Hash #
Boolean a = false
a = true
a.class > FalseClass
a.class > TrueClass
TrueClass FalseClass
Symbol a = :status a.class > Symbol #
Range a = 1..3 a.class > Range #
Nil a = nil a.class > NilClass #

进一步阅读

检查数据类型

# 两者都是同义词
a = 37
a.kind_of? Integer
# true
a.is_a? Integer
# true

Symbol

week_days = {sunday: 11, monday: 222}

整数有用的方法

2.even?
# true
3.even?
# false

范围

.. 用于创建包含范围

range = 1..10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

... 用于创建专属范围

range = 1...10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9]

一些有用的方法

Method name Output
cover? (1..5).cover?(5) => true
end ('a'..'z').end => "z"
first (1..5).first => 1
first(3) ('A'..'Z').first(2) => ["A", "B"]
eql? ((0..2).eql?(0..5) => false

在 Range 中使用 step

(1..20).step(2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

条件结构

if 修饰符

num = 2
puts 'two' if num == 2 

如果条件为真,则执行代码

if elsif else 语句

temp = 19
if temp >= 25
  puts "hot"
elsif temp < 25 && temp >= 18
  puts "normal"
else
  puts "cold"
end
# 输出 => normal

除非语句

# 除非与 if 相反,当语句为假时进行评估
name = "rob"
# if name != "bob"
unless name == "bob"
  puts "hello stranger"
else
  puts "hello bob"
end
# 输出 => hello stranger
num = 6
puts 'not two' unless num == 2
# 输出 => not two

case 陈述

# case 返回最后执行的表达式的值
case input
# 检查一个整数,19
when 19
  puts "It's 19"
  # 检查浮点数,33.3
when 33.3
  puts "It's 33.3"
  # 检查一个确切的字符串,“Zaman”
when "Zaman"
  puts "Hi Zaman"
when 10
  puts "It's 10"
  # 检查范围
when 7..11
  puts "It's between 7 and 11"
  # 检查多个值,“咖啡”
when "tea", "coffee"
  puts "Happy days"
  # 检查正则表达式“aA6”
when /^a[A-Z]+[0-6]+$/
  puts "It's a valid match"
  # 通过与 String 类“任何字符串”
  # 进行比较来检查任何字符串
when String
  puts "It's a String"
end

case 简短的语法

case input
  when 19 then puts "It's 19"
end

case 可选的失败

case input
  when 19 then puts "It's 19"
else
  puts "It's not 19"
end

case 获取返回值

marks = 86
result = case marks
        when 0..49 then "Fail"
        when 50..64 then "Pass"
        when 65..74 then "Credit"
        when 75..84 then "Distinction"
        when 85..100 then "High Distinction"
        else "Invalid marks"
        end

puts result
# High Distinction

字符串

字符串插值

name = "World"
puts "Hello #{name}"
puts "The total is #{1+1}"
# "the total is 2"

字符串插值允许您将字符串组合在一起

提取子字符串

string = "abc123"
string[0,3]
# "abc"
string[3,3]
# "123"
string[0..-2]
# "abc12"
#remove or replace the substring
string[0..2] = ""
puts string
# "123"

子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾

将字符串转换为小写或大写

"HELLO World".downcase  # "hello world"
"hello worlD".upcase    # "HELLO WORLD"
"hEllo wOrlD".capitalize # "Hello world"
"hEllo WOrlD".swapcase  # "HeLLO woRLd"

有用的方法

函数名称 Output Note
length or size "HELLO World".length => 11
"HELLO World".size => 11
返回字符串的长度
reverse "hello worlD".reverse => "Dlrow olleh" 返回反转的字符串
include? other_str "hEllo wOrlD".include? "w" => true 如果字符串或字符存在则返回 true,否则返回 false
gsub(pattern, replacement) "hEllo wOrlD".gsub(" ", "_") => "hEllo_wOrlD" gsub 或全局替换用提供的字符串替换一个或多个字符串
gsub(pattern, hash) "organization".gsub("z", 'z' => 's') => "organisation" gsub 或全局替换用提供的哈希替换一个或多个字符串
gsub(pattern) { |match| block} "Price of the phone is 1000 AUD".gsub(/\d+/) { |s| '$'+s }
"Price of the phone is $1000 AUD"
gsub 或全局替换用提供的块替换一个或多个字符串
strip " hEllo WOrlD ".strip
"hEllo WOrlD"
它将删除(修剪)以下任何前导和尾随字符:null(“\x00”)、水平制表符(“\t”)、换行符(\n)、垂直制表符(“\v”)、换页符(f)、回车(\r)、空格(" ")
prepend a = "world" <br> a.prepend("hello ")
"hello world"
在另一个字符串之前添加字符串
insert a = "hello" <br> a.insert(a.length, " world")
"hello world"
在特定位置插入字符串
start_with? string = "ruby programming"
string.start_with? "ruby"
true
检查字符串是否以特定前缀开头
end_with? string = "ruby programming"
string.end_with? "ruby"
false
检查字符串是否以特定前缀结尾
delete_suffix string = "sausage is expensive"
string.delete_suffix(" is expensive")
"sausage"
从字符串中删除后缀
delete_prefix string = "sausage is expensive"
string.delete_prefix("sausage")
" is expensive"
从字符串中删除前缀
split string = "a b c d" <br> string.split
["a", "b", "c", "d"]
将字符串转换为字符数组
join arr = ['a', 'b', 'c'] <br> arr.join => "abc" 将数组转换为字符串
to_i a = "49" <br> a.to_i => 49 将字符串转换为整数
chop "abcd?".chop("?") => "abcd" 从字符串中删除最后一个字符
count str = "aaab" <br> str.count("a")
3
计算字符串中的字符
to_f a = "49"
a.to_f
49.0
将字符串转换为浮点数
to_sym a = "key"
a.to_sym
:key
将字符串转换为符号
match "abcd?".match(/ab/) => #<MatchData "ab"> 将模式转换为正则表达式并在字符串上调用其匹配方法
empty? "hello".empty? => false 如果字符串的长度为零,则返回 true
squeeze "Booook".squeeze => "Bok" 返回字符串的副本,其中相同字符的运行被单个字符替换
* puts "Ruby " * 4 => Ruby Ruby Ruby Ruby 返回多个 self 副本的串联
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
eql? s = 'foo' => true
s.eql?('foo') => true
如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接

方法

声明一个方法

def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    parameter1 + parameter2
end

res = method_name(20, 10)
# 输出 => 30
def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2
end
# 输出 => 30

调用方法

res = method_name(parameter1, parameter2)
# 可以调用不带括号的方法
res = method_name parameter1, parameter2

类方法

类方法是类级别的方法。 有多种定义类方法的方法

class Mobile
    def self.ring
        "ring ring ring..."
    end
end

Mobile.ring

class Mobile
    def Mobile.ring
        "ring ring ring..."
    end
end
Mobile.ring

class Mobile
    class << self
    def ring
        "ring ring ring..."
       end
    end
end
Mobile.ring

类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)

Mobile = Class.new do
    def self.ring
        "ring ring ring..."
    end
end
Mobile.ring
Mobile = Class.new
class << Mobile
    def ring
        "ring ring ring..."
    end
end
Mobile.ring

使用另一个参数作为默认值

def method_name(num1, num2 = num1)
    return num1 + num2
end
res = method_name(10)
# 输出 => 20

为方法参数定义默认值

def method_name(parameter1, parameter2, type = "ADD")
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2 if type == "ADD"
    return parameter1 - parameter2 if type == "SUB"
end
res = method_name(20, 10)
# 输出 => 30

将可变长度参数传递给方法参数

def method_name(type, *values)
    return values.reduce(:+) if type == "ADD"
    return values.reduce(:-) if type == "SUB"
end
numbers = [2, 2, 2, 3, 3, 3]
res = method_name("ADD", *numbers)
# 输出 => 15
res = method_name("SUB", *numbers)
# 输出 => -11
# 或者您可以提供这样的值
res = method_name("ADD", 2, 2, 2, 3, 3, 3)
# 输出 => 15

修改对象

a = ["Drama", "Mystery", "Crime",
"Sci-fi", "Disaster", "Thriller"]
a.sort
puts a
# 我们没有修改对象
# Drama
# Mystery
# Crime
# Sci-fi
# Disaster
# Thriller
a.sort!
puts a
# 修改对象
# Crime
# Disaster
# Drama
# Mystery
# Sci-fi
# Thriller

当您要修改对象时,在方法之后使用 !

布尔方法

在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false

"some text".nil?
# false
nil.nil?
# true

您可以拥有自己的布尔方法

def is_vowel?(char)
    ['a','e','i','o','u'].include? char
end
is_vowel? 'a'
# true
is_vowel? 'b'
# false

Blocks (块)

块示例

# return value
def give_me_data
    data = yield
    puts "data = #{data}"
end
give_me_data { "Big data" }
# 输出 => data = Big data

do 和 end(用于多行)或花括号 { 和 }(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 (|arg1, arg2|)

单行块

salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# puts s = block body
# |s| = block arugments

多行块

salary.each do |s|
    a = 10
    res = a * s
    puts res
end
# 块体
# a = 10
# res = a * s
# puts res
# 块参数
# |s|

块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句

隐式传递一个块

def give_me_data
    puts "I am inside give_me_data method"
    yield
    puts "I am back in give_me_data method"
end

give_me_data { puts "Big data" }

# 输出
# I am inside give_me_data method
# Big data
# I am back in give_me_data method

多次调用

def give_me_data
    yield
    yield
    yield
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data
# Big data

使用块参数调用

def give_me_data
    yield 10
    yield 100
    yield 30
end

give_me_data { |data| puts "Big data #{data} TB" }

# 输出
# Big data 10 TB
# Big data 100 TB
# Big data 30 TB

使用多个块参数调用

def give_me_data
    yield "Big data", 10, "TB"
    yield "Big data", 100, "GB"
    yield "Big data", 30, "MB"
end

give_me_data { |text, data, unit| puts "#{text} #{data} #{unit}" }

# 输出
# Big data 10 TB
# Big data 100 GB
# Big data 30 MB

块将尝试从当前上下文返回

give_me_data
    puts "我在 give_me_data 方法里面"
end

def test
  puts "我在测试方法里面"
  give_me_data { return 10 } # 代码从这里返回
  puts "I am back in test method"
end

return_value = test

# 输出
# 我在测试方法里面
# 我在 give_me_data 方法里面
# 10

通过使用 & 参数显式传递块

def give_me_data(&block)
    block.call
    block.call
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data

检查是否给出了块

def give_me_data
    yield
end

give_me_data

# 输出
# LocalJumpError: no block given (yield)

处理异常并使块可选的方法

def give_me_data
    return "no block" unless block_given?
    yield
end

give_me_data { puts "Big data" }
give_me_data

# 输出
# Big data

Procs

Procs 示例

p = Proc.new { puts "Hello World" }

def give_me_data(proc)
    proc.call
end

give_me_data p

# 输出
# Hello World

proc 就像一个可以存储在变量中的块

任意参数

p = Proc.new { |count| "Hello World " * count }

def give_me_data(proc)
    proc.call 5, 2
end

give_me_data p

# 输出
# "Hello World Hello World Hello World Hello World Hello World "

proc 将尝试从当前上下文返回

p = Proc.new { return 10 }
p.call
# 输出
LocalJumpError: unexpected return

不能从顶级上下文返回

def give_me_data
    puts "我在 give_me_data 方法里面"
    p = Proc.new { return 10 }
    p.call # 代码从这里返回
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# 我在 give_me_data 方法里面
# 10

Lambdas

声明一个 lambda

l = lambda { puts "Hello World" }
# 速记
l = -> { puts "Hello World" }
# 调用 lambda
l.call
# 输出 => Hello World

有多种方法可以调用 lambda

l.()
l[]

严格的 arguments

l = -> (count) { "Hello World " * count }
l.call 5
# 输出
# "Hello World Hello World Hello World Hello World Hello World "
l.call 5, 2
# 输出
wrong number of arguments (given 2, expected 1)

块中声明一个 lambda

def give_me_data
    puts "I am inside give_me_data method"
    l = -> { return 10 }
    l.call
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# I am inside give_me_data method
# I am back in give_me_data method
# nil # because puts return nil

lambdas 从 lambda 本身返回,就像常规方法一样

l = -> { return 10 }
l.call

# 输出 => 10

数组

初始化一个空数组

array = Array.new   #=> []
# or
array = []

包含不同类型的对象的数组

array = [1, "two", 3.0] 
#=> [1, "two", 3.0]

用初始大小和默认对象填充数组

numbers = Array.new(3)       
#=> [nil, nil, nil]
numbers = Array.new(3, 7)    
#=> [7, 7, 7]
numbers = Array.new(3, true) 
#=> [true, true, true]
numbers = []
numbers.fill(7, 0..2)   #=> [7, 7, 7]

不同哈希值的数组

array_with_hashes = Array.new(2) { {} } #=> [{}, {}]
array_with_hashes[0][:name] = "Bob"
array_with_hashes[0][:id] = 10          #=> [{:name=>"Bob", :id=>10}, {}]

二维数组

temperature_data = [
              ["A908", 38],
              ["A909", 37],
              ["A910", 38],
          ]
temperature_data[0]    #=> ["A908", 38]
temperature_data[0][0] #=> "A908"
temperature_data[0][1] #=> 38

数组索引

str_array = [
  "This", "is", "a", "small", "array"
]
str_array[0]            #=> "This"
str_array[1]            #=> "is"
str_array[4]            #=> "array"

负索引

str_array = [
  "This", "is", "a", "small", "array"
]
# 索引 -1 表示最后一个元素
str_array[-1]        #=> "array"
# 索引 -2 表示倒数第二个元素
str_array[-2]        #=> "small"
str_array[-6]        #=> nil

数组方法 at

str_array = [
  "This", "is", "a", "small", "array"
]

puts str_array.at(0)      #=> "This"

范围获取

arr = [1, 2, 3, 4, 5, 6]
arr[100]                  #=> nil
arr[-3]                   #=> 4
arr[2, 3]                 #=> [3, 4, 5]
arr[1..4]                 #=> [2, 3, 4, 5]
arr[1..-3]                #=> [2, 3, 4]

数组方法 fetch

arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100)
#=> IndexError: 数组边界外的索引 100:-6...6
arr.fetch(100, "oops")    #=> "oops"

超出边界,给默认值

获取数组元素

arr = [1, 2, 3, 4, 5, 6]

arr.first     # 第一个值 => 1
arr.last      # 最后一个值 => 6
# take 返回前 n 个元素
arr.take(3)   #=> [1, 2, 3]
# drop 在 n 个元素被删除之后
arr.drop(3)   #=> [4, 5, 6]

在数组末尾添加值 push

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.push(11)          
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
numbers.push(12, 13, 14)  
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

数组末尾删除值 pop

num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_array.pop             #=> 10
num_array
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

在数组的开头添加值 unshift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(0)          
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(-3, -2, -1) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

检索并同时删除第一个元素 shift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.shift #=> 1
numbers
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

删除特定索引处的元素 delete_at

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_at(2) #=> 4
numbers             
#=> [2, 3, 5, 6, 7, 8, 9, 10]

删除数组中任意位置的特定元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete(2) #=> 2
numbers           #=> [3, 5, 6, 7, 8, 9, 10]

在给定索引处插入值 insert

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, 0)           
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, -3, -2, -1)  
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

numbers.insert(-1, 12, 13, 14) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
numbers.insert(-4, 11)         
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

一个块来填充数组的值

numbers = Array.new(10) { |n| n = n * 2 } 
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

填充数组变得更容易

numbers = Array(100..110)
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

# 或者我们可以将范围转换为数组
(100..110).to_a 
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

从数组中删除 nil 值

arr = ['foo', 0, nil, 'bar', 7, nil]
arr.compact  #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, nil, 'bar', 7, nil]
arr.compact! #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, 'bar', 7]

去重 uniq

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]

检查数组中是否存在值(include?)

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.include? "Mars"
# 输出 => true
planets.include? "Pluto"
# 输出 => false

获取数组大小

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.size
# 输出 => 8
planets.length
# 输出 => 8

您可以使用大小或长度,两者都是同义词

清除数组

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.clear
# 输出 => []

获取数组的第一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0]
# or
numbers.first
# 输出 => 1

获取数组的最后一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[-1]
# or
numbers.last
# 输出 => 10

合并两个数组

a = ["tom", "mot", "otm"]
b = [2, 3, 5]
a.zip(b)
# 输出
# [["tom", 2], ["mot", 3], ["otm", 5]]

对数组进行排序

primes = [7, 2, 3, 5]
sorted_primes = primes.sort
puts "#{sorted_primes}"
# 输出 => [2, 3, 5, 7]

or in-place sort

primes = [7, 2, 3, 5]
primes.sort!
puts "#{primes}"
# 输出 => [2, 3, 5, 7]
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.sort
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p }
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p.length }
# 输出
# ["Mars", "Earth", "Venus", "Saturn", "Uranus", "Neptune", "Jupiter", "Mercury"]

从数组中获取最大值

primes = [7, 2, 3, 5]
primes.max_by { |p| p }
# 输出 => 7

使用范围获取数组元素

# numbers[start..end], both index are inclusive
puts numbers[0..3]
# 1
# 2
# 3
# 4
# numbers[start..end], end index is exclusive
puts numbers[0...3]
# 1
# 2
# 3
# or numbers[start..length]
puts numbers[0, 1]
# 1

获取数组的前n个元素

primes = [7, 2, 3, 5]
primes.take(3)
# [7, 2, 3]

访问元素

primes = [7, 2, 3, 5]
primes.fetch(3)
# 5
# Fetch will throw an error if the element does not exist
primes.fetch(10)
# (index 10 outside of array bounds: -4...4)
# or get an default value
primes.fetch(10, -1)
# -1

从数组中删除重复元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]
numbers.uniq
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

删除前 n 个元素

primes = [7, 2, 3, 5]
primes.drop(3)
# [5]

删除第一个元素

primes = [7, 2, 3, 5]
primes.shift
# [2, 3, 5]

删除最后一个元素

primes = [7, 2, 3, 5]
primes.pop
# [7, 2, 3]

删除带有索引的元素

primes = [7, 2, 3, 5]
primes.delete_at(-1)
# [7, 2, 3]

删除所有出现的元素

primes = [7, 2, 3, 5, 5]
primes.delete(5)
# [7, 2, 3]

each

# 当你有单行块时
salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# 输出
# 399
# 234
# 566
# 533
# 233

当你有一个多行块时,你可以用 do 和 end 替换花括号 {}

salary.each do |s|
  a = 10
  res = a * s
  puts res
end
# 输出
# 3990
# 2340
# 5660
# 5330
# 2330

或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情

salary.each { |s| a = 10 ; res = a * s ; puts res }

each_with_index

salary = [399, 234, 566, 533, 233]
salary.each_with_index { |value, index| puts "#{index} #{value}" }
# 输出
# 0 399
# 1 234
# 2 566
# 3 533
# 4 233

each_index

salary = [399, 234, 566, 533, 233]
salary.each_index { |i| puts i}
# 输出
# 0
# 1
# 2
# 3
# 4

map

salary = [399, 234, 566, 533, 233]
salary.map { |s|  s * 10  }
# 返回
# [3990, 2340, 5660, 5330, 2330]
# 另一方面,每个都返回原始值
salary = [399, 234, 566, 533, 233]
salary.each { |s|  s * 10  }
# 返回
# [399, 234, 566, 533, 233]

collect

salary = [399, 234, 566, 533, 233]
salary.collect { |s| s > 400 }
# 输出
# [false, false, true, true, false]

for

for value in [2, 3, 5, 7]
    puts value
end

each_with_object

colors = [
  {color: "red", count: 3}, {color: "red", count: 5}, {color: "black", count: 4}
]
colors.each_with_object(Hash.new(0)) { |color, hash| hash["color_"+color[:color]] = color[:color].upcase; hash["count_"+color[:color]] += color[:count] }
# 输出
{"color_red"=>"RED", "count_red"=>8, "color_black"=>"BLACK", "count_black"=>4}

[1, 2, 3].each_with_object(0) { |number, sum| sum += number}
# 输出
# 0
# 因为0是不可变的,由于初始对象是0,所以方法返回0

while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
while index < planets.size
    puts "#{planets[index]}"
    index += 1
end

a = 1
star = '*'
while a <= 10
    puts star
    star += '*'
    a += 1
end

do while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
loop do
    puts "#{planets[index]}"
    index += 1
    break if planets[index] == "Mars" or index > planets.size
end

until

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = planets.size - 1
until index < 0
    puts "#{planets[index]}"
    index -= 1
end
a = 1
star = '*'
until star.length > 10
    puts star
    star += '*'
    a += 1
end

times

10.times { puts "#{rand(1..100)}"}
# 输出
# 将打印 10 个随机数

仅仅因为你可以并不意味着你应该像这样迭代一个数组

data_sample = [2, 3, 5, 7]
data_sample.size.times { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3
# 5
# 7

upto

data_sample = [2, 3, 5, 7]
0.upto((data_sample.size - 1) / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3

downto

data_sample = [2, 3, 5, 7]
(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 7
# 5

step

1.step(20, 2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

19.step(1, -2) { |number| puts "#{number}"}
# 输出
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1

inject

numbers = [2, 2, 2, 2, 2]
numbers.inject{ |res, n| res + n }
# 输出是所有数字之和的结果
# 如果不给res设置初始值,则数组的第一个元素作为res的初始值
# 10
# 现在将 res 的值设置为 11
numbers = [2, 2, 2, 2, 2]
numbers.inject(11) { |res, n| res + n }
# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2
# 21
# using symbol
numbers = [2, 2, 2, 2, 2]
numbers.inject(:+)
# 输出
# 10

使用初始值和符号

numbers = [2, 2, 2, 2, 2]
numbers.inject(11, :+)
# 输出
# 21

reduce

numbers = [2, 2, 2, 2, 2]
numbers.reduce(11, :+)
# 输出
# 21

detect

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.detect { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth
salary = [399, 234, 566, 533, 233]
salary.detect { |s| s > 1000 }
# output
# nil

find

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.find { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth

select

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.select { |n| n % 2 == 0 }
# 现在你有一个偶数数组
# [2, 4, 6, 8, 10]
# 如果没有满足您的逻辑的值,则返回一个空数组
[1, 1, 1].select { |n| n % 2 == 0 }
# no even numbers
# []

reject

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.reject { |n| n % 2 == 0 }
# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组
# [1, 3, 5, 7, 9]

keep_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.keep_if { |n| n % 2 == 0 }
# numbers 数组仅包含偶数
# [2, 4, 6, 8, 10]

delete_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_if { |n| n % 2 == 0 }
# numbers 数组仅包含奇数
# [1, 3, 5, 7, 9]

drop_while

numbers = [1, 2, 3, 1, 2, 3, 0]
numbers.drop_while { |n| n < 3 }
# 是 3 小于 3,返回 false,所以删除 1, 2
# [3, 1, 2, 3, 0]

reverse_each

words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first "

布尔可枚举方法

布尔可枚举方法

Name When to use
all? 当您想检查所有元素是否满足您的条件时
any? 当您想检查至少一项是否满足您的条件时
one? 当您想检查一个元素是否满足您的要求时
none? 当您想检查是否没有任何项目满足您的条件时,相反?
empty? 当你想检查对象是否为空时
include? 当你想检查元素是否存在于对象中时

all?

[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# true
[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# false

any?

[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }
# true
[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }
# false

one?

[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }
# true
[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }
# false

none?

[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# true
[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# false

empty?

[].empty?
# true
[1, 3, 5, 7, 9].empty?
# false

组合方法

组合方法

  • & 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目
  • intersection 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目
  • + 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素
  • - 返回一个数组,其中包含在给定数组中找不到的所有 self 元素
  • union 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项
  • difference 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素
  • product 返回或产生来自 self 和给定数组的所有元素组合

&

[0, 1, 2, 3] & [1, 2] # => [1, 2]
[0, 1, 0, 1] & [0, 1] # => [0, 1]

intersection

[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]
[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]

+

a = [0, 1] + [2, 3]
a # => [0, 1, 2, 3]

-

[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] 
# => [0, 2, 3]
[0, 1, 2, 3] - [3, 0] 
# => [1, 2]
[0, 1, 2] - [4] 
# => [0, 1, 2]

union

[0, 1, 2, 3].union([4, 5], [6, 7]) 
# => [0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 1].union([2, 1], [3, 1]) 
# => [0, 1, 2, 3]
[0, 1, 2, 3].union([3, 2], [1, 0]) 
# => [0, 1, 2, 3]

difference

[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])
# => [0, 2, 3]
[0, 1, 2, 3].difference([3, 0], [1, 3])
# => [2]
[0, 1, 2].difference([4])
# => [0, 1, 2]

product

a = [0, 1, 2]
a1 = [3, 4]
p = a.product(a1)
p.size # => 6 # a.size * a1.size
p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]

循环

while 循环

# variable count
count = 4
# using while loop
# here conditional is count i.e. 4
while count >= 1
  # statements to be executed
  puts "Ruby Cheatsheet"
  count = count - 1
  # while loop ends here
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

for 循环

# loop using range as expression
text = "Ruby Cheatsheet"
# using for loop with the range
for count in 1..5 do
  puts text
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

do..while 循环

# starting of do..while loop
loop do
  puts "Ruby Cheatsheet"
  val = '7'
  # using boolean expressions
  if val == '7'
    break
  end
  # ending of ruby do..while loop
end

输出

Ruby Cheatsheet

until 循环

var = 7
# here do is optional
until var == 11 do
  # code to be executed
  puts var * 10
  var = var + 1
  # here loop ends
end

输出

70
80
90
100

跳出循环

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  break if s == 566
  puts s
end
# 输出
# 399
# 234

通过使用 break 关键字

在循环内跳过

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  next if s == 533
  puts s
end
# 输出
# 399
# 234
# 566
# 233

通过使用 next 关键字

重复当前迭代

data = [456, 3000]
retry_count = 0
status = "network failure"
sum = 0
data.each do |d|
    if retry_count == 3
        status = "connection established"
        retry_count = 0
        redo
    elsif status == "network failure" and retry_count < 5
        puts "network failure #{retry_count}"
        retry_count += 1
        redo
    elsif status == "connection established"
        puts d
        sum += d
    end
end
# output of sum
# 3456

重新开始循环

numbers = [2, 2, 44, 44]
sum = 0
begin
    numbers.each do |s|
        if rand(1..10) == 5
            puts "hi 5, let's do it again!"
            sum = 0
            raise "hi 5"
        end
        puts s
        sum += s
    end
rescue
    retry
end

Classes

Classes 示例

class Person
    # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java
    # def initialize(name, number)
    #    @name = name
    #    @number = number
    # end
    # instance variable
    # @name
    # class variable
    # @@count
    # attr_accessor acts as a getter and setter for the following instance attributes
    attr_accessor :name, :number
    # class variable must be initialized
    @@count = 0
    def self.count
        @@count
    end
    def self.count=(count)
        @@count = count
    end
    def initialize
        @@count += 1
    end
end
# create an instance of the Person class
p1 = Person.new
# set attributes of the Person class
p1.name = "Yukihiro Matsumoto"
p1.number = 9999999999
# get attributes of the Person class
puts "#{p1.name}"
puts "#{p1.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 1
p2 = Person.new
p2.name = "Yukihiro Matsumoto"
p2.number = 9999999999
# get attributes of the Person class
puts "#{p2.name}"
puts "#{p2.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 2
# set class variable
Person.count = 3
puts "#{Person.count}"
# 3

继承一个类

class Person
    attr_accessor :name, :number
end
# 使用 < 符号从父类继承方法和属性
class Student < Person
    attr_accessor :id
end
s = Student.new
s.name = "James Bond"
s.number = 700
s.id = 678
puts "#{p.name}"
James Bond
puts "#{p.number}"
700
puts "#{p.id}"
678

检查实例类型

class Vehicle; end
class Car < Vehicle; end
class Audi < Car; end
car = Car.new
car.instance_of? Vehicle
false
car.instance_of? Car
true
car.instance_of? Audi
false
a = 7
a.instance_of? Integer
true
a.instance_of? Numeric
false

如果对象是给定类的实例,而不是子类或超类,则返回 true

打印一个类的所有方法名

puts (String.methods).sort
# 排除从 Object 类继承的方法
puts (String.methods - Object.public_instance_methods).sort

检查一个类是否有特定的方法

String.respond_to?(:prepend)
true
String.respond_to?(:append)
false

另见

+s }` \u003cbr\u003e `\"Price of the phone is $1000 AUD\"` | gsub 或全局替换用提供的块替换一个或多个字符串","strip | `\" hEllo WOrlD \".strip` \u003cbr\u003e `\"hEllo WOrlD\"` | 它将删除(修剪)以下任何前导和尾随字符:null(“\\x00”)、水平制表符(“\\t”)、换行符(\\n)、垂直制表符(“\\v”)、换页符(f)、回车(\\r)、空格(\" \")","prepend | `a = \"world\" \u003cbr\u003e a.prepend(\"hello \")` \u003cbr\u003e `\"hello world\"` | 在另一个字符串之前添加字符串","insert | `a = \"hello\" \u003cbr\u003e a.insert(a.length, \" world\")` \u003cbr\u003e `\"hello world\"` | 在特定位置插入字符串","start_with? | `string = \"ruby programming\"` \u003cbr\u003e `string.start_with? \"ruby\"` \u003cbr\u003e `true` | 检查字符串是否以特定前缀开头","end_with? | `string = \"ruby programming\"` \u003cbr\u003e `string.end_with? \"ruby\"` \u003cbr\u003e `false` | 检查字符串是否以特定前缀结尾","delete_suffix | `string = \"sausage is expensive\"` \u003cbr\u003e `string.delete_suffix(\" is expensive\")` \u003cbr\u003e `\"sausage\"` | 从字符串中删除后缀","delete_prefix | `string = \"sausage is expensive\"` \u003cbr\u003e `string.delete_prefix(\"sausage\")` \u003cbr\u003e `\" is expensive\"` | 从字符串中删除前缀","split | `string = \"a b c d\" \u003cbr\u003e string.split` \u003cbr\u003e `[\"a\", \"b\", \"c\", \"d\"]` | 将字符串转换为字符数组","join | `arr = ['a', 'b', 'c'] \u003cbr\u003e arr.join` =\u003e `\"abc\"` | 将数组转换为字符串","to_i | `a = \"49\" \u003cbr\u003e a.to_i` =\u003e `49` | 将字符串转换为整数","chop | `\"abcd?\".chop(\"?\")` =\u003e `\"abcd\"` | 从字符串中删除最后一个字符","count | `str = \"aaab\" \u003cbr\u003e str.count(\"a\")` \u003cbr\u003e `3` | 计算字符串中的字符","to_f | `a = \"49\"` \u003cbr\u003e `a.to_f` \u003cbr\u003e `49.0` | 将字符串转换为浮点数","to_sym | `a = \"key\"` \u003cbr\u003e `a.to_sym` \u003cbr\u003e `:key` | 将字符串转换为符号","match | `\"abcd?\".match(/ab/)` =\u003e `#\u003cMatchData \"ab\"\u003e` | 将模式转换为正则表达式并在字符串上调用其匹配方法","empty? | `\"hello\".empty?` =\u003e `false` | 如果字符串的长度为零,则返回 true","squeeze | `\"Booook\".squeeze` =\u003e `\"Bok\"` | 返回字符串的副本,其中相同字符的运行被单个字符替换","\\* | `puts \"Ruby \" * 4` =\u003e `Ruby Ruby Ruby Ruby` | 返回多个 self 副本的串联","\\+ | `\"sammy \" + \"shark\"` =\u003e `\"sammyshark\"` | 返回 self 和给定的其他字符串的连接","eql? | `s = 'foo'` =\u003e `true` \u003cbr\u003e `s.eql?('foo')` =\u003e `true` | 如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假","\\+ | `\"sammy \" + \"shark\"` =\u003e `\"sammyshark\"` | 返回 self 和给定的其他字符串的连接","\\+ | `\"sammy \" + \"shark\"` =\u003e `\"sammyshark\"` | 返回 self 和给定的其他字符串的连接","","方法","---","","### 声明一个方法","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","def method_name(parameter1, parameter2)"," puts \"#{parameter1} #{parameter2}\""," parameter1 + parameter2","end","```","","---","","```ruby","res = method_name(20, 10)","# 输出 =\u003e 30","def method_name(parameter1, parameter2)"," puts \"#{parameter1} #{parameter2}\""," return parameter1 + parameter2","end","# 输出 =\u003e 30","```","","### 调用方法","","```ruby","res = method_name(parameter1, parameter2)","# 可以调用不带括号的方法","res = method_name parameter1, parameter2","```","","### 类方法","\u003c!--rehype:wrap-class=row-span-4--\u003e","","类方法是类级别的方法。 有多种定义类方法的方法","","```ruby","class Mobile"," def self.ring"," \"ring ring ring...\""," end","end","","Mobile.ring","```","","---","","```ruby","class Mobile"," def Mobile.ring"," \"ring ring ring...\""," end","end","Mobile.ring","```","","---","","```ruby","class Mobile"," class \u003c\u003c self"," def ring"," \"ring ring ring...\""," end"," end","end","Mobile.ring","```","","类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)","","```ruby","Mobile = Class.new do"," def self.ring"," \"ring ring ring...\""," end","end","Mobile.ring","```","","```ruby","Mobile = Class.new","class \u003c\u003c Mobile"," def ring"," \"ring ring ring...\""," end","end","Mobile.ring","```","","### 使用另一个参数作为默认值","","```ruby","def method_name(num1, num2 = num1)"," return num1 + num2","end","res = method_name(10)","# 输出 =\u003e 20","```","","### 为方法参数定义默认值","","```ruby","def method_name(parameter1, parameter2, type = \"ADD\")"," puts \"#{parameter1} #{parameter2}\""," return parameter1 + parameter2 if type == \"ADD\""," return parameter1 - parameter2 if type == \"SUB\"","end","res = method_name(20, 10)","# 输出 =\u003e 30","```","","### 将可变长度参数传递给方法参数","","```ruby","def method_name(type, *values)"," return values.reduce(:+) if type == \"ADD\""," return values.reduce(:-) if type == \"SUB\"","end","numbers = [2, 2, 2, 3, 3, 3]","res = method_name(\"ADD\", *numbers)","# 输出 =\u003e 15","res = method_name(\"SUB\", *numbers)","# 输出 =\u003e -11","# 或者您可以提供这样的值","res = method_name(\"ADD\", 2, 2, 2, 3, 3, 3)","# 输出 =\u003e 15","```","","### 修改对象","","```ruby","a = [\"Drama\", \"Mystery\", \"Crime\",","\"Sci-fi\", \"Disaster\", \"Thriller\"]","a.sort","puts a","# 我们没有修改对象","# Drama","# Mystery","# Crime","# Sci-fi","# Disaster","# Thriller","a.sort!","puts a","# 修改对象","# Crime","# Disaster","# Drama","# Mystery","# Sci-fi","# Thriller","```","","当您要修改对象时,在方法之后使用 `!`","","### 布尔方法","","在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false","","```ruby","\"some text\".nil?","# false","nil.nil?","# true","```","","您可以拥有自己的布尔方法","","```ruby","def is_vowel?(char)"," ['a','e','i','o','u'].include? char","end","is_vowel? 'a'","# true","is_vowel? 'b'","# false","```","","Blocks (块)","---","","### 块示例","","```ruby","# return value","def give_me_data"," data = yield"," puts \"data = #{data}\"","end","give_me_data { \"Big data\" }","# 输出 =\u003e data = Big data","```","","`do` 和 `end`(用于多行)或花括号 `{` 和 `}`(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 `(|arg1, arg2|)`","","### 单行块","","```ruby","salary = [399, 234, 566, 533, 233]","salary.each { |s| puts s }","# puts s = block body","# |s| = block arugments","```","","### 多行块","","```ruby","salary.each do |s|"," a = 10"," res = a * s"," puts res","end","# 块体","# a = 10","# res = a * s","# puts res","# 块参数","# |s|","```","","块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句","","### 隐式传递一个块","","```ruby","def give_me_data"," puts \"I am inside give_me_data method\""," yield"," puts \"I am back in give_me_data method\"","end","","give_me_data { puts \"Big data\" }","","# 输出","# I am inside give_me_data method","# Big data","# I am back in give_me_data method","```","","### 多次调用","","```ruby","def give_me_data"," yield"," yield"," yield","end","","give_me_data { puts \"Big data\" }","","# 输出","# Big data","# Big data","# Big data","```","","### 使用块参数调用","","```ruby","def give_me_data"," yield 10"," yield 100"," yield 30","end","","give_me_data { |data| puts \"Big data #{data} TB\" }","","# 输出","# Big data 10 TB","# Big data 100 TB","# Big data 30 TB","```","","### 使用多个块参数调用","","```ruby","def give_me_data"," yield \"Big data\", 10, \"TB\""," yield \"Big data\", 100, \"GB\""," yield \"Big data\", 30, \"MB\"","end","","give_me_data { |text, data, unit| puts \"#{text} #{data} #{unit}\" }","","# 输出","# Big data 10 TB","# Big data 100 GB","# Big data 30 MB","```","","### 块将尝试从当前上下文返回","","```ruby","give_me_data"," puts \"我在 give_me_data 方法里面\"","end","","def test"," puts \"我在测试方法里面\""," give_me_data { return 10 } # 代码从这里返回"," puts \"I am back in test method\"","end","","return_value = test","","# 输出","# 我在测试方法里面","# 我在 give_me_data 方法里面","# 10","```","","### 通过使用 \u0026 参数显式传递块","","```ruby","def give_me_data(\u0026block)"," block.call"," block.call","end","","give_me_data { puts \"Big data\" }","","# 输出","# Big data","# Big data","```","","### 检查是否给出了块","","```ruby","def give_me_data"," yield","end","","give_me_data","","# 输出","# LocalJumpError: no block given (yield)","```","","### 处理异常并使块可选的方法","","```ruby","def give_me_data"," return \"no block\" unless block_given?"," yield","end","","give_me_data { puts \"Big data\" }","give_me_data","","# 输出","# Big data","```","","Procs","---","","### Procs 示例","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","p = Proc.new { puts \"Hello World\" }","","def give_me_data(proc)"," proc.call","end","","give_me_data p","","# 输出","# Hello World","```","","proc 就像一个可以存储在变量中的块","","### 任意参数","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","p = Proc.new { |count| \"Hello World \" * count }","","def give_me_data(proc)"," proc.call 5, 2","end","","give_me_data p","","# 输出","# \"Hello World Hello World Hello World Hello World Hello World \"","```","\u003c!--rehype:className=wrap-text--\u003e","","### proc 将尝试从当前上下文返回","","```ruby","p = Proc.new { return 10 }","p.call","# 输出","LocalJumpError: unexpected return","```","","### 不能从顶级上下文返回","","```ruby","def give_me_data"," puts \"我在 give_me_data 方法里面\""," p = Proc.new { return 10 }"," p.call # 代码从这里返回"," puts \"I am back in give_me_data method\"","end","","return_value = give_me_data","puts return_value","","# 输出","# 我在 give_me_data 方法里面","# 10","```","","Lambdas","----","","### 声明一个 lambda","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","l = lambda { puts \"Hello World\" }","# 速记","l = -\u003e { puts \"Hello World\" }","# 调用 lambda","l.call","# 输出 =\u003e Hello World","```","","有多种方法可以调用 lambda","","```ruby","l.()","l[]","```","","### 严格的 arguments","","```ruby","l = -\u003e (count) { \"Hello World \" * count }","l.call 5","# 输出","# \"Hello World Hello World Hello World Hello World Hello World \"","l.call 5, 2","# 输出","wrong number of arguments (given 2, expected 1)","```","","### 块中声明一个 lambda","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","def give_me_data"," puts \"I am inside give_me_data method\""," l = -\u003e { return 10 }"," l.call"," puts \"I am back in give_me_data method\"","end","","return_value = give_me_data","puts return_value","","# 输出","# I am inside give_me_data method","# I am back in give_me_data method","# nil # because puts return nil","```","","### lambdas 从 lambda 本身返回,就像常规方法一样","","```ruby","l = -\u003e { return 10 }","l.call","","# 输出 =\u003e 10","```","","数组","---","","### 初始化一个空数组","","```ruby","array = Array.new #=\u003e []","# or","array = []","```","","### 包含不同类型的对象的数组","","```ruby","array = [1, \"two\", 3.0] ","#=\u003e [1, \"two\", 3.0]","```","","### 用初始大小和默认对象填充数组","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","numbers = Array.new(3) ","#=\u003e [nil, nil, nil]","numbers = Array.new(3, 7) ","#=\u003e [7, 7, 7]","numbers = Array.new(3, true) ","#=\u003e [true, true, true]","numbers = []","numbers.fill(7, 0..2) #=\u003e [7, 7, 7]","```","","### 不同哈希值的数组","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```ruby","array_with_hashes = Array.new(2) { {} } #=\u003e [{}, {}]","array_with_hashes[0][:name] = \"Bob\"","array_with_hashes[0][:id] = 10 #=\u003e [{:name=\u003e\"Bob\", :id=\u003e10}, {}]","```","","### 二维数组","","```ruby","temperature_data = ["," [\"A908\", 38],"," [\"A909\", 37],"," [\"A910\", 38],"," ]","temperature_data[0] #=\u003e [\"A908\", 38]","temperature_data[0][0] #=\u003e \"A908\"","temperature_data[0][1] #=\u003e 38","```","","### 数组索引","","```ruby","str_array = ["," \"This\", \"is\", \"a\", \"small\", \"array\"","]","str_array[0] #=\u003e \"This\"","str_array[1] #=\u003e \"is\"","str_array[4] #=\u003e \"array\"","```","\u003c!--rehype:className=wrap-text--\u003e","","### 负索引","","```ruby","str_array = ["," \"This\", \"is\", \"a\", \"small\", \"array\"","]","# 索引 -1 表示最后一个元素","str_array[-1] #=\u003e \"array\"","# 索引 -2 表示倒数第二个元素","str_array[-2] #=\u003e \"small\"","str_array[-6] #=\u003e nil","```","\u003c!--rehype:className=wrap-text--\u003e","","### 数组方法 at","","```ruby","str_array = ["," \"This\", \"is\", \"a\", \"small\", \"array\"","]","","puts str_array.at(0) #=\u003e \"This\"","```","","### 范围获取","","```ruby","arr = [1, 2, 3, 4, 5, 6]","arr[100] #=\u003e nil","arr[-3] #=\u003e 4","arr[2, 3] #=\u003e [3, 4, 5]","arr[1..4] #=\u003e [2, 3, 4, 5]","arr[1..-3] #=\u003e [2, 3, 4]","```","","### 数组方法 fetch","","```ruby","arr = ['a', 'b', 'c', 'd', 'e', 'f']","arr.fetch(100)","#=\u003e IndexError: 数组边界外的索引 100:-6...6","arr.fetch(100, \"oops\") #=\u003e \"oops\"","```","","超出边界,给默认值","","### 获取数组元素","","```ruby","arr = [1, 2, 3, 4, 5, 6]","","arr.first # 第一个值 =\u003e 1","arr.last # 最后一个值 =\u003e 6","# take 返回前 n 个元素","arr.take(3) #=\u003e [1, 2, 3]","# drop 在 n 个元素被删除之后","arr.drop(3) #=\u003e [4, 5, 6]","```","","### 在数组末尾添加值 push","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.push(11) ","#=\u003e [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]","numbers.push(12, 13, 14) ","#=\u003e [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]","```","","### 数组末尾删除值 pop","","```ruby","num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","num_array.pop #=\u003e 10","num_array","#=\u003e [1, 2, 3, 4, 5, 6, 7, 8, 9]","```","\u003c!--rehype:className=wrap-text--\u003e","","### 在数组的开头添加值 unshift","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.unshift(0) ","#=\u003e [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.unshift(-3, -2, -1) ","#=\u003e [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","```","","### 检索并同时删除第一个元素 shift","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.shift #=\u003e 1","numbers","#=\u003e [2, 3, 4, 5, 6, 7, 8, 9, 10]","```","","### 删除特定索引处的元素 delete_at","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.delete_at(2) #=\u003e 4","numbers ","#=\u003e [2, 3, 5, 6, 7, 8, 9, 10]","```","","### 删除数组中任意位置的特定元素","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.delete(2) #=\u003e 2","numbers #=\u003e [3, 5, 6, 7, 8, 9, 10]","```","","### 在给定索引处插入值 insert","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.insert(0, 0) ","#=\u003e [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.insert(0, -3, -2, -1) ","#=\u003e [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","","numbers.insert(-1, 12, 13, 14) ","#=\u003e [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]","numbers.insert(-4, 11) ","#=\u003e [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]","```","\u003c!--rehype:className=wrap-text--\u003e","","### 一个块来填充数组的值","","```ruby","numbers = Array.new(10) { |n| n = n * 2 } ","#=\u003e [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]","```","","### 填充数组变得更容易","","```ruby","numbers = Array(100..110)","#=\u003e [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]","","# 或者我们可以将范围转换为数组","(100..110).to_a ","#=\u003e [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]","```","\u003c!--rehype:className=wrap-text--\u003e","","### 从数组中删除 nil 值","","```ruby","arr = ['foo', 0, nil, 'bar', 7, nil]","arr.compact #=\u003e ['foo', 0, 'bar', 7]","arr #=\u003e ['foo', 0, nil, 'bar', 7, nil]","arr.compact! #=\u003e ['foo', 0, 'bar', 7]","arr #=\u003e ['foo', 0, 'bar', 7]","```","\u003c!--rehype:className=wrap-text--\u003e","","### 去重 uniq","","```ruby","arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]","arr.uniq #=\u003e [2, 5, 6, 556, 8, 9, 0, 123]","```","\u003c!--rehype:className=wrap-text--\u003e","","### 检查数组中是否存在值(`include?`)","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","planets.include? \"Mars\"","# 输出 =\u003e true","planets.include? \"Pluto\"","# 输出 =\u003e false","```","","### 获取数组大小","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","planets.size","# 输出 =\u003e 8","planets.length","# 输出 =\u003e 8","```","","您可以使用大小或长度,两者都是同义词","","### 清除数组","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.clear","# 输出 =\u003e []","```","","### 获取数组的第一个元素","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers[0]","# or","numbers.first","# 输出 =\u003e 1","```","","### 获取数组的最后一个元素","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers[-1]","# or","numbers.last","# 输出 =\u003e 10","```","","### 合并两个数组","","```ruby","a = [\"tom\", \"mot\", \"otm\"]","b = [2, 3, 5]","a.zip(b)","# 输出","# [[\"tom\", 2], [\"mot\", 3], [\"otm\", 5]]","```","","### 对数组进行排序","\u003c!--rehype:wrap-class=row-span-3--\u003e","","```ruby","primes = [7, 2, 3, 5]","sorted_primes = primes.sort","puts \"#{sorted_primes}\"","# 输出 =\u003e [2, 3, 5, 7]","```","","or in-place sort","","```ruby","primes = [7, 2, 3, 5]","primes.sort!","puts \"#{primes}\"","# 输出 =\u003e [2, 3, 5, 7]","```","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","planets.sort","# 输出","# [\"Earth\", \"Jupiter\", \"Mars\", \"Mercury\", \"Neptune\", \"Saturn\", \"Uranus\", \"Venus\"]","planets.sort_by { |p| p }","# 输出","# [\"Earth\", \"Jupiter\", \"Mars\", \"Mercury\", \"Neptune\", \"Saturn\", \"Uranus\", \"Venus\"]","planets.sort_by { |p| p.length }","# 输出","# [\"Mars\", \"Earth\", \"Venus\", \"Saturn\", \"Uranus\", \"Neptune\", \"Jupiter\", \"Mercury\"]","```","","### 从数组中获取最大值","","```ruby","primes = [7, 2, 3, 5]","primes.max_by { |p| p }","# 输出 =\u003e 7","```","","### 使用范围获取数组元素","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","# numbers[start..end], both index are inclusive","puts numbers[0..3]","# 1","# 2","# 3","# 4","# numbers[start..end], end index is exclusive","puts numbers[0...3]","# 1","# 2","# 3","# or numbers[start..length]","puts numbers[0, 1]","# 1","```","","### 获取数组的前n个元素","","```ruby","primes = [7, 2, 3, 5]","primes.take(3)","# [7, 2, 3]","```","","### 访问元素","","```ruby","primes = [7, 2, 3, 5]","primes.fetch(3)","# 5","# Fetch will throw an error if the element does not exist","primes.fetch(10)","# (index 10 outside of array bounds: -4...4)","# or get an default value","primes.fetch(10, -1)","# -1","```","","### 从数组中删除重复元素","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]","numbers.uniq","# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","```","","### 删除前 n 个元素","","```ruby","primes = [7, 2, 3, 5]","primes.drop(3)","# [5]","```","","### 删除第一个元素","","```ruby","primes = [7, 2, 3, 5]","primes.shift","# [2, 3, 5]","```","","### 删除最后一个元素","","```ruby","primes = [7, 2, 3, 5]","primes.pop","# [7, 2, 3]","```","","### 删除带有索引的元素","","```ruby","primes = [7, 2, 3, 5]","primes.delete_at(-1)","# [7, 2, 3]","```","","### 删除所有出现的元素","","```ruby","primes = [7, 2, 3, 5, 5]","primes.delete(5)","# [7, 2, 3]","```","","### each","\u003c!--rehype:wrap-class=row-span-3--\u003e","","```ruby","# 当你有单行块时","salary = [399, 234, 566, 533, 233]","salary.each { |s| puts s }","# 输出","# 399","# 234","# 566","# 533","# 233","```","","当你有一个多行块时,你可以用 `do` 和 `end` 替换花括号 `{}`","","```ruby","salary.each do |s|"," a = 10"," res = a * s"," puts res","end","# 输出","# 3990","# 2340","# 5660","# 5330","# 2330","```","","或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情","","```ruby","salary.each { |s| a = 10 ; res = a * s ; puts res }","```","","### each_with_index","","```ruby","salary = [399, 234, 566, 533, 233]","salary.each_with_index { |value, index| puts \"#{index} #{value}\" }","# 输出","# 0 399","# 1 234","# 2 566","# 3 533","# 4 233","```","","### each_index","","```ruby","salary = [399, 234, 566, 533, 233]","salary.each_index { |i| puts i}","# 输出","# 0","# 1","# 2","# 3","# 4","```","","### map","","```ruby","salary = [399, 234, 566, 533, 233]","salary.map { |s| s * 10 }","# 返回","# [3990, 2340, 5660, 5330, 2330]","# 另一方面,每个都返回原始值","salary = [399, 234, 566, 533, 233]","salary.each { |s| s * 10 }","# 返回","# [399, 234, 566, 533, 233]","```","","### collect","","```ruby","salary = [399, 234, 566, 533, 233]","salary.collect { |s| s \u003e 400 }","# 输出","# [false, false, true, true, false]","```","","### for","","```ruby","for value in [2, 3, 5, 7]"," puts value","end","```","","### each_with_object","\u003c!--rehype:wrap-class=col-span-2--\u003e","","```ruby","colors = ["," {color: \"red\", count: 3}, {color: \"red\", count: 5}, {color: \"black\", count: 4}","]","colors.each_with_object(Hash.new(0)) { |color, hash| hash[\"color_\"+color[:color]] = color[:color].upcase; hash[\"count_\"+color[:color]] += color[:count] }","# 输出","{\"color_red\"=\u003e\"RED\", \"count_red\"=\u003e8, \"color_black\"=\u003e\"BLACK\", \"count_black\"=\u003e4}","","[1, 2, 3].each_with_object(0) { |number, sum| sum += number}","# 输出","# 0","# 因为0是不可变的,由于初始对象是0,所以方法返回0","```","\u003c!--rehype:className=wrap-text--\u003e","","### while","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","index = 0","while index \u003c planets.size"," puts \"#{planets[index]}\""," index += 1","end","```","\u003c!--rehype:className=wrap-text--\u003e","---","","```ruby","a = 1","star = '*'","while a \u003c= 10"," puts star"," star += '*'"," a += 1","end","```","","### do while","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","index = 0","loop do"," puts \"#{planets[index]}\""," index += 1"," break if planets[index] == \"Mars\" or index \u003e planets.size","end","```","\u003c!--rehype:className=wrap-text--\u003e","","### until","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","index = planets.size - 1","until index \u003c 0"," puts \"#{planets[index]}\""," index -= 1","end","```","\u003c!--rehype:className=wrap-text--\u003e","```ruby","a = 1","star = '*'","until star.length \u003e 10"," puts star"," star += '*'"," a += 1","end","```","","### times","","```ruby","10.times { puts \"#{rand(1..100)}\"}","# 输出","# 将打印 10 个随机数","```","","仅仅因为你可以并不意味着你应该像这样迭代一个数组","","```ruby","data_sample = [2, 3, 5, 7]","data_sample.size.times { |index| puts \"#{data_sample[index]}\" }","# 输出","# 2","# 3","# 5","# 7","```","\u003c!--rehype:className=wrap-text--\u003e","","### upto","","```ruby","data_sample = [2, 3, 5, 7]","0.upto((data_sample.size - 1) / 2) { |index| puts \"#{data_sample[index]}\" }","# 输出","# 2","# 3","```","\u003c!--rehype:className=wrap-text--\u003e","","### downto","","```ruby","data_sample = [2, 3, 5, 7]","(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts \"#{data_sample[index]}\" }","# 输出","# 7","# 5","```","\u003c!--rehype:className=wrap-text--\u003e","","### step","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","1.step(20, 2) { |number| puts \"#{number}\"}","# 输出","# 1","# 3","# 5","# 7","# 9","# 11","# 13","# 15","# 17","# 19","```","","---","","```ruby","19.step(1, -2) { |number| puts \"#{number}\"}","# 输出","# 19","# 17","# 15","# 13","# 11","# 9","# 7","# 5","# 3","# 1","```","","### inject","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","numbers = [2, 2, 2, 2, 2]","numbers.inject{ |res, n| res + n }","# 输出是所有数字之和的结果","# 如果不给res设置初始值,则数组的第一个元素作为res的初始值","# 10","# 现在将 res 的值设置为 11","numbers = [2, 2, 2, 2, 2]","numbers.inject(11) { |res, n| res + n }","# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2","# 21","# using symbol","numbers = [2, 2, 2, 2, 2]","numbers.inject(:+)","# 输出","# 10","```","","使用初始值和符号","","```ruby","numbers = [2, 2, 2, 2, 2]","numbers.inject(11, :+)","# 输出","# 21","```","","### reduce","","```ruby","numbers = [2, 2, 2, 2, 2]","numbers.reduce(11, :+)","# 输出","# 21","```","","### detect","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","planets.detect { |name| name.start_with?(\"E\") and name.end_with?(\"h\") }","# output","# Earth","salary = [399, 234, 566, 533, 233]","salary.detect { |s| s \u003e 1000 }","# output","# nil","```","\u003c!--rehype:className=wrap-text--\u003e","","### find","","```ruby","planets = [\"Mercury\", \"Venus\", \"Earth\", \"Mars\", \"Jupiter\", \"Saturn\", \"Uranus\", \"Neptune\"]","planets.find { |name| name.start_with?(\"E\") and name.end_with?(\"h\") }","# output","# Earth","```","\u003c!--rehype:className=wrap-text--\u003e","","### select","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.select { |n| n % 2 == 0 }","# 现在你有一个偶数数组","# [2, 4, 6, 8, 10]","# 如果没有满足您的逻辑的值,则返回一个空数组","[1, 1, 1].select { |n| n % 2 == 0 }","# no even numbers","# []","```","\u003c!--rehype:className=wrap-text--\u003e","","### reject","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.reject { |n| n % 2 == 0 }","# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组","# [1, 3, 5, 7, 9]","```","\u003c!--rehype:className=wrap-text--\u003e","","### keep_if","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.keep_if { |n| n % 2 == 0 }","# numbers 数组仅包含偶数","# [2, 4, 6, 8, 10]","```","\u003c!--rehype:className=wrap-text--\u003e","","### delete_if","","```ruby","numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]","numbers.delete_if { |n| n % 2 == 0 }","# numbers 数组仅包含奇数","# [1, 3, 5, 7, 9]","```","\u003c!--rehype:className=wrap-text--\u003e","","### drop_while","","```ruby","numbers = [1, 2, 3, 1, 2, 3, 0]","numbers.drop_while { |n| n \u003c 3 }","# 是 3 小于 3,返回 false,所以删除 1, 2","# [3, 1, 2, 3, 0]","```","\u003c!--rehype:className=wrap-text--\u003e","","### reverse_each","","```ruby","words = %w[first second third fourth fifth sixth]","str = \"\"","words.reverse_each {|word| str += \"#{word} \"}","p str #=\u003e \"sixth fifth fourth third second first \"","```","\u003c!--rehype:className=wrap-text--\u003e","","布尔可枚举方法","---","","### 布尔可枚举方法","\u003c!--rehype:wrap-class=row-span-2--\u003e","","Name | When to use ",":-------- | --","`all?` | 当您想检查所有元素是否满足您的条件时","`any?` | 当您想检查至少一项是否满足您的条件时","`one?` | 当您想检查一个元素是否满足您的要求时","`none?` | 当您想检查是否没有任何项目满足您的条件时,相反?","`empty?` | 当你想检查对象是否为空时","`include?` | 当你想检查元素是否存在于对象中时","","### all?","","```ruby","[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }","# true","[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }","# false","```","","### any?","","```ruby","[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }","# true","[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }","# false","```","","### one?","","```ruby","[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }","# true","[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }","# false","```","","### none?","","```ruby","[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }","# true","[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }","# false","```","","### empty?","","```ruby","[].empty?","# true","[1, 3, 5, 7, 9].empty?","# false","```","","组合方法","---","","### 组合方法","\u003c!--rehype:wrap-class=row-span-2--\u003e","","- `\u0026` 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目","- `intersection` 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目","- `+` 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素","- `-` 返回一个数组,其中包含在给定数组中找不到的所有 self 元素","- `union` 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项","- `difference` 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素","- `product` 返回或产生来自 self 和给定数组的所有元素组合","","### \u0026","","```ruby","[0, 1, 2, 3] \u0026 [1, 2] # =\u003e [1, 2]","[0, 1, 0, 1] \u0026 [0, 1] # =\u003e [0, 1]","```","","### intersection","","```ruby","[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])","# =\u003e [0, 1]","[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])","# =\u003e [0, 1]","```","\u003c!--rehype:className=wrap-text--\u003e","","### +","","```ruby","a = [0, 1] + [2, 3]","a # =\u003e [0, 1, 2, 3]","```","","### -","","```ruby","[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] ","# =\u003e [0, 2, 3]","[0, 1, 2, 3] - [3, 0] ","# =\u003e [1, 2]","[0, 1, 2] - [4] ","# =\u003e [0, 1, 2]","```","","### union","","```ruby","[0, 1, 2, 3].union([4, 5], [6, 7]) ","# =\u003e [0, 1, 2, 3, 4, 5, 6, 7]","[0, 1, 1].union([2, 1], [3, 1]) ","# =\u003e [0, 1, 2, 3]","[0, 1, 2, 3].union([3, 2], [1, 0]) ","# =\u003e [0, 1, 2, 3]","```","","### difference","","```ruby","[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])","# =\u003e [0, 2, 3]","[0, 1, 2, 3].difference([3, 0], [1, 3])","# =\u003e [2]","[0, 1, 2].difference([4])","# =\u003e [0, 1, 2]","```","","### product","","```ruby","a = [0, 1, 2]","a1 = [3, 4]","p = a.product(a1)","p.size # =\u003e 6 # a.size * a1.size","p # =\u003e [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]","```","\u003c!--rehype:className=wrap-text--\u003e","","循环","---","","### while 循环","","```ruby","# variable count","count = 4","# using while loop","# here conditional is count i.e. 4","while count \u003e= 1"," # statements to be executed"," puts \"Ruby Cheatsheet\""," count = count - 1"," # while loop ends here","end","```","","输出","","```","Ruby Cheatsheet","Ruby Cheatsheet","Ruby Cheatsheet","Ruby Cheatsheet","```","","### for 循环","","```ruby","# loop using range as expression","text = \"Ruby Cheatsheet\"","# using for loop with the range","for count in 1..5 do"," puts text","end","```","","输出","","```","Ruby Cheatsheet","Ruby Cheatsheet","Ruby Cheatsheet","Ruby Cheatsheet","Ruby Cheatsheet","```","","### do..while 循环","","```ruby","# starting of do..while loop","loop do"," puts \"Ruby Cheatsheet\""," val = '7'"," # using boolean expressions"," if val == '7'"," break"," end"," # ending of ruby do..while loop","end","```","","输出","","```","Ruby Cheatsheet","```","","### until 循环","","```ruby","var = 7","# here do is optional","until var == 11 do"," # code to be executed"," puts var * 10"," var = var + 1"," # here loop ends","end","```","","输出","","```","70","80","90","100","```","","### 跳出循环","","```ruby","salary = [399, 234, 566, 533, 233]","salary.each do |s|"," break if s == 566"," puts s","end","# 输出","# 399","# 234","```","","通过使用 `break` 关键字","","### 在循环内跳过","","```ruby","salary = [399, 234, 566, 533, 233]","salary.each do |s|"," next if s == 533"," puts s","end","# 输出","# 399","# 234","# 566","# 233","```","","通过使用 next 关键字","","### 重复当前迭代","","```ruby","data = [456, 3000]","retry_count = 0","status = \"network failure\"","sum = 0","data.each do |d|"," if retry_count == 3"," status = \"connection established\""," retry_count = 0"," redo"," elsif status == \"network failure\" and retry_count \u003c 5"," puts \"network failure #{retry_count}\""," retry_count += 1"," redo"," elsif status == \"connection established\""," puts d"," sum += d"," end","end","# output of sum","# 3456","```","","### 重新开始循环","","```ruby","numbers = [2, 2, 44, 44]","sum = 0","begin"," numbers.each do |s|"," if rand(1..10) == 5"," puts \"hi 5, let's do it again!\""," sum = 0"," raise \"hi 5\""," end"," puts s"," sum += s"," end","rescue"," retry","end","```","","Classes","---","","### Classes 示例","\u003c!--rehype:wrap-class=row-span-2--\u003e","","```ruby","class Person"," # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java"," # def initialize(name, number)"," # @name = name"," # @number = number"," # end"," # instance variable"," # @name"," # class variable"," # @@count"," # attr_accessor acts as a getter and setter for the following instance attributes"," attr_accessor :name, :number"," # class variable must be initialized"," @@count = 0"," def self.count"," @@count"," end"," def self.count=(count)"," @@count = count"," end"," def initialize"," @@count += 1"," end","end","# create an instance of the Person class","p1 = Person.new","# set attributes of the Person class","p1.name = \"Yukihiro Matsumoto\"","p1.number = 9999999999","# get attributes of the Person class","puts \"#{p1.name}\"","puts \"#{p1.number}\"","puts \"#{Person.count}\"","# Yukihiro Matsumoto","# 9999999999","# 1","p2 = Person.new","p2.name = \"Yukihiro Matsumoto\"","p2.number = 9999999999","# get attributes of the Person class","puts \"#{p2.name}\"","puts \"#{p2.number}\"","puts \"#{Person.count}\"","# Yukihiro Matsumoto","# 9999999999","# 2","# set class variable","Person.count = 3","puts \"#{Person.count}\"","# 3","```","","### 继承一个类","","```ruby","class Person"," attr_accessor :name, :number","end","# 使用 \u003c 符号从父类继承方法和属性","class Student \u003c Person"," attr_accessor :id","end","s = Student.new","s.name = \"James Bond\"","s.number = 700","s.id = 678","puts \"#{p.name}\"","James Bond","puts \"#{p.number}\"","700","puts \"#{p.id}\"","678","```","","### 检查实例类型","","```ruby","class Vehicle; end","class Car \u003c Vehicle; end","class Audi \u003c Car; end","car = Car.new","car.instance_of? Vehicle","false","car.instance_of? Car","true","car.instance_of? Audi","false","a = 7","a.instance_of? Integer","true","a.instance_of? Numeric","false","```","","如果对象是给定类的实例,而不是子类或超类,则返回 true","","### 打印一个类的所有方法名","","```ruby","puts (String.methods).sort","# 排除从 Object 类继承的方法","puts (String.methods - Object.public_instance_methods).sort","```","","### 检查一个类是否有特定的方法","","```ruby","String.respond_to?(:prepend)","true","String.respond_to?(:append)","false","```","","另见","---","","- [Ruby 官网](https://www.ruby-lang.org/en/) _(ruby-lang.org)_","- [Ruby Cheatsheet](https://github.com/lifeparticle/Ruby-Cheatsheet) _(github.com)_","","[2]: https://ruby-doc.org/core-3.1.2/Integer.html","[3]: https://ruby-doc.org/core-3.1.2/Float.html","[4]: https://ruby-doc.org/core-3.1.2/String.html","[5]: https://ruby-doc.org/core-3.1.2/Array.html","[6]: https://ruby-doc.org/core-3.1.2/Hash.html","[7]: https://ruby-doc.org/core-3.1.2/TrueClass.html","[8]: https://ruby-doc.org/core-3.1.2/FalseClass.html","[9]: https://ruby-doc.org/core-3.1.2/Symbol.html","[10]: https://ruby-doc.org/core-3.1.2/Range.html","[11]: https://ruby-doc.org/core-3.1.2/NilClass.html"],"stylingDirectives":[[],[[0,3,"pl-mh"]],[],[],[[0,3,"pl-ms"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,16,"pl-c"],[0,1,"pl-c"]],[],[[0,9,"pl-c"],[0,1,"pl-c"]],[],[[20,27,"pl-c"],[20,21,"pl-c"]],[[34,42,"pl-c"],[34,35,"pl-c"]],[],[[0,3,"pl-s"]],[],[[9,10,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,54,"pl-corl"],[54,55,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[32,39,"pl-c"],[32,33,"pl-c"]],[[0,23,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[9,10,"pl-s"],[10,11,"pl-s"],[11,48,"pl-corl"],[48,49,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,11,"pl-c"],[0,1,"pl-c"]],[],[[0,10,"pl-c"],[0,1,"pl-c"]],[],[[0,12,"pl-c"],[0,1,"pl-c"]],[],[[21,38,"pl-c"],[21,22,"pl-c"]],[[0,4,"pl-c"],[0,1,"pl-c"]],[[8,13,"pl-k"],[20,36,"pl-c"],[20,21,"pl-c"]],[[8,13,"pl-k"]],[[16,33,"pl-c"],[16,17,"pl-c"]],[[1,2,"pl-k"]],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,69,"pl-corl"],[69,70,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[31,32,"pl-k"]],[[20,31,"pl-c"],[20,21,"pl-c"]],[[20,30,"pl-c"],[20,21,"pl-c"]],[[20,30,"pl-c"],[20,21,"pl-c"]],[[0,3,"pl-s"]],[],[[19,20,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,48,"pl-corl"],[48,49,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[],[],[],[],[],[[0,3,"pl-s"]],[],[[0,30,"pl-mh"],[4,30,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[[0,1,"pl-s"],[8,9,"pl-s"],[9,10,"pl-s"],[10,52,"pl-corl"],[52,53,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,25,"pl-c"],[0,1,"pl-c"]],[[5,12,"pl-s"],[5,6,"pl-pds"],[11,12,"pl-pds"]],[],[[7,29,"pl-s"],[7,8,"pl-pds"],[28,29,"pl-pds"]],[[4,14,"pl-s"],[4,5,"pl-pds"],[13,14,"pl-pds"]],[[4,10,"pl-s"],[4,5,"pl-pds"],[9,10,"pl-pds"],[12,19,"pl-s"],[12,13,"pl-pds"],[18,19,"pl-pds"]],[[4,11,"pl-s"],[4,5,"pl-pds"],[10,11,"pl-pds"],[13,21,"pl-c1"],[25,31,"pl-s"],[25,26,"pl-pds"],[30,31,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,23,"pl-mh"],[4,23,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[],[[0,3,"pl-s"]],[],[[0,21,"pl-mh"],[4,21,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,21,"pl-c"],[0,1,"pl-c"]],[],[[0,32,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[[0,35,"pl-c"],[0,4,"pl-c"],[32,35,"pl-c"]],[],[],[],[[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"]],[[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"]],[[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"],[23,24,"pl-s"],[24,27,"pl-c1"],[27,28,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[23,24,"pl-s"],[24,27,"pl-c1"],[27,28,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[28,29,"pl-s"],[29,33,"pl-c1"],[33,34,"pl-s"],[46,48,"pl-ent"],[53,54,"pl-s"],[54,57,"pl-c1"],[57,58,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"]],[[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"]],[[2,3,"pl-s"],[3,5,"pl-c1"],[5,6,"pl-s"],[37,39,"pl-ent"],[42,44,"pl-s"],[50,52,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[25,26,"pl-s"],[26,31,"pl-c1"],[31,32,"pl-s"],[33,34,"pl-s"],[34,39,"pl-c1"],[39,40,"pl-s"],[41,42,"pl-s"],[42,45,"pl-c1"],[45,46,"pl-s"],[47,48,"pl-s"],[48,50,"pl-c1"],[50,51,"pl-s"],[52,53,"pl-s"],[53,55,"pl-c1"],[55,56,"pl-s"]],[[2,3,"pl-s"],[3,9,"pl-c1"],[9,10,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[24,25,"pl-s"],[25,28,"pl-c1"],[28,29,"pl-s"]],[[2,3,"pl-s"],[3,5,"pl-c1"],[5,6,"pl-s"],[22,23,"pl-s"],[23,25,"pl-c1"],[25,26,"pl-s"],[34,35,"pl-s"],[35,39,"pl-c1"],[39,40,"pl-s"]],[[2,3,"pl-s"],[3,5,"pl-c1"],[5,6,"pl-s"],[21,22,"pl-s"],[22,25,"pl-c1"],[25,26,"pl-s"]],[[2,3,"pl-s"],[3,9,"pl-c1"],[9,10,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"]],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"]],[[2,3,"pl-s"],[3,5,"pl-c1"],[5,6,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,9,"pl-c1"],[9,10,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"],[37,39,"pl-ent"]],[[2,3,"pl-s"],[3,9,"pl-c1"],[9,10,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[21,22,"pl-s"],[22,24,"pl-c1"],[24,25,"pl-s"],[26,27,"pl-s"],[27,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-s"],[36,40,"pl-c1"],[40,41,"pl-s"],[42,43,"pl-s"],[43,47,"pl-c1"],[47,48,"pl-s"],[49,50,"pl-s"],[50,56,"pl-c1"],[56,57,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[[2,3,"pl-s"],[3,8,"pl-c1"],[8,9,"pl-s"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,6,"pl-c"],[0,1,"pl-c"]],[[0,6,"pl-c"],[0,6,"pl-c"]],[[0,2,"pl-c"]],[[0,2,"pl-c"]],[[0,4,"pl-c"],[0,4,"pl-c"]],[[0,19,"pl-c"],[0,6,"pl-c"]],[[0,30,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,6,"pl-c"]],[[0,7,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,5,"pl-c"]],[[0,41,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,41,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,6,"pl-c"]],[[0,41,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,10,"pl-c"]],[[0,41,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,24,"pl-c"]],[[0,17,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,14,"pl-c"]],[[0,12,"pl-c"]],[[0,32,"pl-c"]],[[0,33,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,16,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,14,"pl-c"]],[[0,16,"pl-c"]],[[0,15,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,14,"pl-c"]],[[0,6,"pl-c"]],[[0,13,"pl-c"]],[[0,14,"pl-c"]],[[0,28,"pl-c"]],[[0,23,"pl-c"]],[[0,26,"pl-c"]],[[0,21,"pl-c"]],[[0,17,"pl-c"]],[[0,13,"pl-c"]],[[0,13,"pl-c"]],[[0,14,"pl-c"]],[[0,13,"pl-c"]],[[0,12,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,20,"pl-c"]],[[0,11,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,37,"pl-c"]],[[0,12,"pl-c"]],[[0,30,"pl-c"]],[[0,12,"pl-c"]],[[0,44,"pl-c"]],[[0,12,"pl-c"]],[[0,28,"pl-c"]],[[0,2,"pl-c"]],[[0,24,"pl-c"]],[[0,12,"pl-c"]],[[0,6,"pl-c"]],[[0,24,"pl-c"]],[[0,12,"pl-c"]],[[0,6,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,17,"pl-c"]],[[0,16,"pl-c"]],[[0,16,"pl-c"]],[[0,18,"pl-c"]],[[0,20,"pl-c"]],[[0,22,"pl-c"]],[[0,12,"pl-c"]],[[0,5,"pl-c"]],[[0,22,"pl-c"]],[[0,37,"pl-c"]],[[0,12,"pl-c"]],[[0,19,"pl-c"]],[[0,35,"pl-c"]],[[0,25,"pl-c"]],[[0,29,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,21,"pl-c"]],[[0,6,"pl-c"]],[[0,11,"pl-c"]],[[0,15,"pl-c"]],[[0,10,"pl-c"]],[[0,12,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,22,"pl-c"]],[[0,38,"pl-c"]],[[0,6,"pl-c"]],[[0,10,"pl-c"]],[[0,19,"pl-c"]],[[0,35,"pl-c"]],[[0,11,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,70,"pl-c"]],[[0,9,"pl-c"]],[[0,16,"pl-c"]],[[0,38,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,27,"pl-c"]],[[0,62,"pl-c"]],[[0,72,"pl-c"]],[[0,61,"pl-c"]],[[0,72,"pl-c"]],[[0,78,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,6,"pl-c"]],[[0,26,"pl-c"]],[[0,6,"pl-c"]],[[0,24,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,23,"pl-c"]],[[0,28,"pl-c"]],[[0,29,"pl-c"]],[[0,27,"pl-c"]],[[0,19,"pl-c"]],[[0,23,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,17,"pl-c"]],[[0,30,"pl-c"]],[[0,21,"pl-c"]],[[0,17,"pl-c"]],[[0,52,"pl-c"]],[[0,17,"pl-c"]],[[0,30,"pl-c"]],[[0,29,"pl-c"]],[[0,23,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,33,"pl-c"]],[[0,118,"pl-c"]],[[0,86,"pl-c"]],[[0,107,"pl-c"]],[[0,87,"pl-c"]],[[0,91,"pl-c"]],[[0,105,"pl-c"]],[[0,116,"pl-c"]],[[0,46,"pl-c"]],[[0,90,"pl-c"]],[[0,79,"pl-c"]],[[0,75,"pl-c"]],[[0,35,"pl-c"]],[[0,32,"pl-c"]],[[0,95,"pl-c"]],[[0,78,"pl-c"]],[[0,104,"pl-c"]],[[0,127,"pl-c"]],[[0,63,"pl-c"]],[[0,43,"pl-c"]],[[0,27,"pl-c"]],[[0,172,"pl-c"]],[[0,75,"pl-c"]],[[0,26,"pl-c"]],[[0,32,"pl-c"]],[[0,23,"pl-c"]],[[0,22,"pl-c"]],[[0,22,"pl-c"]],[[0,23,"pl-c"]],[[0,41,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,86,"pl-c"]],[[0,26,"pl-c"]],[[0,25,"pl-c"]],[[0,39,"pl-c"]],[[0,40,"pl-c"]],[[0,42,"pl-c"]],[[0,56,"pl-c"]],[[0,30,"pl-c"]],[[0,30,"pl-c"]],[[0,62,"pl-c"]],[[0,32,"pl-c"]],[[0,29,"pl-c"]],[[0,27,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,14,"pl-c"]],[[0,16,"pl-c"]],[[0,12,"pl-c"]],[[0,19,"pl-c"]],[[0,15,"pl-c"]],[[0,16,"pl-c"]],[[0,17,"pl-c"]],[[0,17,"pl-c"]],[[0,11,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,46,"pl-c"]],[[0,0,"pl-c"]],[[0,23,"pl-c"]],[[0,18,"pl-c"]],[[0,102,"pl-c"]],[[0,102,"pl-c"]],[[0,102,"pl-c"]],[[0,102,"pl-c"]],[[0,102,"pl-c"]],[[0,126,"pl-c"]],[[0,102,"pl-c"]],[[0,103,"pl-c"]],[[0,103,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,90,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,6,"pl-c"]],[[0,18,"pl-c"]],[[0,6,"pl-c"]],[[0,15,"pl-c"]],[[0,6,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,37,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,6,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,6,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,10,"pl-c"]],[[0,39,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,14,"pl-c"]],[[0,10,"pl-c"]],[[0,35,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,20,"pl-c"]],[[0,44,"pl-c"]],[[0,41,"pl-c"]],[[0,37,"pl-c"]],[[0,53,"pl-c"]],[[0,47,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,44,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,23,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,13,"pl-c"]],[[0,12,"pl-c"]],[[0,29,"pl-c"]],[[0,15,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,3,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,22,"pl-c"]],[[0,12,"pl-c"]],[[0,18,"pl-c"]],[[0,20,"pl-c"]],[[0,23,"pl-c"]],[[0,4,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,22,"pl-c"]],[[0,7,"pl-c"]],[[0,30,"pl-c"]],[[0,15,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,19,"pl-c"]],[[0,10,"pl-c"]],[[0,11,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,14,"pl-c"]],[[0,9,"pl-c"]],[[0,18,"pl-c"]],[[0,22,"pl-c"]],[[0,12,"pl-c"]],[[0,17,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,8,"pl-c"]],[[0,10,"pl-c"]],[[0,30,"pl-c"]],[[0,14,"pl-c"]],[[0,20,"pl-c"]],[[0,19,"pl-c"]],[[0,16,"pl-c"]],[[0,22,"pl-c"]],[[0,27,"pl-c"]],[[0,23,"pl-c"]],[[0,16,"pl-c"]],[[0,11,"pl-c"]],[[0,22,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,10,"pl-c"]],[[0,29,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,10,"pl-c"]],[[0,29,"pl-c"]],[[0,4,"pl-c"]],[[0,20,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,10,"pl-c"]],[[0,19,"pl-c"]],[[0,30,"pl-c"]],[[0,31,"pl-c"]],[[0,33,"pl-c"]],[[0,38,"pl-c"]],[[0,44,"pl-c"]],[[0,28,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,14,"pl-c"]],[[0,20,"pl-c"]],[[0,26,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,17,"pl-c"]],[[0,11,"pl-c"]],[[0,7,"pl-c"]],[[0,11,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,9,"pl-c"]],[[0,32,"pl-c"]],[[0,17,"pl-c"]],[[0,11,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,44,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,39,"pl-c"]],[[0,39,"pl-c"]],[[0,40,"pl-c"]],[[0,39,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,21,"pl-c"]],[[0,145,"pl-c"]],[[0,147,"pl-c"]],[[0,168,"pl-c"]],[[0,166,"pl-c"]],[[0,165,"pl-c"]],[[0,166,"pl-c"]],[[0,168,"pl-c"]],[[0,155,"pl-c"]],[[0,151,"pl-c"]],[[0,157,"pl-c"]],[[0,157,"pl-c"]],[[0,152,"pl-c"]],[[0,152,"pl-c"]],[[0,152,"pl-c"]],[[0,149,"pl-c"]],[[0,107,"pl-c"]],[[0,111,"pl-c"]],[[0,107,"pl-c"]],[[0,108,"pl-c"]],[[0,107,"pl-c"]],[[0,122,"pl-c"]],[[0,117,"pl-c"]],[[0,123,"pl-c"]],[[0,113,"pl-c"]],[[0,118,"pl-c"]],[[0,131,"pl-c"]],[[0,118,"pl-c"]],[[0,118,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,39,"pl-c"]],[[0,38,"pl-c"]],[[0,27,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,10,"pl-c"]],[[0,39,"pl-c"]],[[0,38,"pl-c"]],[[0,34,"pl-c"]],[[0,3,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,13,"pl-c"]],[[0,40,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,23,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,17,"pl-c"]],[[0,27,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,19,"pl-c"]],[[0,27,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,17,"pl-c"]],[[0,12,"pl-c"]],[[0,27,"pl-c"]],[[0,10,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,63,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,17,"pl-c"]],[[0,27,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,15,"pl-c"]],[[0,12,"pl-c"]],[[0,27,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,22,"pl-c"]],[[0,3,"pl-c"]],[[0,21,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,53,"pl-c"]],[[0,38,"pl-c"]],[[0,51,"pl-c"]],[[0,51,"pl-c"]],[[0,3,"pl-c"]],[[0,25,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,18,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,30,"pl-c"]],[[0,45,"pl-c"]],[[0,45,"pl-c"]],[[0,3,"pl-c"]],[[0,28,"pl-c"]],[[0,34,"pl-c"]],[[0,10,"pl-c"]],[[0,34,"pl-c"]],[[0,11,"pl-c"]],[[0,13,"pl-c"]],[[0,42,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,33,"pl-c"]],[[0,33,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,10,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,10,"pl-c"]],[[0,10,"pl-c"]],[[0,7,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,7,"pl-c"]],[[0,10,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,8,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,45,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,7,"pl-c"]],[[0,8,"pl-c"]],[[0,6,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,19,"pl-c"]],[[0,39,"pl-c"]],[[0,3,"pl-c"]],[[0,13,"pl-c"]],[[0,6,"pl-c"]],[[0,13,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,14,"pl-c"]],[[0,16,"pl-c"]],[[0,16,"pl-c"]],[[0,25,"pl-c"]],[[0,3,"pl-c"]],[[0,27,"pl-c"]],[[0,23,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,81,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,26,"pl-c"]],[[0,21,"pl-c"]],[[0,23,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,10,"pl-c"]],[[0,15,"pl-c"]],[[0,12,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,8,"pl-c"]],[[0,13,"pl-c"]],[[0,10,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,42,"pl-c"]],[[0,9,"pl-c"]],[[0,43,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,32,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,33,"pl-c"]],[[0,10,"pl-c"]],[[0,34,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,9,"pl-c"]],[[0,9,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,32,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,10,"pl-c"]],[[0,10,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,12,"pl-c"]],[[0,13,"pl-c"]],[[0,12,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,50,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,16,"pl-c"]],[[0,17,"pl-c"]],[[0,16,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,30,"pl-c"]],[[0,31,"pl-c"]],[[0,30,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,66,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,16,"pl-c"]],[[0,17,"pl-c"]],[[0,16,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,31,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,17,"pl-c"]],[[0,38,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,19,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,10,"pl-c"]],[[0,22,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,18,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,14,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,32,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,10,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,40,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,41,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,32,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,22,"pl-c"]],[[0,13,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,19,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,47,"pl-c"]],[[0,0,"pl-c"]],[[0,22,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,64,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,6,"pl-c"]],[[0,4,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,31,"pl-c"]],[[0,30,"pl-c"]],[[0,20,"pl-c"]],[[0,43,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,27,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,22,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,4,"pl-c"]],[[0,0,"pl-c"]],[[0,15,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,33,"pl-c"]],[[0,4,"pl-c"]],[[0,29,"pl-c"]],[[0,11,"pl-c"]],[[0,6,"pl-c"]],[[0,19,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,8,"pl-c"]],[[0,4,"pl-c"]],[[0,64,"pl-c"]],[[0,11,"pl-c"]],[[0,4,"pl-c"]],[[0,47,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,42,"pl-c"]],[[0,24,"pl-c"]],[[0,10,"pl-c"]],[[0,43,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,27,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,33,"pl-c"]],[[0,34,"pl-c"]],[[0,31,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,34,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,20,"pl-c"]],[[0,6,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,4,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,19,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,18,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,29,"pl-c"]],[[0,19,"pl-c"]],[[0,29,"pl-c"]],[[0,13,"pl-c"]],[[0,29,"pl-c"]],[[0,22,"pl-c"]],[[0,12,"pl-c"]],[[0,37,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,52,"pl-c"]],[[0,35,"pl-c"]],[[0,73,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,20,"pl-c"]],[[0,27,"pl-c"]],[[0,27,"pl-c"]],[[0,27,"pl-c"]],[[0,11,"pl-c"]],[[0,39,"pl-c"]],[[0,33,"pl-c"]],[[0,29,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,37,"pl-c"]],[[0,1,"pl-c"]],[[0,34,"pl-c"]],[[0,32,"pl-c"]],[[0,35,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,37,"pl-c"]],[[0,1,"pl-c"]],[[0,16,"pl-c"]],[[0,32,"pl-c"]],[[0,17,"pl-c"]],[[0,32,"pl-c"]],[[0,28,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,37,"pl-c"]],[[0,1,"pl-c"]],[[0,0,"pl-c"]],[[0,36,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,33,"pl-c"]],[[0,31,"pl-c"]],[[0,39,"pl-c"]],[[0,42,"pl-c"]],[[0,39,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,36,"pl-c"]],[[0,14,"pl-c"]],[[0,35,"pl-c"]],[[0,36,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,0,"pl-c"]],[[0,25,"pl-c"]],[[0,26,"pl-c"]],[[0,16,"pl-c"]],[[0,27,"pl-c"]],[[0,19,"pl-c"]],[[0,27,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,26,"pl-c"]],[[0,39,"pl-c"]],[[0,26,"pl-c"]],[[0,51,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,15,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,43,"pl-c"]],[[0,32,"pl-c"]],[[0,9,"pl-c"]],[[0,31,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,21,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,28,"pl-c"]],[[0,38,"pl-c"]],[[0,28,"pl-c"]],[[0,50,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,22,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,19,"pl-c"]],[[0,7,"pl-c"]],[[0,32,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,24,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,26,"pl-c"]],[[0,20,"pl-c"]],[[0,29,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,18,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,23,"pl-c"]],[[0,44,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,31,"pl-c"]],[[0,38,"pl-c"]],[[0,31,"pl-c"]],[[0,50,"pl-c"]],[[0,0,"pl-c"]],[[0,31,"pl-c"]],[[0,62,"pl-c"]],[[0,31,"pl-c"]],[[0,66,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,42,"pl-c"]],[[0,39,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,59,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,16,"pl-c"]],[[0,59,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,36,"pl-c"]],[[0,37,"pl-c"]],[[0,43,"pl-c"]],[[0,37,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,45,"pl-c"]],[[0,41,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,26,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,23,"pl-c"]],[[0,12,"pl-c"]],[[0,24,"pl-c"]],[[0,13,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,12,"pl-c"]],[[0,9,"pl-c"]],[[0,14,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,18,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,13,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,10,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,15,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,11,"pl-c"]],[[0,4,"pl-c"]],[[0,12,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,13,"pl-c"]],[[0,8,"pl-c"]],[[0,4,"pl-c"]],[[0,38,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,27,"pl-c"]],[[0,23,"pl-c"]],[[0,20,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,12,"pl-c"]],[[0,16,"pl-c"]],[[0,20,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,12,"pl-c"]],[[0,4,"pl-c"]],[[0,81,"pl-c"]],[[0,25,"pl-c"]],[[0,4,"pl-c"]],[[0,81,"pl-c"]],[[0,32,"pl-c"]],[[0,4,"pl-c"]],[[0,81,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,23,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,47,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,45,"pl-c"]],[[0,19,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,27,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,14,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,15,"pl-c"]],[[0,3,"pl-c"]],[[0,57,"pl-c"]],[[0,16,"pl-c"]],[[0,44,"pl-c"]],[[0,25,"pl-c"]],[[0,20,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,48,"pl-c"]],[[0,12,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,14,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,12,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,10,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,20,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,16,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,34,"pl-c"]],[[0,26,"pl-c"]],[[0,4,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,38,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,8,"pl-c"]],[[0,13,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,6,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,51,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,19,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,66,"pl-c"]],[[0,4,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,31,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,27,"pl-c"]],[[0,4,"pl-c"]],[[0,32,"pl-c"]],[[0,15,"pl-c"]],[[0,34,"pl-c"]],[[0,28,"pl-c"]],[[0,4,"pl-c"]],[[0,27,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,30,"pl-c"]],[[0,4,"pl-c"]],[[0,35,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,20,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,10,"pl-c"]],[[0,80,"pl-c"]],[[0,1,"pl-c"]],[[0,153,"pl-c"]],[[0,4,"pl-c"]],[[0,78,"pl-c"]],[[0,0,"pl-c"]],[[0,60,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,27,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,9,"pl-c"]],[[0,26,"pl-c"]],[[0,28,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,5,"pl-c"]],[[0,10,"pl-c"]],[[0,13,"pl-c"]],[[0,13,"pl-c"]],[[0,15,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,9,"pl-c"]],[[0,7,"pl-c"]],[[0,28,"pl-c"]],[[0,14,"pl-c"]],[[0,61,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,24,"pl-c"]],[[0,15,"pl-c"]],[[0,28,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,7,"pl-c"]],[[0,5,"pl-c"]],[[0,10,"pl-c"]],[[0,22,"pl-c"]],[[0,13,"pl-c"]],[[0,15,"pl-c"]],[[0,10,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,4,"pl-c"]],[[0,13,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,24,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,63,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,75,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,92,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,42,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,43,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,34,"pl-c"]],[[0,14,"pl-c"]],[[0,33,"pl-c"]],[[0,4,"pl-c"]],[[0,18,"pl-c"]],[[0,25,"pl-c"]],[[0,39,"pl-c"]],[[0,46,"pl-c"]],[[0,4,"pl-c"]],[[0,14,"pl-c"]],[[0,25,"pl-c"]],[[0,18,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,22,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,25,"pl-c"]],[[0,22,"pl-c"]],[[0,4,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,71,"pl-c"]],[[0,8,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,30,"pl-c"]],[[0,8,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,89,"pl-c"]],[[0,69,"pl-c"]],[[0,8,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,33,"pl-c"]],[[0,12,"pl-c"]],[[0,18,"pl-c"]],[[0,23,"pl-c"]],[[0,35,"pl-c"]],[[0,17,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,33,"pl-c"]],[[0,26,"pl-c"]],[[0,17,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,34,"pl-c"]],[[0,17,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,41,"pl-c"]],[[0,36,"pl-c"]],[[0,17,"pl-c"]],[[0,17,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,31,"pl-c"]],[[0,32,"pl-c"]],[[0,29,"pl-c"]],[[0,17,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,49,"pl-c"]],[[0,8,"pl-c"]],[[0,45,"pl-c"]],[[0,50,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,24,"pl-c"]],[[0,14,"pl-c"]],[[0,31,"pl-c"]],[[0,31,"pl-c"]],[[0,31,"pl-c"]],[[0,37,"pl-c"]],[[0,25,"pl-c"]],[[0,29,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,44,"pl-c"]],[[0,6,"pl-c"]],[[0,44,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,44,"pl-c"]],[[0,6,"pl-c"]],[[0,44,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,43,"pl-c"]],[[0,6,"pl-c"]],[[0,43,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,44,"pl-c"]],[[0,6,"pl-c"]],[[0,44,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,9,"pl-c"]],[[0,6,"pl-c"]],[[0,22,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,4,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,74,"pl-c"]],[[0,83,"pl-c"]],[[0,52,"pl-c"]],[[0,48,"pl-c"]],[[0,56,"pl-c"]],[[0,50,"pl-c"]],[[0,42,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,33,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,47,"pl-c"]],[[0,11,"pl-c"]],[[0,53,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,19,"pl-c"]],[[0,19,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,5,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,14,"pl-c"]],[[0,22,"pl-c"]],[[0,11,"pl-c"]],[[0,16,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,35,"pl-c"]],[[0,29,"pl-c"]],[[0,32,"pl-c"]],[[0,17,"pl-c"]],[[0,35,"pl-c"]],[[0,17,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,43,"pl-c"]],[[0,14,"pl-c"]],[[0,39,"pl-c"]],[[0,8,"pl-c"]],[[0,25,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,11,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,13,"pl-c"]],[[0,11,"pl-c"]],[[0,17,"pl-c"]],[[0,32,"pl-c"]],[[0,55,"pl-c"]],[[0,3,"pl-c"]],[[0,33,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,9,"pl-c"]],[[0,18,"pl-c"]],[[0,34,"pl-c"]],[[0,16,"pl-c"]],[[0,29,"pl-c"]],[[0,24,"pl-c"]],[[0,19,"pl-c"]],[[0,24,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,32,"pl-c"]],[[0,24,"pl-c"]],[[0,31,"pl-c"]],[[0,20,"pl-c"]],[[0,11,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,28,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,11,"pl-c"]],[[0,29,"pl-c"]],[[0,15,"pl-c"]],[[0,9,"pl-c"]],[[0,5,"pl-c"]],[[0,33,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,12,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,7,"pl-c"]],[[0,21,"pl-c"]],[[0,18,"pl-c"]],[[0,23,"pl-c"]],[[0,15,"pl-c"]],[[0,15,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,0,"pl-c"]],[[0,3,"pl-c"]],[[0,2,"pl-c"]],[[0,2,"pl-c"]],[[0,2,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,8,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,18,"pl-c"]],[[0,19,"pl-c"]],[[0,8,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,16,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,34,"pl-c"]],[[0,18,"pl-c"]],[[0,18,"pl-c"]],[[0,8,"pl-c"]],[[0,3,"pl-c"]],[[0,4,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,13,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,15,"pl-c"]],[[0,26,"pl-c"]],[[0,7,"pl-c"]],[[0,16,"pl-c"]],[[0,23,"pl-c"]],[[0,41,"pl-c"]],[[0,23,"pl-c"]],[[0,12,"pl-c"]],[[0,57,"pl-c"]],[[0,45,"pl-c"]],[[0,24,"pl-c"]],[[0,12,"pl-c"]],[[0,44,"pl-c"]],[[0,14,"pl-c"]],[[0,16,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,6,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,24,"pl-c"]],[[0,7,"pl-c"]],[[0,5,"pl-c"]],[[0,23,"pl-c"]],[[0,27,"pl-c"]],[[0,43,"pl-c"]],[[0,19,"pl-c"]],[[0,24,"pl-c"]],[[0,11,"pl-c"]],[[0,14,"pl-c"]],[[0,16,"pl-c"]],[[0,7,"pl-c"]],[[0,6,"pl-c"]],[[0,9,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,14,"pl-c"]],[[0,35,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,118,"pl-c"]],[[0,34,"pl-c"]],[[0,21,"pl-c"]],[[0,25,"pl-c"]],[[0,9,"pl-c"]],[[0,23,"pl-c"]],[[0,11,"pl-c"]],[[0,20,"pl-c"]],[[0,13,"pl-c"]],[[0,85,"pl-c"]],[[0,32,"pl-c"]],[[0,40,"pl-c"]],[[0,15,"pl-c"]],[[0,18,"pl-c"]],[[0,15,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,23,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,20,"pl-c"]],[[0,7,"pl-c"]],[[0,3,"pl-c"]],[[0,40,"pl-c"]],[[0,15,"pl-c"]],[[0,36,"pl-c"]],[[0,30,"pl-c"]],[[0,22,"pl-c"]],[[0,36,"pl-c"]],[[0,17,"pl-c"]],[[0,19,"pl-c"]],[[0,22,"pl-c"]],[[0,20,"pl-c"]],[[0,12,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,30,"pl-c"]],[[0,22,"pl-c"]],[[0,36,"pl-c"]],[[0,17,"pl-c"]],[[0,19,"pl-c"]],[[0,22,"pl-c"]],[[0,20,"pl-c"]],[[0,12,"pl-c"]],[[0,3,"pl-c"]],[[0,20,"pl-c"]],[[0,16,"pl-c"]],[[0,22,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,9,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,12,"pl-c"]],[[0,32,"pl-c"]],[[0,3,"pl-c"]],[[0,19,"pl-c"]],[[0,22,"pl-c"]],[[0,21,"pl-c"]],[[0,3,"pl-c"]],[[0,15,"pl-c"]],[[0,21,"pl-c"]],[[0,14,"pl-c"]],[[0,10,"pl-c"]],[[0,16,"pl-c"]],[[0,10,"pl-c"]],[[0,18,"pl-c"]],[[0,3,"pl-c"]],[[0,14,"pl-c"]],[[0,3,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,10,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,18,"pl-c"]],[[0,24,"pl-c"]],[[0,21,"pl-c"]],[[0,13,"pl-c"]],[[0,24,"pl-c"]],[[0,5,"pl-c"]],[[0,20,"pl-c"]],[[0,4,"pl-c"]],[[0,21,"pl-c"]],[[0,5,"pl-c"]],[[0,5,"pl-c"]],[[0,22,"pl-c"]],[[0,4,"pl-c"]],[[0,22,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,29,"pl-c"]],[[0,0,"pl-c"]],[[0,15,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,26,"pl-c"]],[[0,19,"pl-c"]],[[0,59,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,17,"pl-c"]],[[0,0,"pl-c"]],[[0,7,"pl-c"]],[[0,28,"pl-c"]],[[0,4,"pl-c"]],[[0,27,"pl-c"]],[[0,5,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,2,"pl-c"]],[[0,3,"pl-c"]],[[0,0,"pl-c"]],[[0,60,"pl-c"]],[[0,83,"pl-c"]],[[0,0,"pl-c"]],[[0,49,"pl-c"]],[[0,47,"pl-c"]],[[0,48,"pl-c"]],[[0,47,"pl-c"]],[[0,46,"pl-c"]],[[0,51,"pl-c"]],[[0,52,"pl-c"]],[[0,48,"pl-c"]],[[0,48,"pl-c"]],[[0,51,"pl-c"]]],"colorizedLines":null}},"title":"reference/docs/ruby.md at main · jaywcjlove/reference","appPayload":{},"meta":{"title":"reference/docs/ruby.md at main · jaywcjlove/reference"}}

Latest commit

 

History

History
2458 lines (2025 loc) · 53 KB

File metadata and controls

2458 lines (2025 loc) · 53 KB

Ruby 备忘清单

入门

安装

# Debian, Ubuntu
$ sudo apt-get install ruby-full
# Windows
$ winget install RubyInstallerTeam.Ruby 
$ brew install ruby # macOS
$ docker run -it --rm ruby:latest # Docker
$ docker run -it --rm ruby:2.7

使用包管理器安装 rbenv

$ brew install rbenv ruby-build # macOS
# Debian、ubuntu 和其他衍生产品
$ sudo apt install rbenv

使用 rbenv 安装 ruby

# 列出最新的稳定版本
$ rbenv install -l
# 列出所有本地版本
$ rbenv install -L
# 安装 Ruby 版本
$ rbenv install 3.1.2
$ rbenv global 3.1.2 # 为这台机器设置默认Ruby版本
# 或者
$ rbenv local 3.1.2 # 设置此目录的 Ruby 版本
$ rbenv local --unset
$ rbenv version # 显示当前活动的 Ruby 版本
=> 1.9.3-p327 (set by /Users/sam/.rbenv/version)

使用 RVM 安装 ruby

$ curl -sSL https://get.rvm.io | bash -s stable
$ rvm list          # Ruby 版本列表
$ rvm install 3.0.1 # 安装 3.0.1
$ rvm use 3.0.1     # 使用 3.0.1

如何安装 ruby gem 管理器, bundler gem

# 访问 bash 以执行以下命令
$ docker run -it --rm ruby:latest bash
$ gem install bundler
$ bundle -v
$ gem update bundler
$ gem uninstall bundler

什么是 Gemfile 和 Gemfile.lock

Gemfile 是 Bundler(也是 gem)的配置文件,其中包含项目的 gem 列表(依赖项)

# 在项目根目录的 Gemfile 中指定 gem
ruby '2.5.6'

source 'https://rubygems.org'
gem 'nokogiri'
gem 'rack', '~>1.1'
gem 'rspec', :require => 'spec'

安装 Gemfile 中的所有 gem

$ bundle install

解决开发用 mac,生产用 linux 出现的 Gemfile.lock 不一致问题

bundle lock --add-platform x86_64-linux

安装特定 ruby gem 的特定版本

$ gem install bundler -v 1.17
$ gem install minitest -v 5.8.4

使用 Bundler 更新 gem

# 使用 Bundler 更新单个 gem
$ bundle update nokogiri
# 使用 Bundler 更新 Gemfile 中的每个 gem
$ bundle update

保留字

保留字 描述
__ENCODING__ 当前文件的脚本编码
__LINE__ 当前文件中此关键字的行号
__FILE__ 当前文件的路径
BEGIN 包含在 { } 中的代码在程序运行之前运行
END 包含在 { } 中以在程序结束时运行
alias 为现有方法、运算符、全局变量创建别名
and 逻辑与运算符
begin 开始一段代码
break 终止循环
case 将表达式与匹配的 when 子句进行比较,其中
以 end 结束
class 定义一个类
def 定义函数/方法
defined? 检查某个变量、函数是否存在
do 开始一个代码块并执行块中的代码,以
end关键字结束
else 如果先前的条件不成立,则执行以下代码
elsif if 表达式的替代条件
end 用于结束以 begin、class、def、do、if 等关键字开头的代码块
ensure 总是在块终止时执行
false 逻辑布尔假值
for 开始一个 for 循环
if 如果 if 的条件语句为 true,则执行代码块
in 与 for 循环一起使用
module 定义一个模块
next 跳转到循环条件评估之前的点
nil 为空或无效或始终为假
not 逻辑否定运算符
or 逻辑或运算符
redo 条件循环后跳转
rescue 在引发异常后评估表达式
retry • 在救援之外调用时,重复方法调用
• 在救援内部调用时,跳转到块顶部
return 从方法或代码块返回值
self 当前对象
super 调用超类中的同名方法
then 与 if、unless、when、case、rescue 一起使用的分隔符
true 逻辑布尔真
undef 使当前类中的方法/函数未定义
until 在条件语句为假时执行代码块
when 在 case 语句下开始一个子句
while 执行代码块,直到条件语句变为假
yield 执行传递给方法的代码块

注释

# 单行注释
=begin
多行
注释
=end
=begin 注释第 1 行 =end
puts "Hello world!"  # 代码的内联注释

运算符

逻辑运算符

  • and
  • or
  • not
  • &&
  • ||
  • !

位运算符

  • &
  • |
  • ^
  • ~
  • <<
  • >>

算术运算符

  • +
  • -
  • *
  • /
  • %
  • **

比较运算符

  • ==
  • !=
  • >
  • <
  • >=
  • <=
  • <=>
  • ===
  • eql?
  • equal?

运算符示例

# 添加
1 + 1   #=> 2
# 减法
2 - 1   #=> 1
# 乘法
2 * 2   #=> 4
# 分配
10 / 5  #=> 2
17 / 5    #=> 3, not 3.4
17 / 5.0  #=> 3.4
# 指数
2 ** 2  #=> 4
3 ** 4  #=> 81
# 模数(求除法的余数)
8 % 2   #=> 0  (8 / 2 = 4; 没有剩余)
10 % 4  #=> 2  (10 / 4 = 2 余数为 2)
a = 10
b = 20
a == b #=> false
a != b #=> true
a > b #=> false
a < b #=> true
a >= b #=> false
a <= b #=> true

# 比较运算符
a <=> b #=> -1
c = 20
c <=> b #=> 0
c <=> a  #=> 1
# 用于测试 case 语句的 when 子句中的相等性
(1...10) === 5 #=> true
# 如果接收者和参数具有相同的类型和相等的值,则为真
1.eql?(1.0) #=> false
c = a + b  #=> 30
c += a #=> 40
c -= a #=> 30
c *= a #=> 300
c /= a #=> 30
c %= a #=> 3
c **= a #=> 59049

# Ruby 并行赋值
a = 10
b = 20
c = 30
a, b, c = 10, 20, 30
# Ruby 位运算符
a = 60
b = 13
# & 如果两个操作数中都存在,则二进制 AND 运算符将位复制到结果中。
a & b #=> 12
# | 如果二进制或运算符存在于任一操作数中,则复制一个位。
a | b #=> 61
# ^ 二元异或操作符如果在一个操作数中设置,则复制该位,但不能同时在两个操作数中设置。
a ^ b #=> 49
# ~ 二进制补码运算符是一元的,具有“翻转”位的效果。
~a
# << 二进制左移运算符。 左操作数的值被移动
# 左操作数指定的位数。
a << 2
# >> 二进制右移运算符。 左操作数的值被移动
# 右操作数指定的位数。
a >> 2

# Ruby 逻辑运算符
a and b #=> true.
a or b #=> true.
a && b #=> true.
(a || b) #=> true.
!(a && b) #=> false.
not(a && b) #=> false.
# Ruby 三元运算符
# ? :
# 如果条件为真? 然后值 X :否则值 Y
a == 10 ? puts 'Right' : puts 'Wrong'
# Ruby 范围运算符
# .. 创建从起点到终点的范围(含)
1..10 #=> 创建从 1 到 10 的范围(包括 1 到 10)
# ... 创建一个从起点到终点的范围,不包括在内
1...10 #=> 创建一个从 1 到 10 的独占范围

运算符优先级表

  • !, ~, unary +
  • **
  • unary -
  • *, /, %
  • +, -
  • <<, >>
  • &
  • ^
  • >, >=, <, <=
  • <=>, ==, ===, !=, =~, !~
  • &&
  • ?, :
  • modifier-rescue
  • =, +=, -=, *=, /=, %=
  • defined
  • not
  • or, and
  • modifier-if, modifier-unless, modifier-while, modifier-until
  • { } 块
  • do ... end 块

变量和范围

名字 范围 示例 说明
[a-z] 或 _ 本地的 count = 10 或 _count = 10 必须初始化局部变量
@ 实例变量 @id = [] 实例变量在初始化之前具有“nil”值
@@ 类变量 @@name = [] 必须初始化类变量
$ 全局变量 $version = "0.8.9" 全局变量在初始化之前具有“nil”值
[A-Z] 持续的 PI = 3.14 常量变量必须初始化,您可以更改常量,但您会收到警告

有五种不同类型的变量。第一个字符确定范围

局部变量

current_weather = "rainy"
_weather = "sunny"

必须以下划线或小写字母开头

实例变量

# 实例类变量
@current_weather = "rainy"
# 全局变量
$current_weather = "rainy"
# 常量变量
WEATHER = "rainy".freeze

伪变量

名字 说明
self 当前方法的接收者对象
true TrueClass 的实例
false FalseClass 的实例
nil NilClass 的实例
__FILE__ 当前源文件名
__LINE__ 当前源文件的当前行号

选项变量

名字 说明
$-0 $/ 的别名
$-a 如果设置了选项 -a,则为真。只读变量
$-d $DEBUG 的别名
$-F $; 的别名
$-i 在就地编辑模式下,此变量保存扩展,否则为零
可以指定启用(或禁用)就地编辑模式
$-I $: 的别名
$-l 如果选项 -lis 设置为真。只读变量
$-p 如果选项 -pi 设置为真。只读变量
$-v $VERBOSE 的别名

预定义变量

名字 说明
$! 异常信息消息。raise 设置此变量
$@ 最后一个异常的回溯,它是 String 的数组,指示调用方法的位置。格式中的元素如:“filename:line”或“filename:line:in `methodname'”(助记符:发生异常的地方)
$& 与此范围内最后一次成功的模式匹配匹配的字符串,如果最后一次模式匹配失败,则返回 nil。 (助记符:在某些编辑器中类似于 &)这个变量是只读的
$` 当前范围内最后一次成功的模式匹配所匹配的任何内容之前的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:` 通常在带引号的字符串之前)此变量是只读的
$' 当前范围内最后一次成功的模式匹配所匹配的字符串后面的字符串,如果最后一次模式匹配失败,则为 nil。 (助记符:' 通常跟在带引号的字符串之后)
$+ 最后一个成功的搜索模式匹配的最后一个括号,如果最后一个模式匹配失败,则为 nil。如果您不知道一组替代模式中的哪一个匹配,这很有用。 (助记:积极向上)
$1, $2... 包含上一次成功匹配的模式中相应括号集中的子模式,不计算已经退出的嵌套块中匹配的模式,或者如果最后一次模式匹配失败,则为 nil。 (助记符:如 \digit)这些变量都是只读的
$~ 当前范围内最后一个匹配的信息。设置此变量会影响匹配变量,如 $&、$+、$1、$2.. 等。第 n 个子表达式可以通过 $~[nth] 检索。 (助记符:~ 用于匹配)这个变量是局部作用域的
$= 不区分大小写的标志,默认为 nil。 (助记符:= 用于比较)
$/ 输入记录分隔符,默认为换行符。像 awk 的 RS 变量一样工作。如果设置为 nil,则将立即读取整个文件。 (助记符:/ 用于在引用诗歌时划定行界)
$\ print 和 IO#write 的输出记录分隔符。默认值为无。 (助记符:它就像 /,但它是你从 Ruby 中“返回”的东西)
$, 打印的输出字段分隔符。此外,它是 Array#join 的默认分隔符。 (助记符:当您的打印语句中有 , 时打印的内容)
$; String#split 的默认分隔符。
$. 读取的最后一个文件的当前输入行号。
$< 由命令行参数或标准输入给出的文件的虚拟连接文件(如果没有提供参数文件)。 $<.file 返回当前文件名。 (助记符:$< 是一个 shell 输入源)
$> print 的默认输出,printf。 $stdout 默认情况下。 (助记符:$> 用于 shell 输出)
$_ 通过gets或readline输入String的最后一行。如果gets/readline 遇到EOF,它被设置为nil。这个变量是局部作用域的。 (助记符:部分与 Perl 相同)
$0 包含包含正在执行的 Ruby 脚本的文件的名称。在某些操作系统上,分配给 $0 会修改 ps(1) 程序看到的参数区域。作为一种指示当前程序状态的方式,这比隐藏您正在运行的程序更有用。 (助记符:与 sh 和 ksh 相同)
$* 为脚本提供的命令行参数。 Ruby 解释器的选项已被删除。 (助记符:与 sh 和 ksh 相同)
$$ 运行此脚本的 Ruby 的进程号。(助记符:与贝壳相同)
$? 最后执行的子进程的状态。
$: 该数组包含通过 load 或 require 查找 Ruby 脚本和二进制模块的位置列表。 它最初由任何 -I 命令行开关的参数组成,然后是默认的 Ruby 库,probabl "/usr/local/lib/ruby",然后是 ".",表示当前目录 . (助记符:冒号是 PATH 环境变量的分隔符)
$" 该数组包含由 require 加载的模块名称。 用于防止 require 两次加载模块。助记符:防止文件被双引号(加载)
$DEBUG -d 开关的状态。
$FILENAME 与$<.filename 相同
$LOAD_PATH $: 的别名
$stdin 当前的标准输入
$stdout 当前的标准输出
$stderr 当前标准错误输出
$VERBOSE 详细标志,由 -v 开关设置到 Ruby 解释器

预定义的全局常量

名字 说明
TRUE 典型的真值。在 Ruby 中,所有非 false 值(除了 nil 和 false 之外的所有值)都是 true
FALSE 虚假本身
NIL 零本身
STDIN 标准输入。$stdin 默认值
STDOUT 标准输出。$stdout 默认值
STDERR 标准错误输出。$stderr 默认值
ENV 类哈希对象包含当前环境变量。 在 ENV 中设置值会更改子进程的环境
ARGF $< 的别名
ARGV $* 的别名
DATA 脚本的文件对象,就在 END 之后。 除非未从文件中读取脚本,否则未定义
VERSION Ruby 版本字符串
RUBY_RELEASE_DATE 发布日期字符串
RUBY_PLATFORM 平台标识符

检查变量的范围

defined? count
"local-variable"
defined? @id
"instance-variable"
defined? @@name
"class variable"
defined? $version
"global-variable"
defined? PI
"constant"

数据类型

类型 示例 Class 文档
Integer a = 17 a.class > Integer
a.class.superclass > Numeric
#
Float a = 87.23 a.class > Float
a.class.superclass > Numeric
#
String a = "Hello universe" a.class > String #
Array a = [12, 34] a.class > Array #
Hash a = {type: "tea", count: 10} a.class > Hash #
Boolean a = false
a = true
a.class > FalseClass
a.class > TrueClass
TrueClass FalseClass
Symbol a = :status a.class > Symbol #
Range a = 1..3 a.class > Range #
Nil a = nil a.class > NilClass #

进一步阅读

检查数据类型

# 两者都是同义词
a = 37
a.kind_of? Integer
# true
a.is_a? Integer
# true

Symbol

week_days = {sunday: 11, monday: 222}

整数有用的方法

2.even?
# true
3.even?
# false

范围

.. 用于创建包含范围

range = 1..10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

... 用于创建专属范围

range = 1...10
range.to_a
# 输出 => [1, 2, 3, 4, 5, 6, 7, 8, 9]

一些有用的方法

Method name Output
cover? (1..5).cover?(5) => true
end ('a'..'z').end => "z"
first (1..5).first => 1
first(3) ('A'..'Z').first(2) => ["A", "B"]
eql? ((0..2).eql?(0..5) => false

在 Range 中使用 step

(1..20).step(2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

条件结构

if 修饰符

num = 2
puts 'two' if num == 2 

如果条件为真,则执行代码

if elsif else 语句

temp = 19
if temp >= 25
  puts "hot"
elsif temp < 25 && temp >= 18
  puts "normal"
else
  puts "cold"
end
# 输出 => normal

除非语句

# 除非与 if 相反,当语句为假时进行评估
name = "rob"
# if name != "bob"
unless name == "bob"
  puts "hello stranger"
else
  puts "hello bob"
end
# 输出 => hello stranger
num = 6
puts 'not two' unless num == 2
# 输出 => not two

case 陈述

# case 返回最后执行的表达式的值
case input
# 检查一个整数,19
when 19
  puts "It's 19"
  # 检查浮点数,33.3
when 33.3
  puts "It's 33.3"
  # 检查一个确切的字符串,“Zaman”
when "Zaman"
  puts "Hi Zaman"
when 10
  puts "It's 10"
  # 检查范围
when 7..11
  puts "It's between 7 and 11"
  # 检查多个值,“咖啡”
when "tea", "coffee"
  puts "Happy days"
  # 检查正则表达式“aA6”
when /^a[A-Z]+[0-6]+$/
  puts "It's a valid match"
  # 通过与 String 类“任何字符串”
  # 进行比较来检查任何字符串
when String
  puts "It's a String"
end

case 简短的语法

case input
  when 19 then puts "It's 19"
end

case 可选的失败

case input
  when 19 then puts "It's 19"
else
  puts "It's not 19"
end

case 获取返回值

marks = 86
result = case marks
        when 0..49 then "Fail"
        when 50..64 then "Pass"
        when 65..74 then "Credit"
        when 75..84 then "Distinction"
        when 85..100 then "High Distinction"
        else "Invalid marks"
        end

puts result
# High Distinction

字符串

字符串插值

name = "World"
puts "Hello #{name}"
puts "The total is #{1+1}"
# "the total is 2"

字符串插值允许您将字符串组合在一起

提取子字符串

string = "abc123"
string[0,3]
# "abc"
string[3,3]
# "123"
string[0..-2]
# "abc12"
#remove or replace the substring
string[0..2] = ""
puts string
# "123"

子字符串是字符串的一小部分,如果你只想要那个特定的部分,它会很有用,比如开头、中间或结尾

将字符串转换为小写或大写

"HELLO World".downcase  # "hello world"
"hello worlD".upcase    # "HELLO WORLD"
"hEllo wOrlD".capitalize # "Hello world"
"hEllo WOrlD".swapcase  # "HeLLO woRLd"

有用的方法

函数名称 Output Note
length or size "HELLO World".length => 11
"HELLO World".size => 11
返回字符串的长度
reverse "hello worlD".reverse => "Dlrow olleh" 返回反转的字符串
include? other_str "hEllo wOrlD".include? "w" => true 如果字符串或字符存在则返回 true,否则返回 false
gsub(pattern, replacement) "hEllo wOrlD".gsub(" ", "_") => "hEllo_wOrlD" gsub 或全局替换用提供的字符串替换一个或多个字符串
gsub(pattern, hash) "organization".gsub("z", 'z' => 's') => "organisation" gsub 或全局替换用提供的哈希替换一个或多个字符串
gsub(pattern) { |match| block} "Price of the phone is 1000 AUD".gsub(/\d+/) { |s| '$'+s }
"Price of the phone is $1000 AUD"
gsub 或全局替换用提供的块替换一个或多个字符串
strip " hEllo WOrlD ".strip
"hEllo WOrlD"
它将删除(修剪)以下任何前导和尾随字符:null(“\x00”)、水平制表符(“\t”)、换行符(\n)、垂直制表符(“\v”)、换页符(f)、回车(\r)、空格(" ")
prepend a = "world" <br> a.prepend("hello ")
"hello world"
在另一个字符串之前添加字符串
insert a = "hello" <br> a.insert(a.length, " world")
"hello world"
在特定位置插入字符串
start_with? string = "ruby programming"
string.start_with? "ruby"
true
检查字符串是否以特定前缀开头
end_with? string = "ruby programming"
string.end_with? "ruby"
false
检查字符串是否以特定前缀结尾
delete_suffix string = "sausage is expensive"
string.delete_suffix(" is expensive")
"sausage"
从字符串中删除后缀
delete_prefix string = "sausage is expensive"
string.delete_prefix("sausage")
" is expensive"
从字符串中删除前缀
split string = "a b c d" <br> string.split
["a", "b", "c", "d"]
将字符串转换为字符数组
join arr = ['a', 'b', 'c'] <br> arr.join => "abc" 将数组转换为字符串
to_i a = "49" <br> a.to_i => 49 将字符串转换为整数
chop "abcd?".chop("?") => "abcd" 从字符串中删除最后一个字符
count str = "aaab" <br> str.count("a")
3
计算字符串中的字符
to_f a = "49"
a.to_f
49.0
将字符串转换为浮点数
to_sym a = "key"
a.to_sym
:key
将字符串转换为符号
match "abcd?".match(/ab/) => #<MatchData "ab"> 将模式转换为正则表达式并在字符串上调用其匹配方法
empty? "hello".empty? => false 如果字符串的长度为零,则返回 true
squeeze "Booook".squeeze => "Bok" 返回字符串的副本,其中相同字符的运行被单个字符替换
* puts "Ruby " * 4 => Ruby Ruby Ruby Ruby 返回多个 self 副本的串联
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
eql? s = 'foo' => true
s.eql?('foo') => true
如果对象具有相同的长度和内容,则返回 true;作为自己;否则为假
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接
+ "sammy " + "shark" => "sammyshark" 返回 self 和给定的其他字符串的连接

方法

声明一个方法

def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    parameter1 + parameter2
end

res = method_name(20, 10)
# 输出 => 30
def method_name(parameter1, parameter2)
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2
end
# 输出 => 30

调用方法

res = method_name(parameter1, parameter2)
# 可以调用不带括号的方法
res = method_name parameter1, parameter2

类方法

类方法是类级别的方法。 有多种定义类方法的方法

class Mobile
    def self.ring
        "ring ring ring..."
    end
end

Mobile.ring

class Mobile
    def Mobile.ring
        "ring ring ring..."
    end
end
Mobile.ring

class Mobile
    class << self
    def ring
        "ring ring ring..."
       end
    end
end
Mobile.ring

类方法是类对象的实例方法。 当创建一个新类时,“Class”类型的对象被初始化并分配给一个全局常量(在本例中为 Mobile)

Mobile = Class.new do
    def self.ring
        "ring ring ring..."
    end
end
Mobile.ring
Mobile = Class.new
class << Mobile
    def ring
        "ring ring ring..."
    end
end
Mobile.ring

使用另一个参数作为默认值

def method_name(num1, num2 = num1)
    return num1 + num2
end
res = method_name(10)
# 输出 => 20

为方法参数定义默认值

def method_name(parameter1, parameter2, type = "ADD")
    puts "#{parameter1} #{parameter2}"
    return parameter1 + parameter2 if type == "ADD"
    return parameter1 - parameter2 if type == "SUB"
end
res = method_name(20, 10)
# 输出 => 30

将可变长度参数传递给方法参数

def method_name(type, *values)
    return values.reduce(:+) if type == "ADD"
    return values.reduce(:-) if type == "SUB"
end
numbers = [2, 2, 2, 3, 3, 3]
res = method_name("ADD", *numbers)
# 输出 => 15
res = method_name("SUB", *numbers)
# 输出 => -11
# 或者您可以提供这样的值
res = method_name("ADD", 2, 2, 2, 3, 3, 3)
# 输出 => 15

修改对象

a = ["Drama", "Mystery", "Crime",
"Sci-fi", "Disaster", "Thriller"]
a.sort
puts a
# 我们没有修改对象
# Drama
# Mystery
# Crime
# Sci-fi
# Disaster
# Thriller
a.sort!
puts a
# 修改对象
# Crime
# Disaster
# Drama
# Mystery
# Sci-fi
# Thriller

当您要修改对象时,在方法之后使用 !

布尔方法

在 ruby 中,以问号 (?) 结尾的方法称为布尔方法,它返回 true 或 false

"some text".nil?
# false
nil.nil?
# true

您可以拥有自己的布尔方法

def is_vowel?(char)
    ['a','e','i','o','u'].include? char
end
is_vowel? 'a'
# true
is_vowel? 'b'
# false

Blocks (块)

块示例

# return value
def give_me_data
    data = yield
    puts "data = #{data}"
end
give_me_data { "Big data" }
# 输出 => data = Big data

do 和 end(用于多行)或花括号 { 和 }(用于单行)之间的代码称为块,它们可以在两个管道之间定义多个参数 (|arg1, arg2|)

单行块

salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# puts s = block body
# |s| = block arugments

多行块

salary.each do |s|
    a = 10
    res = a * s
    puts res
end
# 块体
# a = 10
# res = a * s
# puts res
# 块参数
# |s|

块可以作为方法参数传递,也可以与方法调用相关联。 块返回最后评估的语句

隐式传递一个块

def give_me_data
    puts "I am inside give_me_data method"
    yield
    puts "I am back in give_me_data method"
end

give_me_data { puts "Big data" }

# 输出
# I am inside give_me_data method
# Big data
# I am back in give_me_data method

多次调用

def give_me_data
    yield
    yield
    yield
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data
# Big data

使用块参数调用

def give_me_data
    yield 10
    yield 100
    yield 30
end

give_me_data { |data| puts "Big data #{data} TB" }

# 输出
# Big data 10 TB
# Big data 100 TB
# Big data 30 TB

使用多个块参数调用

def give_me_data
    yield "Big data", 10, "TB"
    yield "Big data", 100, "GB"
    yield "Big data", 30, "MB"
end

give_me_data { |text, data, unit| puts "#{text} #{data} #{unit}" }

# 输出
# Big data 10 TB
# Big data 100 GB
# Big data 30 MB

块将尝试从当前上下文返回

give_me_data
    puts "我在 give_me_data 方法里面"
end

def test
  puts "我在测试方法里面"
  give_me_data { return 10 } # 代码从这里返回
  puts "I am back in test method"
end

return_value = test

# 输出
# 我在测试方法里面
# 我在 give_me_data 方法里面
# 10

通过使用 & 参数显式传递块

def give_me_data(&block)
    block.call
    block.call
end

give_me_data { puts "Big data" }

# 输出
# Big data
# Big data

检查是否给出了块

def give_me_data
    yield
end

give_me_data

# 输出
# LocalJumpError: no block given (yield)

处理异常并使块可选的方法

def give_me_data
    return "no block" unless block_given?
    yield
end

give_me_data { puts "Big data" }
give_me_data

# 输出
# Big data

Procs

Procs 示例

p = Proc.new { puts "Hello World" }

def give_me_data(proc)
    proc.call
end

give_me_data p

# 输出
# Hello World

proc 就像一个可以存储在变量中的块

任意参数

p = Proc.new { |count| "Hello World " * count }

def give_me_data(proc)
    proc.call 5, 2
end

give_me_data p

# 输出
# "Hello World Hello World Hello World Hello World Hello World "

proc 将尝试从当前上下文返回

p = Proc.new { return 10 }
p.call
# 输出
LocalJumpError: unexpected return

不能从顶级上下文返回

def give_me_data
    puts "我在 give_me_data 方法里面"
    p = Proc.new { return 10 }
    p.call # 代码从这里返回
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# 我在 give_me_data 方法里面
# 10

Lambdas

声明一个 lambda

l = lambda { puts "Hello World" }
# 速记
l = -> { puts "Hello World" }
# 调用 lambda
l.call
# 输出 => Hello World

有多种方法可以调用 lambda

l.()
l[]

严格的 arguments

l = -> (count) { "Hello World " * count }
l.call 5
# 输出
# "Hello World Hello World Hello World Hello World Hello World "
l.call 5, 2
# 输出
wrong number of arguments (given 2, expected 1)

块中声明一个 lambda

def give_me_data
    puts "I am inside give_me_data method"
    l = -> { return 10 }
    l.call
    puts "I am back in give_me_data method"
end

return_value = give_me_data
puts return_value

# 输出
# I am inside give_me_data method
# I am back in give_me_data method
# nil # because puts return nil

lambdas 从 lambda 本身返回,就像常规方法一样

l = -> { return 10 }
l.call

# 输出 => 10

数组

初始化一个空数组

array = Array.new   #=> []
# or
array = []

包含不同类型的对象的数组

array = [1, "two", 3.0] 
#=> [1, "two", 3.0]

用初始大小和默认对象填充数组

numbers = Array.new(3)       
#=> [nil, nil, nil]
numbers = Array.new(3, 7)    
#=> [7, 7, 7]
numbers = Array.new(3, true) 
#=> [true, true, true]
numbers = []
numbers.fill(7, 0..2)   #=> [7, 7, 7]

不同哈希值的数组

array_with_hashes = Array.new(2) { {} } #=> [{}, {}]
array_with_hashes[0][:name] = "Bob"
array_with_hashes[0][:id] = 10          #=> [{:name=>"Bob", :id=>10}, {}]

二维数组

temperature_data = [
              ["A908", 38],
              ["A909", 37],
              ["A910", 38],
          ]
temperature_data[0]    #=> ["A908", 38]
temperature_data[0][0] #=> "A908"
temperature_data[0][1] #=> 38

数组索引

str_array = [
  "This", "is", "a", "small", "array"
]
str_array[0]            #=> "This"
str_array[1]            #=> "is"
str_array[4]            #=> "array"

负索引

str_array = [
  "This", "is", "a", "small", "array"
]
# 索引 -1 表示最后一个元素
str_array[-1]        #=> "array"
# 索引 -2 表示倒数第二个元素
str_array[-2]        #=> "small"
str_array[-6]        #=> nil

数组方法 at

str_array = [
  "This", "is", "a", "small", "array"
]

puts str_array.at(0)      #=> "This"

范围获取

arr = [1, 2, 3, 4, 5, 6]
arr[100]                  #=> nil
arr[-3]                   #=> 4
arr[2, 3]                 #=> [3, 4, 5]
arr[1..4]                 #=> [2, 3, 4, 5]
arr[1..-3]                #=> [2, 3, 4]

数组方法 fetch

arr = ['a', 'b', 'c', 'd', 'e', 'f']
arr.fetch(100)
#=> IndexError: 数组边界外的索引 100:-6...6
arr.fetch(100, "oops")    #=> "oops"

超出边界,给默认值

获取数组元素

arr = [1, 2, 3, 4, 5, 6]

arr.first     # 第一个值 => 1
arr.last      # 最后一个值 => 6
# take 返回前 n 个元素
arr.take(3)   #=> [1, 2, 3]
# drop 在 n 个元素被删除之后
arr.drop(3)   #=> [4, 5, 6]

在数组末尾添加值 push

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.push(11)          
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
numbers.push(12, 13, 14)  
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

数组末尾删除值 pop

num_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_array.pop             #=> 10
num_array
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

在数组的开头添加值 unshift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(0)          
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.unshift(-3, -2, -1) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

检索并同时删除第一个元素 shift

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.shift #=> 1
numbers
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

删除特定索引处的元素 delete_at

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_at(2) #=> 4
numbers             
#=> [2, 3, 5, 6, 7, 8, 9, 10]

删除数组中任意位置的特定元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete(2) #=> 2
numbers           #=> [3, 5, 6, 7, 8, 9, 10]

在给定索引处插入值 insert

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, 0)           
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.insert(0, -3, -2, -1)  
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

numbers.insert(-1, 12, 13, 14) 
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14]
numbers.insert(-4, 11)         
#=> [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

一个块来填充数组的值

numbers = Array.new(10) { |n| n = n * 2 } 
#=> [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

填充数组变得更容易

numbers = Array(100..110)
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

# 或者我们可以将范围转换为数组
(100..110).to_a 
#=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110]

从数组中删除 nil 值

arr = ['foo', 0, nil, 'bar', 7, nil]
arr.compact  #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, nil, 'bar', 7, nil]
arr.compact! #=> ['foo', 0, 'bar', 7]
arr      #=> ['foo', 0, 'bar', 7]

去重 uniq

arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]

检查数组中是否存在值(include?)

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.include? "Mars"
# 输出 => true
planets.include? "Pluto"
# 输出 => false

获取数组大小

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.size
# 输出 => 8
planets.length
# 输出 => 8

您可以使用大小或长度,两者都是同义词

清除数组

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.clear
# 输出 => []

获取数组的第一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[0]
# or
numbers.first
# 输出 => 1

获取数组的最后一个元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers[-1]
# or
numbers.last
# 输出 => 10

合并两个数组

a = ["tom", "mot", "otm"]
b = [2, 3, 5]
a.zip(b)
# 输出
# [["tom", 2], ["mot", 3], ["otm", 5]]

对数组进行排序

primes = [7, 2, 3, 5]
sorted_primes = primes.sort
puts "#{sorted_primes}"
# 输出 => [2, 3, 5, 7]

or in-place sort

primes = [7, 2, 3, 5]
primes.sort!
puts "#{primes}"
# 输出 => [2, 3, 5, 7]
planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.sort
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p }
# 输出
# ["Earth", "Jupiter", "Mars", "Mercury", "Neptune", "Saturn", "Uranus", "Venus"]
planets.sort_by { |p| p.length }
# 输出
# ["Mars", "Earth", "Venus", "Saturn", "Uranus", "Neptune", "Jupiter", "Mercury"]

从数组中获取最大值

primes = [7, 2, 3, 5]
primes.max_by { |p| p }
# 输出 => 7

使用范围获取数组元素

# numbers[start..end], both index are inclusive
puts numbers[0..3]
# 1
# 2
# 3
# 4
# numbers[start..end], end index is exclusive
puts numbers[0...3]
# 1
# 2
# 3
# or numbers[start..length]
puts numbers[0, 1]
# 1

获取数组的前n个元素

primes = [7, 2, 3, 5]
primes.take(3)
# [7, 2, 3]

访问元素

primes = [7, 2, 3, 5]
primes.fetch(3)
# 5
# Fetch will throw an error if the element does not exist
primes.fetch(10)
# (index 10 outside of array bounds: -4...4)
# or get an default value
primes.fetch(10, -1)
# -1

从数组中删除重复元素

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 1]
numbers.uniq
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

删除前 n 个元素

primes = [7, 2, 3, 5]
primes.drop(3)
# [5]

删除第一个元素

primes = [7, 2, 3, 5]
primes.shift
# [2, 3, 5]

删除最后一个元素

primes = [7, 2, 3, 5]
primes.pop
# [7, 2, 3]

删除带有索引的元素

primes = [7, 2, 3, 5]
primes.delete_at(-1)
# [7, 2, 3]

删除所有出现的元素

primes = [7, 2, 3, 5, 5]
primes.delete(5)
# [7, 2, 3]

each

# 当你有单行块时
salary = [399, 234, 566, 533, 233]
salary.each { |s| puts s }
# 输出
# 399
# 234
# 566
# 533
# 233

当你有一个多行块时,你可以用 do 和 end 替换花括号 {}

salary.each do |s|
  a = 10
  res = a * s
  puts res
end
# 输出
# 3990
# 2340
# 5660
# 5330
# 2330

或者您可以使用大括号 {} 和分号作为分隔符而不是换行符来做同样的事情

salary.each { |s| a = 10 ; res = a * s ; puts res }

each_with_index

salary = [399, 234, 566, 533, 233]
salary.each_with_index { |value, index| puts "#{index} #{value}" }
# 输出
# 0 399
# 1 234
# 2 566
# 3 533
# 4 233

each_index

salary = [399, 234, 566, 533, 233]
salary.each_index { |i| puts i}
# 输出
# 0
# 1
# 2
# 3
# 4

map

salary = [399, 234, 566, 533, 233]
salary.map { |s|  s * 10  }
# 返回
# [3990, 2340, 5660, 5330, 2330]
# 另一方面,每个都返回原始值
salary = [399, 234, 566, 533, 233]
salary.each { |s|  s * 10  }
# 返回
# [399, 234, 566, 533, 233]

collect

salary = [399, 234, 566, 533, 233]
salary.collect { |s| s > 400 }
# 输出
# [false, false, true, true, false]

for

for value in [2, 3, 5, 7]
    puts value
end

each_with_object

colors = [
  {color: "red", count: 3}, {color: "red", count: 5}, {color: "black", count: 4}
]
colors.each_with_object(Hash.new(0)) { |color, hash| hash["color_"+color[:color]] = color[:color].upcase; hash["count_"+color[:color]] += color[:count] }
# 输出
{"color_red"=>"RED", "count_red"=>8, "color_black"=>"BLACK", "count_black"=>4}

[1, 2, 3].each_with_object(0) { |number, sum| sum += number}
# 输出
# 0
# 因为0是不可变的,由于初始对象是0,所以方法返回0

while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
while index < planets.size
    puts "#{planets[index]}"
    index += 1
end

a = 1
star = '*'
while a <= 10
    puts star
    star += '*'
    a += 1
end

do while

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = 0
loop do
    puts "#{planets[index]}"
    index += 1
    break if planets[index] == "Mars" or index > planets.size
end

until

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
index = planets.size - 1
until index < 0
    puts "#{planets[index]}"
    index -= 1
end
a = 1
star = '*'
until star.length > 10
    puts star
    star += '*'
    a += 1
end

times

10.times { puts "#{rand(1..100)}"}
# 输出
# 将打印 10 个随机数

仅仅因为你可以并不意味着你应该像这样迭代一个数组

data_sample = [2, 3, 5, 7]
data_sample.size.times { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3
# 5
# 7

upto

data_sample = [2, 3, 5, 7]
0.upto((data_sample.size - 1) / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 2
# 3

downto

data_sample = [2, 3, 5, 7]
(data_sample.size - 1).downto(data_sample.size / 2) { |index| puts "#{data_sample[index]}" }
# 输出
# 7
# 5

step

1.step(20, 2) { |number| puts "#{number}"}
# 输出
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19

19.step(1, -2) { |number| puts "#{number}"}
# 输出
# 19
# 17
# 15
# 13
# 11
# 9
# 7
# 5
# 3
# 1

inject

numbers = [2, 2, 2, 2, 2]
numbers.inject{ |res, n| res + n }
# 输出是所有数字之和的结果
# 如果不给res设置初始值,则数组的第一个元素作为res的初始值
# 10
# 现在将 res 的值设置为 11
numbers = [2, 2, 2, 2, 2]
numbers.inject(11) { |res, n| res + n }
# so 11 + 2, 13 + 2, 15 + 2, 17 + 2 and 19 + 2
# 21
# using symbol
numbers = [2, 2, 2, 2, 2]
numbers.inject(:+)
# 输出
# 10

使用初始值和符号

numbers = [2, 2, 2, 2, 2]
numbers.inject(11, :+)
# 输出
# 21

reduce

numbers = [2, 2, 2, 2, 2]
numbers.reduce(11, :+)
# 输出
# 21

detect

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.detect { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth
salary = [399, 234, 566, 533, 233]
salary.detect { |s| s > 1000 }
# output
# nil

find

planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
planets.find { |name| name.start_with?("E") and name.end_with?("h") }
# output
# Earth

select

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.select { |n| n % 2 == 0 }
# 现在你有一个偶数数组
# [2, 4, 6, 8, 10]
# 如果没有满足您的逻辑的值,则返回一个空数组
[1, 1, 1].select { |n| n % 2 == 0 }
# no even numbers
# []

reject

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.reject { |n| n % 2 == 0 }
# 如果数字是偶数则拒绝,所以现在我们有一个奇数数组
# [1, 3, 5, 7, 9]

keep_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.keep_if { |n| n % 2 == 0 }
# numbers 数组仅包含偶数
# [2, 4, 6, 8, 10]

delete_if

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers.delete_if { |n| n % 2 == 0 }
# numbers 数组仅包含奇数
# [1, 3, 5, 7, 9]

drop_while

numbers = [1, 2, 3, 1, 2, 3, 0]
numbers.drop_while { |n| n < 3 }
# 是 3 小于 3,返回 false,所以删除 1, 2
# [3, 1, 2, 3, 0]

reverse_each

words = %w[first second third fourth fifth sixth]
str = ""
words.reverse_each {|word| str += "#{word} "}
p str #=> "sixth fifth fourth third second first "

布尔可枚举方法

布尔可枚举方法

Name When to use
all? 当您想检查所有元素是否满足您的条件时
any? 当您想检查至少一项是否满足您的条件时
one? 当您想检查一个元素是否满足您的要求时
none? 当您想检查是否没有任何项目满足您的条件时,相反?
empty? 当你想检查对象是否为空时
include? 当你想检查元素是否存在于对象中时

all?

[2, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# true
[1, 4, 6, 8, 10].all? { |num| num % 2 == 0 }
# false

any?

[1, 3, 5, 7, 10].any? { |num| num % 2 == 0 }
# true
[1, 3, 5, 7, 19].any? { |num| num % 2 == 0 }
# false

one?

[1, 3, 2, 5, 7].one? { |num| num % 2 == 0 }
# true
[1, 3, 2, 5, 4].one? { |num| num % 2 == 0 }
# false

none?

[1, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# true
[2, 3, 5, 7, 9].none? { |num| num % 2 == 0 }
# false

empty?

[].empty?
# true
[1, 3, 5, 7, 9].empty?
# false

组合方法

组合方法

  • & 返回一个新数组,其中包含在数组和数组 other_array 中找到的每个元素;省略重复;使用 eql? 比较项目
  • intersection 返回一个新数组,其中包含在 self 和所有给定数组 other_arrays 中找到的每个元素;省略重复;使用 eql? 比较项目
  • + 返回一个数组,该数组包含 self 的所有元素,后跟给定数组的所有元素
  • - 返回一个数组,其中包含在给定数组中找不到的所有 self 元素
  • union 返回一个数组,其中包含 self 的所有元素和给定数组的所有元素,已删除重复项
  • difference 返回一个数组,其中包含在任何给定数组中找不到的所有 self 元素
  • product 返回或产生来自 self 和给定数组的所有元素组合

&

[0, 1, 2, 3] & [1, 2] # => [1, 2]
[0, 1, 0, 1] & [0, 1] # => [0, 1]

intersection

[0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]
[0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3])
# => [0, 1]

+

a = [0, 1] + [2, 3]
a # => [0, 1, 2, 3]

-

[0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] 
# => [0, 2, 3]
[0, 1, 2, 3] - [3, 0] 
# => [1, 2]
[0, 1, 2] - [4] 
# => [0, 1, 2]

union

[0, 1, 2, 3].union([4, 5], [6, 7]) 
# => [0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 1].union([2, 1], [3, 1]) 
# => [0, 1, 2, 3]
[0, 1, 2, 3].union([3, 2], [1, 0]) 
# => [0, 1, 2, 3]

difference

[0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1])
# => [0, 2, 3]
[0, 1, 2, 3].difference([3, 0], [1, 3])
# => [2]
[0, 1, 2].difference([4])
# => [0, 1, 2]

product

a = [0, 1, 2]
a1 = [3, 4]
p = a.product(a1)
p.size # => 6 # a.size * a1.size
p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]]

循环

while 循环

# variable count
count = 4
# using while loop
# here conditional is count i.e. 4
while count >= 1
  # statements to be executed
  puts "Ruby Cheatsheet"
  count = count - 1
  # while loop ends here
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

for 循环

# loop using range as expression
text = "Ruby Cheatsheet"
# using for loop with the range
for count in 1..5 do
  puts text
end

输出

Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet
Ruby Cheatsheet

do..while 循环

# starting of do..while loop
loop do
  puts "Ruby Cheatsheet"
  val = '7'
  # using boolean expressions
  if val == '7'
    break
  end
  # ending of ruby do..while loop
end

输出

Ruby Cheatsheet

until 循环

var = 7
# here do is optional
until var == 11 do
  # code to be executed
  puts var * 10
  var = var + 1
  # here loop ends
end

输出

70
80
90
100

跳出循环

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  break if s == 566
  puts s
end
# 输出
# 399
# 234

通过使用 break 关键字

在循环内跳过

salary = [399, 234, 566, 533, 233]
salary.each do |s|
  next if s == 533
  puts s
end
# 输出
# 399
# 234
# 566
# 233

通过使用 next 关键字

重复当前迭代

data = [456, 3000]
retry_count = 0
status = "network failure"
sum = 0
data.each do |d|
    if retry_count == 3
        status = "connection established"
        retry_count = 0
        redo
    elsif status == "network failure" and retry_count < 5
        puts "network failure #{retry_count}"
        retry_count += 1
        redo
    elsif status == "connection established"
        puts d
        sum += d
    end
end
# output of sum
# 3456

重新开始循环

numbers = [2, 2, 44, 44]
sum = 0
begin
    numbers.each do |s|
        if rand(1..10) == 5
            puts "hi 5, let's do it again!"
            sum = 0
            raise "hi 5"
        end
        puts s
        sum += s
    end
rescue
    retry
end

Classes

Classes 示例

class Person
    # when you create a new object, it looks for a method named initialize and executes it, like a constructor in java
    # def initialize(name, number)
    #    @name = name
    #    @number = number
    # end
    # instance variable
    # @name
    # class variable
    # @@count
    # attr_accessor acts as a getter and setter for the following instance attributes
    attr_accessor :name, :number
    # class variable must be initialized
    @@count = 0
    def self.count
        @@count
    end
    def self.count=(count)
        @@count = count
    end
    def initialize
        @@count += 1
    end
end
# create an instance of the Person class
p1 = Person.new
# set attributes of the Person class
p1.name = "Yukihiro Matsumoto"
p1.number = 9999999999
# get attributes of the Person class
puts "#{p1.name}"
puts "#{p1.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 1
p2 = Person.new
p2.name = "Yukihiro Matsumoto"
p2.number = 9999999999
# get attributes of the Person class
puts "#{p2.name}"
puts "#{p2.number}"
puts "#{Person.count}"
# Yukihiro Matsumoto
# 9999999999
# 2
# set class variable
Person.count = 3
puts "#{Person.count}"
# 3

继承一个类

class Person
    attr_accessor :name, :number
end
# 使用 < 符号从父类继承方法和属性
class Student < Person
    attr_accessor :id
end
s = Student.new
s.name = "James Bond"
s.number = 700
s.id = 678
puts "#{p.name}"
James Bond
puts "#{p.number}"
700
puts "#{p.id}"
678

检查实例类型

class Vehicle; end
class Car < Vehicle; end
class Audi < Car; end
car = Car.new
car.instance_of? Vehicle
false
car.instance_of? Car
true
car.instance_of? Audi
false
a = 7
a.instance_of? Integer
true
a.instance_of? Numeric
false

如果对象是给定类的实例,而不是子类或超类,则返回 true

打印一个类的所有方法名

puts (String.methods).sort
# 排除从 Object 类继承的方法
puts (String.methods - Object.public_instance_methods).sort

检查一个类是否有特定的方法

String.respond_to?(:prepend)
true
String.respond_to?(:append)
false

另见