红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01

news2025/1/31 22:52:13

书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了。

Ruby是一门在面向对象层面无所不用其极的解释型编程语言。

我们可以把编写Ruby代码看作是一场行为上的艺术,编码就像跳舞一样,Ruby的每一步都很优雅,几乎没有一步是多余的。

第一行代码

进入系统的irb终端,输入第一行代码:

irb(main):001:0> puts "你好 Ruby!"  
你好 Ruby!  
=> nil

puts关键字是 Ruby 语言里用来打印的基本命令。第三行输出的nil 是什么?其实是puts命令的返回值, puts命令永远返回 nil,nil也是 Ruby 的空值,可以理解为Python中的None关键字。

Ruby同时提供了一个更简单的输出对象内容的方法:p

irb(main):002:0> p "你好 Ruby!"  
"你好 Ruby!"  
=> "你好 Ruby!"

puts方法输出数值 1 和字符串 "1"时,结果都只是单纯的 1。这样一来,我们就无法判断输出的结果到底是属于哪个对象。此种种情况下,p方法可以很好地解决这个问题。使用 p方法时,数值结果和字符串结果会以不同的形式输出:

irb(main):003:0> puts "1"  
1  
=> nil  
irb(main):004:0> puts 1  
1  
=> nil  
irb(main):005:0> p "1"  
"1"  
=> "1"  
irb(main):006:0> p 1  
1  
=> 1  
irb(main):007:0>

藉此,编码过程中我们可以通过p方法快速打印一个变量并且知晓其数据类型。

和Python一样,Ruby3也具有print方法:

irb(main):007:0> print "你好","Ruby"  
你好Ruby=> nil  
irb(main):008:0> puts "你好","Ruby"  
你好  
Ruby  
=> nil

print方法与puts方法和p方法稍有区别,puts方法在输出结果的末尾一定会输出换行符,而print方法则不会,由此,我们可以将print方法理解为省略换行的puts方法,在打印多个变量时,添加换行的puts方法无疑更友好。

单引号和双引号

Ruby3的字符串对象生成有两种方式,字符串文字值加单引号或加双引号。 两种方式主要区别在于构造文字量时,对字符串的处理次数不同。 单引号时,Ruby对字符串值不做处理,里边是什么就是什么。 双引号时,Ruby首先要查找文本中要替换的字符,即带反斜杠的字符,用二进制替换。

irb(main):011:0> puts "你好 \n Ruby"  
你好   
 Ruby  
=> nil  
irb(main):012:0> puts '你好 \n Ruby'  
你好 \n Ruby  
=> nil

也可以理解为单引号是原样输出,而双引号则会替换为变量实体。

空白字符

和Python不同的是,空格和制表符之类的空格字符通常在Ruby3代码中会被忽略,除非它们出现在字符串中。但是,有时它们被用来解释模棱两可的陈述。启用-w选项时,此类解释会产生警告:

irb(main):013:0> puts    '你好 \n Ruby',    "前面好多空格"  
你好 \n Ruby  
前面好多空格  
=> nil

长字符串

Ruby也可以多行构建字符串。在 << 之后,可以指定字符串或标识符以终止字符串文字,并且当前行之后直至终止符的所有行都是字符串的值。如果用引号引起来,则引号的类型确定面向行的字符串文字的类型。注意,<< 和终止符之间不能有空格:

irb(main):035:0" puts <<"EOF"                 
irb(main):036:0"   第一行  
irb(main):037:0"   第二行  
irb(main):038:0> EOF  
  第一行  
  第二行  
=> nil  
irb(main):039:0>

BEGIN和END语句

Ruby可以在程序中声明BEGIN作为初始执行的逻辑以及END作为程序结束时执行的逻辑:

puts "这是主线程Ruby3程序"  
  
END {  
   puts "Ruby3程序结束"  
}  
  
BEGIN {  
   puts "Ruby3程序开始"  
}

代码注释

注释可以在Ruby解释器中隐藏一行,一行的一部分或几行,作为不执行的代码,可以在行的开头使用井号(#)

irb(main):069:0* # 我是一个注释。忽略我。  
irb(main):070:0*

注释也可以在语句或表达式后的同一行上:

irb(main):070:0> name = "v3u.cn" # 这又是一个注释  
=> "v3u.cn"  
irb(main):071:0>

也可以通过使用=begin/=end从Ruby3解释器中隐藏了多行代码:

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

编辑器(Vscode)

如果厌倦了在irb命令行中编写Ruby代码,我们也可以在编辑器中随心所欲地编写,这里推荐微软开源的Vscode编辑器,下载地址:https://code.visualstudio.com/

安装好之后,只需要安装ruby插件即可:

随后编写test.rb文件:

puts "你好,Vscode"

右键运行Ruby脚本:

简单方便,开箱可用。

结语

Ruby可以以最少的代码量解决问题,又不失可读性,优雅而又不乏实用,如果你有梦想,就一定看得到这颗红宝石和梦中的一样动人妖娆。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工控CTF之协议分析3——IEC60870

协议分析 流量分析 主要以工控流量和恶意流量为主&#xff0c;难度较低的题目主要考察Wireshark使用和找规律&#xff0c;难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律&#xff0c;难可以难得五花八门 常见的工控协议有&#xff1a;Modbus、MMS、IEC60870、…

关于要不要转行做程序员的问题

写在前边&#xff1a; 种一棵树&#xff0c;最好的时间是十年前&#xff0c;其次是现在。 什么时候开始都不晚。 这篇文章废话少说&#xff0c;我作为一个普通本科电气工程及其自动化专业的人转行作为Python程序员来说的经历到现在已经工作两年了&#xff0c;距离培训整整过…

LabVIEW使用硬件抽象层适应不同的接口

LabVIEW使用硬件抽象层适应不同的接口 在实验室工作时&#xff0c;拥有不同品牌/型号的各种设备&#xff0c;有时&#xff08;或多或少&#xff09;具有相同的目的。为了缩短开发时间&#xff0c;想创建一个硬件抽象层&#xff0c;允许使用所有相同类型的仪器&#xff0c;并具…

操作系统实验6:地址映射与共享

本次实践项目有两个基本内容&#xff1a; &#xff08;1&#xff09;用Bochs调试工具跟踪Linux-0.11的地址转换过程&#xff1b; &#xff08;2&#xff09;实现基于共享物理页框的进程间内存共享。 知识点补充 GDT和GDTR 和一个段有关的信息需要 8 个字节来描述&#xff0c…

【3D目标检测】Orthographic Feature Transform for Monocular 3D Object Detection

目录概述细节网络结构正交特征变换模块其余部分概述 本文是基于单目图像的3D目标检测方法。 【2018】【OFT-Net】 研究的问题&#xff1a; 在图像表示中&#xff0c;物体的比例会随着深度的变化而变化&#xff1b;物体的外观随着视点的不同而不同&#xff1b;物体的距离&…

看漫画也能学Python?小学生都能学会,《看漫画学python 2》PDF中文超清版,可分享

学习Python的小伙伴大部分应该都知道《看漫画学Python&#xff1a;有趣、有料、好玩、好用&#xff08;全彩版&#xff09;》这本书&#xff01; 《看漫画学Python》进阶版&#xff0c;在第1版的基础上讲解Python进阶知识&#xff0c;帮助读者完善Python知识体系&#xff0c;提…

点云Delaunay三角剖分(三维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 四面体网格是一种三维非结构化网格,它划分了一个三维域。这种类型的分区有许多有利的性质。例如,它很适合具有任意复杂几何结构的领域,它可以很容易地在局部细化和粗化(没有悬挂节点),并且它可以完全自动地创建…

GitHub上超强Python零基础入门学习资源,让你的学习事半功倍

根据2020年StackOverflow开发者调查报告&#xff0c;Python是世界上最受欢迎的语言之一&#xff0c;排名仅次于Rust和TypeScript。更令人惊讶的是&#xff0c;Python是开发人员最想尝试的语言。 如果你是一位使用Python的开发人员&#xff0c;而且希望提高自己的技术水平&…

【Numpy基础知识】使用genfromtxt导入数据

使用Numpy进行I/O操作 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录使用Numpy进行I/O操作导包【1】定义输入【2】将行拆分为列【3】跳过行和选择列【4】选择数据类型【5】设置名称【6】调整转换【7】快捷键功能NumPy 提供了几…

JAVA面试(不同类型的公司特点)

工作那么多年面试过很多公司&#xff0c;同时也面试过很多求职者。作为一个JAVA程序员&#xff0c;10年风雨路&#xff0c;10年技术路&#xff0c;一路走来&#xff0c;实属不易&#xff0c;JAVA语言从诞生&#xff0c;到发展起来&#xff0c;到风靡全球&#xff0c;到如今的混…

java回顾:私服搭建

目录 一、搭建私服 1.1、搭建私服原因 1.2、nexus软件的安装 1.3、私服的使用 1.4、仓库介绍 1.5、从私服下载资源 1.6、下载失败 1.7、将资源上传到私服 1.7.1 问题 一、搭建私服 1.1、搭建私服原因 公司开发了jar包&#xff0c;可供其他项目组使用、无网络使用…

次世代培训——我们从游戏美术发展历程讲起

自90后们记忆最初的小霸王游戏算起&#xff0c;中国游戏大致经历了从像素时代-预渲染时代-初世代-中世代-次世代这样几个阶段的变革。有趣的是&#xff0c;当主机、PC游戏早已跨过了像素时代&#xff0c;手游的兴起和发展却依然要遵从这一发展规律从头开始&#xff0c;当人们已…

FineReport智能报表工具- CSS修改控件样式

1. 概述 1.1 使用场景 在实际项目中&#xff0c;为了让 FineReport 报表中的控件和页面风格一致&#xff0c; 可以通过 CSS 修改控件的显示样式。 如下图所示&#xff0c;希望参数面板上文本框控件的边框变为红色&#xff0c;字体颜色变为蓝色。 除更换控件字体、修改边框颜色…

从风控中那些被标准化定义的问题谈起

说到风控业务中被标准化的定义问题&#xff0c;作为风控人最应该来谈谈这个内容&#xff0c;尤其是在数字化的风控内容上。数字化风控的标准化程度较高&#xff0c;在互金经过了一番喷薄的发展后&#xff0c;对于SOP守则&#xff0c;业务问题的定义及留给后续从业者可借鉴的资料…

足球人生:青春不过几届世界杯

&#x1f389;花有重开日&#xff0c;人无再少年。将近一个月的卡塔尔世界杯正式落帷幕&#xff0c;见证了最伟大的世界杯决赛&#xff0c;新老两代球王的巅峰对决&#xff0c;节奏拉满。诸神黄昏&#xff0c;球王加冕&#xff0c;最完美的结局。究竟怎样的颠沛流离才配得上这一…

web--拉灯泡切换黑天与白夜的精美动画

功能&#xff1a; 进入界面会出现一个灯泡&#xff08;下面有可以自由飘动也可以自由拉动的绳子&#xff09;&#xff0c;鼠标左键按住不松开可以拉动绳子&#xff0c;松开变化亮起&#xff0c;同时有拉响的清脆声响&#xff0c;把它放在web作业的设计里面绝对是非常非常不错的…

SQL注入总结复习

SQL注入总结复习 一、前提 1、web三层架构 学习SQL注入&#xff0c;前提必须要了解web程序的三层架构。 数据访问层&#xff08;DAL&#xff09;&#xff1a;主要负责对数据库进行增删改查&#xff0c;将存储在数据库中的数据提交给业务层&#xff0c;同时将业务层处理的数据…

第七章 集合相关知识

什么是集合 为了存储不同类型的多个对象, Java提供了一系列特殊的类, 这些类可以存储任意类型的对象&#xff0c;并且存储的长度可变,被统称为集合。集合可以简单理解为一个长度可变可以存储不同数据类型的动态数组。集合都位于java.uti包中,使用集合时必须导入java.util包。 …

前端二面必会手写面试题汇总

实现Vue reactive响应式 // Dep module class Dep {static stack []static target nulldeps nullconstructor() {this.deps new Set()}depend() {if (Dep.target) {this.deps.add(Dep.target)}}notify() {this.deps.forEach(w > w.update())}static pushTarget(t) {if …

LeetCode刷题复盘笔记—一文搞懂动态规划之300. 最长递增子序列问题(动态规划系列第二十七篇)

今日主要总结一下动态规划的一道题目&#xff0c;300. 最长递增子序列 题目&#xff1a;300. 最长递增子序列 Leetcode题目地址 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除…