Dynamisk metoddefinition
Lär dig definiera och anropa metoder dynamiskt med define_method och method_missing.
Dynamisk metoddefinition är en gratis lektion i Ruby Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Ruby Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Ruby Academy innehåller totalt 4 lektioner.
Skapa metoder dynamiskt
Dynamisk metoddefinition
I Ruby kan metoder skapas dynamiskt under körning.
Det ger mer flexibel och återanvändbar kod.

Använda define_method
Metoden define_method gör det möjligt att definiera metoder dynamiskt.
class Person
define_method(:greet) { puts 'Hello!' }
end
p = Person.new
p.greetAnvända define_method med parametrar
Du kan skicka argument till dynamiskt skapade metoder.
class Person
define_method(:greet) { |name| puts "Hello, #{name}!" }
end
p = Person.new
p.greet('Alice')Använda method_missing
Metoden method_missing fångar upp anrop till odefinierade metoder.
class Person
def method_missing(name, *args)
puts "Method '#{name}' is missing!"
end
end
p = Person.new
p.unknown_methodHantera method_missing dynamiskt
Du kan använda method_missing för att skapa flexibel metodhantering.
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
end
p = DynamicPerson.new
p.say_hello_worldÅsidosätta respond_to_missing?
För att hantera metodkontroller korrekt åsidosätter du respond_to_missing?.
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
def respond_to_missing?(name, include_private = false)
name.to_s.start_with?('say_') || super
end
end
p = DynamicPerson.new
puts p.respond_to?(:say_hello)Använda method_missing för dynamiska getters och setters
Du kan skapa dynamiska attribut med hjälp av method_missing.
class DynamicPerson
def initialize
@data = {}
end
def method_missing(name, *args)
attribute = name.to_s.sub(/=$/, '')
if name.to_s.end_with?('=')
@data[attribute] = args.first
else
@data[attribute]
end
end
end
p = DynamicPerson.new
p.name = 'Alice'
puts p.nameSäkerhetsrisker med method_missing
Felaktig användning av method_missing kan medföra risker:
- Oväntat beteende vid hantering av okända metoder.
- Potentiella prestandaproblem på grund av överdrivna metoduppslagningar.
- Säkerhetsbrister om det kombineras med användarinmatning.
Sammanfattning av dynamiska metoder
Grattis!
Du har lärt dig att definiera och anropa metoder dynamiskt i Ruby.
Härnäst får du utforska öppna klasser och monkey patching.

Lär dig Ruby med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 29
- Lektioner
- 109
Vanliga frågor
Är lektionen ”Dynamisk metoddefinition” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Ruby Academy, inklusive ”Dynamisk metoddefinition”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Ruby Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dynamisk metoddefinition”?
Lär dig definiera och anropa metoder dynamiskt med define_method och method_missing. Ni övar på Ruby Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Ruby Academy?
Du behöver inga förkunskaper. Utbildningen i Ruby Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Dynamisk metoddefinition”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Ruby Academy-lektionen?
Ja. Varje Ruby Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Vad är metaprogrammering?
- Dynamisk metoddefinition
- Öppna klasser och monkey patching
- Använda send och eval