今天…闲来无事,去看了一下Ruby,因为Octopress是用Ruby写的,有必要学习一下Ruby。
直接到官网上去,发现Ruby非常友好,最下方有中文版本的选择,不过感觉翻译的有点蹩脚,还是直接看英文吧。首页右边有常用的几个入口,比如下载,二十分钟学习ruby,在浏览器里尝试Ruby(这个页面非常有爱,见下图)
很认真的花了20分钟看了二十分钟学习ruby,对Ruby算是有了一定的认识,总结一下:
Interactive Ruby
翻译成中文应该是可交互的Ruby,其实是可以让你在终端中执行ruby的程序,在Mac下直接在终端中输入irb
就行了。然后尽情的尝试吧。
控制台信息输出
就是所谓的print
之类的方法,在Ruby中是puts
:
1 2 |
|
基本的简单语法
- nil: 指的是Ruby中的空值
- 简单的计算:
1 2 3 4 |
|
- 变量赋值:Ruby中的变量不需要声明
1 2 3 |
|
- 调用方法: 调用方法和传参的方式比较随意,下面几种都可以。如果方法不需要参数,则括号可加可不加。
1 2 3 4 |
|
- 字符串只能用双引号
定义方法
先看例子:
1 2 3 |
|
上面的例子定义了一个叫h
的方法,该方法输出hello world
。用def
来表示一个方法定义的开始,end
来表示定义的结束。其中hello #{name}
和js中的模板引擎语法类似,其中的name可以调用自己的方法,比如需要让输出首字母大写,可以修改为hello #{name.capitalize}
类
类的定义
先看例子:
1 2 3 4 5 6 7 8 9 10 11 |
|
类的定义由class
关键字来声明,然后在end
之前可以定义各种方法。上面的例子中initialize
为构造函数,@name
为定义的私有属性。注意到类中的方法都可以直接利用@name
来访问该属性。
实例化
结合上面的代码和下面的代码,可知name
无法直接访问,下面的例子由于访问name
而报错:
1 2 3 4 5 |
|
判断类实例是否具有某方法
其实class
定义的类本身已经继承了很多方法,我们可以通过下面的两种方式来查看:
1 2 |
|
上面输出了类Greeter
拥有的全部方法,我们也可以通过给instance_methods
传递false
来指定只显示自己定义的方法:
1 2 |
|
我们可以使用respond_to?
(函数名可以直接用?有木有!)来检查一个实例对象是否具有某个方法:
1 2 3 4 |
|
类的动态特性
在类已经定义完成后,我们还可以继续对类进行修改:
1 2 3 |
|
上面代码对class进行了修改,使得name
可以被访问,注意上面的代码并未覆盖原有定义,而是增加了定义。并且这些修改将马上在新的实例化对象和已经实例化的对象身上起作用。
1 2 3 4 5 |
|
从上面的例子来看,似乎name
已经从私有变成了公共可被外部访问了(不知道ruby里面是否存在这样的术语)。但是真的是这样么?我们继续看:
1 2 3 4 |
|
可以看到,其实通过attr_accessor
的定义,不是将name变成所谓的公有属性
,而是添加了该属性的getter
和setter
,完全可以用下面的方式来写:
1 2 3 4 |
|
另外从构造函数中的@name=name
一句可以看到,Ruby的属性是可以动态添加的。
上面就是教程的大体内容。有时间继续学习~