ste*_*her 10 ruby oop ruby-on-rails class
测量工作代码(在一个名为Surveyor的模块中,不能少),试图理解它.我跑过这个包含模块中的类的部分.这和包含模块一样吗?如果没有,这样做有什么好处?谢谢.(奖励要点:为什么我们将自己附加到课堂上,是不是已经隐含了?)
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(/(<[^>]*>)|\n|\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
Run Code Online (Sandbox Code Playgroud)
tok*_*and 15
这样做有什么好处?
它充当命名空间,因此具有相同名称的类不会发生冲突(因此它与mixin无关).这是标准的.
我们为什么要自我上课,这是不是已经隐含了?
这只是定义类方法的方法之一(另一种方法def self.method_name).
And*_*all 11
这和包含模块一样吗?
不,当你有module Foo; end,然后做
class Bar
include Foo
end
Run Code Online (Sandbox Code Playgroud)
最终得到一个Bar包含模块所有方法的类Foo.但是当我们做的时候
module Foo
class Bar
end
end
Run Code Online (Sandbox Code Playgroud)
我们结束了一个类Foo::Bar,其中包括没有任何的方法Foo不在Bar
这样做有什么好处?
如果需要,它允许您组织代码.
我们为什么要自我上课,这是不是已经隐含了?
不,它还没有"隐含".这样做等同于使用self.like 定义该块中的每个方法def self.mymethod; end.请参阅Ruby中的类<< self idiom.