方法名称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散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3093649.html