- require,load用于包含文件;include,extend则用于包含模块
require加载文件一次,load加载文件多次
require加载文件时可以不加后缀名,load加载文件时必须加后缀名
require一般情况下用于加载库文件,而load用于加载配置文件
- ruby 只支持单层继承,但可以通过max-in模块来实现类似于多层继承的功能
- ruby可以给具体实力对象添加方法,我们称之为单例方法(变量也一样)
- 常量定义在类和模块中,不能定义在方法中,类或者模块外访问常量,需要使用::
- ruby只能重写方法,不能重载方法
- ruby中判断某对象是否有某方法直接使用respond_to?(),如 respond_to?(:to_str),而不是使用is_a?(String)
- ruby的模块功能非常强大,能动态的继承方法,动态载入代码;并且,ruby还为模块提供了生命周期的hook(included 和 append_features)
- 类主体不是专用的,比如validates_presence_of :attrs 可以放在类的任何地方
- 区块和lambda表达式,能让不同的code 在同一语境下执行,非常强大
- boolean表达式使用 && || , 控制流程control flow 使用 and, or
- 如果只有单行的if ... end ,直接使用 code here if expressions 或者 some_conditions and codes
- 不要使用 unless ... else ... end , 使用 if ... else ...end 代替
- 类定义中使用 attr_reader 和 attr_write 等dsl语言
- single-line的 each 应该使用 { ... }, 如 [1 , 2 , 3].each { |x| puts x }, 不要使用 do ... end
- 不要使用for in 等语句,使用 each 代替
- 不要写 return , 如何可以避免
- 注释 TODO: 功能需要补充 OPTIMIZE: 表明此处代码有可能引起性能问题 FIXME: 提醒升级代码时应该注意此处code HACK:代码需要重构 REVIEW: 代码修改,都需要确认是否运行
- 给Class重写to_s方法
- 不要拼接字符串,要使用"#{}"
- 如果字符串中没有特殊字符串,则使用 '', 不要使用 ""
- 对象变量,不要使用{} , 如下面定义的to_s方法
def to_s "#@attr_one #@attr_two" end
- 使用String#<< 代替 String#+
- 使用%w
STATES = %w(draft open closed)
- %() 用于需要""的字符串,否则,最好使用"" , '', 如下是%()的应用场景
%(<tr><td class="name">#{name}</td>)
- %r()与//的正则表达式选择的关系,也同上理,多个//应该选择%r(),否则,尽量使用//
- 使用类变量代替全局变量
- rails 安全的方法之一
class PostsController < ActionController::Base def create Post.create(post_params) end def update Post.find(params[:id]).update_attributes!(post_params) end private def post_params params[:post].slice(:title, :content) end end
ruby的特性-如何写出专业的ruby代码
最新推荐文章于 2024-07-15 14:50:41 发布