Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
diff.rb - то, что Вы хотите, который доступен в http://users.cybercity.dk/~dsl8950/ruby/diff.html через интернет-архив:
http://web.archive.org/web/20140421214841/http://users.cybercity.dk:80/~dsl8950/ruby/diff.html
Для массивов используйте минус оператор. Например:
>> foo = [1, 2, 3]
=> [1, 2, 3]
>> goo = [2, 3, 4]
=> [2, 3, 4]
>> foo - goo
=> [1]
Здесь последняя строка удаляет все из нечто, которое находится также в липкой вещи, оставляя просто элемент 1. Я не знаю, как сделать это для двух строк, но до кого-то, кто знает сообщения об этом, Вы могли просто преобразовать каждую строку в массив, использовать минус оператор, и затем преобразовать результат назад.
Для строк я сначала испытал бы Драгоценный камень Ruby, который @sam-saffron упомянул ниже. Легче установить: http://github.com/pvande/differ/tree/master
gem install differ
irb
require 'differ'
one = "one two three"
two = "one two 3"
Differ.format = :color
puts Differ.diff_by_word(one, two).to_s
Differ.format = :html
puts Differ.diff_by_word(one, two).to_s
Существует также diff-lcs
, который доступен как драгоценный камень. <забастовка> Это не было обновлено с 2004, но забастовка>, мы использовали его без любой проблемы.
Редактирование: А новая версия была выпущена в 2011. Похож это вернулось в активной разработке.
HTMLDiff, который @ da01 упоминает выше, работал для меня. 1240 Выглядит неплохо. Кстати, я использовал это с плагином acts_as_audited
.
Я только что нашел новый проект, который кажется довольно гибким:
http://github.com/pvande/differ/tree/master
Пробую и попытаюсь опубликовать какой-то отчет.
У меня были те же сомнения, и решение, которое я нашел, не на 100% рубин, но это лучшее для меня. Проблема с diff.rb в том, что у него нет удобного средства форматирования, чтобы показать различия в гуманизированной форме. Итак, я использовал diff из ОС с этим кодом:
def diff str1, str2
system "diff #{file_for str1} #{file_for str2}"
end
private
def file_for text
exp = Tempfile.new("bk", "/tmp").open
exp.write(text)
exp.close
exp.path
end
Меня расстроило отсутствие хорошей библиотеки для этого на Ruby, поэтому я написал http://github.com/samg/diffy . Он скрытно использует diff
и делает упор на удобство и предоставляет красивые параметры вывода.