二十分钟 教你Ruby快速入门
使用Ruby编程技术的步骤和注意事项

使用Ruby编程技术的步骤和注意事项在当今快速发展的科技时代,编程技术成为了一项非常重要的技能。
Ruby作为一种简洁、灵活且易于学习的编程语言,受到了越来越多开发者的青睐。
本文将介绍使用Ruby编程技术的步骤和注意事项,帮助读者更好地掌握这门语言。
一、安装Ruby环境首先,要开始使用Ruby编程技术,我们需要在计算机上安装Ruby环境。
Ruby官方网站提供了各种操作系统的安装包,可以根据自己的系统选择合适的版本进行下载和安装。
安装完成后,可以通过在终端或命令行窗口中输入ruby -v命令来验证是否成功安装。
二、学习Ruby语法学习任何一门编程语言,掌握基本的语法是必不可少的。
Ruby语法相对简单,但也有一些独特的特性。
可以通过阅读Ruby官方文档、参考书籍或在线教程来学习Ruby的基本语法。
此外,还可以通过实践编写简单的程序来加深对语法的理解。
三、了解Ruby的核心库Ruby的核心库提供了许多有用的功能和方法,熟悉这些库对于编写高效的Ruby程序至关重要。
Ruby官方文档中提供了详细的核心库文档,可以通过阅读文档来了解每个库的功能和使用方法。
掌握核心库的使用将使你能够更好地利用Ruby的强大功能。
四、使用Ruby开发工具为了更好地编写和管理Ruby代码,可以选择使用一些Ruby开发工具。
例如,RubyMine是一款功能强大的集成开发环境(IDE),提供了代码自动补全、调试功能等。
除此之外,还有其他一些轻量级的编辑器,如Sublime Text、Visual Studio Code等,都可以用来编写Ruby代码。
五、参与开源社区Ruby拥有一个活跃的开源社区,加入这个社区可以与其他开发者交流经验、学习新的技术和解决问题。
通过参与开源项目,你可以提高自己的编程能力,并为Ruby社区的发展做出贡献。
在开源社区中,你可以分享自己的代码、提出问题和参与讨论,与其他开发者共同进步。
六、编写可维护的代码编写可维护的代码是一个优秀程序员的标志。
Ruby语言入门教程

Ruby语言入门教程Version0.6编著张开川kaichuan_zhang@目录自序 (3)第一章概述 (4)1.1编程语言的发展简史 (4)1.2编程其实很容易 (5)1.3Ruby的由来 (6)1.4Ruby的特性 (7)第二章 (8)2.1下载Ruby1.8.5 (8)2.2安装Ruby1.8.5for Windows (8)2.3开始第一个小程序 (10)2.4ruby语言的集成开发环境 (12)第三章语法快览 (14)3.1注释与分行 (14)3.2分隔符 (15)3.3关键字 (16)3.4运算符 (17)3.5标识名和变量的作用域 (19)3.6类库 (19)3.7数据类型 (20)3.8赋值和条件运算符 (21)3.9条件判断语句 (22)3.10循环语句 (24)3.11常与线程 (29)3.12一个综合小练习 (30)第四章一切都是对象 (31)4.1两种思维方式 (31)4.2对象 (32)4.3封装 (33)4.4继承 (34)4.5多态36小跋37自序其它编程语言的学习都主要来自于书本,而Ruby的学习却是完全经由网络。
我想,回报网络的最好方式就是在网络上还没有Ruby中文书籍的时候,编著一本Ruby中文入门教材。
感谢编程语言发展史上的前辈们;感谢网络论坛上程序员们或是理智,或是激烈的讨论;感谢一切看到这本书的人。
曾经经受了SCJP的挖掘、挖掘、再挖掘(基于1.4,还没有Java5,Java6的许多特性),初遇Ruby,觉得十分亲切,仿佛童年时得到一个新奇的玩具。
把玩之后,才发现玩具的塑料外壳里,藏着一把瑞士军刀。
自此,模式、框架常常变得多余,很多时候可以更直接。
好比在量子时代,星际航行只是一次时空转换而已,航天飞机静静地躺在博物馆里,那是旧时代科学的极致代表。
从物理课本中,我们感受到爱因斯坦的伟大,但对牛顿则怀以更加崇敬的心情。
身体终将消逝,而你,我,他——我们的意识却将在网络中延续。
Ruby编程技术实战指南

Ruby编程技术实战指南随着互联网的快速发展,编程技术成为了越来越多人关注的话题。
而在编程语言中,Ruby因其简洁、灵活和易读性而备受推崇。
本文将为读者提供一份Ruby编程技术实战指南,帮助初学者快速入门并掌握Ruby编程的基础知识和实践技巧。
一、Ruby的基本语法和数据类型Ruby是一种面向对象的编程语言,其基本语法与其他编程语言相似,但又有其独特之处。
在Ruby中,变量的声明无需指定类型,可以根据赋值的内容自动推断。
同时,Ruby提供了丰富的数据类型,包括整数、浮点数、字符串、数组、哈希等,使得编程变得更加灵活。
二、Ruby中的控制流程控制流程是编程中非常重要的一部分,它决定了程序的执行顺序。
在Ruby中,我们可以使用条件语句(if-else语句、case语句)、循环语句(while循环、for循环)以及异常处理语句等来控制程序的流程。
这些语句的灵活运用可以使程序更加高效和可靠。
三、Ruby中的函数和模块函数是编程中的重要概念,它可以将一段代码封装起来,实现代码的复用和模块化。
在Ruby中,我们可以使用def关键字定义函数,并通过参数传递数据。
另外,Ruby还提供了模块的概念,可以将相关的函数和常量组织在一起,提高代码的可读性和可维护性。
四、Ruby中的面向对象编程Ruby是一种纯粹的面向对象编程语言,一切皆对象。
在Ruby中,我们可以使用class关键字定义类,并通过实例化对象来调用类中的方法。
Ruby还支持继承、多态和封装等面向对象的特性,使得程序的设计更加灵活和可扩展。
五、Ruby中的文件操作和异常处理文件操作是编程中常见的任务之一,Ruby提供了丰富的文件操作方法,如打开文件、读写文件、关闭文件等。
同时,Ruby也提供了异常处理机制,可以捕获和处理程序中可能出现的异常,保证程序的稳定性和可靠性。
六、Ruby中的网络编程随着互联网的普及,网络编程成为了越来越重要的技能。
Ruby提供了Socket 库,可以实现网络通信的功能。
快速上手使用Ruby进行Web开发

快速上手使用Ruby进行Web开发第一章:引言Ruby是一种简单、灵活且高效的编程语言,尤其适用于Web开发。
本文将介绍如何快速上手使用Ruby进行Web开发。
我们将分为以下几个章节逐步展开。
第二章:环境设置为了开始使用Ruby进行Web开发,我们首先需要设置开发环境。
请按照以下步骤进行操作:1. 下载和安装Ruby解释器:在Ruby官方网站上下载最新版本的Ruby解释器,并按照安装指南进行安装。
2. 安装RubyGems:RubyGems是Ruby的软件包管理器,它可以帮助我们方便地安装和管理Ruby库。
在命令行中运行`gem install rubygems`进行安装。
3. 安装Bundler:Bundler是一个用于管理项目依赖关系的工具。
在命令行中运行`gem install bundler`进行安装。
第三章:Web框架Ruby有许多流行的Web框架可供选择,比如Ruby on Rails和Sinatra。
这些框架可以帮助我们快速构建Web应用程序。
在本章中,我们将选择其中一个框架来进行介绍。
我们将以Ruby on Rails为例。
Rails是一个基于MVC(Model-View-Controller)架构的高效Web开发框架。
以下是使用Rails进行Web开发的基本步骤:1. 创建一个新的Rails应用程序:在命令行中运行`rails new myapp`,其中`myapp`是你的应用程序名称。
2. 定义数据模型:使用Rails的生成器命令来创建数据库表格和模型类。
例如,运行`rails generate model User name:string email:string`将创建一个用户模型。
3. 设计和实现控制器:使用控制器来处理请求并决定如何响应。
运行`rails generate controller Welcome index`将创建一个欢迎页面的控制器。
4. 创建视图:视图是用户界面的一部分,它用于展示数据和接受用户输入。
ruby 教程

ruby 教程Ruby 是一种动态、面向对象的编程语言。
它的设计哲学之一是“程序员的幸福感”。
本教程将带你由浅入深地了解 Ruby 的基本语法和常用功能。
首先,让我们来讨论 Ruby 的变量。
在 Ruby 中,你可以直接声明变量并赋值,无需显式地标明变量的类型。
例如,你可以这样声明一个变量并赋值:```rubyname = "Ruby"```Ruby 还有一些内置的数据类型,比如字符串、数值和数组。
字符串可以使用单引号或双引号来表示。
数值可以是整数或浮点数。
数组是一个有序集合,可以存储多个元素。
```rubymessage = 'Hello, world!'count = 10prices = [9.99, 10.99, 5.99]```Ruby 还有一些常用的控制结构,比如条件语句和循环语句。
条件语句使你能够根据不同的条件执行不同的代码块。
```rubyif count > 0puts "The count is positive."elsif count < 0puts "The count is negative."elseputs "The count is zero."end```循环语句允许你重复执行一段代码。
Ruby 提供了多种循环语句的选择,比如 `while`、`for` 和 `each`。
```rubywhile count > 0puts countcount -= 1endfor i in 1..5puts iendprices.each do |price|puts priceend```除了内置的功能,Ruby 还可以使用各种类库来扩展其功能。
类库提供了许多现成的功能和工具,使你能够更快地开发程序。
这只是 Ruby 的一小部分基础知识,还有很多其他有趣的功能等待你去探索。
RUBY简要操作

RUBY简要操作Ruby是一种动态、面向对象的编程语言。
它具有简洁的语法、强大的可扩展性和丰富的标准库,被广泛应用于Web开发、数据分析和自动化测试等领域。
本文将从基础操作、控制流、函数和类等方面对Ruby进行简要介绍,帮助初学者快速上手。
一、基础操作1.输出和输入使用puts语句可以输出字符串或变量的值:```rubyputs "Hello, World!"```使用gets方法可以从控制台获取用户的输入:```rubyname = gets.chompputs "Hello, #{name}!"```2.变量和常量Ruby使用变量存储数据,不需要提前声明变量类型:```rubyx=10y=5.5message = "Hello, Ruby!"```Ruby中的常量以大写字母开头,习惯上用全大写表示:```ruby```3.数据类型Ruby中的主要数据类型包括整数(Integer)、浮点数(Float)、字符串(String)、布尔值(Boolean)和数组(Array)等:```rubyx=10y=5.5name = "Ruby"is_true = truearray = [1, 2, 3]```4.数组和哈希数组是有序的元素集合,可以通过索引获取或修改其中的元素:```rubyfruits = ["apple", "banana", "orange"]puts fruits[0] #输出apple```哈希是键值对的集合,可以根据键获取或修改对应的值:```rubystudent = {"name" => "Alice", "age" => 18}puts student["name"] #输出Alice```二、控制流1.条件判断Ruby中的条件判断使用if、elsif和else关键字:```rubyx=10if x > 5puts "x is greater than 5"elsif x == 5puts "x is equal to 5"elseputs "x is less than 5"end```2.循环Ruby中的循环有三种方式:while、for和each。
Ruby编程入门学习使用Ruby语言进行Web开发

Ruby编程入门学习使用Ruby语言进行Web开发Ruby编程入门:使用Ruby语言进行Web开发Ruby作为一门灵活且富有表达力的编程语言,已经在Web开发中崭露头角。
它的简洁和强大功能吸引了许多开发者的注意力。
本文将介绍Ruby编程的基础知识,并演示如何利用Ruby语言进行Web开发。
一、Ruby简介Ruby是由松本行弘(Yukihiro Matsumoto)开发的一种面向对象的编程语言。
它的设计目标是让开发者更加快乐地编写代码,所以它的语法简单直观。
Ruby有一个非常活跃的开源社区,提供了大量的库和框架,使得在Web开发中使用它非常方便。
二、安装Ruby在开始学习Ruby编程之前,需要安装Ruby解释器。
Ruby的官方网站提供了各种操作系统的安装程序,用户只需根据自己的操作系统下载并按照说明进行安装。
三、基本语法1. 变量与数据类型Ruby是动态类型语言,它不需要声明变量类型。
只需简单地给一个变量赋值即可创建它。
Ruby支持多种数据类型,包括整数、浮点数、字符串、数组和哈希等。
2. 条件语句与循环Ruby提供了if语句、unless语句和case语句来实现条件判断。
此外,Ruby还提供了多种循环语句,如while循环、until循环和for循环等。
3. 函数与类Ruby是一种面向对象的编程语言,所以函数在Ruby中被称为方法。
我们可以使用def关键字定义方法,然后通过对象来调用它们。
此外,Ruby还支持类的定义和继承。
四、Ruby on Rails框架Ruby on Rails是一个基于Ruby的开发框架,旨在加快Web应用程序的开发速度。
它遵循“约定优于配置”的原则,提供了一套组织代码和处理请求的规范,从而使开发者能够更快地构建出稳健和可扩展的Web应用。
Rails框架提供了一些核心功能,如数据库管理、路由和模板等。
同时,它还有许多强大的插件和 gem 可供使用,大大简化了开发过程。
五、使用Ruby on Rails开发Web应用1. 创建新的Rails应用在命令行中运行以下命令,将在当前目录下创建一个新的Rails应用。
ruby教程

ruby教程
Ruby教程简介
Ruby是一种开源的、简洁而有趣的动态编程语言。
它具有极
强的可读性和表达能力,对于初学者来说非常友好。
Ruby语
言的设计理念是“简单而不失强大”,它允许开发者以一种优雅的方式表达自己的想法。
Ruby的特点之一是它的面向对象编程能力。
在Ruby中,一切都是对象,并且每个对象可以拥有自己的方法和属性。
这种特性使得Ruby能够非常方便地实现庞大的复杂系统,并能够以
模块化的方式组织代码。
Ruby的语法非常灵活,允许开发者使用各种不同的编程风格。
它支持面向对象编程、函数式编程和元编程等多种范式,使得开发者能够选择最适合自己的方式来解决问题。
Ruby还有一个非常强大的特性是它的标准库。
标准库中包含
了大量的模块和类,提供了各种各样的功能,从文件操作到网络编程,从数据库连接到图形界面等等。
这使得开发者不需要从头开始编写所有功能,而是可以直接使用标准库中提供的模块和类来加速开发过程。
此外,Ruby社区非常活跃,并且有很多优秀的第三方库和框
架可供选择。
无论是开发Web应用、科学计算还是游戏开发,都能找到适合自己的解决方案。
本教程将介绍Ruby语言的基础知识和常用的编程技巧,帮助
读者快速入门并掌握Ruby的核心概念和特性。
通过学习本教程,读者将能够编写出简洁而功能强大的Ruby程序,并能够继续深入学习和探索更高级的主题。
让我们开始学习Ruby吧!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二十分钟教你Ruby快速入门介绍这是一个短小的Ruby入门,完全读完只需20分钟。
这里假设读者已经安装了Ruby,如果你没有安装的话,请在阅读文前访问Ruby官方网站进行下载并安装。
交互式的Ruby打开IRB(交互式Ruby外壳):如果你使用Mac OS X,那么请打开终端窗口输入irb;如果你使用Linux,那么请打开shell输入irb;如果你使用windows,那么请在开始菜单中找到Ruby->fxri,并执行它。
Ok,在打开IRB之后,在其中输入"Hello World"。
Ruby听从你的安排!发生了什么?我们刚才编写了世界上最短小的“Hello World”程序吗?这么说不太确切。
第二行输出是IRB告诉我们:上一个表达式的评估结果。
如果我们希望打印出“Hello World”,那么就还需要一点努力:puts在Ruby中是一个简单的打印输出命令。
后面的“=> nil”表示什么?——那是表达式的结果。
Puts总是返回nil,这是Ruby中表示“绝对无值”(absolutely-positively-nothing value)的方式,看上去有些类似Java中的null。
你的免费计算器在这里!无需做什么,我们就能把IRB作为一个简单的计算器使用:这样就能计算3+2。
够简单的!那么3乘以2如何?你可以在下面继续输入3*2,也可以回到上面(3+2处)重新修改你刚刚输入的计算公式。
使用键盘上的向上键,使光标到达3+2那一行,再用左键移动光标到加号上,然后使用空格键进行修改。
下面,让我们尝试计算3的平方:在Ruby语言中,**表示幂运算。
那么如何计算平方根呢?Ok,等一下,表达式中的sqrt(9)表示什么?你一定能猜到这是计算9的平方根。
而Math表示什么?不要着急,下面就让我们进一步了解像Math这样的模块。
模块——按照主题分组的代码Math是Ruby内建的数学模块。
在Ruby中,模块提供了两种角色:一种角色是将类似的方法聚集在同一个“家族”名下。
因此,Math也包括sin、tan这样的方法。
第二种角色是一个圆点(dot),它标记了消息的接收者。
什么是消息?在上面的例子中,sqrt(9)便是消息,它意味着调用sqrt方法取出9的平方根。
Sqrt方法调用的结果是3.0。
你可能注意到它并不是3。
这是因为多数情况下,数字的平方根并不是整数,所以这里返回了一个浮点数。
那么我们如何记住这些计算结果呢?——将结果赋值给变量。
如何定义方法?如何才能方便省事地随意输出字符串,而无需过多地劳烦我们的手指呢?——我们需要定义一个方法!上面的代码中第一行“def h”标志着方法定义的开始。
它告诉Ruby我们正在定义一个名为h的方法。
下面一行是方法体:puts "Hello World"。
最后,也就是第三行“end”通知Ruby我们完成了方法定义。
Ruby的回应“=> nil”告诉我们它已经知道我们定义了此方法。
简短、重复地调用方法现在,让我们尝试多次执行这个方法:哈,这太容易了。
在Ruby中调用某个方法只需将方法名提交给Ruby。
当然,这是在方法没有参数的情况下。
如果你愿意也可以添加一个空白的括号,但是这没有必要。
如果我们想对某个人说hello而不是整个“世界”(world),那该怎么做?——重定义h方法使它接收name参数。
嗯,现在看来工作正常。
字符串中的奥秘“#{name}”是什么意思?这是Ruby在某个字符串中插入其它字符的方式。
在大括号之间放入的字符串(这里是指name)将被外部的字符串代替。
你也可以使用字符串类内建的capitalize方法来确保某人名字的首字母大写:上面的代码有两个地方需要说明:第一,我们通过无括号的方式调用方法,因为括号是可选的;第二,这里的默认参数值为“World”。
也就是说在调用方法时如果没有提供name 参数,则使用默认值“World”。
进化为Greeter!我们是否需要一个真正的问候者(greeter),他能记住你的名字、问候你、总是尊重地向你示好?那么这就最好建立一个“Greeter”类:在上面的类代码中定义了一个称为Greeter的类和一些类方法,其中出现了一些新的“关键词”:请注意“@name”,它是类的实例变量,并对类中的所有方法(say_hi和say_bye方法)都有效。
如何让Greeter类发挥作用?现在让我们来建立一个Greeter对象并使用它!Greeter类的实例对象g被建立后,它便接受了name参数(值为Pat)。
那么我们能直接访问name吗?看看上面的编译错误来看,这样直接访问name是行不通的。
窥视对象的内部对象中的实例变量总是隐藏于其中,但也并非毫无踪迹可寻,通过审查(inspect)对象便会见到它们。
当然还有其它的访问方法,但是Ruby采用了良好的面向对象的方式来保持数据的隐藏性。
喔!这么多方法,可是我们只定义了两个方法呀?其它的方法又出自何处?不要担心,instance_methods方法列出了Greeter对象的所有方法,其中包括父类中定义的方法。
如果我们只想对Greeter类的方法进行列表的话,那么把false作为参数调用instance_methods方法即可。
false意味着我们不需要父类定义的方法。
哈哈,这才是我们想要的。
下面让我们看看Greeter对象能回应哪些方法:它知道say_hi、to_s(此方法将对象转换为字符串,是任何对象都必备的默认方法,很想Java中的toString方法),但它不知道name。
随时修改类定义如何才能查看或者修改name呢?Ruby提供了访问对象变量的简单方法:在Ruby语言中,你能够多次打开某个类并修改它。
而修改所带来的变化将应用在此后建立的任何新对象中、甚至现存的此类对象中。
下面让我们建立一个新对象并访问它的@name属性。
我们通过使用attr_accessor定义了两个方法:“.name”用来获取name属性值;“.name=”用来设置namee属性值。
这很类似在Java类中访问被Public修饰的成员变量。
向每个人问候,MegaGreeter不会漏掉一个人Greeter并不完美,因为它只能一次服务一个人。
所以我们在这里设计一个能够一次向全世界、世界上每个人或者在名单中的人发送问候的MegaGreeter类。
在这里,我们将放弃从前的IRB交互模式,转而改为编写Ruby程序文件。
退出IRB的方法:输入“quit”、“exit”或者按下Control+D的组合键。
保存上面的代码到名为“ri20min.rb”的文件中,并使用“ruby ri20min.rb”的命令执行它。
程序输出如下:下面我们将深入了解一下上面的代码。
请注意上面代码中的起始行,它以#开头。
在Ruby语言中,任何以#开头的行都被视为注释,并被解释程序忽略。
我们的say_hi方法已经发生了变化:它查找@names参数并按照其参数值作出决定:如果参数值为nil,它将打印三个圆点。
那么@names.respond_to?("each")表示什么?循环——也叫迭代如果@names对象具有each方法,那么它是可以被迭代的,进而可以对其进行迭代,从而问候列表中每个人。
如果@names不具备each方法,则将它自动转换为字符串,并执行默认的问候。
each是一种方法,它接受一个代码块(block of code),然后针对列表中的每个成员执行这个代码块,而在do和end之间的部分便是这个非常类似匿名函数的代码块。
在管道符之间的变量是代码块的参数name,它作为代码块参数被绑定为列表成员,而代码块puts "Hello #{name}!"将使用这个参数进行输出。
大多数其它的编程语言使用循环遍历列表,下面是C语言的循环示例:上面的代码显然可以工作,但它不够“优雅”!你不得不用i这个多余的循环变量,还需要指出列表的长度,然后再解释如何遍历列表。
Ruby的迭代方式则更加优雅,所有的内部管理细节都隐藏在each方法中,你所需做的就是告诉它如何处理其中的每个成员。
块(block),Ruby边缘的高亮点!块(block)的真正优势在于:能够处理比列表更加复杂的对象。
除了在方法中可以处理简单的内部管理细节外,你还能处理setup、teardown和所有错误,而不让用户有所察觉。
say_bye方法没有使用each,而是检查@names是否具有join方法,如果具有join 方法,则调用join方法。
否则它将直接打印@names变量。
此方法并不关心变量的实际类型,这依赖于它所支持的那些被称为“Duck Typing”的方法:duck typing是动态类型的一种形式:变量的值自身隐含地决定了了变量的行为。
这暗示了某个对象与其它实现了相同接口的对象之间是可交换的,不管对象之间是否具有继承关系。
鸭子测试(duck test)是对duck typing的一种形象比喻——“如果它走路像鸭子,那么也一定像鸭子一样呷呷地叫,那么它必定是一只鸭子”。
duck typing是某些编程语言的特性:如Smalltalk, Python, Ruby, ColdFusion。
Duck Typing的益处是无需对变量的类型进行严格地限制,如果某人使用一种新类型的列表类,只要它实现了与其它列表相同语义的join方法,便可以拿来使用。
启动脚本文件上半部分是MegaGreeter类的代码,而后面剩下的部分则是对这些类方法的调用。
而这是我们最后值得注意的一点:__FILE__是一个“具有魔力”的变量,它代表了当前文件名。
$0是用于启动程序的文件名。
那么代码“if __FILE__ == $0”便意味着检查此文件是否为将被使用的主程序文件。
这样做可以使程序文件作为代码库使用,而不是可执行代码;但当此文件被用作执行文件时,也可被执行。
如何进一步学习Ruby到此便是本入门的尾声了。
当然还有许多值得浏览的:Ruby提供的各种不同的控制结构;块和yield的使用;模块作为mixins使用等。
希望这次Ruby初体验能使你对Ruby更感兴趣。
注:mixin在面向对象编程语言中是一种提供某些功能给子类继承的类,但mixin 并不能实例化。
从某个mixin继承并不是什么特殊的形式,而它更适于收集功能。
某个子类甚至可以通过继承一个或者多个mixin选择继承它的全部或者多数功能。
一个mixin能延期定义和绑定方法直到运行时,而属性和实例参数也将在编译时才被定义。
这不同于多数常见的方式:定义所有的属性、方法,并在编译时进行初始化。