开始新篇章目的和计划
随着笔者逐步完成毕业设计,一个念头逐渐在心里萌发,那便是学好Ruby基础。因为在完成毕业设计的时候,大多时间会花在如何解决问题上,或者说用已经知道的知识完成未知的问题上,而当初学习Ruby on rails时并没有打好Ruby的基础,所以我感到自己必须花时间好好夯实基础,才能写出更高效的代码。当然,更重要的是笔者面临面试的挑战,系统性的学习一门语言能够对未来找到一份合适的工作有不小的帮助,因此决定开始新的篇章。
本次学习为期一到两周,第一天从总体上看一下自己的ruby知识薄弱之处,再通读《Ruby原理剖析》和《Ruby元编程》进阶。
本次学习资料
https://sg552.gitbooks.io/happy_book_rails/content/part3_rails_premier/ruby_premier.html
通过学习此教程对ruby知识的概括,大致了解一下自己薄弱之处,并通过查阅资料学习。
类
Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句。
ruby的类在定义变量时极其方便,与java不同
class Apple
# 这一句,自动声明了 @color, getter,setter
attr_accessor :color
end
Symbol
前面的apple.rb例子中:color 就是Symbol,它是不会变化的字符串
Symbol 是一个 object,但是他可以用 number 表示也可以用 string 表示,多数情况下 Symbol 是作为一个字符串展现的。 你可以用to_i方法将 symbol 转为 integer,也可以用to_s将 symbol 转为 string。 对一个 Symbol 的多次引用用的是同一个 Object,因此 Symbol 会节省内存。
Symbol 被用作来传递字符串信息,但是一般这些字符串在运行时是不会发生改变的,同时这些字符串也不需要 String 类的方法。 多数情况下你可以用字符串代替 Symbol,但是字符串会占用更多内存,可读性相比差一些。 当然当你强制一个字符串在运行期间不许改变的时候只能用 Symbol,不能用 String 代替。
因此在Ruby on rails 中常被用来描述类或类变量,比如:
attr_accessible :sys_user_id,:title
belongs_to :sys_user
Sting 和 Symbol 的不同: 每个 String 对象都是不同的,即便他们包含了相同的字符串内容;而对于 Symbol 对象,一个名字(字符串内容)唯一确定一个 Symbol 对象。
变量
类变量: class variable, 例如: @@name, 作用域:所有的多个instance 会共享这个变量. 用的很少.
实例变量 instance variable, 例如: @color, 作用域仅在instance之内
普通变量: local variable, 例如: age = 20, 作用域仅在 某个方法内.
全局变量: global variable, 例如:$name = “Jim”, 作用域在全局. 用的更少.
Hash
举个项目中的例子:
@projects << {
:id => project.id,
:title => project.highlight.title,
:institution => project.institution,
:type => project._source.type,
:level => project.level,
:state => project.state,
:stars => project.stars,
:create_date => project.create_date,
:start_date => project.start_date,
:end_date => project.end_date,
:url => project.url,
:source => project.source
}
::双冒号
表示 class的 常量 也表示 某个命名空间
class Interface
class Apple
COLOR = 'red'
end
end
puts Interface::Apple::COLOR
rails中:
app/controller/interface/apples_controller的话:
class Interface::ApplesController < ApplicationController::Base
## 其他代码
end
block, proc, lambda
self
在ruby中,self表示当前作用域的 method caller. 可以认为是调用方法的对象。例如:
temp_string = '1,2,3'
# 下面的`temp_string`就是一个caller
temp_string.split ','
为了方便记忆,只要见到a.b() 这个形式,就可以说 a 就是 “method caller”, 在方法b中, self就指代"a", 例如,下面的例子,我们可以把self打印出来:
class Apple
def print_self
puts self.inspect
end
end
Apple.new.print_self
# => #<Apple:0x00000001f0dad8>
上面的 #Apple:0x00000001f0dad8就是 Apple.new 出来的实例.