Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

定数を格納するモジュールを作る? #41

Closed
ochaochaocha3 opened this issue Apr 6, 2015 · 4 comments
Closed

定数を格納するモジュールを作る? #41

ochaochaocha3 opened this issue Apr 6, 2015 · 4 comments

Comments

@ochaochaocha3
Copy link
Member

例えば DiceRoll で使われている定数を他のプラグインで使いたいとき、現在は DiceRoll モジュール直下で定数が宣言されているため、include しにくい。プラグインのモジュールの下に Const のような名前のモジュールを作って、その中で定義する方が使いやすくなるかもしれない。

現在:

module RGRB
  module Plugin
    module DiceRoll
      # アラビア数字による数を表す正規表現
      NUM_RE = /[1-9]/
      NUMS_RE = /[1-9]\d*/
      # ひらがなによる数を表す正規表現
      KANA_NUM_RE = /[あかさたなはまやら]/
      KANA_NUMS_RE = /[あかさたなはまやら][あかさたなはまやらわ]*/
    end
  end
end

案:

module RGRB
  module Plugin
    module DiceRoll
      module Const
        # アラビア数字による数を表す正規表現
        NUM_RE = /[1-9]/
        NUMS_RE = /[1-9]\d*/
        # ひらがなによる数を表す正規表現
        KANA_NUM_RE = /[あかさたなはまやら]/
        KANA_NUMS_RE = /[あかさたなはまやら][あかさたなはまやらわ]*/
      end
    end
  end
end
@killist
Copy link

killist commented Apr 6, 2015

定数は、その定数が用いられる機能をModuleとして、それぞれの定数はそれぞれの定数の関連する機能のModuleにあった方が、再利用しやすいのではないでしょうか。
無関係の定数をMix-inしてしまう可能性が減りますし。

@ochaochaocha3
Copy link
Member Author

@killist さん
ご意見ありがとうございます。下の例に近い感じでしょうか?

@killist
Copy link

killist commented Apr 8, 2015

「どちらか」と言えばそうかもしれません。
記載いただいている例はかなり物理的な意味集合に思えます。
「定数だけでmoduleに切り出して、他でもそのmoduleを使えるようにする」よりは
「その定数を使う機能のmoduleに、定数を収めておく」べきじゃないかなと思います。
(下の例なら、アラビア数字とか、漢数字とか、ローマ数字を使うようなのは、またそれぞれ別のmoduleであるべき、的な。あと、下のは擬似コードとしてください。動作確認してないし…。)

module DiceRoll
  def pip=(max=6)
    @pip=1..max
  end
  def roll
    Random.rand @pip
  end
end
module HiraganaCountable
  HIRAGANA = ['あ','か','さ','た','な','は','ま','や','ら']
  def kana_roll
    i = roll % HIRAGANA.size
    HIRAGANA[i]
  end
end

@koi-chan
Copy link
Member

今回の問題提起は、でたとこサーガプラグインに日本語コマンドを実装する際に、DiceRollプラグインで定義されている定数を流用できないかと思って行いました。
しかし、実際には微妙に必要となる定数(正規表現)が違ったため、流用する必要がありませんでした。
せっかく意見を寄せて頂いたのですが、今回はこの機能については実装を見送りたいと思います。

ちなみに個人的には、「ジェネレータ」「定数」という単位ではなく、プラグインを丸ごと使えるようにするのがいいかと思います。

@dice_roll = RGRB::Plugin::DiceRoll.new()
@dice_roll.dxx_dice('d66')
@dice_roll.const('NUM_RE')

このような書き方ができるような。

ですがこの方法、かなり実装が大変そうだというのが簡単に想像がつきます。その時必要な機能をまた考え直したほうが実情に合ったいいものができるでしょうから、実際に使うときが来るまで実装を見送ります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants