は、私は次のようにレポートのクラスが定義されている次のようモジュールにデータを設定して、Rubyのモジュールメソッドでデータを再利用する方法はありますか?
class Report
include Parser
def initialize(file: file)
@file = remove_bookmarks(file: parse(file))
@proofread_text = original(file: @file)
@original_text = proofread(file: @file)
@paragraphs = paragraphs(file: @file)
end
end
パーサモジュールは、次のとおりです。
module Parser
def parse(file:file)
zip_file = Zip::File.open(file)
end
def remove_bookmarks(file: file)
file.at("//w:bookmarkStart").remove if file.at("//w:bookmarkStart")
file.at("//w:bookmarkEnd").remove if file.at("//w:bookmarkEnd")
end
def proofread(file: file)
text(@file, filter: 'del')
end
def original(file: file)
text(@file)
end
def paragraphs(file: file)
file.xpath('//w:p[w:ins or w:del]')
end
def text(file: file, filter: 'ins')
xpath("//text()[not(ancestor::w:#{filter})]").map(&:text).join("")
end
end
私は私のinitializeメソッドは、パーサモジュール内の別のメソッドに同じファイルを渡すことに気づきました。
ファイルのデータをモジュール内で使用できるように設定する方法はありますか?毎回ファイルオブジェクトを渡す必要はありませんか?
に
file.at("//w:bookmarkStart").remove if file.at("//w:bookmarkStart")
を変更することができます:
また、のような何かを行うことができますfile.at( "// w:bookmarkStart")&。あなたの答えを削除してください。 Rubyバージョン2.2.3を使用しています。私はコードを試してみたときに "予期しない"というエラーが出ました。 "私はRubyバージョン2.4が必要ですか? – chell
これはRuby 2.3で導入されました。セーフナビゲーションオペレータと呼ばれています。パフォーマンスが問題であれば、私は 'at'関数の戻り値を保存することを検討します(遅く見えます)。 –
ありがとうMarc。私はat関数の戻り値を保存し、新しい考え方を利用するためにRuby 2.3に挑戦します。 – chell