0

ドキュメントを閲覧していたところcamping、コントローラーを定義する次の例に出くわしました。

class Digits < R '/nuts/(\d+)'
  def get(number)
    "You got here by: /nuts/#{number}"
  end
end

このクラス定義が行っていることは、文字列引数をRスーパークラスに渡しているようです。しかし、campingコードベースを調べRたところ、クラスとして定義されていませんでした。次のようなメソッドとして定義されました。

def R(c,*g)
  p,h=/\(.+?\)/,g.grep(Hash)
  g-=h
  raise "bad route" if !u = c.urls.find{|x|
    break x if x.scan(p).size == g.size && 
      /^#{x}\/?$/ =~ (x=g.inject(x){|x,a|
        x.sub p,U.escape((a.to_param rescue a))}.gsub(/\\(.)/){$1})
  }
  h.any?? u+"?"+U.build_query(h[0]) : u
end

実際にルートを処理するメソッド:

def /(p); p[0] == ?/ ? @root + p : p end

クラスを作成してメソッドをスーパークラスとして定義しようとすると、次のようになるため、これがどのように機能するか正確にはわかりません。

def doSomething(boo)
    puts boo
end

class Someclass < doSomething 'boo'
end

次のエラーが表示されます。

(eval):60: (eval):60: superclass must be a Class (NilClass given) (TypeError)

この機能 (メソッドをスーパークラスとして使用) がカバーされている Ruby ドキュメントの場所を教えてもらえますか? この機能を何と呼べばいいのかわからないので、グーグルで検索しても何も見つかりませんでした。

4

1 に答える 1