Wie überprüfe ich den Parameter "param [: some_value]" in Ruby

7

Ich kenne einige Möglichkeiten, um zu überprüfen, ob der Parameter nicht nil ist

%Vor%

Welches ist korrekt und am beliebtesten? Was ist der Unterschied zwischen ihnen? Ich würde lieber if param[:some_value] verwenden, weil es am einfachsten und kürzesten ist.

    
Alexandre 19.08.2012, 07:38
quelle

4 Antworten

15

Hier sind einige Unterschiede zwischen nil? , blank? und present? :

%Vor%

Beachten Sie, dass present? in not nil and not blank übersetzt wird. Beachten Sie außerdem, dass nil? zwar von Ruby bereitgestellt wird, aber blank? und present? von Rails bereitgestellte Helfer sind.

Also, welchen soll man wählen? Es hängt natürlich davon ab, was Sie wollen, aber wenn Sie params [: some_value] auswerten, wollen Sie normalerweise nicht nur überprüfen, dass es nicht null ist, sondern auch, ob es eine leere Zeichenfolge ist. Beide sind durch present? abgedeckt.

    
Shailen Tuli 19.08.2012, 09:51
quelle
3

Die relevanten Fälle sind:

  1. Der Hash fehlt der Schlüssel (und sein Wert)
  2. Der Hash hat den Wert nil für den Schlüssel
  3. Der Hash hat den Wert leere Zeichenfolge ( "" ) oder das leere Array ( [] ) für den Schlüssel
  4. Der Hash hat einen anderen Wert für den Schlüssel

Verwenden Sie je nachdem, wo Sie die Linie zeichnen möchten, die entsprechende Methode.

  • 1 vs. 2, 3, 4: !param.key?(:some_value)
  • 1, 2 vs. 3, 4: param[:some_value].nil?
  • 1, 2, 3 vs. 4: param[:some_value].blank?
  • 2, 3, 4 vs. 1: param.key?(:some_value)
  • 3, 4 vs. 1, 2: param[:some_value]
  • 4 vs. 1, 2, 3: param[:some_value].present?
sawa 19.08.2012 12:30
quelle
2

if param[:some_value] ist am häufigsten.

Aber wenn Sie mit booleschen Daten ( true , false ) arbeiten, ist dies die beste Methode wäre if !param[:some_value].nil? , weil:

%Vor%

( !! gibt den booleschen Wert zurück, der in einer if-Anweisung getestet würde)

Es könnte auch wichtig sein, zu testen, ob der Wert wirklich null ist oder ob die Schlüssel / Wert-Kombination nicht definiert ist. key?(key) macht das für dich.

%Vor%     
robustus 19.08.2012 18:36
quelle
1

Es hängt davon ab, was Sie tun möchten, aber ich verwende normalerweise diese Formulare:

%Vor%

Natürlich funktionieren alle nur, wenn der Parameter nicht false sein kann. In diesem Fall würde ich nach der unless param[:some_value].nil? Version gehen.

    
Michael Kohl 19.08.2012 07:51
quelle

Tags und Links