Skip to content

Instantly share code, notes, and snippets.

@r7kamura
Last active December 10, 2015 03:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r7kamura/4374716 to your computer and use it in GitHub Desktop.
Save r7kamura/4374716 to your computer and use it in GitHub Desktop.
NotImplementedError

NotImpementedError

抽象クラスで、具象クラスに提供して欲しいメソッドを記述するときに使えそう。 単なるraiseでRuntimeErrorを発生させるよりは、意図の分かりやすさとStandardErrorに含まれない点で良い。

class AbstractCollector
  def collect
    raise NotImpementedError, "Implement #{self.class}#collect"
  end
end

class ConcreteCollector < AbstractCollector
  def collect
    ...
  end
end
$ refe NotImplementedError
class NotImplementedError < ScriptError

実装されていない機能が呼び出されたときに発生します。
NotImplementedError.ancestors
[
  NotImplementedError,
  ScriptError,
  Exception,
  Object,
  PP::ObjectMixin,
  Kernel,
  BasicObject,
]

実用例

標準ライブラリのProcess::Sysで、 プラットフォーム依存の機能を利用する場合に利用されている例を見つけた。

$ refe Process::Sys.getuid
Process::Sys.getuid
--- getuid    -> Integer

システムコールの [[man:getuid(2)]] を呼びます。返り値を整数で返します。

@raise NotImplementedError システムコールが現在のプラットフォームで提供されていない場合に発生します。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment