Действительно ли модуль Ruby эквивалентен Интерфейсу Java?

В Android Studio откройте: Файл> Структура проекта> посмотрите, указывает ли JDK место на ваш каталог JDK 1.8.

Примечание: вы можете использовать compileSdkVersion 24. Он работает на меня. Для этого сначала загрузите последний jdk из oracle.

20
задан Bryan Locke 22 February 2009 в 22:07
поделиться

4 ответа

Я думаю, что приравнял бы модуль к чему-то более сродни дополнительному методу в C#. Вы добавляете функциональность к существующему классу, который на самом деле определяется в другом месте. Нет точного аналога или в C# или в Java, но я определенно не думал бы о нем как об интерфейсе, потому что реализация получена, а также интерфейс.

7
ответ дан 30 November 2019 в 00:27
поделиться

Короткий ответ нет.

Вот обоснование, интерфейс Java/C# определяет сигнатуры методов, которые класс с реализацией обеспечит в минимуме.

Дополнительно:

  • С рубиновыми модулями нет такого контракта из-за ввода утки.
  • Модули являются просто способом извлечь общую функциональность для легкого повторного использования. Самое близкое отношение является дополнительными методами C#, но это не точное совпадение, так как они существуют в статическом контексте.
  • Модули могут добавить состояние к существующему классу.
  • Модули могут иметь статические методы
  • , Модули могут действовать как пространства имен

Пример:

module SimpleConversation
  class NamespacedExample
    def poke
      puts "ouch"
    end
  end

  attr_accessor :partner_name
  def converse
    partner_name ||= "Slowpoke"
    speak + "\n#{partner_name}: Yes they are"
  end

  def self.yay
    puts "yay"
  end
end

class Foo
  include SimpleConversation
  attr_accessor :name

  def speak
    name ||= "Speedy"
    "#{name}: tacos are yummy"
  end
end

x = Foo.new
x.name = "Joe"
x.partner_name = "Max"
puts x.speak
puts x.converse

y = SimpleConversation::NamespacedExample.new
y.poke

SimpleConversation.yay
17
ответ дан 30 November 2019 в 00:27
поделиться

Нет. Модуль в рубине более сродни статическому классу. Я не Java-разработчик, но я предположение , что интерфейсы Java подобны интерфейсам C#, т.е. они определяют контракт, но не реализацию.

я не должен, что, в то время как у меня есть опыт в рубине, это находится в создании видеоигры (RGSS/2). Я уверен, что я незнаком со многими вещами, которые знал бы старый рубиновый программист.

3
ответ дан 30 November 2019 в 00:27
поделиться

Модуль в рубине является небольшим количеством объема/пространства имен, который может быть добавлен к другим вещам. Они используются в двух отличных, но связанных целях: укутываясь набор связанных вещей (константы, классы, и т.д.), которые принадлежат вместе и затем добавление их в некоторый другой объем (как множественное наследование).

, Например, существуют модули, названные вещами как Сопоставимый и Счетные и т.д, которые инкапсулируют функциональность, которую Вы ожидали бы, что что-то будет иметь если эти примененные прилагательные. Путем обеспечения основного определения (метод, который сравнивает два экземпляра для Сопоставимого и итератор для Счетного) можно импортировать модуль и оказаться с полным интерфейсом.

, С другой стороны, существуют модули как Сеть, которую Вы редко включали бы в класс, но которые обеспечивают пакет функциональности, такой как Сеть:: HTTP, Сеть:: FTP, Сеть:: SMTP, и так далее.

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

- MarkusQ

3
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

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