Ruby 初心者スレッド Part 58 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/03/23(水) 21:16:44.36ID:6HedlyzC質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 57
http://peace.2ch.net/test/read.cgi/tech/1426165733/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0288デフォルトの名無しさん
2016/06/05(日) 13:42:43.61ID:sTpf+U42なんでマルチしようと思ったの?
0289デフォルトの名無しさん
2016/06/05(日) 16:47:36.99ID:V1+RWzEFdef <=>(other)
〜〜
end
end
というのを定義したとして、
<=>の左右を取り換えても同じ結果になるように
class Array
def <=>(other)
return 〜〜 if Foo === other
ここに<=>の古い定義による処理
end
end
みたいに書きたいんですが、可能でしょうか?
イメージとしてはsuperみたいな感じを思い浮かべています
0290デフォルトの名無しさん
2016/06/05(日) 16:58:06.72ID:yB2MQIFp> <=>の左右を取り換えても同じ結果になるように
その考え方自体がおかしい
あと>>288はテストケース書くことを覚えるといいぞ
0291デフォルトの名無しさん
2016/06/05(日) 17:08:54.52ID:V1+RWzEF左右取り換えても同じ結果っていうのは
Fooオブジェクトfoo <=> Arrayオフジェクトarray
が 1 なら
Arrayオブジェクトarray <=> Fooオフジェクトfoo
は -1 になる、っていう意味でした(0の時は不変)
すみません
テストケースというのも調べてみます!
0292デフォルトの名無しさん
2016/06/05(日) 23:24:46.76ID:bEHxSIM9$VERBOSEグローバル変数は、プログラム実行時に設定されるから、
コンパイル時には警告が見れないらしい
コンパイル時・実行時で、使いわけてくれ
>>289
9 <=> "9" → nil
Effective Ruby の項目13に書いてあるけど、
異なるクラス間では、<=> 宇宙船演算子は比較不能で、nil を返すのが無難
型変換か、ダックタイピングで考えた方が、無難
0293デフォルトの名無しさん
2016/06/06(月) 10:29:45.98ID:4LJvtaQKいくつか方法がある
http://d.hatena.ne.jp/rubikitch/touch/20080504/1209835550
0294デフォルトの名無しさん
2016/06/06(月) 11:05:15.34ID:4LJvtaQKリンク先よく見ずに貼っちゃったけど
そういう場合はprepend/superだな
Module FooExt
def <=>(other)
return 〜〜 if Foo === other
super
end
end
class Array
prepend FooExt
end
0295デフォルトの名無しさん
2016/06/06(月) 11:47:47.85ID:MfRp00K1Rubyではなんでもできるなにしても許されるなんて思い上がってた時代の遺物ではある
今は標準クラスの拡張をしなくて済むような方法をなんとか模索するのが普通
普通の言語になっちゃったって? まあねえ
0296デフォルトの名無しさん
2016/06/06(月) 12:13:03.09ID:G3lOY9F4Yahoo!知恵袋みたいな回答だな
0297デフォルトの名無しさん
2016/06/06(月) 12:55:43.54ID:uH2v6H5pどうもありがとうございます!
prependがちょうど想定していたようなものでした!
0298デフォルトの名無しさん
2016/06/06(月) 13:06:00.10ID:LOH+gXPe十年前はムダに意識高かったな
0299デフォルトの名無しさん
2016/06/06(月) 15:33:00.64ID:MfrgUwdVちなみに多分関係ないと思うけど、
数値っぽいクラスを作るときはNumeric#+とかを再定義するんじゃなくてFoo#coerceを定義するんだぞ
http://docs.ruby-lang.org/ja/2.1.0/method/Numeric/i/coerce.html
0300デフォルトの名無しさん
2016/06/06(月) 17:30:53.24ID:uH2v6H5pcoerceを知らずに、まさにやらかそうとしてました
重ねてありがとうございます!
0301デフォルトの名無しさん
2016/06/09(木) 20:20:07.54ID:biKmaAAlNet::HTTP クラスというのが出て来たのですが、ここで使われている::の記号はNetクラスのHTTPメソッドを呼び出しているとみて良いのでしょうか?
0302デフォルトの名無しさん
2016/06/09(木) 20:28:02.35ID:OsIQiMsDFOO$bar Fooクラスのbarメソッド
0303デフォルトの名無しさん
2016/06/09(木) 20:28:44.66ID:XKw/hvPS面倒なら階層区切りの記号だとでも思ってくれ
Windowsエクスプローラーの\
URLの/
0304デフォルトの名無しさん
2016/06/09(木) 20:28:48.01ID:OsIQiMsD$じゃなくて#ね
0305デフォルトの名無しさん
2016/06/09(木) 20:46:09.43ID:biKmaAAlあるクラスのインスタンスメソッド名は
マニュアルではクラス名#メソッド名
クラスメソッドの名前表記には
クラス名.メソッド名
クラス名::メソッド名
というのがだいぶ前のページにありまして、それに従って解釈すると
Net::HTTPはNetクラスのHTTPメソッド
って事になるのだけれど、irbでNetクラスが呼び出せないのでおかしいなと。
0306デフォルトの名無しさん
2016/06/09(木) 20:51:52.35ID:OsIQiMsDhttp://docs.ruby-lang.org/ja/2.3.0/library/net=2fhttp.html
0307デフォルトの名無しさん
2016/06/09(木) 21:50:59.90ID:bVgVhSJZ0308デフォルトの名無しさん
2016/06/09(木) 22:07:37.30ID:c+D8jpow0309デフォルトの名無しさん
2016/06/09(木) 22:35:18.52ID:j0nSzaIT○自宅検索員
0310デフォルトの名無しさん
2016/06/10(金) 00:58:53.85ID:w12bLHXo>ここで使われている::の記号はNetクラスのHTTPメソッドを呼び出しているとみて良いのでしょうか?
いや、それは間違いだよ
正しくは「::の記号はNetモジュールのHTTPクラスを参照している」と読む
・Rubyでは、名前空間として階層的な(=入れ子になった)モジュール構造を定義できる
・Rubyでは、クラスClassはクラス Modouleを継承している(=サブクラスである)から、クラスも(モジュールと同様に)階層的なモジュール構造を定義できる
・記号::は、この階層的な名前のパスを区切るために用いられる(>>303)
たとえば Net::HTTP::Getは、モジュールNet内で定義されたクラスHTTPの
更にその中で定義されたクラスGetを指す
くわえて Net::HTTP::Get::METHODは、前記のクラスGet内で定義された
定数METHODを指す
http://www.h6.dion.ne.jp/~machan/tmdoc/example/net.book/html/tmdoc.def.Net.HTTP.Get.html
$ irb
>> require 'net/http'
=> true
>> Net::HTTP.new('127.0.0.1')
=> #<Net::HTTP 127.0.0.1:80 open=false>
>> Net::HTTP::Get::METHOD
=> "GET"
>>
0311デフォルトの名無しさん
2016/06/10(金) 01:05:31.69ID:w12bLHXo>それに従って解釈すると
>Net::HTTPはNetクラスのHTTPメソッド
>って事になるのだけれど、
Rubyでは:
・モジュール/クラス/定数は、英大文字で始まる
・メソッド/ローカル変数は、英子文字で始まる
という決まりがあるから、記号HTTPは
(メソッドではなくて)モジュールもしくは
そのサブクラスであるクラスを表すものと推測すべき
0312デフォルトの名無しさん
2016/06/10(金) 03:03:40.39ID:1r2/ZPeGこれの2つめは初心者混乱するだろ
どうしても2つめを書きたいならFoo#barとFoo.barの違いと一緒に伝えるべき
0313デフォルトの名無しさん
2016/06/10(金) 23:17:05.17ID:bspATi8a昔のMacOSでは:がフォルダ階層のパス区切り記号に使われていたらしいから、開発者はAppleUserだった?
0314デフォルトの名無しさん
2016/06/11(土) 06:13:16.75ID:Z1WdmHmpC++由来
残念でした
0315デフォルトの名無しさん
2016/06/11(土) 11:55:15.68ID:peVuG0iDhttps://pbs.twimg.com/media/Cko0bn9VAAANiKM.jpg
https://pbs.twimg.com/media/Cko0cHtUUAAvUQo.jpg
https://pbs.twimg.com/media/Cko0cbrUYAYeAnc.jpg
0316デフォルトの名無しさん
2016/06/11(土) 19:18:48.19ID:iSPIsEmM0317デフォルトの名無しさん
2016/06/11(土) 20:06:42.47ID:tJYHO1Aeたぶんこいつ
https://chomado.com/
0318デフォルトの名無しさん
2016/06/12(日) 02:29:41.59ID:GVmUZEwV0319デフォルトの名無しさん
2016/06/12(日) 11:23:16.13ID:xN9NR8mnちょまどの絵は好みじゃないけど、
CPUの創り方
の絵を描いた絵師さんを知りたい。
0320デフォルトの名無しさん
2016/06/12(日) 14:16:10.54ID:5Z+bF2WO0321デフォルトの名無しさん
2016/06/12(日) 16:09:48.75ID:nE4rQ5a5http://livedoor.blogimg.jp/rogyweb314/imgs/3/b/3b3ad6de.png
0322デフォルトの名無しさん
2016/06/12(日) 17:10:50.81ID:cSvEa/akストーキングしたいので教えてくださいって。
0323デフォルトの名無しさん
2016/06/12(日) 21:14:18.29ID:4Gt33m04スレチだけど
本文イラスト 須田 都 って書いてた
0324デフォルトの名無しさん
2016/06/13(月) 01:42:21.85ID:BHwe7pwoビルドの進捗状況を報告させることってできます?
時間かかってるときに固まってるのか進んでるのかわからない・・・
0325デフォルトの名無しさん
2016/06/13(月) 03:03:23.43ID:I6MCNyjd0326デフォルトの名無しさん
2016/06/13(月) 15:11:26.91ID:zgrawcOEスレチだけど
本文執筆者と絵師は同一人物ってことになるな
0327デフォルトの名無しさん
2016/06/13(月) 18:07:35.31ID:3kyYR2Nyスレチだけど
著者は渡波 郁 になってたよ
0328デフォルトの名無しさん
2016/06/13(月) 18:18:33.22ID:LOYYlPRQいい加減黙れ
0329デフォルトの名無しさん
2016/06/13(月) 19:09:49.77ID:Q+rjY21+スレチだけど、下の名前が同じだから、ペンネームかもね
0330デフォルトの名無しさん
2016/06/13(月) 20:10:53.27ID:EyvJcWZd出版毎に
行くぞ幽霊作家
ゴーストライター
0331デフォルトの名無しさん
2016/06/14(火) 01:09:38.96ID:6xiZrmBIRuby/GSLだとちょっとオーバースペック過ぎて…
0332デフォルトの名無しさん
2016/06/14(火) 10:21:33.16ID:dYSnVaKQ規模は、Model数でいうと20個くらいです。
Controller的なものもRubyで、Viewはありません。
で、データベースアクセスにActiveRecordを使ってみようと思ったんですが、establish_connection()に
250msくらいかかってしまいます(localのPostgreSQLに対して)。
これだと、Model用のテストで、データベース接続だけで250*20=5秒もかかってしまいます。
これを改善する方法はありますか?
・establish_connection()そのものを速くする方法
・test/unitを使ったテストでデータベース接続を共有する方法など
環境は、
ruby 2.3.1p112
activerecord (4.2.6)
CentOS release 6.8
0333デフォルトの名無しさん
2016/06/14(火) 13:07:34.64ID:Xw3W+KJl割とマジで
0334デフォルトの名無しさん
2016/06/14(火) 13:58:36.80ID:dYSnVaKQ情報サンクス。
irubyはハードルが高そうなので、とりあえずjrubyで試してみるかと思ったけど、jruby + pg + activerecordな
環境を作るのさえハードルが高そうです。
$ irb
irb(main):001:0> require 'pg'
=> true
irb(main):002:0>
となるのに、
$ ruby test.rb
Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
というエラーが。
$ ruby -v
jruby 9.1.2.0 (2.3.0) 2016-05-26 7357c8f Java HotSpot(TM) 64-Bit Server VM 25.45-b02 on 1.8.0_45-b14 +jit [linux-x86_64]
ちょっとあきらめモードです。
0335デフォルトの名無しさん
2016/06/14(火) 14:05:30.93ID:bPd6E78Aこれよくわからんのだけどデータベースはひとつじゃないの?
モデルはテーブルに当たると思うのだが
0336デフォルトの名無しさん
2016/06/14(火) 14:24:28.45ID:dYSnVaKQモデルの数=models/*.rbのファイル数=test/*_test.rbのファイル数
となると思ってます。
*_test.rbを1プロセスでまとめて実行できれば、データベース接続も共有できそうな気がするんですが、
現状では*_test.rbそれぞれを別プロセスで実行し、それぞれデータベースに接続してます。
全体的にActiveRecordを使った方が楽になりそうではあるんですが、ノウハウが無いのと接続が
遅いということで、現状はPG::connect()して直接pgのメソッドを使ってコーディングを進めてます。
0337デフォルトの名無しさん
2016/06/14(火) 22:17:59.99ID:Kzbvzu4bDBMS(PostgreSQLサーバ)への接続にいくらかの時間を要するのは当たり前のこと
普通はDBMSにはアプリ起動時(あるいは初回のアクセス時)に接続してそれを維持する
また、すこし規模が大きくなれば(=「それほど小さくはない」規模になれば)、
コネクションプールといった技法も要求される
それから「250*20=5秒」という計算式について、この20という定数は何の値かな?
もしModel(=テーブル)の数ということであれば、根本的なところで勘違いしてるよ
DBMS上で複数のデータベースを定義して、そのデータベース単位にコネクションを確立する
だからデータベース内に存在する複数のテーブル(=Model)をアクセスするのに、
あらたにコネクションを張る(=データベースに接続する)必要は無い
0338デフォルトの名無しさん
2016/06/15(水) 02:30:34.57ID:Gm0oH8T8だいたいRuby やワイスの格好見てみろ
フリフリのミニスカとか戦闘する気あんのかと
0339デフォルトの名無しさん
2016/06/15(水) 10:14:53.09ID:0Hf+sg/L> DBMS(PostgreSQLサーバ)への接続にいくらかの時間を要するのは当たり前のこと
その「いくらか」のオーダーは、直接接続するのとactiverecordを使用するのとでは大きく異なります。
--
t = Time.now
PG::connect(:host => 'localhost', :user => '**', :password => '**', :dbname => '**')
puts Time.now - t
--
=> 0.003679357
> それから「250*20=5秒」という計算式について、この20という定数は何の値かな?
test-unitを使ったテストファイルの数です。
user_test.rbとか。それがModelの数分できるので20ファイルくらいできる予定です。
> だからデータベース内に存在する複数のテーブル(=Model)をアクセスするのに、
> あらたにコネクションを張る(=データベースに接続する)必要は無い
現状では、20ファイル(できる予定)のテストを1プロセスで実行できる方法が見つかっていないので、
それぞれ別プロセスで実行していて、そのためデータベースへの接続も20回必要になります。
0340デフォルトの名無しさん
2016/06/16(木) 22:27:32.05ID:DrR6OXvdnil[0]=0
が例外にならないんだけど、なぜだろう?
Ruby2.2だと、ふつうに例外になるのに。
Ruby2.3.0でも、nil[0]なら例外になる。
なんかおかしい気が。
0341デフォルトの名無しさん
2016/06/16(木) 22:46:45.58ID:lq2RMnrwバグ報告しましょう
0342デフォルトの名無しさん
2016/06/16(木) 23:21:17.48ID:T2EM03jj0343デフォルトの名無しさん
2016/06/16(木) 23:36:15.65ID:G8mFGz+4とかしてもNameErrorにすらならないんだな
0344デフォルトの名無しさん
2016/06/16(木) 23:54:18.82ID:neKk6sZN0345340
2016/06/17(金) 10:43:12.89ID:SNT89ii+お、たすかる。
2.3.1のWindows版バイナリはまだ配布されてないので。
やっぱりバグで、修正されたんやね。
0347デフォルトの名無しさん
2016/06/17(金) 11:50:15.28ID:wk6+tOOo0348デフォルトの名無しさん
2016/06/17(金) 12:57:18.13ID:hG7B1m7h>nil[0]=0
1.8.7 だと無事エラーになった
0349デフォルトの名無しさん
2016/06/17(金) 13:29:02.01ID:WSjlHFjC0350デフォルトの名無しさん
2016/06/17(金) 14:21:01.72ID:SYFwm9MP231で修正されてるならあんまり気にしなくて良さそうだね
0351uy ◆e6.oHu1j.o
2016/06/17(金) 16:33:46.05ID:GkjZw5OCYAMLで読み書きをしてるコードをしばらく動かしていたら
c:/ruby/lib/ruby/2.3.0/psych.rb:377:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 2 column 1 (Psych::SyntaxError)
ロードエラーが出てきて、
ファイル開いてみると確かにデータのインデントが変な風に書き込まれていました(20回分くらいのデータは正常に書き込まれています
読み書きは
YAML.load_file( YAML_FILE )
と
YAML.dump( yaml , open( YAML_FILE , 'w') )
でやっています
間違ったデータを書き込んでる原因は模索中です
YAML.dumpで書き込んだデータが
YAML.load_fileで読めないケースってあるんですか?
書き込まれていたのはこんなデータです
http://echo.2ch.net/test/read.cgi/tech/1458735404/:
uy:
- '9999'
http://echo.2ch.net/test/read.cgi/tech/1458955459/:
uy:
- '9999'
- '2'
http://echo.2ch.net/test/read.cgi/tech/1462970810/:
uy:
- '9999'
- '9999' ← これが間違って書き込まれているデータ
0352uy ◆e6.oHu1j.o
2016/06/17(金) 16:36:29.12ID:GkjZw5OCインデントがおかしくなりました 修正
http://echo.2ch.net/test/read.cgi/tech/1458955459/:
uy:
- '9999'
- '2'
http://echo.2ch.net/test/read.cgi/tech/1462970810/:
uy:
- '9999'
- '9999'
0353デフォルトの名無しさん
2016/06/17(金) 17:24:52.68ID:WSjlHFjC再現するソースを貼りなさい
0354デフォルトの名無しさん
2016/06/17(金) 17:34:13.83ID:8Hiy7fy+>YAML.dumpで書き込んだデータが
>YAML.load_fileで読めないケース
>← これが間違って書き込まれているデータ
自分で論理的に原因の切り分けも出来ないくせに原因特定するなんて馬鹿のすることです。
0355uy ◆e6.oHu1j.o
2016/06/17(金) 18:48:19.99ID:GkjZw5OCuy式会社uyの守秘義務があるので貼れません
>>354
もう少しわかりやすくお願いします
自分が知りたいのは
YAML.dump( yaml , open( YAML_FILE , 'w') )
↑ の時
変数:yaml にどのような値を入れて .yamlファイルを作成した場合に
この c:/ruby/lib/ruby/2.3.0/psych.rb:377:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 2 column 1 (Psych::SyntaxError)
エラーが出現するかという事ですが
一般的な方法で再現する方法は存在しないという事で良いですか?
いま現在いくつかのエラーチェックを入れ再び同スクリプトを稼働し
原因特定のため全変数を.txtでdumpしながら走らせて3時間程になりますが
今のところエラーは出現していません
0356デフォルトの名無しさん
2016/06/17(金) 19:13:18.67ID:YpnIY8DDRubyがPythonのようなポジションを得られなかったのはなぜか
http://developers.srad.jp/story/16/06/17/0827240/
最近日本でもPython本急に増えた印象あるよね。
やばいのかなRuby。
0357uy ◆e6.oHu1j.o
2016/06/17(金) 21:55:15.96ID:GkjZw5OCほぼ同じ別のスクリプトで再発し今度はさらに状態の悪いデータになっていたので原因は確定しました
どうバグを回避し表面化させないかというフェイズに移行します
ありがとうございました
本番環境はruby1.9.3なので古いバグを踏んだものと思う事にします
0358デフォルトの名無しさん
2016/06/18(土) 15:29:35.92ID:AGMP56QnPythonに負けた理由なら
1. 実行速度が遅かった
2. Windowsへの対応がひどかった
じゃね
他にもあるかも知れん
0359デフォルトの名無しさん
2016/06/18(土) 15:37:16.15ID:Au7MFafKそもそも勝負にすらなってない
0360デフォルトの名無しさん
2016/06/18(土) 15:59:35.05ID:RKqldoZsただ、あれで終わり。
みんなの記憶にしか残らない散った存在。
Ruby はまだこれから成長する。
この差は大きい。
0361デフォルトの名無しさん
2016/06/18(土) 16:49:47.95ID:SI6NucGb長けてる領域が違うだけの話
0362デフォルトの名無しさん
2016/06/18(土) 19:27:38.85ID:AGMP56Qnこんなにたくさんレスが付くとは思わなかった
0364デフォルトの名無しさん
2016/06/18(土) 20:10:04.10ID:SI6NucGbなんかすまん
個人的にdisってるわけじゃないので気にしないでくれ
ちなみに俺はRubyの方が好き
0365デフォルトの名無しさん
2016/06/18(土) 21:19:07.41ID:bpHrap68Ruby に謝れ
0366デフォルトの名無しさん
2016/06/18(土) 21:45:00.52ID:QKdVDmdUGUIに対応させるのは、面倒
一方、黒魔術(メタプログラミング・実装)系の良本が多い
メタプログラミング Ruby 第2版、2015
Effective Ruby、2015
Rubyのしくみ、2014
0367デフォルトの名無しさん
2016/06/19(日) 12:37:38.12ID:5KvSKdL/黒魔術でもpythonの方が書きやすいな
0368デフォルトの名無しさん
2016/06/19(日) 16:46:12.80ID:rmVET6vi0369デフォルトの名無しさん
2016/06/20(月) 01:21:45.09ID:HoUv0dJ2http://img01.deviantart.net/c0e3/i/2013/346/1/5/rwby_genderbent_by_mechanicale-d6xq7tb.jpg
0370デフォルトの名無しさん
2016/06/20(月) 09:01:35.78ID:XE/E5M6R勉強しなおしています。以下のコードで理解できない場所があります。
n cats = [] = 1
cats[0] = "Kuro"
cats[1] = "Tama"
cats[2] = "Mike"
cats[3] = "Tara"
puts(cats[n])
cats[0] = "Shiro"
2〜4行目は配列catsに4つの要素を代入しているんだろうということはわかります。そして6行目は0番目の要素にShiro
を代入したのでKuroが消えている?のだろうということもわかる気がします。ところが、5行目のputs(cats[n])「は配列0〜3
までの要素をすべて表示する」と私は考えたのですが、本に「はcats[1]の値を表示」となっています。知りたいことは以下の2点です。
1.そもそもn cats = [] = 1とはどういう意味なのか、n cats = []は空配列を作るという意味ではないのか。なぜそのあとに=1と続くのか。
2..puts(cats[n])としか書いてないのになぜ、1番目が入るのか。
基本的なところから理解していなくて申し訳ありません。詳しい方のご教授をお願いします。
0371デフォルトの名無しさん
2016/06/20(月) 09:12:09.51ID:Kk80zM3kSyntaxError: unexpected '=', expecting end-of-input
n cats = [] = 1
5冊読む前に1冊でも理解した方が良いよ
0372デフォルトの名無しさん
2016/06/20(月) 09:24:31.93ID:XE/E5M6Rありがとうございます。そうですよね、エラーが出るんです。おかしいな、間違って書いてないとおもうのですが。
あとはあなたのおっしゃる通りなのですが、プログラム自体が初めてでなるべく簡単そうな本を探して自学しています。
でおどの本も途中から猛烈に難しくなって「こりゃ駄目だ」と思ったら次の本という繰り返しで弱っています。
0373デフォルトの名無しさん
2016/06/20(月) 09:25:44.54ID:Kk80zM3kn cats = [] = 1
はまず [] = 1 ってのが実行されようとするからその時に構文エラーになる
n, cats = 1, []
の見間違いじゃない?
0374デフォルトの名無しさん
2016/06/20(月) 09:40:16.81ID:Kk80zM3kn cats = [] = 1 は結局は
n = 1
cats = []
としたかったんだろう
この前提の下なら370の言っていることは概ね正しい
そして n = 1 なので
puts(cats[n]) は
puts(cats[1]) ってことで1番目の要素が出力されることになる
0375デフォルトの名無しさん
2016/06/20(月) 09:43:21.95ID:XE/E5M6Rおお、すごい。ありがとうございます。ちゃんとTamaが表示されました。うれしい。
今、改めて本を読みなおしてみたんですが、やっぱりn cats = [] = 1となっていました。
自分のようなど素人がこれをやられるとどうにもなりません。どこがわからないのかわからない
というのは情けない限りですが、おかげさまで納得して先に進むことができました。ありがとうございました。
0376デフォルトの名無しさん
2016/06/20(月) 09:45:26.19ID:XE/E5M6Rおお、わかりやすい説明ありがとうございます。助かりました。
0377デフォルトの名無しさん
2016/06/20(月) 09:51:56.08ID:Tc3CU3LQ0378デフォルトの名無しさん
2016/06/20(月) 10:29:34.75ID:OWUJ8xtdせっかくこれから新しいのを覚えるというチャンスなのに10年後廃れている
言語を学ぶのはもったいない
0379デフォルトの名無しさん
2016/06/20(月) 11:06:36.37ID:XE/E5M6Rそうですね、何で最初から出版社のホームページを見なかったんだろう…
>>378
いや、実はRubyが学びたいのではなくて人工無能を作成して将来、人工知能の勉強へとつなげられればと思って勉強しています。
そもそもなんでRubyなのかというと、10年ほど前に「恋するプログラムRubyでつくる人工無能」という本を購入しまして、
最初は「おお、面白い」と呼んでいたのですが、その内、配列?ハッシュ?インスタンス変数?とつぎつぎにわけのわからない
言葉がでてきました。これはもう本格的にRubyってやつを勉強しないとどうにも読めないなと考えて一念発起して、Rubyの解説書を
買いまくりました。ところがこれがさっぱり何を言ってるのかわからない…。なんせ、プログラムと言えば大学の時にちょろっとベーシックを
かじった程度でそのまま放置でしたから。
とりあえず、3冊買って読みましたが、「これは自分には無理だ」とあきらめ、数年が過ぎたのです。ところが幸か不幸か、今年は自由な時間が
取れまして(理由は深くは突っ込まないでください)、ふと本棚を見ると、ああこんなの買ったなあと思い出しました。よし、せっかくの機会だ。
なんとかがんばってRubyってやつをマスターしてやろうと今に至った次第です。とにかく、なんとしても「恋するプログラムRubyでつくる人工無能」
という本が理解できるようになりたいです!
長々とすみませんでした。
0380デフォルトの名無しさん
2016/06/20(月) 12:33:22.39ID:6a0VacLi0381デフォルトの名無しさん
2016/06/20(月) 15:04:19.05ID:zSeivZg9> Rubyは、Windows対応で負けている。
> GUIに対応させるのは、面倒
気になったので試してみました
mswin版は1.8で少し調べてオワコンっぽい感じがしたので
動作確認したものはx86-mingw版のみで以下の組み合わせ
[2.3] fxruby gtk2 gtk3
[2.2] fxruby qtbindings-4.8.6.1 gtk2 gtk3
[2.1] fxruby qtbindings-4.8.6.1 gtk2-3.0.7 gtk3-3.0.7
[2.0] fxruby qtbindings-4.8.6.1 gtk2-3.0.7 gtk3-3.0.7
[1.9] fxruby qtbindings-4.8.3.0 gtk2-2.2.0 gtk3-2.2.0 wxruby-ruby19
[1.8] fxruby qtbindings-4.8.3.0 gtk2-1.2.1 wxruby
fxruby : まったく問題なし。
wx : 2系で使えないのが残念。
qt : QtSDKが300MB超とデカイのが気になるところ。
gtk : 依存パッケージのバージョン解決が甘いので
(gtk3自体はruby1.8に対応しているが依存パッケージがruby>=1.9を求めるので不可だったり
依存パッケージのバージョン上限が設定なされていない為
--ignore-dependencies, gem sp xxxなどしながら個別に入れる必要があった)
古いバージョンを使う時には少々手間がかるのがネック。
自分の場合は慣れたqtかgtkかの二択だけど
fxrubyが http://rubyinstaller.org/downloads/ にも明記されてるぐらいなので無難だと思う。
0382デフォルトの名無しさん
2016/06/20(月) 16:37:55.79ID:RVn5oxXAその本読んだけど
無脳本は目標として良いと思うよ
人工知能は最先端だから超難しいけど
人工無脳は基本が分かれば難しくない
マルコフ連鎖だけちょっと
何やってるか分かりにくいけど
ハッシュでしりとりみたいなこと
させる仕組みは単純で感心する
コードを読んで動作をイメージ
できるようになれば分かる
0383デフォルトの名無しさん
2016/06/20(月) 16:41:50.02ID:RVn5oxXAGUIキットは本の(Visualu Ruby)にこだわらず
今の新しいライブラリ使った方が便利
0384デフォルトの名無しさん
2016/06/20(月) 16:47:39.38ID:78XmmaUtもしこれが本当なら
かなり恥ずかしい部類の
誤植だな
0385デフォルトの名無しさん
2016/06/21(火) 12:37:52.56ID:na89rYIQ0386デフォルトの名無しさん
2016/06/21(火) 13:24:02.94ID:LE9F52CG首吊ってくるレベル
0387デフォルトの名無しさん
2016/06/21(火) 17:03:07.87ID:W3C4RKeOありがとうございます。まあ、他の言語を試せばいいのでしょうけど、こうやってわからなかったら次の言語とやってると、同じことがあった時にまた引越しなきゃならなくなる
のでがんばってRubyをマスターすることにします。
さて、「Rubyの絵本」のループの中断まで勉強が進みましたが、以下のコードの違いがよくわかりません。どなたかご教授よろしくお願いします。#の部分は自分が理解しやすいように
かってにコメント文章をつけたものです。よろしく願します。
a = 0
while a < 5
if a == 2
a = 10
next
end
print(a, "")
a += 1
end
aの値がwhile文の条件に合致している間はループ。
(1回目ループ)aに0が入っているが、if文が成立しないのでnextの下へ行き、a0と表示されてaが1になり、2回目のループに入る。
(2回目ループ)aに1が入っているが、if文が成立しないのでnextの下へ行き、a1と表示されてaが2になり、3回目のループに入る。
(3回目ループ)aに2が入っているが、if文が成立するのでaの値が10になるが、nextが発動し今の処理はなかったものとされ、aの値は2のまま?
似たようなプログラムがredoでもあるのですが、そちらはまあなんとか理解できます。問題はnextのほうで、今一つ理解できません。a=2のままなら無限ループするんじゃないかと自分では思ったのですが、
実際の出力結果は
a0
a1
となっているので、何か勘違いをしているのだと思いますがそれがなんなのかわかりません。長文申し訳ありませんがよろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています