Ich habe keine Erfahrung mit Ruby, daher fühlt sich mein Code "hässlich" und nicht idiomatisch an:
def logged_in?
!user.nil?
end
Ich hätte lieber so etwas
def logged_in?
user.not_nil?
end
Kann aber keine solche Methode finden, die sich widerspricht nil?
ruby-on-rails
ruby
null
berkes
quelle
quelle
present?
erfordert eine nicht leere Zeichenfolge.! "".nil?
gibt true zurück, gibt aber"".present?
false zurück.false.present? == false
!false.nil? == true
Sie scheinen übermäßig besorgt über Boolesche Werte zu sein.
Wenn der Benutzer Null ist, dann angemeldet? gibt einen "Falsey" -Wert zurück. Andernfalls wird ein Objekt zurückgegeben. In Ruby müssen wir weder true noch false zurückgeben, da wir wie in JavaScript "truey" - und "falsey" -Werte haben.
Aktualisieren
Wenn Sie Rails verwenden, können Sie dies mithilfe der folgenden
present?
Methode besser lesen :quelle
?
ist, dass sie einen Booleschen Wert zurückgibt.!!value
ist der klassische Weg, etwas in einen Booleschen Wert umzuwandeln. Nicht genau das gleiche, aber in diesem Fall istObject#present?
RoR auch gut.Passen Sie auf andere Antworten auf, die
present?
als Antwort auf Ihre Frage angezeigt werden.present?
ist das Gegenteil vonblank?
in Schienen.present?
prüft, ob ein aussagekräftiger Wert vorliegt. Diese Dinge können einepresent?
Prüfung nicht bestehen:Während ein
!nil?
Scheck ergibt:nil?
prüft, ob ein Objekt tatsächlich istnil
. Alles andere: ein leerer String,0
,false
, was auch immer, ist nichtnil
.present?
ist sehr nützlich, aber definitiv nicht das Gegenteil vonnil?
. Die Verwechslung der beiden kann zu unerwarteten Fehlern führen.Für Ihren Anwendungsfall
present?
wird es funktionieren, aber es ist immer ratsam, sich des Unterschieds bewusst zu sein.quelle
false.blank?
ist nicht dasselbe wiefalse.nil?
Vielleicht könnte dies ein Ansatz sein:
quelle
!self.nil?
eher so sein!nil?
oder ist esself
implizit?Sie können einfach Folgendes verwenden:
Dies funktioniert nicht nur für Null, sondern auch für Falsch usw. Daher sollten Sie testen, ob es in Ihrem Anwendungsfall funktioniert.
quelle
Darf ich die Ruby-ähnliche
!
Methode für das Ergebnis dernil?
Methode anbieten?So esoterisch, dass RubyMine IDE es als Fehler kennzeichnet. ;-);
quelle
Ich kam zu dieser Frage und suchte nach einer Objektmethode, damit ich die
Symbol#to_proc
Kurzschrift anstelle eines Blocks verwenden konnte. Ich findearr.find(&:not_nil?)
etwas lesbarer alsarr.find { |e| !e.nil? }
.Die Methode, die ich gefunden habe, ist
Object#itself
. In meiner Verwendung wollte ich den Wert in einem Hash für den Schlüssel findenname
, wobei dieser Schlüssel in einigen Fällen versehentlich als groß geschrieben wurdeName
. Dieser Einzeiler ist wie folgt:Wie in anderen Antworten erwähnt , schlägt dies in Fällen, in denen Sie einen Booleschen Wert testen, spektakulär fehl.
quelle
my_hash.values_at("Name", "name").find
?map
, die ich der Einfachheit halber in diesem Beispiel entfernt habe. Wie hier geschrieben, ist sie austauschbar mitvalues_at
. Der wichtige Teil ist, was weitergegeben wirdfind
.