В рубине есть большая разница между тем, что ничто и что-то, что не определено. Учитывая следующее, из IRB:
ruby-1.9.2-p0 :002 > active_record
NameError: undefined local variable or method `active_record' for main:Object
from (irb):2
from /Users/jed/.rvm/rubies/ruby-1.9.2-p0/bin/irb:16:in `<main>'
ruby-1.9.2-p0 :003 > active_record = nil
=> nil
ruby-1.9.2-p0 :004 > active_record.class
=> NilClass
ruby-1.9.2-p0 :006 > active_record.nil?
=> true
Таким образом, объект, который равен нулю является экземпляром NilClass и поэтому отвечает на сообщение nil?
возвращает истину, но без объявления переменной (как в вашем коде) Рубиновый Безразлично Я не знаю, что вы называете.
Несколько вариантов здесь: ||
оператор
Руби является строгим оператором, в то время как or
ключевое слово менее строгим, так что я не знаю, где операция VB сравнивает эти два или потока опций.
вы могли бы использовать аккуратный небольшой драгоценный камень callled «andand»
require 'andand'
active_record.andand.errors.count == 0
, но, как правило, когда вы имеете дело с этой ситуацией в рельсах, вы бы использовать другое средство для определения положения выше, считает:
@post = Post.new(:my_key => "my value") #=> an ActiveRecord object
if @post.valid?
# do something meaningful
else
puts @post.errors.full_messages.to_sentence
end
и если вы имеете в виду что-то назначить на основе, если это возможно, не определенно, вы хотели бы использовать запоминание:
@post ||= Post.new
, который объявит объект, если не определено или использует существующий объект.
является 'active_record' в вашем коде фактической библиотеки или примере объекта active_record? –
в этом примере active_record - это объект, который может быть nil – Sebtm
Не знаю, почему вы погладили ваши фразы. В последнем случае правильным будет то, что в VB.NET второе выражение оценивается только в том случае, если оно сначала ложно. [Это короткое замыкание] (http://en.wikipedia.org/wiki/Short-circuit_evaluation), то же самое происходит с Ruby '&&' и '||'. –