Metodien dynaaminen määrittäminen
Opitte määrittämään ja kutsumaan metodeja dynaamisesti define_method- ja method_missing-metodeilla.
Metodien dynaaminen määrittäminen on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Metodien luominen dynaamisesti
Dynaaminen metodien määrittely
Rubyssa metodeja voidaan luoda dynaamisesti suorituksen aikana.
Tämä mahdollistaa joustavamman ja uudelleenkäytettävämmän koodin.

<code>define_method</code>-komennon käyttäminen
define_method-metodin avulla metodeja voidaan määrittää dynaamisesti.
class Person
define_method(:greet) { puts 'Hello!' }
end
p = Person.new
p.greet<code>define_method</code>-komennon käyttäminen parametrien kanssa
Dynaamisesti luoduille metodeille voi välittää argumentteja.
class Person
define_method(:greet) { |name| puts "Hello, #{name}!" }
end
p = Person.new
p.greet('Alice')<code>method_missing</code>-komennon käyttäminen
method_missing-metodi sieppaa kutsut määrittelemättömille metodeille.
class Person
def method_missing(name, *args)
puts "Method '#{name}' is missing!"
end
end
p = Person.new
p.unknown_method<code>method_missing</code>-komennon dynaaminen käsittely
method_missing-komennon avulla voitte toteuttaa joustavan metodien käsittelyn.
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<code>respond_to_missing?</code>-metodin ohittaminen
Ohittakaa respond_to_missing?, jotta metodien tarkistukset käsitellään oikein.
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)<code>method_missing</code>-komennon käyttäminen dynaamisiin gettereihin ja settereihin
Dynaamisia attribuutteja voi luoda komennon method_missing avulla.
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.name<code>method_missing</code>-komennon tietoturvariskit
method_missing-komennon virheellinen käyttö voi aiheuttaa riskejä:
- Odottamaton toiminta tuntemattomia metodeja käsiteltäessä.
- Liiallisten metodihakujen aiheuttamat mahdolliset suorituskykyongelmat.
- Tietoturva-aukot, jos komentoa käytetään yhdessä käyttäjän syötteen kanssa.
Dynaamisten metodien kertaus
Onnittelut!
Olette oppineet määrittämään ja kutsumaan metodeja dynaamisesti Rubyssa.
Seuraavaksi tutustutte avoimiin luokkiin ja monkey patching -tekniikkaan.

Opi Ruby tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”Metodien dynaaminen määrittäminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Metodien dynaaminen määrittäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Metodien dynaaminen määrittäminen”?
Opitte määrittämään ja kutsumaan metodeja dynaamisesti define_method- ja method_missing-metodeilla. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Metodien dynaaminen määrittäminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Mitä metaprogrammointi on?
- Metodien dynaaminen määrittäminen
- Avoimet luokat ja monkey patching
- sendin ja evalin käyttäminen