Какова цель методов экземпляра в Модулях без классов?

Есть несколько различных способов сделать это с различной эффективностью, в зависимости от того, насколько хорош ваш оптимизатор запросов, и относительного размера ваших двух таблиц:

[g2] Это самое короткое утверждение, и оно может быть самым быстрым если ваша телефонная книга очень короткая: [/g2]
function chkboxToggle() {
  if ($('input#chkbox').attr('checked'))
    // do something
  else
    // do something else
}
[g3] альтернативно (благодаря

Alterlife

) [/g3]
<input id="chkbox" type="checkbox" onclick="chkboxToggle()" />
[g4] или (благодаря WOPR) [/g4] [f3] [g5] (игнорируя тот факт, что, как уже говорили другие, обычно лучше выбирать только нужные столбцы, а не '[f4]') [/g5]
9
задан Christoph Schiessl 2 October 2008 в 09:46
поделиться

2 ответа

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

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

Хороший пример этого в базовом Ruby отмечает как Array и Hash может и быть перемещен и отсортирован, и т.д. Каждый из них получает эту функциональность от Enumerable модуль (each_with_index, select, reject, sort и больше все определяется во включенном модуле, не в классах).

12
ответ дан 4 December 2019 в 13:06
поделиться

Мой ответ был бы: "нет Вы не можете назвать методы экземпляра модуля без первого расширения или включая тот модуль в классе"

теперь зная рубин и весь обман метапрограммирования это содержит там, вероятно, способ назвать его, но это было бы вне надлежащего использования модулей

module Tester
  def inst_meth
    puts "test inst meth\n"
  end

  def self.meth
    puts "test self meth\n"
  end
end

begin
  Tester.meth
rescue;
  puts $!
end
begin
  Tester.inst_meth
rescue
  puts $!
end
begin
  Tester.new.inst_meth
rescue
  puts $!
end
begin
  extend Tester
  inst_meth
rescue
  puts $!
end
begin
  include Tester
  inst_meth
rescue
  puts $!
end

дает

>ruby test.rb
test self meth
undefined method `inst_meth' for Tester:Module
undefined method `new' for Tester:Module
 test inst meth
 test inst meth
4
ответ дан 4 December 2019 в 13:06
поделиться
Другие вопросы по тегам:

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