论坛首页 入门技术论坛

啊啊啊,ruby语法真调皮啊。作为中青年程序员,ruby初学者,哥倍感压力啊。

浏览 4202 次
精华帖 (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真是个好小伙,刚才有菜鸟问题请教他,他不但耐心回答,还写了实例代码。真是好心人啊。
   发表时间:2011-01-11  
:name 不比 "name" 写起来效率高点?少一个字符呢
0 请登录后投票
   发表时间:2011-01-11  
除了这个区别以外,效果都一样吗?

我还看到:name=>"abc"

我勒个去的,请教LS的兄弟,这个=>又是什么?
0 请登录后投票
   发表时间:2011-01-11   最后修改:2011-01-11
ruby里string可变
:name 就是一个不可变的string

建议你先看看ruby的入门书

http://www.troubleshooters.com/codecorn/ruby/symbols.htm
0 请登录后投票
   发表时间:2011-01-11  
LS的都说错了。
关于引入Symbol,应该
是1.6左右的事情把,如果我没记错的话,
当时的原因是,ruby内部的实现,大部分方法
的dispatch和查找需要优化,所以需要把字符串
变成数字来查找,
打个比方,一个Object,有几层派生类,很大的继承
体系,method表很大(反正我们知道Object,Kernel啥的
方法都很多),这也正常了。
  然后在这种情况下,查找方法,如果仅仅用String的比较
来查找,效率就会非常慢。(所谓查找方法,就是比如someObj.methoda
这样的方法dispatch)
0 请登录后投票
   发表时间: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这样的表达式。
0 请登录后投票
   发表时间:2011-01-12  
我正在看入门书,那个画个大镐头的。

你们不用投新手了吧,我标题都已经说了是初学者
0 请登录后投票
   发表时间:2011-01-12  
femto:谢谢!
0 请登录后投票
   发表时间:2011-01-12  
理解 Ruby Symbol
http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/index.html
0 请登录后投票
   发表时间:2011-01-12  
个人就是直接当成变量或者引用使用。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics