Использовать сам. или нет.. в направляющих

Я провел большую часть прошлой недели в университетской библиотеке, изучая отладку параллельного кода. Центральная проблема - параллельный код, не детерминированный. Как правило, академическая отладка попала в один из трех лагерей здесь:

  1. Event-trace / replay. Для этого требуется монитор событий, а затем просмотр событий, которые были отправлены. В рамках UT это предполагает ручную отправку событий как часть теста, а затем выполнение посмертных отзывов.
  2. Сценарий. Здесь вы взаимодействуете с запущенным кодом с набором триггеров. «В x> foo, baz ()». Это можно интерпретировать в рамках UT, где у вас есть система времени выполнения, запускающая заданный тест в определенном состоянии.
  3. Интерактивный. Очевидно, что это не будет работать в условиях автоматического тестирования. ;)

Теперь, как уже отмечали комментаторы, вы можете сконструировать свою параллельную систему в более детерминированное состояние. Однако, если вы не сделаете это правильно, вы снова вернетесь к разработке последовательной системы.

Мое предложение состояло бы в том, чтобы сосредоточиться на очень строгом протоколе проектирования о том, что происходит с резьбой и что не получается. Если вы ограничиваете свой интерфейс так, чтобы между элементами была минимальная зависимость, это намного проще.

Удачи и продолжайте работать над проблемой.

75
задан John Topley 22 December 2008 в 12:49
поделиться

6 ответов

def self.method_name
end

определяет метод класса.

def method_name
end

определяет метод экземпляра.

Это является довольно хорошим сообщением на нем.

122
ответ дан Roope Hakulinen 7 November 2019 в 07:12
поделиться

Быстрое объяснение того, что это означает:

В рубине, можно определить методы на конкретном объекте:

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"

нет такой вещи, как методы класса в рубине, но семантика подобны.

36
ответ дан mikej 7 November 2019 в 07:12
поделиться

Хорошее руководство по тому, когда использовать который:

  • , Если метод зависит от какого-либо внутреннего состояния объекта или должен знать, к какому экземпляру объекта это обращается, затем НЕ делают его методом класса (self.).
  • , Если метод не зависит от состояния объекта, или на наличии определенного экземпляра объекта, то в может быть сделан методом класса.

При создании метода класса, думайте тщательно, о котором классе или модуле он принадлежит. Если Вы когда-нибудь ловите себя копирующий код в методах класса через классы, включаете его в модуль, в котором могут смешаться другие классы.

11
ответ дан bradheintz 7 November 2019 в 07:12
поделиться

В этом контексте - определение сам 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)
6
ответ дан Lolindrath 7 November 2019 в 07:12
поделиться

сам всегда текущий объект

, Когда Вы видите сам здесь

определение сам method_name конец

, Вы не находитесь в методе экземпляра, таким образом, сам ток объект Класса .

6
ответ дан theschmitzer 7 November 2019 в 07:12
поделиться

сам похож этот ключевое слово в Java. Это - ссылка на текущий экземпляр объекта. Если бы Ваш типовой кодекс выполняет операцию на текущем объекте, то Вам, вероятно, была бы нужна функция без сам method_name спецификатор.

1
ответ дан John Topley 7 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: