Je n'ai pas d'expérience en Ruby, donc mon code est "moche" et non idiomatique:
def logged_in?
!user.nil?
end
Je préfère avoir quelque chose comme
def logged_in?
user.not_nil?
end
Mais ne peut pas trouver une telle méthode qui s'oppose nil?
ruby-on-rails
ruby
null
berkes
la source
la source
present?
nécessite une chaîne non vide.! "".nil?
renvoie vrai, mais"".present?
renvoie faux.false.present? == false
!false.nil? == true
Vous semblez trop préoccupé par les booléens.
Si l'utilisateur est nul, alors connecté_in? renverra une valeur "falsey". Sinon, il renverra un objet. Dans Ruby, nous n'avons pas besoin de renvoyer true ou false, car nous avons des valeurs "true" et "falsey" comme en JavaScript.
Mettre à jour
Si vous utilisez Rails, vous pouvez rendre cela plus agréable en utilisant la
present?
méthode:la source
?
est qu'elle renvoie un booléen.!!value
est le moyen classique de convertir quoi que ce soit en booléen. Pas exactement la même chose, mais dans ce cas,Object#present?
RoR est également bon.Méfiez-vous des autres réponses présentées
present?
comme une réponse à votre question.present?
est l'opposé deblank?
in rails.present?
vérifie s'il existe une valeur significative. Ces choses peuvent échouer à unpresent?
contrôle:Alors qu'un
!nil?
chèque donne:nil?
vérifie si un objet est réellementnil
. Rien d' autre: une chaîne vide,0
,false
, peu importe, n'est pasnil
.present?
est très utile, mais certainement pas le contraire denil?
. La confusion des deux peut conduire à des erreurs inattendues.Pour votre cas d'utilisation
present?
fonctionnera, mais il est toujours sage d'être conscient de la différence.la source
false.blank?
n'est pas la même chose quefalse.nil?
Peut-être que cela pourrait être une approche:
la source
!self.nil?
plutôt alors!nil?
, ou est-ceself
implicite?Vous pouvez simplement utiliser ce qui suit:
Cela ne fonctionne pas seulement pour nil mais aussi pour false, etc., vous devez donc tester pour voir si cela fonctionne dans votre cas d'utilisation.
la source
Puis-je offrir la
!
méthode Ruby-esque sur le résultat de lanil?
méthode.Tellement ésotérique que RubyMine IDE le signalera comme une erreur. ;-)
la source
Je suis arrivé à cette question à la recherche d'une méthode objet, afin que je puisse utiliser le
Symbol#to_proc
raccourci au lieu d'un bloc; Je trouvearr.find(&:not_nil?)
un peu plus lisible quearr.find { |e| !e.nil? }
.La méthode que j'ai trouvée est
Object#itself
. Dans mon utilisation, je voulais trouver la valeur dans un hachage pour la cléname
, où, dans certains cas, cette clé était accidentellement capitalisée en tant queName
. Ce one-liner est le suivant:Comme indiqué dans d' autres réponses , cela échouera de façon spectaculaire dans les cas où vous testez un booléen.
la source
my_hash.values_at("Name", "name").find
?map
que j'ai supprimée pour plus de simplicité dans cet exemple, donc comme écrit ici, c'est interchangeable avecvalues_at
. L'important est ce à quoi on passefind
.