有时候会看到一些定义 class 的代码类似
class Somename::name < ActiveRecord::Base
定义时候的::又是干什么用的
问一下自己定义类的时候 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
项目中那么写是为了符合 Rails 的自动加载约定吧,只要你的文件处于autoload_paths
下面,Rails 就会按照约定去加载对应的类、class Somename::Name
对应的目录结构就是 somename/name.rb,
单单从 ruby 的角度去考虑没问题啊,但是放到 rails 里面一大堆的就想不明白了,不知道 rails 是怎么去加载这些东西的
这个几句话说不清,你可以看 Ruby 元编程,后面专门有一章讲 ActiveRecord::Base