• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ruby の nil エラー)

Rubyのnilエラーについての質問

このQ&Aのポイント
  • Rubyで10C0〜10C10までの値をすべて合計する計算をさせようと思っていますが、while文を使用した部分でうまくいきません。nilエラーが発生してしまいます。どうすれば解決できるでしょうか?
  • Rubyで10C0〜10C10までの値をすべて合計する計算を行っていますが、while文を使用した部分の処理でnilエラーが発生しています。このエラーの原因は何でしょうか?解決方法を教えてください。
  • Rubyで10C0〜10C10までの値をすべて合計する計算を行っているのですが、while文を使用した部分でnilエラーが発生してしまいます。このエラーを解決する方法を教えてください。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

関数ab は、計算結果を表示はしていますけど、 その結果を関数の戻り値として返してないですね。 (元のコードでは、puts の結果(=nil)を、関数の戻り値にしてしまっています) > puts b / ( d * f ) これを、 > b / ( d * f ) にしてください。

aaaiiyuda
質問者

お礼

なるほど!!定義がされていなかったわけですね!!! すべての謎が解けました!! a(g,h)に値を代入しても、その値が、そのputsのところから算出 されていて疑問だったこともありました。 感謝します!ありがとうございました!!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エラー

    ruby で 組み合わせの10C0から10C10までの値をすべて合計した値を求めるアルゴリズムを作ったのですが、undefined method '+" for nil:NilClass(No Method Error)となってしまいます。 def で a(b,c)をbCcと定義しており、4の+jを書かなければ ちゃんと、1,10、45、、252と計算され表示されます。 この値の合計を出したいのですが、なぜエラーになるのでしょうか。 1 i=0 2 j=0 3 while i <= 10 4 j = a(10,i) + j 5 i = i + 1 6 puts k 7 end ーーーーーーーーーーーーーー たとえば階乗を求めるアルゴリズムで a=1 b=1 while a<=10 do b = b * a a = a + 1 end puts b の場合は、ちゃんと自己加算されます。

    • ベストアンサー
    • Ruby
  • Loopの使い方について

    Rubyで 数字を下記のようなやり方では1~12 までの数字をまわせるプログラムと 文字のa~l までまわせるプログラムを合体させたいのですがどのようにすればよいでしょうか? #1-12 までの数値をまわすソース n=1 loop do puts n if n == 12 break end n += 1 end 実行結果↓ 1 2 3 4 5 6 7 8 9 10 11 12 # a~ lの小文字をまわすソース ["a","b","c","d","e","f","g","h","i","j","k","l"].each do |n| puts n end 実行結果 a b c d e f g h i j k l 上記のプログラムをあわせて、実行結果が、↓ 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j 11 k 12 l ↑ このようにするには、どのようにすればよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • ruby 正規表現について教えてください。

    aというテキストファイルを読み込むときの処理なんですが、 aというテキストファイルは↓のようになってます。 #AA1#(001-1 001-2 001-3) #AA2#(pro pro) #AA3#(num1) #AA1#(002-1 002-2 002-3) #AA2#(dro dro) #AA3#(num2) このファイルから#AA1#の()でくくった部分を縦に並べて、その横に#AA3#の()でくくった部分を縦で表示させたいんです。 実行結果を下のようにしたいです。 001-1 num1 001-2 num1 001-3 num1 002-1 num2 002-2 num2 002-3 num2 一応がんばって、下のように考えたんですが、上手く実行できないです。どうか、回答おねがいします。 a= [] b = [] c = [] while line = gets if /#AA1#\((.*\s)(.*\s)(.*)\)/ =~ line a.push $1 a.push $2 a.push $3 end if/#AA3#\((.*)\)/ =~ line b.push $1 end end c = [a,b] puts c

  • ruby forkについて教えて下さい

    親プロで用意した配列の中の要素を一つづつ子プロでputsした後、最後一回、親プロで生成した子プロのPIDを確認したいです。 こんなふうに書いてみました。 #!/usr/bin/ruby table=%w(a b c d) array=[] while i=table.pop do if pid=fork then array.push pid puts pid break if table.size > 0 p array else puts i end end 実行すると、以下のような結果になりました。 $9200 c 9201 b 9202 [9202] a $ PIDが一つしか得られてません。 どうしたらよいでしょうか? ご教授の程、宜しくお願いいたします。 rubyは 1.8.7 を使ってます。 以上、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • VBA マクロ エラー1004 アプリケーション定義またはオブジェクト定義のエラー

    VBAで正当表と入力表の正誤判定を一気に行いたいのですが If Cells(a, b).Value = Cells(c, d).Value Thenの部分で エラー1004、アプリケーション定義またはオブジェクト定義のエラーと出てしまいます。 エラーの対処の仕方を調べたのですがわかりませんでした。 教えていただけるとありがたいです。 以下作ったプログラムです。 Sub 正誤判定() Dim a Dim b Dim c Dim d Dim e Dim i Dim j Dim x Dim y Dim hokan Dim ytate Dim xyoko a = 3 b = 21 c = 3 d = 43 e = 2 i = 1 j = 1 Do While j < 261 Do While i < 11 If Cells(a, b).Value = Cells(c, d).Value Then a = a + 1 c = c + 1 If Cells(a, b) = Cells(c, d) Then hokan = Cells(e, b).Value ytate = Range("B2:S15").Find(hokan, lookat:=xwhole).Row + 15 xyoko = Range("B2:S15").Find(hokan, lookat:=xwhole).Column Cells(ytate, xyoko).Value = Cells(ytate, xyoko).Value + 1 Else End If Else End If a = a - 1 c = c - 1 b = b + 1 d = d + 2 i = i + 1 Loop a = a + 3 c = c + 3 e = e + 3 j = j + 1 Loop End Sub

  • こんなエラーが出ます!

    次のようなエラーが出ます! 環境はWIN98se、使用ソフトはワード2000と、EMエディタ程度です。 何か変わったことをした記憶はありませんが、急に頻繁にエラーが発生し、全く作業が進みません。 先程オフィス2000を上書インストールしましたが、ダメでした! 宜しくお願いします。 EMEDITOR のページ違反です。 モジュール : IMEJP98K.DLL、アドレス : 0167:7c68b102 Registers: EAX=84d7726f CS=0167 EIP=7c68b102 EFLGS=00010246 EBX=0000002d SS=016f ESP=0069f89c EBP=0000002c ECX=00000000 DS=016f ESI=004aa1c0 FS=3e8f EDX=84cf4000 ES=016f EDI=004aa1c0 GS=0000 Bytes at CS:EIP: 66 8b 79 01 66 89 ba b6 00 00 00 66 c7 41 01 00 Stack dump: 004aa1c0 004a0000 7c68a218 004aa1c0 004aa1c0 004aa1c0 0000002d 7c68a02c 004aa1c0 0000001c 0000002d 0069f8e0 004aa1c0 0000002c 7c6dbe6a 7c6e8c1c

  • 【ruby】【文法?】ブロックをbreakした時。。

    質問を見ていただいて有難うございます。 質問を一言で言うと、 「メソッドの中で呼び出し元がbreakを使った事を検知できるか?」 となるのでしょうか。。。以下に詳しく質問を記述いたします。 引数に配列を渡すと、その配列をブロックに一つずつ返してくれる メソッドhoge()があるとします。 以下の様に使います。 ------------------------------------- hoge([0,1,2]) do |x|  puts x end 実行結果 0 1 2 ------------------------------------- このhoge()は、実行中にエラーが発生した場合、トラップして falseを返す事とします。(何事もなければtrueを返します。) このhoge()を以下の様に書きました。 def hoge(arg)  begin   arg.each do |x|    yield x   end  rescue   false  else   true  end end 以下の様に使います。 ------------------------------------- ret=hoge([0,1,2]) do |x|  puts x end puts ret ? 'success' : 'fail' 実行結果 0 1 2 success ------------------------------------- ------------------------------------- ret=hoge(nil) do |x|  puts x end puts ret ? 'success' : 'fail' 実行結果 fail ------------------------------------- ここまでは、よかったのですが、hoge()のブロックの中で、breakを使うと hoge()の戻り値はnilになってしまいます。 ------------------------------------- ret=hoge([0,1,2]) do |x|  break if x==1  puts x end puts ret puts ret ? 'success' : 'fail' 実行結果 0 nil fail ------------------------------------- ここで質問です。 最後の例は、hoge()として異常系ではないので、retにtrueを与えたいのですが、どうしたらよいでしょうか? ご指導のほど、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • これらの文を意味のわかる分にしてください

    アドレス          ダンプ    逆アセコード 00551A90 31C9 XOR ECX,ECX 00551A92 51 PUSH ECX 00551A93 E8 68575000 CALL 00A57200 00551A98 59 POP ECX 00551A99 41 INC ECX 00551A9A 83F9 02 CMP ECX,2 00551A9D 75 F3 JNZ SHORT 00551A92 00551A9F 31C0 XOR EAX,EAX 00551AA1 C2 0400 RETN 4 00551AA4 90 NOP 00551AA5 ゞ 00551AA6 ゞ 00551AA7 ゞ 00551AA8 ゞ 00551AA9 90 NOP 00551AAA 8B4424 04 MOV EAX,[ESP+4] 00551AAE 8B48 04 MOV ECX,[EAX+4] 00551AB1 8B10 MOV EDX,[EAX] 00551AB3 8B40 08 MOV EAX,[EAX+8] 00551AB6 51 PUSH ECX 00551AB7 52 PUSH EDX 00551AB8 50 PUSH EAX 00551AB9 E8 12BB2B00 CALL 0080D5D0 00551ABE 83C4 0C ADD ESP,C 00551AC1 33C0 XOR EAX,EAX 00551AC3 C2 0400 RETN 4

  • Excel関数:文字を含む複数条件の合計

    関数の達人の方、教えてください! A B C D E F ―――――――――――――――――――――――― 1 | 商品名    A社   B社  C社  A社  C社 2 | AA (1) 1 1 (2) 2 3 | BB 1 1 1 2 2 4 | ab AA (1) 1 1 (2) 2 5 | ab BB 1 1 1 2 2 6 | ab AA cd (1) 1 1 (2) 2 7 | ab BB cd 1 1 1 2 2 ―――――――――――――――――――――――― この表から「A社のAAを含む合計=合計9」を出したいです。つまり○数字になっているところの合計です。 自分なりに以下で試したところ、いづれも「0」となってしまいました。 =SUMPRODUCT((A2:A7="*AA*")*(B1:F1="A社"),(B2:D7)) =SUMPRODUCT(((A2:A7="*AA*")*(B1:F1="A社")),(B2:D7)) 列ごとで AA を含む合計を一旦計算することはできましたが、A社は複数列あるため、できれば一度に A社 の該当する合計を出せればと思っています。 =SUMIF(A2:A7,"*AA*",B2:B7) → 合計3 よろしくお願いいたします。

  • 【Ruby】マルチスレッドでなくマルチプロセスで

    以下の様なプログラムをマルチスレッドでなくマルチプロセスで実現したいです。 #!/usr/bin/ruby require 'thread' q=Queue.new data=%w(a * * * b * * c * * d * *) data.each do |d| q.push d end (1..4).each do |n| Thread.start { while 1 do d=q.shift break if d!='*' end puts n.to_s+' '+d.to_s }.join end rubyのバーションは ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin10.0] です。バージョンをあげる事は、できれば避けたいです。 実際には上記プログラムの【puts n.to_s+' '+d.to_s】してる所は、ネットに繋いで云々の時間のかかる処理なのですが、まったくパラレルに行なっている様子が無いので、マルチプロセス化したら早くなるかなと思いました。 子プロセスを生成して親プロセスとはパイプで繋いで、、などとするのかなあと試行錯誤したのですが、どうもうまくできません。 ご指導の程、よろしくお願い申し上げます。

    • ベストアンサー
    • Ruby
このQ&Aのポイント
  • 新しく買いましたが、古いパソコンなのでインストールできませんでした。方法があれば教えてください。
  • パソコンのOSはWindowsXPです。接続はUSBケーブルです。
  • 関連するソフト・アプリはありません。電話回線の種類は不明です。
回答を見る

専門家に質問してみよう