Bitte jemand erklären Optionen hashes? Ich arbeite durch den ruby-Kurs aus testfirst.org. Übung 10 (temperature_object) erfordert die Kenntnis von Optionen hashes.
Optionen hash ist ein nettes Konzept aktiviert, indem ein Merkmal von ruby-parser. Sagen wir, Sie haben eine Methode, bei der einige erforderliche Argumente. Auch können Sie einige optionale Argumente. Im Laufe der Zeit können Sie weitere optionale Argumente, oder entfernen Sie die alten. Halten Methodendeklaration sauber und stabil, können Sie übergeben Sie alle diese optionalen Argumente in einen hash. Eine solche Methode würde wie folgt Aussehen:
def foo(arg1, arg2, opts ={})
opts.to_s # just return a string value of optsend
Also es hat zwei erforderlichen Werte und Letzte argument mit Standardwert hash. Wenn Sie keine optionalen Argumente übergeben werden, rufen Sie es wie folgt:
foo(1,2)# => "{}"
Wenn Sie haben etwas, das optional ist, Sie nennen es wie folgt:
Dieser code ist so idiomatisch für ruby, dass Ihre parser können Sie die geschweiften Klammern weglassen, wenn die übergabe hash als letztes argument an eine Methode:
Wenn Sie Schienen, zum Beispiel, Sie werden sehen, Optionen hashes überall. Hier, ich öffnete einfach eine zufällige controller in meiner app:
classProductsController<ApplicationController
before_filter :prepare_search_params, only::index
# ^^^^^^^^^^ options hash here
Also, kurz gesagt: Optionen-hash-argument einer Methode, die sich im letzten und hat default-Wert {}. Und Sie normalerweise pass-hashes (daher der name).
Optionen hashes werden verwendet, eine Menge, wenn Sie brauchen, um passieren optionale Argumente für die Methode.
Wenn beispielsweise die Methode hat zwei optionale Argumente, Sie können schreiben,
def method(arg1, arg2 =nil, arg3 =nil)...end
Aber wenn Sie mehr optionale arg es ist immer hässlich diese Zuweisung auf nil zu jeder Zeit.
Hier kommt das Optionen-hash, die ermöglicht es Ihnen zu schreiben
So ein options-hash ist nichts besonderes. Es ist nur eine optionale Letzte argument, das ist ein hash. Optionen hashes sind so praktisch und üblich, dass der Dolmetscher können Sie auch einfach Weg lassen der Klammern (dies ist der "spezielle" Teil über Sie)
my_func(arg1, arg2,:opt1 =>'foo',:opt2 =>'bar')
Kombiniert mit Ruby ' s Symbol Raute-Taste shortcut und der optionale Klammern, diese können am Ende der Suche wirklich sauber:
Außerdem können Sie die standard-positions-args mit dieser neuen hash-Parameter-notation. Mehr Informationen finden Sie auf dieser blog und an der oficial Dokumentation.
Bonus: Die Umgestaltung ist einfach, weil Sie können entfernen Sie die Optionen hash-Wert Ihrer Methode ohne änderung der Aufrufe. Aber... das ist nicht ganz richtig, wenn Sie einen Anruf mit einer unerwarteten option erhalten Sie eine ArgumentError: unknown keyword: invalid_arg.
Reverse-Merge ist der beste Weg zur Umsetzung Optionen hashes in ruby/rails:
def set_state_application(options_hash)
options_hash.reverse_merge!(send_email:true, other_default_val:'a')#will set defaultsself.update_column(:status_id,VendorEnums::VendorStatus::APPLICATION)VendorMailer.email_application(self)if options_hash[:send_email]
save_state
end
Optionen hash ist ein nettes Konzept aktiviert, indem ein Merkmal von ruby-parser. Sagen wir, Sie haben eine Methode, bei der einige erforderliche Argumente. Auch können Sie einige optionale Argumente. Im Laufe der Zeit können Sie weitere optionale Argumente, oder entfernen Sie die alten. Halten Methodendeklaration sauber und stabil, können Sie übergeben Sie alle diese optionalen Argumente in einen hash. Eine solche Methode würde wie folgt Aussehen:
Also es hat zwei erforderlichen Werte und Letzte argument mit Standardwert hash. Wenn Sie keine optionalen Argumente übergeben werden, rufen Sie es wie folgt:
Wenn Sie haben etwas, das optional ist, Sie nennen es wie folgt:
Dieser code ist so idiomatisch für ruby, dass Ihre parser können Sie die geschweiften Klammern weglassen, wenn die übergabe hash als letztes argument an eine Methode:
Wenn Sie Schienen, zum Beispiel, Sie werden sehen, Optionen hashes überall. Hier, ich öffnete einfach eine zufällige controller in meiner app:
Also, kurz gesagt: Optionen-hash-argument einer Methode, die sich im letzten und hat default-Wert
{}
. Und Sie normalerweise pass-hashes (daher der name).InformationsquelleAutor der Antwort Sergio Tulentsev
Optionen hashes werden verwendet, eine Menge, wenn Sie brauchen, um passieren optionale Argumente für die Methode.
Wenn beispielsweise die Methode hat zwei optionale Argumente, Sie können schreiben,
Aber wenn Sie mehr optionale arg es ist immer hässlich diese Zuweisung auf nil zu jeder Zeit.
Hier kommt das Optionen-hash, die ermöglicht es Ihnen zu schreiben
InformationsquelleAutor der Antwort dimitryeurope
Ein options-hash bezieht sich auf die Konvention der übergabe von Optionen zu Methoden, die mit einer Raute (
{}
) wie soDes übereinkommens ist für den options-hash für das Letzte argument so, dass es kann optional vorgenommen werden. E. g.
So ein options-hash ist nichts besonderes. Es ist nur eine optionale Letzte argument, das ist ein hash. Optionen hashes sind so praktisch und üblich, dass der Dolmetscher können Sie auch einfach Weg lassen der Klammern (dies ist der "spezielle" Teil über Sie)
Kombiniert mit Ruby ' s Symbol Raute-Taste shortcut und der optionale Klammern, diese können am Ende der Suche wirklich sauber:
InformationsquelleAutor der Antwort Max
Da alle diese Antworten sind richtig -, ruby-2 verbessert die Unterstützung für Schlüsselwörter Argumente.
Definieren Sie Ihre Methode mit der default-hash params als
*args
, und entfernen Sie dieoptions = {}
.Argumente erforderlich: Sie müssen ein Doppelpunkt nach dem Schlüssel (auch Sie brauchen, ruby 2.1)
Optionale Argumente, Sie können die Standardeinstellung zu
nil
Außerdem können Sie die standard-positions-args mit dieser neuen hash-Parameter-notation. Mehr Informationen finden Sie auf dieser blog und an der oficial Dokumentation.
Bonus: Die Umgestaltung ist einfach, weil Sie können entfernen Sie die Optionen hash-Wert Ihrer Methode ohne änderung der Aufrufe. Aber... das ist nicht ganz richtig, wenn Sie einen Anruf mit einer unerwarteten option erhalten Sie eine
ArgumentError: unknown keyword: invalid_arg
.InformationsquelleAutor der Antwort Alejandro Babio
Reverse-Merge ist der beste Weg zur Umsetzung Optionen hashes in ruby/rails:
InformationsquelleAutor der Antwort Carlos Cervantes