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

Ruby语言基础知识

Ruby是一种简单快捷的面向对象脚本语言,由日本人松本行弘(Yukihiro Matsumoto)在20世纪90年代开发,遵守GPL协议和Ruby License。它的灵感和特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。
以下是Ruby语言的一些特点:
面向对象:在Ruby中,一切皆是对象。这意味着所有的数据和代码都被视为对象,每个对象都有自己的属性和方法。
动态类型:Ruby是一种动态类型语言,这意味着你不需要在声明变量时指定其类型。Ruby会根据需要在运行时自动确定变量的类型。
灵活性和动态性:Ruby是一种解释型脚本语言,具有强大的字符串处理能力和正则表达式。它还具有动态载入功能,可以在运行时重新定义自己,类也可以在运行时继承或取消继承。
自动内存管理:Ruby具有自动内存管理机制,这意味着开发人员不需要手动分配或释放内存。
开源:Ruby是开源的,有大量的活跃社区支持Ruby语言。这意味着有大量的资源和工具可供开发人员使用,并且有许多人可以为开发人员提供帮助和支持。
多精度整数:Ruby支持多精度整数,这意味着它可以处理任意大小的整数。
简洁和优雅的语法:Ruby的语法简单、清晰且易于阅读。它使用英语单词和简洁的符号来表示代码,使开发人员能够轻松地编写和理解代码。

首先需要直接在https://rubyinstaller.org/downloads/下载Ruby安装器安装到本地电脑即可。
安装完成后自动弹出以下内容,输入3即可。
在这里插入图片描述

安装完成后在命令行中直接输入irb,启动irb之后便可以直接运行Ruby代码。

1、Ruby语法生存包

1.1 Ruby的基本运算
# 加法
sum = 5 + 3  # 结果是8# 减法
difference = 5 - 3  # 结果是2# 乘法
product = 5 * 3  # 结果是15# 除法
quotient = 5 / 3  # 结果是1,因为这是整数除法# 取余
remainder = 5 % 3  # 结果是2,因为5除以3的余数# 整数赋值
num = 10# 字符串赋值
str = "Hello, World!"# 数组赋值
arr = [1, 2, 3, 4, 5]# 哈希赋值
hash = {"key1" => "value1", "key2" => "value2"}# 等于
puts a == b  # 输出 false# 不等于
puts a != b  # 输出 true# 大于
puts a > b  # 输出 false# 小于
puts a < b  # 输出 true# 大于或等于
puts a >= b  # 输出 false# 小于或等于
puts a <= b  # 输出 true# 数字转字符串
num = 10
str = num.to_s  # "10"# 字符串转整数
str = "10"
num = str.to_i  # 10# 字符串转浮点数
str = "10.5"
num = str.to_f  # 10.5# 如果字符串不能被解析为一个有效的数字,to_i和to_f方法将返回0:
str = "hello"
num = str.to_i  # 0
num = str.to_f  # 0.0str = "hello"
num = Integer(str)  # 抛出 ArgumentError
num = Float(str)  # 抛出 ArgumentError
1.2 Ruby的基本I/O方法和流控制
# 输出
puts "Hello, World!"  # 在字符串后添加换行符
print "Hello, World!"  # 不添加换行符# 输入
input = gets.chomp  # 读取一行输入并去掉末尾的换行符# if语句
if a > bputs "a is greater than b"
elsif a < bputs "a is less than b"
elseputs "a is equal to b"
end# unless语句(除非)
unless a > bputs "a is not greater than b"
end# while循环
while a < bputs "a is less than b"a += 1
end# until循环(直到)
until a >= bputs "a is less than b"a += 1
end# for循环
for i in 1..5puts i
end# each循环
(1..5).each do |i|puts i
end
1.3 Ruby的特殊对象和注释
# nil
a = nil# true
b = true# false
c = false# 这是一个单行注释=begin
这是一个
多行注释
=end

2、多种多样的Ruby标识符

在Ruby中,标识符是用于标识变量、常量、方法、类和模块的名称。以下是Ruby中的一些标识符规则:

  1. 局部变量:局部变量名以小写字母或下划线开头。例如,my_var、_var。

  2. 常量:常量名以大写字母开头。例如,MyConstant。

  3. 全局变量:全局变量名以美元符号( )开头。例如, )开头。例如, )开头。例如,global_var。

  4. 实例变量:实例变量为独立的对象存储信息,名以@开头。例如,@instance_var。

  5. 类变量:类变量名以@@开头。例如,@@class_var。

  6. 方法:方法名可以以小写字母或下划线开头,也可以以问号(?)、感叹号(!)或等号(=)结尾。例如,my_method、method?、method!、method=。

  7. 类和模块:类名和模块名以大写字母开头,使用驼峰式命名法。例如,MyClass、MyModule。

请注意,Ruby是大小写敏感的,这意味着myVar和myvar是两个不同的标识符。

3、方法调用、消息和Ruby对象

Ruby把所有的数据结构和值都看做对象,从整数和字符串这样简单的标量(原子的)值,到数组这样的复杂的数据结构一概如此。每个对象都能响应一组特定的消息,对象能够接收的每个消息直接对应一个方法——有名称的、可以被有执行能力的对象触发的可执行例程。
对象也可以用字面量构造器表示,如字符串用双引号,或者已绑定值的变量。消息通过特殊的点运算符.送达: 点右边的消息被发送到点左边的对象上。例如:

x = "100".to_i

方法可以带有参数,这个参数同时也是对象。(虽然有些用于创建和操作对象的语法结构本身不是对象,但是Ruby中几乎所有一切都是对象)下面是一个带有参数的方法调用:

 x = "100".to_i(9)

这是生成一个九进制的100所得到的十进制整数,相当于81.
至于Ruby对象相当于高级语言中的类。

4、编写一个简单程序

创建一个c2f.rb文件如下

celsius = 100
fahrenheit = (celsius * 9 / 5) + 32
puts "The result is: "
puts fahrenheit
puts "."

使用如下命令进行编译运行
命令行中的-cw标志是两个标志的简写,-c可以检查语法错误,-w可以激活高级别的警告。
去掉标志便可以直接运行了

PS E:\Ruby> ruby -cw c2f.rb
Syntax OK
PS E:\Ruby> ruby c2f.rb
The result is:
212
.

5、键盘和文件I/O

5.1 键盘输入

修改c2f.rb代码使其可以获取输入,如下:

print "Hello. Please enter a Celsius value: "
celsius = gets
fahrenheit = (celsius.to_i * 9 / 5) + 32
puts "The result is: "
puts fahrenheit
puts "."

下面是运行这段代码的结果:

PS E:\Ruby> ruby c2f.rb
Hello. Please enter a Celsius value: 100
The result is:
212
.
PS E:\Ruby> ruby c2f.rb
Hello. Please enter a Celsius value: 23
The result is:
73
.
5.2 读取文件

新建一个temp.dat,同时使其只包含一个数字100。
同时修改r2f.rb

celsius = File.read("temp.dat")
fahrenheit = (celsius.to_i * 9 / 5) + 32
puts "The result is: "
puts fahrenheit
puts "."

运行结果为

PS E:\Ruby> ruby c2f.rb
The result is:
212
.
5.3 写入文件
celsius = gets
fahrenheit = (celsius.to_i * 9 / 5) + 32
fh = File.new("temp.out", "w")
fh.puts fahrenheit
fh.close

运行这段代码,无论输入什么,都可以在temp.out中看到转换好的华氏温度。

相关文章:

Ruby语言基础知识

Ruby是一种简单快捷的面向对象脚本语言&#xff0c;由日本人松本行弘&#xff08;Yukihiro Matsumoto&#xff09;在20世纪90年代开发&#xff0c;遵守GPL协议和Ruby License。它的灵感和特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。 以下是Ruby语言的一些特点&#…...

vh、vw、vmin、vmax

1、分别是什么&#xff1f; vh:指屏幕可见视窗的高&#xff0c; vw:指屏幕可见视窗的宽&#xff0c; vmin:vh和vw之间选较小的值&#xff0c; vmax:vh和vw之间选较大的值。 2、和百分比的区别 百分比时基于父元素的宽高&#xff0c;而vh\vw\vmin\vmax基于屏幕可见视图的宽…...

Selenium浏览器启动方式

Chromedriver所有版本下载 原文链接 浏览器的基本操作 普通方式启动浏览器&#xff1a; from selenium import webdriver # 启动Chrom浏览器 browser webdriver.Chrome() # 启动Edge浏览器 browser webdriver.Edge() # 启动Firefox浏览器 browser webdriver.Firefox() br…...

Linux 网络编程 tcp server 笔记

一、TCP 服务器的创建 在 Linux 上创建一个简单的 tcp 服务器步骤如下&#xff1a; ①创建套接字 ②将套接字绑定到 IP 地址和端口号 ③监听来自客户端的连接 ④接受连接并创建新的套接字用于与客户端通信 ⑤通过新建的套接字发送和接收数据 ⑥关闭套接字 流程框图如下&#xf…...

C语言-贪吃蛇 1.输入控制ncurse

一、为什么要用nurse C语言中的gets()、scanf()、getchar()等函数是在用户输入后需要按下Enter键才能执行代码&#xff0c;而贪吃蛇要求按下按键后立即对蛇的方向进行操作&#xff0c;所以根据贪吃蛇功能的需求引入ncurse&#xff0c;让用户输入后就能让蛇进行对应的行动。 二、…...

Pytorvh之Vision Transformer图像分类

文章目录 前言一、Transformer1.Transformer概览2.Self-Attention3.Multi-head Attention4.Position-wise Feed-Forward Networks(位置前馈网络)5.残差连接和层归一化6.Positional Encodings(位置编码) 二、Vision Transformer1.Vision Transformer概览2.Embedding层结构&#…...

LabVIEW为什么不能在RT机箱内看到NI-IMAQ设备

LabVIEW为什么不能在RT机箱内看到NI-IMAQ设备 最近把NI-IMAQ更新到最新的1394版本。这个新驱动工作良好。但是&#xff0c;当打开MAX&#xff0c;NII MAQ设备却在RT PXI机箱里找不到。 问题最有可能是NIIMAQ服务器的版本跟主机PC和RT目标设备是不同的。为保证通信正常NII MAQ服…...

three.js入门 ---- 相机控件OrbitControls

前言&#xff1a; 自用&#xff01;&#xff01;&#xff01; 文档中描述&#xff1a;OrbitControls本质上就是改变相机的参数&#xff0c;比如相机的位置属性&#xff0c;改变相机位置可以改变相机拍照场景中模型的角度&#xff0c;实现模型的360度旋转预览效果&#xff0c;改…...

数字IC/FPGA面试题目合集解析(一)

数字IC/FPGA面试题目合集解析&#xff08;一&#xff09; 题目概述题目1&#xff0c;计算题2&#xff0c;计算题3&#xff0c;选择题 答案与解析1&#xff0c;计算题2&#xff0c;计算题3&#xff0c;选择题 题目概述 1&#xff0c;计算题&#xff1a;计算该触发器等效的建立保…...

20231014后台面经总结

1.Spring怎么解决循环依赖 形象地解释 为什么三层缓存 我的简单理解&#xff1a; 1.A依赖B&#xff0c;B生成时先注入A未注入属性的原始对象earlySingletonObject 2.引入三级缓存SingletonFacotry的目的是解决aop提前创建代理的步骤&#xff0c;不然它注入的对象跟真实的不一致…...

RabbitMQ的七种工作模式和分别概述

MQ&#xff08;Message Queuing&#xff09;的七种工作模式如下&#xff1a; Point-to-Point (P2P)模式&#xff1a;在这种模式下&#xff0c;消息传递是单向的&#xff0c;即消息从一个生产者发送到一个消费者。消息被放置在队列中&#xff0c;消费者从该队列中取出消息进行处…...

使用Vscode开发C#没有代码提示问题

很多小伙伴在使用Vscode去编写C#脚本的时候会发现没有代码提示&#xff0c;这样你的敲代码速度会变的很慢&#xff01; 错误使用方法 直接把C#脚本拖入到Vscode中进行编写&#xff0c;这样是不会有代码提示的&#xff01; 正确打开办式 Edit&#xff08;编辑&#xff09;…...

统信UOS 1060上通过Fail2Ban来Ban IP

原文链接&#xff1a;统信UOS 1060上通过Fail2Ban来Ban IP hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇在统信UOS 1060上安装Fail2Ban并且当ip被ban后通过邮件发送通知的文章。Fail2Ban 是一个用于防止暴力攻击的开源软件。它可以扫描日志文件&#xff08;例如&a…...

Linux系统编程:文件描述符以及IO多路复用

书接上回&#xff0c;我们之前学习的文件系统编程都是在内存空间中的文件流&#xff08;用户态文件缓冲区&#xff09;内进行操作的&#xff0c;比如使用的fopen、fclose、fread和fwrite等等都是库函数&#xff0c;并没有用到内核态的功能&#xff08;实际上库函数中调用的是内…...

python基于django的留学生服务管理平台

留学服务管理平台的用户是系统最根本使用者&#xff0c;按需要分析系统包括三类用户&#xff1a;学生、教师、管理员。这三类用户对系统的需求简要如下。技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vueCSSJavaScriptjQueryelementui 开发语言&#xff1a;Python 框架…...

C++ 之 Map

Map map 是C STL中的关联容器&#xff0c; key-Value键值对存储&#xff0c;一对一的映射关系。 内部结构采用的是红黑树&#xff0c; 它会实现对数据的自动排序 &#xff0c;所以map内部所有的数据都是有序的。 #include <map>定义的结构: map<数据类型1, 数据类型…...

MongoDB——centOS7环境Mongodb权限管理(图解版)

目录 一、MongDB权限概述1.1、MongDB权限概述1.2、MongDB权限列表 二、Mongodb权限管理示例2.1、创建账号2.1.1、创建管理员用户2.1.2、开启认证2.1.3、创建普通账号 一、MongDB权限概述 1.1、MongDB权限概述 mongodb是没有默认管理员账号&#xff0c;所以要先添加管理员账号…...

AndroidX项目接入穿山甲广告填坑

本文旨在记录初步接入过程遇到的一点点小问题&#xff0c;更详细的文档还是要参考官方文档。 一、项目版本 GradlePlugin&#xff1a;8.0.2 Gradle&#xff1a;8.0 Kotlin&#xff1a;1.7.20 compileSdk&#xff1a;34 compose-bom:2022.10.00 AS&#xff1a;2022.2.1 …...

汽车电子 - matlab - 用法

汽车电子 - matlab - 用法 面向对象 面向对象 % Man.m classdef Man < handle%UNTITLED2 此处显示有关此类的摘要% 此处显示详细说明properties(Accessprivate) %私有变量scoreendpropertiesageheightendmethodsfunction obj Man(inputArg1,inputArg2)%UNTITLED2 构造此…...

freefilesync文件同步软件

下载 下载链接 https://freefilesync.org/download.php 往下拉&#xff0c;看到下载的链接 下载windows版本 下载地址&#xff1a; https://freefilesync.org/download/FreeFileSync_13.0_Windows_Setup.exe 直接复制到浏览器中访问就能下载 安装 双击安装包&#xff0c;一路默…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...