Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Действительно не имеет значения, они - оба то же. erb является чистым рубином, eruby записан в C, таким образом, это немного быстрее.
erubis (третий) является чистым рубином, и быстрее, чем оба те упомянутые выше. Но я сомневаюсь, что скорость этого является узким местом для Вас, поэтому просто используйте erb. Это - часть Библиотеки Стандарта Ruby.
Eruby является внешним исполняемым файлом, в то время как erb является библиотекой в Ruby. Вы использовали бы первого, если бы Вы хотели независимую обработку своих шаблонных файлов (например, быстрая-и-грязная замена PHP), и последний, если необходимо было обработать их в контексте некоторого другого сценария Ruby. Более распространено использовать ERB просто, потому что это более гибко, но я признаю, что был виновен в баловании eruby для выполнения .rhtml
файлы для быстрых небольших служебных веб-сайтов.
Я делаю что-то подобное использование erb, и производительность хорошо для меня.
Как Jordi сказал, хотя, это зависит, какой контекст Вы хотите выполнить это в - если бы Вы буквально собираетесь использовать шаблоны как тот, Вы перечислили, eruby, вероятно, работал бы лучше, но я предположу, что Вы на самом деле собираетесь быть передающими переменными к шаблону, в этом случае Вы хотите erb.
Только для ссылки, при использовании erb необходимо будет передать его привязка для объекта, Вы хотите взять переменные от, что-то вроде этого:
device = Device.new
device.add_interface("GigabitEthernet1/1", "10.5.16.1")
device.add_interface("GigabitEthernet1/2", "10.5.17.1")
template = File.read("/path/to/your/template.erb")
config = ERB.new(template).result(device.binding)