• 締切済み

RubyのDateクラスのメソッドが見つからない

先日よりRubyでのプログラミングを始めてみたのですが DateクラスのDate::MOTHNAMESを参照しようとしたところ undefined method `MOTHNAMES' for Date:Class (NoMethodError) と返ってきてしまいました。 ほかにもDate::exist?メソッドもためしてみましたが、同じ様なコメントが 返ってきました。 undefined method `exist?' for Date:Class (NoMethodError) なお、 Date.newなどはつかえています どういった問題でどのように解決すれば良いのか、ご教示願えればと思います。 バージョンは ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] で、Mac OSX Lionで動かしています。

  • Ruby
  • 回答数4
  • ありがとう数3

みんなの回答

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.4

Date::MOTHNAMESではなくて、Date.MOTHNAMESで実行されたのではないでしょうか? MOTHNAMESはメソッドではなく定数なのでエラーになるのだと思います。 D:\>irb irb(main):001:0> require 'date' => true irb(main):002:0> Date::MONTHNAMES => [nil, "January", "February", "March", "April", "May", "June", "July", "August ", "September", "October", "November", "December"] irb(main):003:0> Date.MONTHNAMES NoMethodError: undefined method `MONTHNAMES' for Date:Class from (irb):3 from D:/Ruby193/bin/irb:12:in `<main>' irb(main):004:0> Date.constants => [:MONTHNAMES, :ABBR_MONTHNAMES, :DAYNAMES, :ABBR_DAYNAMES, :ITALY, :ENGLAND, :JULIAN, :GREGORIAN, :Infinity] irb(main):005:0> Date.methods => 表示省略

dcprg24
質問者

お礼

ご親切にありがとうございます。 しかし、Date::MOTHNAMESで実行していました。。

dcprg24
質問者

補足

ruby含め環境を再インストールしたら以上のように表示され、正常にうごきました。 なんだったんでしょうか・・・ 皆様、ご回答ありがとうございました。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

多分、Dateクラスに exist? なるメソッドはない。 MONTHNAMES はある $ irb 001:> require 'date' => true 002:> Date::MONTHNAMES => [nil, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

dcprg24
質問者

お礼

そうでしたか、なにか勘違いしてました。 ありがとうございます。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

Mac OSX Lionの環境は当方にないので、推測ですが require 'date' はされていますか?

dcprg24
質問者

補足

はい、require 'date' をいれています。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

MONTHNAMESではなくて? 月(month)の名前(name)ですよね?

dcprg24
質問者

補足

あ、すみません、単に質問書くときにスペルミスしていました。MONTHNAMESでも同様の状態です。

関連するQ&A

  • Rubyのsuperclassメソッドについて

    Rubyについての質問です。処理系は1.8.7です。 class Foo def initialize(a) @a = a end end のようなクラスを作成し、そのインスタンスを foo = Foo.new(1) のように作成します。 このとき、 foo.superclassを呼び出すと NoMethodError: undefined method `ancestors' for #<Foo:0x2b691220cc88 @a=1> とエラーになります。 一方で class FooExt < Foo def initialize (a,b) @b = b super a end end のようにFooを継承したクラスを作り、 fooext = FooExt.new(1,2) fooext.superclass とすると => Foo とsuperclassメソッドが動作します。 このsuperclassメソッドはどこで追加されたものなのでしょうか?

  • httpメソッドが使えない

    下記の内容のruby を実行したのですが、エラーが出てしまいます。 ---- require 'net/http' req = Net::HTTP::Get.new('/') Net::http.start('twitter.com') do |http| res = http.request(req) print res.body end ---- エラーメッセージ undefined method `http' for Net:Module (NoMethodError) ruby はver 1.8.7, 環境はMacOSX10.6.8です。 原因をご存知の方がいらっしゃいましたら、教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • ruby undefined method

    class Hoge def body "aaa" end end def up(arg) arg.upcase end res=Hoge.new res.body = up(res.body) puts res.body 上記を実行すると、undefined method `body=' for #<Hoge:0x2b36454> (NoMethodError) になります。 最後の2行を以下のように変えるとうまく動作します。 tmp=res.body tmp = up(tmp) puts tmp この理由が理解できません。 説明して頂けませんか?

  • オープンクラスで再定義時に別で定義されたメソッドの

    オープンクラスで再定義時に別で定義されたメソッドの呼び出しについてです。 ある編集不可能なクラス Hoge の fuga メソッドの戻り値によって、新たなメソッド piyo を定義したいと考え、次のコードを試してみました。 irb(main):001:0> class Hoge irb(main):002:1> def fuga irb(main):003:2> 1 irb(main):004:2> end irb(main):005:1> end => :fuga irb(main):006:0> irb(main):007:0* class Hoge irb(main):008:1> if self.fuga == 1 irb(main):009:2> def piyo irb(main):010:3> puts "foobarbaz" irb(main):011:3> end irb(main):012:2> end irb(main):013:1> end NoMethodError: undefined method `fuga' for Hoge:Class from (irb):8:in `<class:Hoge>' from (irb):7 from /usr/bin/irb:11:in `<main>' この目的の場合、8~12行目はどのような記述をすれば良いのでしょうか。 なお、Hoge のインスタンス作成後に特異メソッドとして piyo を追加のが都合上、難しい状態です。 バージョンは ruby 2.1.5p273 です。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • rubyのObject#methodsについて

    こんにちは、 rubyのmethodsメソッドについてです。 met = Object.method(:method) として、ObjectクラスのmethodメソッドをMethodインスタンスとしたとき met.parametes #=> [[:ref]] とすると、引数の情報を得ることができます。 しかし、 met.methods には、「:parameters」がありません。 クラスごとのメソッドを全て表示させたいのですが、 methodsはすべてのメンバを取り出すメソッドではないのでしょうか。 ご存知の方がいらっしゃいましたらお教えくださいませ。 ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Rails 3.1.4 gem 1.8.17 CentOS 5.7

    • ベストアンサー
    • Ruby
  • mechanize のsearch methodについて

    現在Rubyを勉強しているものです。 webページの情報を自動的に取得して、メールの送信をおこなう というプログラムを組んでいます。 Mechanizeを利用すれば可能であることがわかったのですが、 サンプルコードを実行してみたところ、 ./www/mechanize/page.rb:97:in `forms': undefined method `search' for nil:NilClass (NoMethodError) というエラーが発生してしまいます。 その他のコードや、linux環境でも試しましたが同様でした。 どなたかお分かりの方教えていただければと思います。

  • Ruby on Railsについて

    Ruby on RailsでWebアプリケーションを作成します。 下記の順でやりました。 1、データベース表を作成。 2、新規アプリケーションの作成。 3、作成したアプリケーションがどのデータベースを使うのかを教える。 4、モデルの作成。 5、コントローラの作成。 6、新しいアプリケーションを起動。 ここでコマンドプロンプト画面内に表示されるポート番号を確認し、 Webブラウザを起動し、 アドレス欄に[http://localhost:ポート番号/アドレスブック/アドレスブックのリスト] を記入しました。 エラーが表示されました。 NoMethodError in PeopleController#list undefined method `scaffold' for PeopleController:Class

  • Ruby 特異メソッドのnewが先に実行?

    Rubyのインスタンス生成について質問があります。 通常クラスを定義する場合は class Hoge ; def hello(); pirnt "hello"; end であると思います。 ただ Hoge = Class.new(); でもクラスは定義できるとききました。 ただこの場合Hogeクラスに定義できるのは HogeというClassクラスから作られた特異クラスとしてのHogeに 特異メソッドのみを定義できるということですよね? 通常のインスタンスメソッドは定義できませんよね? ではでは、 hoge = Class.new(); とした場合はどうなるのでしょうか? この場合は Classクラスの純粋なインスタンスとなるのでしょうか? 前者の定義とおなじ仕方ですが代入先が、通常の変数です。 この場合は、クラスオブジェクトとして生成されるのですか? オンラインマニュアルをみたところ 「新しく名前の付いていない superclass のサブクラスを生成します。 superclass が省略された時にはObject のサブクラスを生成します。 名前のないクラスは、最初に名前を求める際に代入されている定数名を検索し、見つかった定数名をクラス名とします。」 とあります。 上記内容は Classクラスの特異クラスとして定義されている特異メソッド(new)です。 これは Class.new()で作られたインスタンスを代入する先が定数であればその定数名と同じクラスを定義しつつそのClassクラスのクラスオブジェクトを生成するという意味合いでまちがいないでしょうか? 上記のとおりであれば hoge =Class.new()の場合は、やはりhogeというクラスを定義することになるのでしょうか? クラス定義は定数でなければならないはずですよね。 ただ実際、 p hoge;として出力すると#とひょうじされています。これはhogeがクラスオブジェクトではなく ただのインスタンスであるということでしょうか? であるならばこの hoge = Class.new()の式のnewはClassクラスオブジェクトに定義された特異メソッドではなく Classクラスに定義されたnewメソッド・・・・・つまりClassクラスに定義されたインスタンスメソッドの方のnewメソッドだとおもうのですが・・・・・・。 つまりこちらのメソッドですね。 「new( ... ) クラスのインスタンスを生成して返します。このメソッドの引数はブロック引数も含め initialize に渡されます。」 ※オンラインリファレンスから参照しました。 しかし 通常メソッドの検索は特異メソッドからはじまりその後クラスのインスタンスメソッド->親クラスのメソッドと 検索して行くとあります。 必ず先に、特異メソッドを実行しているはずだと思うのですが・・・。 やはり特異メソッドnewを実行しているのでしょうか? 長々すみませんが、ご教授ください。

    • ベストアンサー
    • Ruby
  • define_singleton_methodについて

    define_singleton_methodについて 1.9.1p378を使用しています。 メタプログラミングに興味があって、 Classに動的に生成したmethodを追加する方法を調べてみると 色々な教科書にdefine_methodを使う例が書いてあるのを見つけました。 しかし、実際にプログラムしてみると"undefined method"になってしまいます。 Class.methods.grep /define/ してみると、"define_singleton_method"というものがあり、 define_methodの代わりに使ってみたら一応期待通りに動作しました。 googleで調べてみてもdefine_singleton_methodについて解説が見つけられませんでした。 1.9系になって名前が変わったのでしょうか? それとも似て非なるものなのでしょうか? 詳しい方、教えてください。<(_ _)>

    • ベストアンサー
    • Ruby
  • 【ruby】クラスCGIを改造して、クエリの文字コードを変えたい

    クエリパラメータを取得するのにCGIクラスを使っています。 Rubyのマニュアルでは『フォームフィールドの値を得る』として以下の様に記載してあります。 require "cgi" cgi = CGI.new values = cgi['field_name'] # <== 'field_name' の配列 私が使用しているサーバはWindowsサーバでして、取得したクエリ(フォームフィールド)は文字コードをs-jisに変換して使う事が大半です。 そこで、CGIクラスそのものを改造して、いちいちvalues.tosjisしなくてもよい様にしたいです。 実は以前に、同じような事を質問してまして(http://oshiete1.goo.ne.jp/qa4944090.html)alias を使えばこのようなことが出来るかなと思い、以下の様に書いてみました。(行頭は全角スペースです。) #!/usr/local/bin/ruby require 'cgi' require 'kconv' STDOUT.binmode STDIN.binmode class CGI  alias :initialize_orig :initialize  def initialize()   hash=initialize_orig()   hash.each do|key,val|    hash[key]=val.collect{|x|x.tosjis}   end   hash  end end cgi=CGI.new if cgi.has_key?('arg') then  STDERR.puts cgi['arg']  cgi.out(){'ok'} end 結果は `initialize': undefined method `each' for nil: NilClass (NoMethodError) で実行不可でした。 initializeはリターンできないからかな。 次に、 class CGI  alias :params_orig :params  def params()   hash=params_orig   hash.each do|key,val|    hash[key]=val.collect{|x|'*' + x + '*'}   end  hash end end などとも書いてみましたが、 undefined method `params' for class `CGI' で実行不可でした。 ご指導のほど、よろしくお願いいたします。

    • ベストアンサー
    • Ruby

専門家に質問してみよう