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中看到转换好的华氏温度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/159915.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /***自定义函数*/ pub fn function() {println!("called my::nested::function()"); }#[allow(dead_code)] fn private_function() {println!("called my::nested::private_function()"); }/…

Linux服务器快速搭建pytorch

Linux服务器搭建pytorch 文章目录 Linux服务器搭建pytorch一、使用FileZilla传输Anaconda二、激活Anaconda环境1.创建一个虚拟环境2.使用已有项目生成requirements.txt3.在虚拟环境中使用requirements.txt安装其他项目相关库 总结 一、使用FileZilla传输Anaconda 提示&#xf…

Bitquiz重塑Learn to Earn热潮,用户零投入让学习创造价值

Axie 带来的暴富效应、StepN 带来的出圈效应&#xff0c;近期Bigtime 在熊市中的大火&#xff0c;为加密参与者带来的赚取效应&#xff0c;X to Earn 重新成为整个市场关注的重点&#xff0c;GameFi 再次站在了风口浪尖。 大家开始寻找下一个Bigtime&#xff0c;希望能够抓住一…

5.Python-使用XMLHttpRequest对象来发送Ajax请求

题记 使用XMLHttpRequest对象来发送Ajax请求&#xff0c;以下是一个简单的实例和操作过程。 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下&#xff1a; from flask import Flask, reque…

framework通信机制—LiveData使用方法及原理

LiveData是一种可观察的数据存储器类。与常规的可观察类不同&#xff0c;LiveData 具有生命周期感知能力&#xff0c;意指它遵循其他应用组件&#xff08;如 activity、fragment 或 service&#xff09;的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应…

树模型(三)决策树

决策树是什么&#xff1f;决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block)&#xff0c;椭圆形成代表终止模块(terminating block)&#xff0c;表示已经得出结论&#xff0c;可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…

PyTorch 深度学习之加载数据集Dataset and DataLoader(七)

1. Revision: Manual data feed 全部Batch&#xff1a;计算速度&#xff0c;性能有问题 1 个 &#xff1a;跨越鞍点 mini-Batch:均衡速度与性能 2. Terminology: Epoch, Batch-Size, Iteration DataLoader: batch_size2, sheffleTrue 3. How to define your Dataset 两种处…

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

环境准备&#xff08;非核心方法&#xff09; 创建表 创建表的sql(下表是基于Oracle创建的) CREATE TABLE "SYSTEM"."STUDENT" ("ID" NUMBER(10, 0),"NAME" VARCHAR2(20 BYTE),"ADDRES" CLOB,PRIMARY KEY ( …

Element UI库 之 el-input 赋值后不能删除,修改,输入

最近做了一个需求就是导入数据的&#xff0c; 导入了之后发现打折跟促销价都发不能修改了&#xff0c; 甚至删除都不行。后面去查了下发现大概是数据响应的问题。大概的解决办法有下面几个&#xff0c;我是用最后一个解决的 方法一&#xff1a;强制更新 在绑定input里面的调用…

micropython ESP32-S3点亮板载RGB灯珠

micropython ESP32-S3点亮板载RGB灯珠 1、vscode中安装 RT-Thread插件 2、新建个文件夹 3、在这个文件夹下面创建一个文件&#xff0c;命名为neopixel.py。在该文件中粘贴下面代码。 # NeoPixel driver for MicroPython on ESP32 # MIT license; Copyright (c) 2016 Damie…

windows应用程序告警:帐户名与安全标识间无任何映射完成

目录 一、问题现象 二、问题解决 &#xff08;一&#xff09;官方方法 &#xff08;二&#xff09;问题定位 &#xff08;三&#xff09;问题处理 一、问题现象 今天巡检域控服务器时&#xff0c;发现告警如下&#xff1a; 安全策略已传播&#xff0c;但有警告信息。 0x534…

苹果 Vision Pro 头显新专利:增加重量减轻颈部压力

上周&#xff0c;彭博社的古尔曼表示 Vision Pro 头显过重&#xff0c;导致开发者佩戴后出现明显的颈部疲劳。随后&#xff0c;便有人发现在美国商标和专利局&#xff08;USPTO&#xff09;公示的清单中&#xff0c;苹果公司又获得了一项Vision Pro的专利&#xff0c;该专利提…

【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— Positional Encoding(一)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

SpringBoot面试题4:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…

Windows10不常用操作(录屏、开启超级管理员、关闭自动IP配置、Edge崩溃等)

Win10家庭版开启超级管理员 Win10家庭版开启或禁用超级管理员账户步骤如下&#xff1a; 在搜索框中输入CMD&#xff0c;右键以管理员方式运行。 开启 net user administrator /active:yes禁用 net user administrator /active:no Win10关闭自动IP配置 win10设置完静态ip&am…

Nlopt在matlab中的配置教程

step1&#xff1a;克隆代码并编译 编译的前提是已经安装好MinGW64 # 使用镜像加速 git clone https://gitclone.com/github.com/stevengj/nloptcd nlopt mkdir build cd build cmake -G"MinGW Makefiles" .. cmake --build .# 注意此处博主在mingw安装目录将mingw3…

iPhone 如何强制重启

参考iPhone的官方使用手册 传送门 尤其当 iPhone 未响应&#xff0c;也无法将其关机再开机&#xff0c;此方法最有效&#xff1a; 按住调高音量按钮&#xff0c;然后快速松开。按住调低音量按钮&#xff0c;然后快速松开。按住侧边按钮。当 Apple 标志出现时&#xff0c;松开侧…

探索低代码技术

低/无代码的高速发展&#xff0c;属于软件市场的选择&#xff0c;相较于传统编写代码的开发方式&#xff0c;低/无代码开发效率高、投入成本低、技术门槛也更低&#xff0c;未来更多软件应用将使用低/无代码技术完成&#xff0c;这也是趋势。 身为开发人员经常需要花大量时间在…

平台系统老板驾驶舱的重要性,我选云表

平台系统老板驾驶舱的重要性在于它是一个集成的管理和分析工具&#xff0c;能够提供对平台系统运行情况的全面和实时的监控、分析和管理功能。以下是平台系统老板驾驶舱的重要性&#xff1a; 老板驾驶舱 该表单可供老板实时把控企业运营情况&#xff0c;包括销售业绩、…

Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池

动态创建子进程或子线程的缺点&#xff1a; 1.动态创建进程或线程比较耗时&#xff0c;这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务&#xff08;除非我们做特殊处理&#xff09;&#xff0c;这将导致系统上产生大量的进程或线程&#xff0c…