新手问题 Rails 里面的 model 都是继承自 ActiveRecord::Base,请问中间的: : 是干什么用的

ThanksSirAlec · 2017年12月21日 · 最后由 ceclinux-github 回复于 2017年12月25日 · 1427 次阅读

有时候会看到一些定义 class 的代码类似

class Somename::name < ActiveRecord::Base

定义时候的::又是干什么用的

定义的时候是简写

module ActiveRecord
  class Base
  end
end

用的时候是调用常量 ActiveRecord::Base

winse 回复

问一下自己定义类的时候 Somename::name 中间的双冒号是干什么用的,比如 model 文件夹下面一个 Somename 文件夹里面一个 name.rb 就会用

class Somename::name < ActiveRecord::Base

是不是就是说 rails 默认 models 文件夹下面的每个文件夹都是一个 module,不用再去定义

class TwelveDaysSong
end

a = TwelveDaysSong.new
#I could wrote it like this too
a = ::TwelveDaysSong.new 

module Twelve
  class TwelveDaysSongs
  end
end

b = Twelve::TwelveDaysSong.new
#b is not equal to 
a = ::TwelveDaysSong.new
#neither
a = TwelveDaysSong.new

源链接:https://stackoverflow.com/questions/25829184/what-does-mean-in-ruby-syntax?answertab=oldest#tab-top

ThanksSirAlec 回复

项目中那么写是为了符合 Rails 的自动加载约定吧,只要你的文件处于autoload_paths下面,Rails 就会按照约定去加载对应的类、class Somename::Name对应的目录结构就是 somename/name.rb,

命名空间的分隔符

google 'ruby double colons'

单单从 ruby 的角度去考虑没问题啊,但是放到 rails 里面一大堆的就想不明白了,不知道 rails 是怎么去加载这些东西的

命名空间

这是 ruby 里的好像叫 常量查找符来着

ThanksSirAlec 回复

这个几句话说不清,你可以看 Ruby 元编程,后面专门有一章讲 ActiveRecord::Base

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