Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
@content_for_whatever
устарел.
Используйте вместо него content_for?
, например:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
Может создать помощника:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
И использование это в Вашем расположении:
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
Хорошо я собираюсь бесстыдно сделать сам ответ, поскольку никто не ответил, и я уже нашел ответ:) Определяют это как вспомогательный метод или в application_helper.rb, или где угодно Вы нашли удобным.
def content_defined?(symbol)
content_var_name="@content_for_" +
if symbol.kind_of? Symbol
symbol.to_s
elsif symbol.kind_of? String
symbol
else
raise "Parameter symbol must be string or symbol"
end
!instance_variable_get(content_var_name).nil?
end
не действительно необходимый для создания вспомогательного метода:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
тогда, конечно, в Вашем представлении:
<% content_for :sidebar do %>
...
<% end %>
я использую это все время для условного движения между расположением на два столбца и на один столбец
Я не уверен в последствиях для производительности двойного вызова yield, но это будет происходить независимо от внутренней реализации yield (@content_for_xyz устарело) и без дополнительного кода или вспомогательных методов:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>