Existe-t-il un Ruby ou Ruby-ism pour not_nil? opposé de rien? méthode?

Je ne suis pas expérimenté en Ruby, donc mon code est “moche” et pas 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 oppose nil?

lorsque vous utilisez ActiveSupport, il y a user.present? http://api.rubyonrails.org/classes/Object.html#method-i-present%3F , pour vérifier juste pour non-nil, pourquoi ne pas utiliser

 def logged_in? user # or !!user if you really want boolean's end 

Vous semblez trop préoccupé par les booléens.

 def logged_in? user end 

Si l’utilisateur est nul, puis connecté_in? renverra une valeur “falsey”. Sinon, il retournera un object. Dans Ruby, nous n’avons pas besoin de renvoyer true ou false, car nous avons des valeurs “vérité” et “falsey” comme dans JavaScript.

Mettre à jour

Si vous utilisez Rails, vous pouvez le lire plus facilement en utilisant le present? méthode:

 def logged_in? user.present? end 

Peut-être que cela pourrait être une approche:

 class Object def not_nil? !nil? end end 

Attention aux autres réponses présentant le present? comme réponse à votre question.

present? est le contraire de blank? dans les rails.

present? vérifie s’il y a une valeur significative. Ces choses peuvent échouer un present? vérifier:

 "".present? # false " ".present? # false [].present? # false false.present? # false YourActiveRecordModel.where("false = true").present? # false 

Alors qu’un !nil? check donne:

 !"".nil? # true !" ".nil? # true ![].nil? # true !false.nil? # true !YourActiveRecordModel.where("false = true").nil? # true 

nil? vérifie si un object est réellement nil . Autre chose: une chaîne vide, 0 , false , peu importe, n’est pas nil .

present? est très utile, mais certainement pas le contraire de nil? . Confondre les deux peut conduire à des erreurs inattendues.

Pour votre cas d’utilisation present? travaillera, mais il est toujours sage d’être conscient de la différence.

Vous pouvez simplement utiliser les éléments suivants:

 if object p "object exists" else p "object does not exist" end 

Cela ne marche pas seulement pour le néant mais aussi pour les faux, etc.