Как я могу импортировать только несколько функций из модуля Ruby?

В основном, вам нужно zip это.

Фрагмент:

let obj = {"BPContName":"aName;bName;cName","BPContEmail":"aEmail;bEmail;cEmail","BPContPWID":"aPWID;bPWID;cPWID"},
    res = _.zipWith(
      ..._.map(obj, v => v.split(';')),
      (name, email, pwid) => ({name, email, pwid})
    );
    
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Обратите внимание, последовательность параметров мы должны поставить таким образом, исходный объект дает нам значения при использовании Object.values или дает нам ключи при использовании Object.keys обычно в алфавитном порядке. Но, в случае, если в любом env порядке порядок не гарантирован, мы можем отсортировать его с помощью последовательности ключей в качестве метаданных.

Или вы можете явно передать аргументы, например:

(obj.BPContName.split(';'), obj.BPContEmail.split(';'), obj.BPContPWID.split(';'))
7
задан Geo 31 March 2009 в 12:53
поделиться

3 ответа

Не уверенный, если существует очевидный способ, чтобы просто добавить методы, Вы хотите, но можно удалить методы, при помощи которых Вы не хотите undef_method.

module Foo
  def function1
  end

  def function2
  end

  def function3
  end
end

module MiniFoo
  include Foo
  not_wanted_methods = Foo.instance_methods - %w(function1 function2)
  not_wanted_methods.each {|m| undef_method m}
end

class Whatever
  include MiniFoo
end
6
ответ дан 6 December 2019 в 12:54
поделиться

Аналогичное решение, но немного более автоматический. Я понятия не имею, какие странные вещи, которые могут произойти все же.

module Foo
  def m1
    puts "Hello from m1"
  end

  def m2
    puts "Hllo from m2"
  end
end

class Module
  alias :__include__ :include
  def include(mod, *methods)
    if methods.size > 0
        tmp  = mod.dup
        new_mod = Object.const_set("Mod#{tmp.object_id}", tmp)
        toremove = new_mod.instance_methods.reject { |m| methods.include? m.to_sym }
        toremove.each { |m| new_mod.send(:undef_method, m) }
        __include__(new_mod)
    else
      __include__(mod)
    end
  end
end

class Bar
  include Foo
end

class Baz
  include Foo, :m2
end

bar = Bar.new
baz = Baz.new
p bar.methods - Object.methods
p baz.methods - Object.methods

=>

["m1", "m2"]
["m2"]
5
ответ дан 6 December 2019 в 12:54
поделиться

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

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

5
ответ дан 6 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

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