2011-06-07 93 views
2

可能重复:
Why are exclamation marks used in Ruby methods?感叹号在轨道上的红宝石中的变量意味着什么?

我读教程Rails3中使用MongoDB的

http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails

,我看到这个 键:USER_ID,OBJECTID 时间戳! 感叹号是什么意思?

谢谢。

class Story 
    include MongoMapper::Document 

    key :title,  String 
    key :url,  String 
    key :slug,  String 
    key :voters, Array 
    key :votes,  Integer, :default => 0 
    key :relevance, Integer, :default => 0 

    # Cached values. 
    key :comment_count, Integer, :default => 0 
    key :username,  String 

    # Note this: ids are of class ObjectId. 
    key :user_id, ObjectId 
    timestamps! 

    # Relationships. 
    belongs_to :user 

    # Validations. 
    validates_presence_of :title, :url, :user_id 
end 
+0

这被标记为“excel”和“syncfusion”...为什么? – 2011-06-07 04:25:11

+0

如果有人想知道什么时间戳!是为: http://mongomapper.com/documentation/plugins/timestamps.html – dsims 2012-05-26 04:03:43

回答

0

一般来说,当'bang'遵循Ruby中的方法时,它将改变源。

例如检查出下面的输出:

irb(main):007:0> x = 'string' 
=> "string" 
irb(main):008:0> x 
=> "string" 
irb(main):009:0> x.capitalize 
=> "String" 
irb(main):010:0> x 
=> "string" 
irb(main):011:0> x.capitalize! 
=> "String" 
irb(main):012:0> x 
=> "String" 

x.capitalize返回 “字符串”,但变量x仍然小写。当我添加! ('bang')到最后var x被修改。

我对mongodb并不是很熟悉,但这可能会让我们对红宝石爆炸的目的有所了解。

+1

这里只是一个注释,用于破坏性方法(即改变源代码)的爆炸仅仅是一个约定 - 而且Ruby已经满了的公约。 – Chubas 2011-06-07 15:40:25

+0

谢谢,我是一个全新的红宝石,但我喜欢这个问题。所以昨晚我花了一些时间,知道这个话题可能会被关闭。感谢您解决这个问题! +1 – matchew 2011-06-07 15:46:15