2011-09-26 10 views

Odpowiedz

11

Spójrz na linii, która mówi, że idąc w swoich środowiskach configs:

# Log error messages when you accidentally call methods on nil. 
config.whiny_nils = true # or false in production.rb 

Ma to uniemożliwić wywołanie metody na nil w trybie rozwoju. Sądzę, że wyłączyli go ze względu na wydajność w produkcji.

I nil to obiekt singletonowy w ruby, dlatego jego numer id będzie 4 niezależnie od tego.

+1

Również 'nil.id' == 4, który może być przyczyną niezamierzonych skutków ubocznych –

+0

@phsr dzięki, dodał trochę o singlecie zero –

1

Whiny nils są zgłaszane tylko w trybie programowania (zajrzyj do plików konfiguracyjnych).

„płaczliwy Nils” to termin Szyny na umieszczenie ostrzeżenia w dzienniku ilekroć metoda jest wywoływana na wartości zerowej, z (miejmy nadzieję) Pomocna informacji o jakiego rodzaju obiekt może mieć próbuje posługiwać się.

2

Kod metody NilClass#id ma dobre wyjaśnienie:

# NilClass#id exists in Ruby 1.8 (though it is deprecated). Since +id+ is a fundamental 
# method of Active Record models NilClass#id is redefined as well to raise a RuntimeError 
# and warn the user. She probably wanted a model database identifier and the 4 
# returned by the original method could result in obscure bugs. 
# 
# The flag <tt>config.whiny_nils</tt> determines whether this feature is enabled. 
# By default it is on in development and test modes, and it is off in production 
# mode. 

https://github.com/rails/rails/blob/0c76eb1106dc82bb0e3cc50498383d6f992da4fb/activesupport/lib/active_support/whiny_nil.rb#L19