当前位置: 首页 > news >正文

【Ruby学习笔记】3.Ruby 语法及数据类型

前言

本章介绍Ruby的语法和数据类型。

Ruby 语法

让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以,把下面的源代码放在 test.rb 文件中。

实例

#!/usr/bin/ruby -wputs "Hello, Ruby!";

在这里,假设您的 /usr/bin 目录下已经有可用的 Ruby 解释器。现在,尝试运行这个程序,如下所示:

$ ruby test.rb

这将会产生下面的结果:

Hello, Ruby!

您已经看到了一个简单的 Ruby 程序,现在让我们看看一些 Ruby 语法相关的基本概念:

Ruby 程序中的空白

在 Ruby 代码中的空白字符,如空格和制表符一般会被忽略,除非当它们出现在字符串中时才不会被忽略。然而,有时候它们用于解释模棱两可的语句。当启用 -w 选项时,这种解释会产生警告。

实例:

a + b 被解释为 a+b (这是一个局部变量)
a  +b 被解释为 a(+b) (这是一个方法调用)

Ruby 程序中的行尾
Ruby 把分号和换行符解释为语句的结尾。但是,如果 Ruby 在行尾遇到运算符,比如 +、- 或反斜杠,它们表示一个语句的延续。

Ruby 标识符
标识符是变量、常量和方法的名称。Ruby 标识符是大小写敏感的。这意味着 Ram 和 RAM 在 Ruby 中是两个不同的标识符。

Ruby 标识符的名称可以包含字母、数字和下划线字符( _ )。

保留字
下表列出了 Ruby 中的保留字。这些保留字不能作为常量或变量的名称。但是,它们可以作为方法名。

在这里插入图片描述

Ruby 中的 Here Document
“Here Document” 是指建立多行字符串。在 << 之后,您可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。

如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意<< 和终止符之间必须没有空格。

下面是不同的实例:

实例

#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-print <<EOF这是第一种方式创建here document 。多行字符串。
EOFprint <<"EOF";                # 与上面相同这是第二种方式创建here document 。多行字符串。
EOFprint <<`EOC`                 # 执行命令echo hi thereecho lo there
EOCprint <<"foo", <<"bar"          # 您可以把它们进行堆叠I said foo.
fooI said bar.
bar

这将产生以下结果:

这是第一种方式创建here document 。
多行字符串。
这是第二种方式创建here document 。
多行字符串。
hi there
lo there
I said foo.
I said bar.

Ruby BEGIN 语句
语法

BEGIN {code
}

声明 code 会在程序运行之前被调用。

实例

#!/usr/bin/rubyputs "这是主 Ruby 程序"BEGIN {puts "初始化 Ruby 程序"
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序

Ruby END 语句
语法

END {code
}

声明 code 会在程序的结尾被调用。

实例

#!/usr/bin/rubyputs "这是主 Ruby 程序"END {puts "停止 Ruby 程序"
}
BEGIN {puts "初始化 Ruby 程序"
}

这将产生以下结果:

初始化 Ruby 程序
这是主 Ruby 程序
停止 Ruby 程序

Ruby 注释
注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ):

# 我是注释,请忽略我。

或者,注释可以跟着语句或表达式的同一行的后面:

name = "Madisetti" # 这也是注释

您可以注释多行,如下所示:

# 这是注释。
# 这也是注释。
# 这也是注释。
# 这还是注释。

下面是另一种形式。这种块注释会对解释器隐藏 =begin/=end 之间的行:

=begin
这是注释。
这也是注释。
这也是注释。
这还是注释。
=end

here document 介绍

构建一个 here document 最通用的语法是 << 紧跟一个标识符,从下一行开始是想要引用的文字,然后再在单独的一行用相同的标识符关闭。

puts <<EOF
这是第一行
这是第二行
EOF

执行输出结果为:

这是第一行
这是第二行

更多用法可查看以下实例:

#!/usr/bin/ruby -w
# -*- coding : utf-8 -*-#(<<)here doucument 感觉本来单行是一个整体变成是一种多行作为一个整体进行导入的方式和 sh 语法相似print <<EOF这是第一种方式创建 here document多行字符串。
EOFprint <<"EOF";                # 与上面相同这是第二种方式创建here document多行字符串。
EOFprint <<`EOC`                 # 执行命令ls -al;ps -a
EOCprint <<"foo", <<"bar"          # 您可以把它们进行堆叠I said foo.
fooI said bar.
bar
text =  <<`foo`            # 您可以把它们进行转存cat /etc/passwd
fooputs textFile.open("/home/abc","w") do |io|io.write(text)
end
puts "------------------------"
exec "ls -al /home/ && cat /home/abc"

Ruby 数据类型

本章节我们将为大家介绍 Ruby 的基本数据类型。

Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash。

数值类型(Number)

1、整型(Integer)
整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。

整数范围从 -230 到 230-1,在这个范围内的整数是类 Fixnum 的对象, 当整数值大于或等于2的30次方时( -262 到 262-1),会自动转化为 Bignum 类型。

您可以在整数前使用一个可选的前导符号,一个可选的基础指标(0 对应 octal,0x 对应 hex,0b 对应 binary),后跟一串数字。下划线字符在数字字符串中被忽略。

您可以获取一个 ASCII 字符或一个用问号标记的转义序列的整数值。

实例

123                  # Fixnum 十进制
1_234                # Fixnum 带有下划线的十进制
-500                 # 负的 Fixnum
0377                 # 八进制
0xff                 # 十六进制
0b1011               # 二进制
"a".ord              # "a" 的字符编码
?\n                  # 换行符(0x0a)的编码
12345678901234567890 # 大数#整型 Integer 以下是一些整型字面量 
#字面量(literal):代码中能见到的值,数值,bool值,字符串等都叫字面量 
#如以下的0,1_000_000,0xa等 
a1=0 #带千分符的整型 
a2=1_000_000 #其它进制的表示 
a3=0xa 
puts a1,a2 
puts a3 #puts print 都是向控制台打印字符,其中puts带回车换行符 
=begin 
这是注释,称作:嵌入式文档注释 
类似C#中的/**/ 
=end

浮点型
Ruby 支持浮点数。它们是带有小数的数字。浮点数是类 Float 的对象,且可以是下列中任意一个。

实例

123.4                # 浮点值
1.0e6                # 科学记数法
4E20                 # 不是必需的
4e+20                # 指数前的符号#浮点型 
f1=0.0 
f2=2.1 
f3=1000000.1 
puts f3

算术操作
加减乘除操作符:±*/;指数操作符为**

指数不必是整数,例如

实例

#指数算术 
puts 2**(1/4)#1与4的商为0,然后2的0次方为1 
puts 16**(1/4.0)#1与4.0的商为0.25(四分之一),然后开四次方根

字符串类型
Ruby 字符串简单地说是一个 8 位字节序列,它们是类 String 的对象。

双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \ 和 ’ 两个反斜线符号。

实例

#!/usr/bin/ruby -wputs 'escape using "\\"';
puts 'That\'s right';

这将产生以下结果:

escape using "\"
That's right

您可以使用序列 #{ expr } 替换任意 Ruby 表达式的值为一个字符串。在这里,expr 可以是任意的 Ruby 表达式。

实例

#!/usr/bin/ruby -wputs "相乘 : #{24*60*60}";

这将产生以下结果:

相乘 : 86400

实例

#!/usr/bin/ruby -wname="Ruby" 
puts name 
puts "#{name+",ok"}"

输出结果为:

Ruby
Ruby,ok

反斜线符号
下表列出了 Ruby 支持的反斜线符号:

符号表示的字符
\n换行符 (0x0a)
\r回车符 (0x0d)
\f换页符 (0x0c)
\b退格键 (0x08)
\a报警符 Bell (0x07)
\e转义符 (0x1b)
\s空格符 (0x20)
\nnn八进制表示法 (n 是 0-7)
\xnn十六进制表示法 (n 是 0-9、a-f 或 A-F)
\cx, \C-xControl-x
\M-xMeta-x (c | 0x80)
\M-\C-xMeta-Control-x
\x字符 x

数组
数组字面量通过[]中以逗号分隔定义,且支持range定义。

(1)数组通过[]索引访问
(2)通过赋值操作插入、删除、替换元素
(3)通过+,-号进行合并和删除元素,且集合做为新集合出现
(4)通过<<号向原数据追加元素
(5)通过*号重复数组元素
(6)通过|和&符号做并集和交集操作(注意顺序)

实例

#!/usr/bin/ruby
ary = [ "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|puts i
end

这将产生以下结果:

fred
10
3.14
This is a string
last element

哈希类型
Ruby 哈希是在大括号内放置一系列键/值对,键和值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。

实例

#!/usr/bin/rubyhsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|print key, " is ", value, "\n"
end

这将产生以下结果:

red is 3840
green is 240
blue is 15

范围类型
一个范围表示一个区间。

范围是通过设置一个开始值和一个结束值来表示。范围可使用 s…e 和 s…e 来构造,或者通过 Range.new 来构造。
使用 … 构造的范围从开始值运行到结束值(包含结束值)。使用 … 构造的范围从开始值运行到结束值(不包含结束值)。当作为一个迭代器使用时,范围会返回序列中的每个值。

范围 (1…5) 意味着它包含值 1, 2, 3, 4, 5,范围 (1…5) 意味着它包含值 1, 2, 3, 4 。

实例

#!/usr/bin/ruby(10..15).each do |n|print n, ' '
end

这将产生以下结果:

10 11 12 13 14 15

相关文章:

【Ruby学习笔记】3.Ruby 语法及数据类型

前言 本章介绍Ruby的语法和数据类型。 Ruby 语法 让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以&#xff0c;把下面的源代码放在 test.rb 文件中。 实例 #!/usr/bin/ruby -wputs "Hello, Ruby!";在这里&#xff0c;假设您的 /usr/bin …...

华为OD机试题【字符匹配】用 Java 解 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:字符匹配 题目 给你一个字符串…...

JavaScript数组对象的浅拷贝与深拷贝(二)实现对象深拷贝的方法(5种)

JavaScript实现对象深拷贝的方法&#xff08;5种&#xff09;知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现实现对象深拷贝的五种方法1.json暴力转化2.es6扩展运算符3.for in循环遍历对象4.Object.assign()对象的合并5.利用循环和递归的方式实现对象浅拷贝…...

iPhone屏幕适配(之屏幕尺寸)

Device screen size 各设备屏幕尺寸 DeviceDimensions (portrait)iPhone 14 Pro Max430x932 pt (1290x2796 px 3x)iPhone 14 Pro393x852 pt (1179x2556 px 3x)iPhone 14 Plus428x926 pt (1284x2778 px 3x)iPhone 14390x844 pt (1170x2532 px 3x)iPhone 13 Pro Max428x926 pt (…...

手机变砖修复神器之 8 个的 Android手机系统修复工具

如果您经常在 Android 设备上遇到问题&#xff0c;则需要找到最好的 Android 系统修复应用程序并使用它来一劳永逸地解决您的问题。如果您不确定执行此操作的好应用是什么&#xff0c;我们在这里为您列出了一些最好的 Android 修复软件。 虽然现在出货的 Android 手机相当稳定…...

稀疏矩阵(Sparse Matrix)

1.背景 在数据科学和深度学习等领域常会采用矩阵格式来存储数据&#xff0c;但当矩阵较为庞大且非零元素较少时&#xff0c; 如果依然使用dense的矩阵进行存储和计算将是极其低效且耗费资源的。所以&#xff0c;通常我们采用Sparse稀疏矩阵的方式来存储矩阵&#xff0c;提高存储…...

深度学习中的损失函数

文章目录一. Loss函数1. 均方差损失&#xff08;Mean Squared Error Loss&#xff09;2. 平均绝对误差损失&#xff08;Mean Absolute Error Loss&#xff09;3.&#xff08;Huber Loss&#xff09;4. 分位数损失&#xff08;Quantile Loss&#xff09;5. 交叉熵损失&#xff0…...

English Learning - L2 语音作业打卡 辅音咬舌音 [θ] [ð] Day29 2023.3.21 周二

English Learning - L2 语音作业打卡 辅音咬舌音 [θ] [] Day29 2023.3.21 周二&#x1f48c;发音小贴士&#xff1a;&#x1f48c;当日目标音发音规则/技巧:&#x1f36d; Part 1【热身练习】&#x1f36d; Part2【练习内容】&#x1f36d;【练习感受】&#x1f353;元音 [θ]…...

【原始者-综述】

目录知识框架No.1 AcwingNo.2 LeetcodeNo.3 PTANo.4 蓝桥No.5 牛客网No.6 代码随想录知识框架 No.1 Acwing 那就点击这里转向自己的Acwing题解咯 单调栈&#xff0c;动态规划&#xff0c;贪心&#xff0c;回溯&#xff0c;二叉树&#xff0c;站与队列&#xff0c;双指针&#…...

C++内存模型

目录 一.内存分区 二,分区顺序 1 程序运行前 2 程序运行后 3.new操作符 一.内存分区 内存分区意义&#xff1a;不同区域存放的数据&#xff0c;赋予不同的生命周期, 给我们更大的灵活编程 内存可以分为以下几个区&#xff1a; 代码区&#xff1a;存放函数体的二进制代码…...

八股+面经

文章目录项目介绍Java基础MapHashMap v.s Hashtable(5点)ConcurrentHashMap v.s Hashtable(2点)代理模式1. 静态代理2. 动态代理2.1 JDK 动态代理机制2.2 CGLIB 动态代理机制Java并发线程volatilesynchronized线程池JVM类加载机制垃圾回收&#xff08;GC&#xff09;1. 引用类型…...

MySQL更新数据流程

1.mysql三种重要日志 redo log&#xff08;重做日志&#xff09;&#xff1a;存在于引擎层&#xff0c;物理存储&#xff0c;通过设置innodb_flush_log_at_trx_xommit1 让其持久化到磁盘&#xff0c;保证引擎的crash-safe能力&#xff0c;遵从WAL技术&#xff08;Write-Ahead …...

测试开发进阶系列课程

测试开发系列课程1.完善程序思维--------案列&#xff1a;图书管理系统的创建**&#xff08;一&#xff09;图书管理系统的创建**1.完善程序思维--------案列&#xff1a;图书管理系统的创建 &#xff08;一&#xff09;图书管理系统的创建 1.在main中写入主函数&#xff0c;…...

Qt源码阅读(三) 对象树管理

对象树管理 个人经验总结&#xff0c;如有错误或遗漏&#xff0c;欢迎各位大佬指正 &#x1f603; 文章目录对象树管理设置父对象的作用设置父对象(setParent)完整源码片段分析对象的删除夹带私货时间设置父对象的作用 众所周知&#xff0c;Qt中&#xff0c;有为对象设置父对象…...

【Python入门第四十二天】Python丨NumPy 数组裁切

裁切数组 python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。 我们像这样传递切片而不是索引&#xff1a;[start&#xff1a;end]。 我们还可以定义步长&#xff0c;如下所示&#xff1a;[start&#xff1a;end&#xff1a;step]。 如果我们不传递 start&…...

Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法

本文介绍在Anaconda环境中&#xff0c;下载并配置Python中机器学习、深度学习常用的新版tensorflow库的方法。 在之前的两篇文章基于Python TensorFlow Estimator的深度学习回归与分类代码——DNNRegressor&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/detail…...

加载模型时出现 OSError: Unable to load weights from pytorch checkpoint file 报错的解决

加载模型时出现 OSError: Unable to load weights from pytorch checkpoint file 报错的解决报错信息原因查明网传解决措施好消息我的解决措施报错信息 查了下&#xff0c;在网上还是个比较常见的报错 一般为加载某模型时突然报错 原因查明 一般为下载某个 XXX_model.bin 的…...

sessionStorage , localStorage 和cookie的区别

一.sessionStorage(临时存储)sessionStorage是HTML5中新增的Web Storage API之一&#xff0c;用于在浏览器中存储键值对数据&#xff0c;与localStorage类似&#xff0c;但是sessionStorage存储的数据在会话结束时会被清除。可以通过以下方式使用sessionStorage&#xff1a;存储…...

C# 实例详解委托之Func、Action、delegate

委托是.NET编程的精髓之一&#xff0c;在日常编程中经常用到&#xff0c;在C#中实现委托主要有Func、Action、delegate三种方式&#xff0c;这个文章主要就这三种委托的用法通过实例展开讲解。 【Func】&#xff1a;Func是带返回值的委托&#xff1a; 原型函数如下(以下展示的…...

如何选电脑

1、CPU&#xff08;中央处理器&#xff09; 怎么看CPU型号&#xff1a;CPU:系列-代数等级核心显卡型号电压后缀 例如CPU:i7-10750H &#xff1a; 1、系列&#xff1a;Intel的酷睿i3、i5、i7、i9这四个系列的CPU&#xff0c;数字越大就代表越高端。 2、代数&#xff1a;代表…...

SpringBoot项目创建

如果使用spring的源地址创建项目失败&#xff0c;就使用 阿里云的springBoot项目创建地址&#xff1a;https://start.aliyun.com/ 1.new 一个新的项目&#xff1a; 2.选择合适的版本java的JDK和maven项目 3.选择spring web依赖 4.直接finish 5. 删除无用的包&#xff0c;然后…...

神经衰弱该如何判断?确诊为神经衰弱,日常要做好这7大护理!

神经衰弱是由于长时间处于紧张或者压力的情况下导致精神出现兴奋或者疲乏现象而伴随着一系列症状。如情绪烦恼、容易激怒、睡眠障碍、肌肉出现紧张性疼痛等&#xff0c;生活中有很多人在自己的不到休息或者遇到强大打击时就会嘲笑自己患上神经衰弱。甚至一些会盲目采取措施&…...

Linux之进程替换

进程替换1.什么是进程替换2.替换函数2.1 execl函数2.2 execv函数2.3 execlp函数2.4 execvp函数2.5 在自己的C程序上如何运行其他语言的程序&#xff1f;2.6 execle 函数2.7 小结3.一个简易的shell1.什么是进程替换 fork()之后&#xff0c;父子各自执行父进程代码的一部分&…...

关于清除浮动

浮动最早是用来做图文排版&#xff0c;为了让块级元素同行显示&#xff0c;而html中块元素是有自己的排列规则&#xff0c;一般独占一行。所以有了浮动元素&#xff0c;一旦元素浮动了就会脱离文档流&#xff0c;产生问题。怎么去清除浮动&#xff1a;&#xff08;1&#xff09…...

Uber H3 index 地图索引思考

H3 是 uber 设计的六边形空间索引&#xff0c;go 语言操作包是 h3-go&#xff0c;可以通过经纬度获取所在的 h3 六边形边界&#xff0c;每个经纬度对应的六边形都是确定的&#xff0c;每个六边形唯一对应了一个 h3index。在业务开发中&#xff0c;我们可以通过 h3index 来对地理…...

多线程的几种状态

Java-多线程的几种状态&#x1f50e;1.NEW( 系统中线程还未创建,只是有个Thread对象)&#x1f50e;2.RUNNABLE( (就绪状态. 又可以分成正在工作中和即将开始工作)&#x1f50e;3.TERMINATED(系统中的线程已经执行完了,Thread对象还在)&#x1f50e;4.TIMED_WAITING(指定时间等待…...

【算法题】1574. 删除最短的子数组使剩余数组有序

题目&#xff1a; 给你一个整数数组 arr &#xff0c;请你删除一个子数组&#xff08;可以为空&#xff09;&#xff0c;使得 arr 中剩下的元素是 非递减 的。 一个子数组指的是原数组中连续的一个子序列。 请你返回满足题目要求的最短子数组的长度。 示例 1&#xff1a; …...

理解对数——金融问题中的自然对数(以e为底的对数)

第3章 金融问题(Financial Matters)——金融问题中的自然对数If thou lend moneyto any ofMy people. ...thou shalt not beto him as a creditor;neither shall yelay upon him interest.(如果你借钱给我的任何人。 ……你不应该是他的债权人&#xff1b;也不可向他加息。)——…...

vue2进阶学习之路

HTML、CSS和JavaScript基础 在学习Vue2之前&#xff0c;需要掌握HTML、CSS和JavaScript的基础知识。包括HTML的标签、CSS的布局和样式、JavaScript的变量类型、条件语句、循环语句等。 Vue2的基础知识 掌握Vue2的基本概念和语法&#xff0c;包括Vue2实例、数据绑定、指令、组件…...

决策树ID3算法

1. 决策树ID3算法的信息论基础 机器学习算法其实很古老&#xff0c;作为一个码农经常会不停的敲if, else if, else,其实就已经在用到决策树的思想了。只是你有没有想过&#xff0c;有这么多条件&#xff0c;用哪个条件特征先做if&#xff0c;哪个条件特征后做if比较优呢&#…...