前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Ruby Programming | 连载 03 - Ruby 对象基础

Ruby Programming | 连载 03 - Ruby 对象基础

作者头像
RiemannHypothesis
发布于 2022-10-05 00:05:16
发布于 2022-10-05 00:05:16
2K00
代码可运行
举报
文章被收录于专栏:ElixirElixir
运行总次数:0
代码可运行

一、Ruby 对象

Ruby 中所有的数据结构和值都是对象,包括基本的数字和字符串以及数组 Array、散列表 Hash 这样的复杂数据结构。

每个对象都能够响应一组特定的 消息,对象能够接收的每个消息都对应一个 方法,方法是一个有名称的、可以被有执行能力的对象触发的可执行程序。

对象也可以使用字面量构造器表示,如字符串使用双引号表示,也开始使用存储了值的变量来表示。消息通过点运算符 . 传递,点右边的消息被传递到点左边的对象上,如 字符串转换为整型时的代码 "10".to_i,这句代码的意思就是 消息 to_i 被传递给 *字符串对象 "1"*,字符串对象作为消息的接收者被调用,也可以说字符串对象调用了 to_i 方法。

上面提到了两个术语 发送 to_i 消息调用 to_i 方法,这两个术语并不是完全相同。传递消息给对象时,对象会执行相应的方法,如果对象没有对应的方法则会报错 NoMethodError

Ruby 的动态特性之一 Ruby 对象可以拦截位置的消息并使他们拥有具体的含义,Rails 框架中大量使用了拦截,发送位置的消息到对象并拦截该消息,然后能够在使用当前数据库表的列名作为动态条件的情况下顺畅运行。

调用方法时也可以携带参数,参数使用 () 来包含参数,Ruby 对象调用方法时不携带参数可以将 () 省略。携带参数时 () 是可选的。

但是对于一些内置函数如 puts,使用 puts 函数输出到 "Hallo" 到控制台:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
puts "Hallo"

上述代码中没有显示的消息接收者(对象),但其实是将 "Hallo" 对象发送给了 默认对象 self;并且 "Hallo" 作为参数没有使用 () 包含,说明在有参数时方法调用也可以省略 ()

完整的 Ruby 程序是由对象以及发送给对象的消息组成的。类定义了一组行为或者功能,每一个对象都是类实例化而来的,每一个对象都是不同的。

Ruby 中提供了大量的内置类,如 Integer,String,Array 等,当然也可以编写自定义的类或者给内置类修改或者添加新的功能。

Ruby 中类的概念没有对象重要,Ruby 作为一种动态解释型语言,对象在实例化过程中是可以改变的,对象可以在实例化过程中改变类中定义的行为或者增加原类中没有定义的行为,这就是 Ruby 语言的动态特性。

二、第一个 Ruby 程序

接下来将编写一个简单的汇率换算的工具,使用 Ruby 的面向对象特性来实现。

使用 RubyMind 创建一个 ruby-tutorial 项目,用来保存 Ruby 代码,在该目录下创建 exchange.rb 文件,并输入如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 兑换类
class Exchange
  @@yuan_to_aus_rate = 0.2152

  def yuan2aus(amount_yuan)
    aus = amount_yuan*@@yuan_to_aus_rate
    return aus
  end
end

ex = Exchange.new

print "输入要兑换的人民币金额(元):"
amount = gets
aus = ex.yuan2aus(amount.to_i)
puts "兑换的澳币金额为(刀):#{aus}"

在上述代码中通过定义一个 Exchange 类并且在类中定义了一个 yuan2aus 方法(行为),通过实例化 Exchange 来调用该方法,通过在键盘输入要转换的金额并调用该方法来实现汇率的换算。

Ruby 程序需要通过 Ruby 解释器来执行,该解释器名为 ruby,在代码文件目录下执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ruby exchange.rb

输入兑换的人民币金额 2000,输出可兑换的澳币金额为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入要兑换的人民币金额(元):2000
兑换的澳币金额为(刀):430.4 

ruby 解释器可以检查语法错误,通过添加 -c 参数检查语法错误,*-w* 参数激活高级别的警告,如果语法正确输出如下:

如果语法有错误则会输出具体的错误信息和错误行:

在使用 RubyMine 进行运行程序时只需要选中文件,并点击 Run 该文件即可

如果想要执行时添加参数,可以配置 Run/Debug Configurations

执行该文件:

在使用 RubyMine 进行编码时,如果出现语法错误 IDE 会提示,无须通过 -cw 来检查语法错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ruby Programming | 连载 02 - Ruby 语法基础
Ruby 的基本语法中包含了 Ruby 的基本运算符、I/O、控制流以及 Ruby 中的特殊对象和注释。
RiemannHypothesis
2022/09/28
5.9K0
【每天学点Python】案例一:汇率换算
汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分; 确定问题:将问题划分为输入、处理及输出部分; 设计算法:计算部分
py3study
2020/01/19
1.4K0
【每天学点Python】案例一:汇率换算
Java转Ruby【快速入门】
对于准备迈入 Ruby 的 Java 程序员来说,有几个地方需要特别的去了解一下。
我没有三颗心脏
2019/05/10
3.2K0
Java转Ruby【快速入门】
Ruby执行shell命令的六种方法
在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令。
技术小黑屋
2018/09/04
3.3K0
Ruby中的字符串转换方法
在Ruby中,你可以使用各种方法来转换字符串。下面是一些常用的方法,当然选择哪种适用的方法还得更具具体项目来做调整。日常使用中下面的错误也是比较常见的,看看我们怎么处理哈。
华科云商小徐
2024/05/09
1220
Ruby(1):入门
安装:   一般来说linux会自动装ruby,可以通过:   ruby -v 来查看ruby版本   直接使用ruby命令的话,是用来执行ruby文件的。如果要打开交互式ruby解释器。只需要在控制台输入:irb 即可。   irb的命令前面有一个形式如 :irb(main):001:0> 的开始的提示,其中的两个数字第一个表示第几行,第二个表示嵌套的层次。 语法特点:   Ruby的设计初衷就是以最面向人的语法习惯来的。所以Ruby代码的规范看起来比其他任何语言都宽松。具体表现如下:   1. 语句的结
SecondWorld
2018/03/14
8090
红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础数据类型(data types)EP02
    Ruby是强类型静态语言,即Ruby中一旦某一个对象被定义类型,如果不通过强制转换操作,那么它永远就是该数据类型,并且只有在Ruby解释器运行时才会检测对象数据类型,它的一切皆为对象(包括 nil 值对象),可以通过调用内置class属性来获取该对象的具体数据类型。对于 Ruby 而言,所有类型都继承自 Object 类(根类为 BasicObject)。
用户9127725
2022/10/28
1.6K0
红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础数据类型(data types)EP02
Ruby学习笔记
Ruby语言中,以对象为基本单位,可以说所有的元素都是对象。按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序。对象由类来定义,具体的表现为对象实例。也就是说,对象是类的实例化[2]。
大江小浪
2018/07/25
2K0
Ruby学习笔记
Ruby(2): 基本语法上
表达式和变量: 这两点和其他主流的编程语言基本没有差别,这里直接跳过。 需要注意的是 ruby中 x=x+1 可以写成 x+=1 但是不支持 x++ , x-- 等一元运算符 比较运算符和表达式: 在ruby中可以直接在表达式中混合使用比较运算符,来实现如果满足某个逻辑则进行相应的表达式操作: 1 x = 10 2 puts "x is ten" if x == 10 # x is ten 除了if关键字还可以使用unless,这个表示和if相反的: 1 x = 24 2 puts "Y
SecondWorld
2018/03/14
1.1K0
辨析 Ruby 中的 Method 与 Proc
Ruby 与 Python、Scala 类似,在一切皆是对象(Seeing Everything as an Object)的基础上,支持函数式编程,这意味着函数是一等成员,可以作为参数传入,也可以作为函数值返回。
飞驰的西瓜
2022/07/26
9410
辨析 Ruby 中的 Method 与 Proc
Ruby快速入门
比如,比较著名的web框架Ruby On Rails,我们正在使用的Fluentd。
Fluentd中文网
2020/12/22
1.4K0
ruby学习笔记(11)--symbol与hash参数
symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001".object_id puts "0001".object_id puts "0001".object_id puts "0001".object_id 输出结果类似如下: 32088750 32088730 32088710 32088690 可以发现即使是同样内容的字符串"0001",在ruby解释器内部每次也
菩提树下的杨过
2018/01/22
1K0
python, ruby, javascript 浅析
最近一直在看红宝石(ruby)语言,到现在为止,算是对其设计有一些了解。作为一动态语言,ruby 经常会拿来与 python 对比,确实这两门语言在语法层面、实现层面有很多共同的地方,但是它们也在很多设计理念上存在重要差异,通过对比这些相同点、异同点,更加有助于理解这两门语言。同时,Node.js、React Native 的出现,将 javascript 这门“前端”语言推向了全栈,同样作为一门动态语言,javascript 与 ruby、python 在很多概念上也存在很多相同点、异同点。
飞驰的西瓜
2022/07/26
5250
python, ruby, javascript 浅析
Ruby 和 Java 的基础语法比较
这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心读完文章的话,你将获得和了解:
phoenix.xiao
2020/08/05
2.2K0
【Ruby高级技术】对面向对象里的控制访问,包括类的继承类常量的深入理解和使用
类用于指定对象的形式。它结合了数据表示和方法,将数据组织成一个整洁的包。类中的数据和方法称为类的成员。 Ruby类定义 定义类时,实际上定义了数据类型的蓝图。这实际上并没有定义任何数据,而是定义了类的名称意味着什么,即类的对象将由什么组成,以及可以对对象执行什么操作。 类定义以关键字class开头,后跟类名,以结尾结尾。例如,我们使用关键字类来定义Box类,如下所示:
上进小菜猪
2022/12/20
6520
JavaMoney规范(JSR 354)与对应实现解读
当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照[ISO-4217]描述的货币类型。它没有与之关联的数值,也不能描述规范外的一些货币。对于货币的计算、货币兑换、货币的格式化没有提供相关的支持,甚至连能够代表货币金额的标准类型也没有提供相关说明。JSR-354定义了一套标准的API用来解决相关的这些问题。
2020labs小助手
2021/12/14
1.2K0
会员积分(期末模拟)
普通会员类Member,包含编号、姓名、积分三个属性,编号和积分是整数,姓名是字符串
叶茂林
2023/07/30
2060
【python系统学习05】input函数——实现人机交互
你提出的问题就是小括号“()”里边的那段字符串。result接受的就是运行的人输入的回答。运行的人按下回车,流程向下继续走。
xing.org1^
2020/02/14
1K0
HarmonyOS学习路之开发篇—AI功能开发(IM类意图识别)
IM类意图识别,是指利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。
爱吃土豆丝的打工人
2023/10/15
2900
【精解】EOS标准货币体系与源码实现分析
EOS智能合约中包含一个exchange合约,它支持用户创建一笔交易,是任何两个基本货币类型之间的交易。这个合约的作用是跨不同币种(都是EOS上的标准货币类型)的,通过各自与EOS主链价值进行锚定,然后再相互发起交易兑换。要搞清楚的是,这与区块链“传统的”交易所并不一样,那个主要是集中在交易撮合上面,而且必须是同一币种。 关键字:EOS token 经济模型,exchange,Pegged Currency,LTV,cmake,跨token交易,ubuntu编译boost库,通证模型,抵押资产,to
文彬
2018/05/08
2K2
相关推荐
Ruby Programming | 连载 02 - Ruby 语法基础
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文