Die Deklaration einer Klasse innerhalb eines Moduls
Vermessungsarbeiten code (in ein Modul namens Surveyor, nicht weniger), zu verstehen versucht. Ich rannte über diesem Abschnitt eine Klasse innerhalb eines Moduls. Ist das das gleiche wie das Modul? Wenn nicht, was ist der Vorteil, es zu tun auf diese Weise? Danke. (BONUS PUNKTE: Warum sind wir anfügen, das selbst Klasse ist, dass nicht bereits impliziert?)
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
InformationsquelleAutor steve_gallagher | 2012-06-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dient es als namespace also Klassen mit demselben Namen, nicht clash (so, es hat nichts zu tun mit Mixins in Verbindung). Es ist standard.
Das ist nur eine der Möglichkeiten, Definition von Klassen-Methoden (der andere wird
def self.method_name
).InformationsquelleAutor tokland
Nicht. Wenn Sie
module Foo; end
tun, und dannDass Sie am Ende mit einer Klasse
Bar
alle Methoden des ModulsFoo
. Aber wenn wir es tunWir am Ende mit einem Klasse
Foo::Bar
beinhaltet, dass keine der Methoden inFoo
sind nicht inBar
Ermöglicht es Ihr, sich zu organisieren, Ihren code, wenn Sie benötigt wird.
Nein, es ist nicht schon "stillschweigend". Dies ist äquivalent zur Definition der einzelnen Methoden in diesem block mit
self.
wiedef self.mymethod; end
. Sehen Klasse << self-idiom in Ruby.InformationsquelleAutor Andrew Marshall