Declaring a class within a module
测量工作代码(在一个名为Surveyor的模块中,不能少),试图理解它。 我跑过这个包含模块中的类的部分。 这和包含模块一样吗? 如果没有,这样做有什么好处? 谢谢。 (奖励要点:为什么我们将自己附加到课堂上,是不是已经隐含了?)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | module Surveyor class Common RAND_CHARS = [('a'..'z'), ('A'..'Z'), (0..9)].map{|r| r.to_a}.flatten.join OPERATORS = %w(== != < > <= >= =~) class << self def make_tiny_code(len = 10) if RUBY_VERSION <"1.8.7" (1..len).to_a.map{|i| RAND_CHARS[rand(RAND_CHARS.size), 1] }.join else len.times.map{|i| RAND_CHARS[rand(RAND_CHARS.size), 1] }.join end end def to_normalized_string(text) words_to_omit = %w(a be but has have in is it of on or the to when) col_text = text.to_s.gsub(/(<[^>]*>)| |\t/su, ' ') # Remove html tags col_text.downcase! # Remove capitalization col_text.gsub!(/"|\'/u, '') # Remove potential problem characters col_text.gsub!(/\(.*?\)/u,'') # Remove text inside parens col_text.gsub!(/\W/u, ' ') # Remove all other non-word characters cols = (col_text.split(' ') - words_to_omit) (cols.size > 5 ? cols[-5..-1] : cols).join("_") end def equal_json_excluding_wildcards(a,b) return false if a.nil? or b.nil? a = a.is_a?(String) ? JSON.load(a) : JSON.load(a.to_json) b = b.is_a?(String) ? JSON.load(b) : JSON.load(b.to_json) deep_compare_excluding_wildcards(a,b) end def deep_compare_excluding_wildcards(a,b) return false if a.class != b.class if a.is_a?(Hash) return false if a.size != b.size a.each do |k,v| return false if deep_compare_excluding_wildcards(v,b[k]) == false end elsif a.is_a?(Array) return false if a.size != b.size a.each_with_index{|e,i| return false if deep_compare_excluding_wildcards(e,b[i]) == false } else return (a =="*") || (b =="*") || (a == b) end true end alias :normalize :to_normalized_string def generate_api_id UUIDTools::UUID.random_create.to_s end end end end |
what is the advantage of doing it this way?
它充当命名空间,因此具有相同名称的类不会发生冲突(因此它与mixin无关)。 这是标准的。
Why are we appending self to class, is that not already implied?
这只是定义类方法的方法之一(另一种是
Is this the same as including the module?
不。当你有
1 2 3 | class Bar include Foo end |
最终得到一个包含模块
1 2 3 4 | module Foo class Bar end end |
我们最终得到一个
what is the advantage of doing it this way?
如果需要,它允许您组织代码。
Why are we appending self to class, is that not already implied?
不,它还没有"隐含"。 这样做等同于使用