RechercherPortailAccueilAccueilForumPraline au mielS'enregistrerConnexion


Partagez
 

 Method_missing

Aller en bas 
AuteurMessage
Invité
Invité



Method_missing Empty
MessageSujet: Method_missing   Method_missing Icon_minitimeMar 8 Jan - 17:23

Salut, je publies une features que j'ai écrite pour l'event-extender mais que je publie en stand-alone.
Il s'agit d'une modification de la méthode method_missing qui est appelée lorsqu'on utilise une méthode qui n'existe pas.
Au lieu de lancer une erreur en ne disant que "la méthode n'existe pas", elle suggère des méthodes dont le nom ressemblerait :
Un exemple, j'essaie d'utiliser la commande square_between de l'event-extender, elle n'existe pas, sa vraie appellation est squares_between, voici le message d'erreur que j'aurai avec ce petit script:
Method_missing 8kNVT4YXRaDdDNvFcw7Q1sKA8
Si comme moi, vous faites beaucoup de fautes de frappe ^^'
Voici le code:
Code:
#==============================================================================
# ** String
#------------------------------------------------------------------------------
#  A String object holds and manipulates an arbitrary sequence of bytes,
#  typically representing characters.
#==============================================================================

class String
  #--------------------------------------------------------------------------
  # * Calcul the Damerau Levenshtein 's Distance
  #--------------------------------------------------------------------------
  def damerau_levenshtein(other)
    n, m = self.length, other.length
    return m if n == 0
    return n if m == 0
    matrix  = Array.new(n+1) do |i|
      Array.new(m+1) do |j|
        if i == 0 then j
        elsif j == 0 then i
        else 0 end
      end
    end
    (1..n).each do |i|
      (1..m).each do |j|
        cost = (self[i] == other[j]) ? 0 : 1
        delete = matrix[i-1][j] + 1
        insert = matrix[i][j-1] + 1
        substitution = matrix[i-1][j-1] + cost
        matrix[i][j] = [delete, insert, substitution].min
        if (i > 1) && (j > 1) && (self[i] == other[j-1]) and (self[i-1] == other[j])
          matrix[i][j] = [matrix[i][j], matrix[i-2][j-2] + cost].min
        end
      end
    end
    return matrix.last.last
  end
end

#==============================================================================
# ** Object
#------------------------------------------------------------------------------
#  Generic behaviour
#==============================================================================

class Object
  #--------------------------------------------------------------------------
  # * Method suggestions
  #--------------------------------------------------------------------------
  def method_missing(*args)
    keywords = self.methods + self.singleton_methods + self.class.instance_methods(false)
    keywords += self.instance_variables
    keywords.uniq!.collect!{|i|i.to_s}
    keywords.sort_by!{|o| o.damerau_levenshtein(args[0].to_s)}
    msg = "#{args[0]} doesn't exists did you mean maybe #{keywords[0]} or #{keywords[1]}  ?"
    raise(NoMethodError, msg)
  end
end

A placer au dessus de main.
Il est possible que certaines méthodes écrasent celle-ci (mais je ne suis pas devin).
Cet outil sera intégré par défaut dans l'Event Extender (nouvelle version).
Revenir en haut Aller en bas
Magicalichigo
   
   
Magicalichigo

Messages : 3283


Method_missing Empty
MessageSujet: Re: Method_missing   Method_missing Icon_minitimeMar 8 Jan - 17:55

Ah oui très pratique pour les gens tête en l'air dans mon genre xD


Method_missing 665830zLUujZSG93
Revenir en haut Aller en bas
 
Method_missing
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker Détente :: Entrepôt :: Scripts :: Scripts Vx.Ace-
Sauter vers: