Я провел большую часть прошлой недели в университетской библиотеке, изучая отладку параллельного кода. Центральная проблема - параллельный код, не детерминированный. Как правило, академическая отладка попала в один из трех лагерей здесь:
Теперь, как уже отмечали комментаторы, вы можете сконструировать свою параллельную систему в более детерминированное состояние. Однако, если вы не сделаете это правильно, вы снова вернетесь к разработке последовательной системы.
Мое предложение состояло бы в том, чтобы сосредоточиться на очень строгом протоколе проектирования о том, что происходит с резьбой и что не получается. Если вы ограничиваете свой интерфейс так, чтобы между элементами была минимальная зависимость, это намного проще.
Удачи и продолжайте работать над проблемой.
def self.method_name
end
определяет метод класса.
def method_name
end
определяет метод экземпляра.
Это является довольно хорошим сообщением на нем.
Быстрое объяснение того, что это означает:
В рубине, можно определить методы на конкретном объекте:
a = "hello"
def a.informal
"hi"
end
a.informal
=> "hi"
, Что происходит, когда Вы делаете, который является, что объект a, который имеет класс String
, изменил свой класс на "фантомный" класс, иначе метакласс, singleton-класс или eigenclass. Тот новый суперкласс класса String
.
кроме того, в определениях классов, self
установлен на определяемый класс, таким образом
class Greeting
def self.say_hello
"Hello"
end
#is the same as:
def Greeting.informal
"hi"
end
end
, Что происходит, существует то, что объект Greeting
, который имеет класс Class
, получает новый метакласс с новыми методами, поэтому когда Вы звоните
Greeting.informal
=> "hi"
нет такой вещи, как методы класса в рубине, но семантика подобны.
Хорошее руководство по тому, когда использовать который:
self.
). При создании метода класса, думайте тщательно, о котором классе или модуле он принадлежит. Если Вы когда-нибудь ловите себя копирующий код в методах класса через классы, включаете его в модуль, в котором могут смешаться другие классы.
В этом контексте - определение сам method_name делает его видом эквивалента статическому методу Java:
рубин:
class HexHelper
def self.to_h(num)
sprintf("%x", num)
end
end
use: HexHelper.to_h(12345)
Java:
public class HexHelper
{
public static String toHex(int num)
{
return new PrintfFormat("%x").sprintf(num);
}
}
use: HexHelper.toHex(12345)
сам всегда текущий объект
, Когда Вы видите сам здесь
определение сам method_name конец
, Вы не находитесь в методе экземпляра, таким образом, сам ток объект Класса .
сам похож этот ключевое слово в Java. Это - ссылка на текущий экземпляр объекта. Если бы Ваш типовой кодекс выполняет операцию на текущем объекте, то Вам, вероятно, была бы нужна функция без сам method_name спецификатор.