Rails 如何理解《tutorial》中的一段代码

runup · 2014年07月19日 · 最后由 runup 回复于 2014年07月20日 · 2627 次阅读

代码如下:

def User.new_remember_token
  SecureRandom.urlsafe_base64
end

def User.hash(token)
  Digest::SHA1.hexdigest(token.to_s)
end

问题如下: 熟悉《ruby on rails tutorial》应该知道这是教程中用户登录部分的代码,其中两个类方法分别为生成随机的长度为 16 的随机字符串和对字符串进行加密。 我的问题如下: 1,如何区分 ruby 文档中那些是类,那些是方法? 2,ruby 文档中核心库和标准库的区别在哪里?标准库应该是对核心库的补充,他们在使用的时候是否有区别。 3,如 tutorial 所说,SecureRandom 是模块,那么调用模块中的方法直接可以使用模块名。方法名 这种形式么? 4,Digest::SHA1.hexdigest 是否表示的是模块名 | 类名 | 方法名,就是说 Digest 这个模块中包括 SHA1 这个类。如【http://www.cnblogs.com/cnblogsfans/archive/2009/02/10/1387821.html】最后一条模块和类可以互相嵌套。

问题描述如下: 1:我查了 ruby 的 api,发现 SecureRandom 是 ruby 的标准库,见【http://www.ruby-doc.org/stdlib-2.0.0/libdoc/securerandom/rdoc/index.htmltutorail》中的表述为SecureRandom是一个模块,那么如何在API的文档中分辨出那些是ruby自定义的类或者自定义的模块,我在文档中看不出什么区别。在给出网页中左边显示的是类名,右边显示的是方法名。】,《 2:查阅了 ruby 的 api 文档【http://www.ruby-doc.org/stdlib-2.0.0/libdoc/digest/rdoc/index.htmlclass中存在Digest::SHA1】左边的 形式的 Class,是否就是说这是一个模块名加上类名的形式的类。

各种新手问题,多拍砖,计划看完 tutorial,再看大本的语法书。谢谢各位。

按照 Ruby 命名惯例,类名均为常量,即首字母大写。方法名为 symbol,所以一般都小写。 核心库不需要 require,标准库需要 require Ruby 是面向对象的语言,对于 Ruby 来说所有的都是对象,Class 的 superclass 就是 Module,所以当然可以这样引用,不过在于你的方法是怎么定义的,是模块方法,还是实例方法。 理论上怎么嵌套都可以,甚至可以在方法里声明类,但是最好不要,除非非常必要。

#1 楼 @fake_whythelukystiff 非常感谢,你是参考哪些文档作出结论的呢?

建议学习 ruby 的话,推荐几本书,Ruby 基础(松本行宏)、Ruby 元编程、Ruby 最佳实践 Rails 入门的话推荐http://railstutorial.org/, 还有官方的 tutorial,目前有中文版了 railscasts.com

#3 楼 @fake_whythelukystiff 感谢,您是专门做 rails 开发的么?

#4 楼 @runup 你看过镐头书或双飞燕么?这些基础的概念书里都有讲。哪怕你不想一页一页读完这些大块头,最好也常备一本在手边,一旦遇到问题及时翻阅,可以省去你不少时间。上网来问问题,最好不要问这些稍微一查就可以获得答案的问题,倒不是苛求初学者,而是这个查阅的过程获得的知识远比别人总结好摆在你面前要来的更多、更深入。

#5 楼 @nightire 谢谢前辈提醒!

#5 楼 @nightire 顺带问下,双飞燕是指那一本书?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号