精华帖 (0) :: 良好帖 (15) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-11
def self.up create_table :orders do |t| t.string :name t.text :address t.string :email t.string :pay_type, :limit => 10 t.timestamps end end 诶。。。看这意思好像":name"、":address"是参数吧?怎么要多个:呢,我看别的地方又没有:。略感纠结。 PS:NS真是个好小伙,刚才有菜鸟问题请教他,他不但耐心回答,还写了实例代码。真是好心人啊。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-11
:name 不比 "name" 写起来效率高点?少一个字符呢
|
|
返回顶楼 | |
发表时间:2011-01-11
除了这个区别以外,效果都一样吗?
我还看到:name=>"abc" 我勒个去的,请教LS的兄弟,这个=>又是什么? |
|
返回顶楼 | |
发表时间:2011-01-11
最后修改:2011-01-11
ruby里string可变
:name 就是一个不可变的string 建议你先看看ruby的入门书 http://www.troubleshooters.com/codecorn/ruby/symbols.htm |
|
返回顶楼 | |
发表时间:2011-01-11
LS的都说错了。
关于引入Symbol,应该 是1.6左右的事情把,如果我没记错的话, 当时的原因是,ruby内部的实现,大部分方法 的dispatch和查找需要优化,所以需要把字符串 变成数字来查找, 打个比方,一个Object,有几层派生类,很大的继承 体系,method表很大(反正我们知道Object,Kernel啥的 方法都很多),这也正常了。 然后在这种情况下,查找方法,如果仅仅用String的比较 来查找,效率就会非常慢。(所谓查找方法,就是比如someObj.methoda 这样的方法dispatch) |
|
返回顶楼 | |
发表时间:2011-01-11
但是,如果把method name先变成固定的数字
(我们打个比方,碰到头一个字符串,我们记录他 ID为1,碰到第二个不同的字符串,我们记录他ID为2, 这样以后在ruby kernel的实现里头,大部分地方 函数调用传来传去的时候,需要比较的仅仅是ID,也就是数字。 性能优化了不少。所以String会有个intern方法, (顺带一提的是,其他语言也有相应的查找method的方法, 比如C++的实现是查找虚函数表,java类似C++,因为方法表slot, 因为有编译步骤,而且是静态类型的,someObj.method1一定知道 是到方法表第几个slot去调用的。(编译的时候就知道了) 但是Ruby不行,someObj.method1,你鬼知道someObj是什么类型的 子类啊。 这是虚拟机里头的一个优化,易卡螺丝君发的那个链接说的比较简单, 而且是从外围说的,至于说的什么优化,性能,根本没那必要,到你调用 ruby语言的层级,根本不重要。 然后随着时间的推移,1.8这个东西慢慢演变成了一个Symbol类。但是最早也 只是那个ID的简单wrap而已,不等于概念上再多出什么东西。然后到了1.8,1.9 这个ruby更成熟的时候,Symbol类慢慢发展成自己独立的类,也加入更多的概念和 方法,使之变成更加独立的一个类,Symbol就是Symbol。 至于DHH写Rails时候,用symbol作为很多地方,像名称地方用symbol,当时只是 一个习惯,DHH先习惯采用了,以后就流传开了,大家都这样用。 ps, 那个=>是hash里头key=>value这样的表达式。 |
|
返回顶楼 | |
发表时间:2011-01-12
我正在看入门书,那个画个大镐头的。
你们不用投新手了吧,我标题都已经说了是初学者 |
|
返回顶楼 | |
发表时间:2011-01-12
femto:谢谢!
|
|
返回顶楼 | |
发表时间:2011-01-12
理解 Ruby Symbol
http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/index.html |
|
返回顶楼 | |
发表时间:2011-01-12
个人就是直接当成变量或者引用使用。
|
|
返回顶楼 | |