方法名称20分钟体验Ruby : Ruby in Twenty Minutes
本文是一篇关于方法名称的帖子
20分钟休会Ruby
介绍
这是一个小的Ruby教程,应采取不超越20分钟就可以完成。它使假设你已安装Ruby。 (如果你没有红宝石您的计算机上下载并安装它,在你开始之前。)
打开IRB(交互式Ruby)。
•如果您应用的是Mac OS X打开终端并输入irb,然后按下回车键。
•如果您应用的是Linux,打开一个shell类型的IRB和掷中进入。
•如果您应用的是Windows,开放fxri从开始菜单Ruby的部份。
刚刚发生了什么?难道我们只是写出世界上最短的“Hello World”程序?不完全是。第二行是刚刚IRB的方式告诉我们它评估的最后一个抒发式的结果。如果我们要打印出“Hello World”的,我们须要多一点:
IRB(主):002:0>提出的“Hello World”
的Hello World
=>零
把基本的命令打印出来的东西在Ruby。那么是什么=>零位?这就是抒发式的结果。把总是返回nil,这是Ruby的绝对正没什么价值。
这里是你的免费计算器
目前,我们有足够的应用外部评级法作为一项基本的计算器:
IRB(主):003:0> 3 +2
=> 5
三加二。很容易做到。约三倍两个?你可以键入它,它是足够短,但你或许还可以去转变你刚才输入。试着打键盘上的向上箭头,看它是否符合3 +2。如果是这样,你可以应用左箭头键来挪动“+”号后,然后用退格键,将其变动成一个*符号。
IRB(主):004:0> 3 * 2
=> 6
接下来,让我们实验三个平方:
IRB(主):005:0> 3的** 2
=> 9
在Ruby中**的方式,你说“给力”。但是,如果你希望走另一条路,找到的平方根的东西吗?
IRB(主):006:0>的Math.sqrt(9)
=> 3.0
好,等我,是最后一个?如果你猜到了,“它是搞清楚9的平方根,”你说得对。但是,让我们来仔细看看事件。首先,什么是数学?
主题模块组代码
数学是一个内置的数学模块。模块用于在Ruby中的两个角色。这显示了一个角色:一个熟习的名字下一起相似的方法停止分组。
接下来是一个点。点做什么?点是你如何识别接收的消息。什么消息?在这类情况下,它是SQRT(9),这意味着调用该方法SQRT,速记“平方根”9的参数。
此方法调用的结果是3.0的值。您可能会注意到它不只是3。这是因为大部份时光的平方根数字将不会是一个整数,因此该方法总是返回一个浮点数。
如果我们要记住一些数学的结果是什么?结果分配给一个变 量。
IRB(主):007:0> = 3 ** 2
=> 9
IRB(主):008:0> B = 4 ** 2
=> 16
IRB(主):009:0>的Math.sqrt(A + B)=> 5.0
一样大,这是一个计算器,我们越来越远离了传统的Hello World消息开始教程应当把重点放在...让我们回到那个。
如果我们想要说“你好”了很多,没有得到我们的手指都累吗?我们须要定义一个方法!
IRB(主):010:0> DEFħ
IRB(主):011:1>提出的“Hello World!”
IRB(主):012:1>结束
=>零
码高清H开始的方法的定义中。它告诉红宝石,我们定义了一个方法,其名称为h。下一行是身材的方法,我们前面看到的:在同一行提出的“Hello World”。最后,最后一行结束红宝石告诉我们定义的方法来完成。 Ruby的响应=>零告诉我们,它知道我们所做的定义方法。
简短,重复住的方法
现在,让我们实验几次运行的方法:
IRB(主):013:0> H
世界您好!
=>零
IRB(主):014:0>小时()
世界您好!
=>零
嗯,这是很容易的。在Ruby中调用一个方法是红宝石只是提它的名字一样容易。如果该方法不带参数,全部你须要的。您可以添加空括号,如果你想,但他们并不须要。
如果我们想要一个人,而不是整个世界问好是什么?只需重新定义h来取了个名字作为参数。
IRB(主):015:0> DEF h(名称)
IRB(主):016:1>把“您好#{name}的!”
IRB(主):017:1>结束
=>零
IRB(主):018:0>h(“马茨”)
您好马茨!
=>零
所以它的工作原理......但让我们花一秒钟,看到这里发生了什么事件。
#{name}的位是什么?这是Ruby的方式插入到一个字符串的东西。在大括号之间的位被转换为一个字符串(如果没有的话),并代入在该点的外字符串。您还可以应用,以确保某人的名字是准确的大写:
IRB(主):019:0> DEF H(名称=“世界”)
IRB(主):020:1>提出“,你好#{name.capitalize}!”
IRB(主):021:1>结束
=>零
IRB(主):022:0> H“克里斯”
你好,克里斯!
=>零
IRB(主):023:0> H
世界您好!
=>零
其他招数一对夫妇在这里发明。其一是我们没有括号再次调用该方法。如果很明显,你在做什么,括号中是可选的。另一个窍门是世界的默认参数。这说的是“如果不提供的名称,应用默认的名称”世界“。
演酿成一个迎宾
如果我们想要一个真正的招待员左右,记住你的名字,欢迎您的光顾,并尊重对待你总是什么。您可能要应用对象。让我们创立一个“迎宾”类。
IRB(主):024:0>类迎宾
IRB(主):025:1> DEF初始化(名称=“世界”)
IRB(主):026:2> @名称=名称
IRB(主):027:2>结束
IRB(主):028:1> DEF say_hi
IRB(主):029:2>把“嗨#{@名}!”
IRB(主):030:2>结束
IRB(主):031:1> DEF say_bye
IRB(主):032:2>把“再会#{@名},很快回来。”
IRB(主):033:2>结束
IRB(主):034:1>结束
=>零
这里新的关键字是class。这定义了一个新的称为迎宾类,这个类的方法和一堆。同时注意到@名。这是一个实例变量,并且是可用的类的全部方法。正如你可以看到它的应用由say_hi say_bye。
那么,我们如何得到这个Greeter类集运动?创立一个对象。
现在,让我们创立一个招待员的对象,并应用它:
IRB(主):035:0> G = Greeter.new(“八”)
=>#<Greeter:0x16cac @name="Pat">的
IRB(主):036:0> g.say_hi“
嗨专利!
=>零
IRB(主):037:0> g.say_bye“
细则八,很快回来。
=>零
克对象被创立后,它会记住这个名字是帕特。嗯,如果我们想取得直接的名字?
IRB(主):038:0> G @名
语法错误:编译错误
(IRB):52:语法错误
(IRB):52
不,不能这样做。
根据对象的皮肤
实例变量里面隐藏的对象。他们不是恐怖的隐藏,你看到他们每当您检查对象,并有其他的方式拜访它们,但,Ruby应用精良的面向对象的方法,保持数据排序藏起来。
IRB(主):039:0> Greeter.instance_methods的
=> [“方法”,“送”,“OBJECT_ID”中,“singleton_methods”
“__send__”,“平等”,“污点”,“冻结?”
的“instance_variable_get”,“kind_of?”,“to_a”
instance_eval的“,”类型“,”protected_methods“,”延伸“
“互不干涉”,“显示器”,“instance_variable_set”,“哈希”的,
“用is_a?”,“的to_s”,“阶层”,“污点”,“private_methods”
的untaint,的“say_hi”的“id”,“检查”,“==”,“===”,
“克隆”,“public_methods”,“respond_to方法吗?”,“冻结”,
“say_bye”,“__id__”,“=”,“方法”,“无”,“DUP”
“instance_variables”,“instance_of?]
哇。这是一个很大的方法。我们只定义了两种方法。这是怎么回事呢?嗯,这是迎宾对象,一个完全的列表,包括那些由先人类定义的全部方法。如果我们要列出迎宾定义的方法,我们可以告诉它不包括先人传递给它的参数假的,这意味着我们不希望先人所定义的方法。
IRB(主):040:0> Greeter.instance_methods(假)
=> [的“say_bye”,“say_hi”]
啊,那是更爱好它。所以,让我们来看看我们的招待员对象响应方法:
IRB(主):041:0> g.respond_to(“名称”)?
=>假
IRB(主):042:0> g.respond_to?(“say_hi”)
=>真
IRB(主):043:0> g.respond_to?(“的to_s”的)
=>真
因此,它知道say_hi的,的to_s(即转换为字符串,默认情况下,每一个对象的定义的方法),但它不知道名称。
转变类它永远不会太晚
但是如果你想可以查看或变动名称? Ruby提供了一种简略的方法,拜访对象的变量。
IRB(主):044:0>类迎宾
IRB(主):045:1> attr_accessor中:名称
IRB(主):046:1>结束
=>零
在Ruby中,你可以打开一个类,再停止修改。这些变更将出现在任何新创立的对象,甚至可以在现有的那个类的对象。所以,让我们创立一个新的对象,并发挥其@ name属性。
IRB(主):047:0> G = Greeter.new(“安迪”)
=>#<Greeter:0x3c9b0 @name="Andy">
IRB(主):048:0> g.respond_to(“名称”)?
=>真
IRB(主):049:0> g.respond_to?(“=”)
=>真
IRB(主):050:0> g.say_hi“
嗨,安迪!
=>零
IRB(主):051:0> g.name =“贝蒂”
=>“贝蒂”
IRB(主):052:0> G
=>#<Greeter:0x3c9b0 @name="Betty">
IRB(主):053:0> g.name“
=>“贝蒂”
IRB(主):054:0> g.say_hi“
嗨,贝蒂!
=>零
attr_accessor中为我们定义了两个新的方法,名称的值,名称=来设置它。
贺卡任何事件,一切中,MegaGreeter忽视没有了!
此招待员是不是全部的有趣,但它只能处置一个人在同一时光。如果我们有某种MegaGreeter既可以欢迎世界,一个人或整个名单的人吗?
让我们写这个文件,而不是直接在交互式Ruby解释器IRB。
要退出的IRB,键入“跳槽”,“退出”,或者只是打控制-D。
#!的/ usr / bin中/ env的红宝石
类MegaGreeter
attr_accessor中:名称
#创立对象
DEF初始化(名称=“世界”)
@名称=名称
结束
#给大家打个招呼
DEF say_hi
if@names.nil?
把“...”
elsif@names.respond_to(“每一个”?)
#@名称是某种类型的列表,迭代!
@ names.each |名称|
把“您好#{name}!”
结束
其他
把“您好#{@名}!”
结束
结束
#大家说再会
DEF say_bye
if@names.nil?
把“...”
elsif@names.respond_to(“参加”)?
参加列表中的元素用逗号
把“再会#{@ names.join(”,“)}。很快回来!”
其他
把“再会#{@名},很快回来!”
结束
结束
结束
如果__ FILE__ == $ 0
毫克= MegaGreeter.new
mg.say_hi
mg.say_bye
#变动名称是“齐克”
mg.names =“齐克”
mg.say_hi
mg.say_bye
#将名称变动成一个数组名称
mg.names = [“伟业”,“布兰达”,“查尔斯”,
“戴夫”,“恩格尔贝特”]
mg.say_hi
mg.say_bye
#变动成零
mg.names =零
mg.say_hi
mg.say_bye
结束
保存此文件为“ri20min.rb”的,和运行它为“红宝石ri20min.rb”。输出应当是:
世界您好!
再会世界。很快回来!
您好泽科!
再会泽科。很快回来!
您好伟业!
布伦达您好!
查尔斯·您好!
戴夫你好!
您好恩格尔贝特!
再会伟业,布伦达,查尔斯,戴夫,恩格尔贝特。来
马上回来!
...
...
现在有很多新的东西扔进这最后一个例子,我们可以更深入地了解。
因此,在我们的新节目寻觅更深,注意到初始线,开始与一个hash符号(#)。在Ruby中,任何一个哈希标记上线后是注释,被疏忽的解释。该文件的第一行是一种特殊的情况,并告诉shell相似Unix的操作系统下如何运行文件。其余的看法只是为了清晰。
我们的say_hi法已变得有点辣手:
#给大家打个招呼
DEF say_hi
if@names.nil?
把“...”
elsif@names.respond_to(“每一个”?)
#@名称是某种类型的列表,迭代!
@ names.each |名称|
把“您好#{name}!”
结束
其他
把“您好#{@名}!”
结束
结束
现在看起来@名实例变量作出决定。如果它是零,它只是打印出三个点。没有点问候没人管,对不对?
自行车循环a.k.a。迭代
如果@名对象响应每一个,它的东西,你可以遍历,所以遍历它,欢迎每一个人。最后@名称,如果是别的,只是让它酿成一个字符串自动做默认的问候语。
让我们来看看更深入,迭代:
@ names.each |名称|
把“您好#{name}!”
结束
每一个方法,它接受一个代码块在一个列表中的每一个元素,然后运行代码块之间的位做和结束就是这样一个块。块是像一个匿名函数或lambda。管道字符之间的变量是用于此功能块的参数。
这里发生了什么,列表中的每一个条目,名称绑定列表元素,并抒发将“您好#{name}的!”运行应用该名称。
大多数其他编程语言处置应用的循环,这在C看起来像一个列表:
(= 0; <number_of_elements; + +)
{
map里(元素[]);
}
这工作,但不是很优雅。你须要一个像我扔掉的变量,要搞清楚多久列表,并解释如何走在列表。红宝石的方式更优雅,全部的看家细节隐藏在每一个方法,全部你须要做的就是告诉它做什么用的每一个元素。外部,基本上每一个方法调用yield“伟业”,然后产生“布兰达”,然后产生“查尔斯”,等等。
块,高闪闪发光的红宝石的边缘闪烁
的真正威力块处置比列表更复杂的东西,是时。除了处置简略的看家细节,在该方法中,你也可以处置设置,拆除和错误都藏身从用户的关怀。
#大家说再会
DEF say_bye
if@names.nil?
把“...”
elsif@names.respond_to(“参加”)?
参加列表中的元素用逗号
把“再会#{@ names.join(”,“)}。很快回来!”
其他
把“再会#{@名},很快回来!”
结束
结束
不应用的say_bye方法,而不是它会检查,如果某个名字的连接的方法的反应,如果是这样,应用它。否则,它只是打印出来作为一个字符串变量。这类方法不关怀变量的实际类型,仅仅依托它支撑什么方法被称为“鸭打字”,“如果它走起来像鸭子,叫起来像鸭子......”。这样做的利益是,它并没有不必要地制约所支撑的变量的类型。如果有人想出了一种新的列表类,只要它实现了与其他列表相同的语义的连接方法,一切都市按计划工作。
开球脚本
所以,这是的MegaGreeter类的文件,剩下的只是调用该类的方法。还有最后一个绝招须要注意的,那就是行:
如果__ FILE__ == $ 0
__FILE__包括当前文件的名称是神奇的变量。 $ 0是用于启动程序的文件的名称。此检查说:“如果这是重要的文件正在应用......”这答应一个文件被用作藏书楼,在这类情况下不执行代码,但如果该文件是被用来作为一个可执行文件,然后执行该代码。
认为自己介绍
所以这是它的快速游览的Ruby。有很多更多的探索,红宝石提供不同的控制结构;应用块和产量;模块混入;多。我希望,红宝石这个滋味已离开你想了解更多信息。
如果是这样,请头到我们的文档区域,这轮手册及教程的链接,全部可在网上免费。
或者,如果你真的想挖成书,查书列表(异地链接)提供在线销售的标题,或您外地的书商。
文章结束给大家分享下程序员的一些笑话语录:
真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。