Каракал драгоценный камень на рубине перейти к различным методам, продолжая писать на документе - PullRequest
0 голосов
/ 15 мая 2018

Я использовал гем Caracal для Ruby, и я изо всех сил пытаюсь заставить его переключаться между методами, все еще записывая в тот же документ.Например:

def main_method
   Caracal::Document.save "test.docx" do |docx|
      docx.p "stuff"
      docx.h1 "more stuff"
      docx.h2 "even more stuff"
            if $var == 1
            method1
            else
            method2
            end
   end
end

def method1
  docx.p "write this"
end

def method2
  docx.p "or write this instead"
end

Но нет, если я перейду к другому методу, он не продолжит запись в документе, и, очевидно, у Каракала нет способа открыть документ, позиция в конце,и продолжить запись (например, File.open Руби ('test.txt', 'a')

Кто-нибудь знает способ обойти это? Я знаю, что я могу поместить "write this" непосредственно в операторы if, ноэто просто базовый пример, на самом деле мне нужно несколько разветвлений, так как выполняются разные условия, поэтому мне действительно нужно перейти на разные методы, иначе это будет ужасный беспорядок.

Спасибо, сообщество !!

1 Ответ

0 голосов
/ 15 мая 2018

Переменная docx находится только в области видимости в блоке, прикрепленном к методу save.Чтобы другие методы могли видеть и использовать эту переменную, вам нужно будет передать ее в качестве параметра.

Сначала заставьте методы принимать параметр, например,

def method1(docx)
  docx.p "write this"
end

, затемпередайте фактическую переменную в качестве аргумента при вызове метода:

#...
if $var == 1
  method1(docx)
else
# etc...
...