*(1..5)とは?マニュアルで調べる方法と使い方を教えてください。

このQ&Aのポイント
  • Rubyのマニュアルでよく見る表記の一つに*(1..5)というものがありますが、その意味や使い方がよくわかりません。
  • マニュアルを検索しても該当箇所を見つけることができませんでした。
  • どのように扱えばよいのか、マニュアルのどこに記載されているかを教えていただけると助かります。
回答を見る
  • ベストアンサー

*(1..5)の意味

何件か前の質問の中で階乗の計算例として以下が挙げられておりました。 def factorial(n) eval( [*(1..n)].join("*") ) end irb(main):001:0> eval([*(1..5)].join("*")) => 120 irb(main):002:0> [*(1..5)].join("*") => "1*2*3*4*5" irb(main):003:0> [*(1..5)] => [1, 2, 3, 4, 5] irb(main):004:0> *(1..5) SyntaxError: (irb):4: syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.' from D:/Ruby192/bin/irb.bat:19:in `<main>' irb(main):005:0> (1..5) => 1..5 irb(main):006:0> (1..5).class => Range この中の*(1..5)という表記の意味がよくわからず、マニュアルから該当箇所を探すことができませんでした。 http://doc.ruby-lang.org/ja/1.9.2/doc/index.html この機能についてのご説明とマニュアルの何処に記載されているかをご教示いただけると幸いです。 よろしくお願いします。

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

質問者が選んだベストアンサー

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

>この機能についてのご説明とマニュアルの何処に記載されているかをご教示いただけると幸いです。 「メソッド呼び出し(super・ブロック付き・yield)」のあたり。 素直に (1..5).to_a と書いたほうがわかりやすいと思います。

siffon9
質問者

お礼

ご回答ありがとうございました。 マニュアルの以下の部分ですね。 > 最後の引数の直前に * がついている場合、その引数の値が展開されて渡されます。展開はメソッド to_a を経由して行なわれます。 つまり(1..5).to_aを実行した結果の、要素の並びが返されると理解しました。 マニュアルではメソッド呼び出しの部分に書かれていますが、メソッド呼び出しでないところで使用されても機能するということで良いのかな?

その他の回答 (2)

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

> マニュアルではメソッド呼び出しの部分に書かれていますが、 > メソッド呼び出しでないところで使用されても機能するということで良いのかな? うーん。 配列を生成するリテラル表現 [ ??, ??, ... ] が Array.[] メソッド呼び出しと同じように扱われているんだと思いますけど、あんまり自信ない。

siffon9
質問者

お礼

マニュアルの説明ですと、いまひとつ良く分かりませんよね。 自分で書いたとしても、後で意味がわからなくなる可能性がありますので メソッド呼び出し部分以外では使用しないでおこうと思います。 ご回答ありがとうございました。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.2

記号の意味はここ↓を参照されるといいと思います。 Rubyで使われる記号の意味(正規表現の複雑な記号は除く) http://doc.ruby-lang.org/ja/1.9.2/doc/symref.html

siffon9
質問者

お礼

ご回答ありがとうございました。 No1様へのお礼でメソッド呼び出し以外でも使用できることについて書きましたが、 ご提示いただいたリンク先の、多重代入という機能があることが判りました。 ただ質問で挙げた例では「代入」はされていないようにみえますので、少し疑問が残ります。 内部的な一時変数に代入されるということなのでしょうか。

関連するQ&A

  • Rubyのプログラムについて

    Rubyのプログラムについて、宜しければ教えてください。 def fct(n, f=1) if n<=1 then f else fct(n-1, n*f) end end def factorial(n) (1..n).inject{|x,y| x*y} end def factorial(n) eval( [*(1..n)].join("*") ) end このプログラムが、階乗を計算するメソッドになっているみたいなのですが、なぜコレだけで階乗が計算できるのでしょうか? 宜しければ教えてください><

    • ベストアンサー
    • Ruby
  • REXMLについて教えてください2

    http://japan.internet.com/developer/20070703/27.htmlの doc.elements.each("guitars/make/model/color") { |element| puts element.text } を実行したら C:/DOCUME~1/.....: syntax error, unexpected '|', expecting '}' { |element| puts element.text } ^ C:/DOCUME~1/.......: syntax error, unexpected tIDENTIFIER, expecting kDO or '{' or '(' { |element| puts element.text } ^ C:/DOCUME~1/Hideyuki/LOCALS~1/Temp/rb22C.tmp:7: syntax error, unexpected '}', expecting $end Complete(1) とエラーが出ます。 サイトのプログラムそのままなのですが、何か勘違いしてますか? Rubyのバージョンとかが関係あるのでしょうか?

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

    オープンクラスで再定義時に別で定義されたメソッドの呼び出しについてです。 ある編集不可能なクラス 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
  • syntax error 一行で書くと

    複数行で記述してあった箇所を、試しに一行にしてみたら、syntax errorとなりました。 改行した方が見やすいとは思うのですが、一行で書くときは、どうやればよいのでしょうか。 ■正常に動く class Foo __def print3 ____yield(1,2) __end end foo=Foo.new foo.print3{|x,y //この部分を一行にしてみたかったのですが、 __print x,"\n" __print y,"\n" } ■エラーとなる class Foo __def print3 (略) foo.print3{|x,y|print x,"\n" print y,"\n"} //←この行を直したいのですが、 (irb): syntax error, unexpected tIDENTIFIER, expecting '}'

    • ベストアンサー
    • Ruby
  • エラー文の意味

    エラー文の意味 ご質問させていただきます。 Macからターミナルを使ってRubyを動かしているのですが、変数を含んだファイルを実行しようとすると、エラーが出てしまいます。 例えば、 a = 3 print "私はリンゴを", a, "個持っています。" というファイルをapple.rbという名前で保存し、ターミナルから ruby apple.rb で実行すると、以下のようなエラー文が出ます。 apple.rb:1: syntax error, unexpected tIDENTIFIER, expecting $end このエラーはどういう意味なのでしょうか? よろしくお願いします。

  • macでのhomebrewのインストールについて

    MacOSX10.8.5にてhomebrewをインストールしたいです。 調べたところ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" とターミナル上でコマンドを打てばインストール可能とのことでしたので、実行してみました。 ところが、 $ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" -e:4: syntax error, unexpected '<' <!DOCTYPE html> ^ -e:5: syntax error, unexpected '<' <html> ^ -e:7: syntax error, unexpected '<' <meta charset='utf-8'> ^ -e:8: syntax error, unexpected '<' <meta http-equiv="X-UA-Compatible" content="IE=edge"> ^ -e:8: syntax error, unexpected tIDENTIFIER, expecting $end <meta http-equiv="X-UA-Compatible" content="IE=edge"> というエラーが生じてしまいました。 どなたか解決方法をご存知でしたら、教えてください。 よろしくお願いします。

  • engawa.rb:17: syntax error, unexpec

    engawa.rb:17: syntax error, unexpected tGVAR, expecting $end str1 = "縁側でお茶が飲みたい" と文字列に日本語を代入しただけでエラーが出るのですが、これはなぜなんでしょうか? よろしくお願いいたします。 環境のせいかもしれませんので書いておきます。 Linux,UTF-8,Ruby1.8です。

    • ベストアンサー
    • Ruby
  • エラー2401.rb:5: syntax erro

    エラー2401.rb:5: syntax error, unexpected '<', expecting end-of-input <% require 'date' % >の原因がわかりません 2401.rbというプログラムを作成し、実行を致しました。 ---------------------------- # coding: utf-8 require'erb' <% require 'date' % > <h1>ERB Test Page.</h1> <p>今日の日付は: <%= Date.today %></p> ---------------------------- ターミナルで実行したのですが、 下記のエラーが発生しました。 2401.rb:5: syntax error, unexpected '<', expecting end-of-input <% require 'date' % > 何度見なおしても原因がわからなく困っております。 このエラーは何を指しているのかわかりますでしょうか? 宜しくお願いします。 必要な情報は都度教えて頂ければ、追記します。 尚、macで開発しております。 RubyのERBの使用方法を学ぶべく勉強しております。

  • explode

    どうかお願いします。 今 $handle2 = fopen("zenbu.txt", "r"); $contents = fread($handle2,filesize("zenbu.txt")); fclose($handle2); $gyou = explode("|",$contents); としてファイルから読み込んだ文書を分割しようとています。 しかし、 Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in C:\Program Files\xampp\htdocs\URL/sabu.php on line 122 とエラーが出てできません・・・。 文法はマニュアル通りにやってると思うのですが。。 区切り文字が悪いのかと「★」「\n」などで試してみましたが結果は同じでした。 何が悪いのでしょうか

    • ベストアンサー
    • PHP
  • PHPですが、エラーがでます。下記の問題があるよう

    なんですが、どこがいけないのでしょうか? $sql = "insert into menber(name,passward) values($_POST["name"]."','".$_POST["passward"].)";//SQL文の作成 ?> エラーはParse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in です。よろしくお願いいたします。