Ruby 初心者スレッド Part 56©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2014/12/13(土) 09:29:12.93ID:DLY4IovQ質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 55
http://peace.2ch.net/test/read.cgi/tech/1403361584/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0482デフォルトの名無しさん
2015/01/24(土) 23:03:03.44ID:sa+x1Xzy今更C & yaccとか紹介されてもなあって感じ
こんなもんわざわざMatzが解説しなくてもどの教科書にも載ってるだろ…
0483デフォルトの名無しさん
2015/01/24(土) 23:13:51.32ID:4gU3kMxY0484デフォルトの名無しさん
2015/01/24(土) 23:33:26.92ID:sZsKSyLoMatzのは日経Linuxに載るそうな
0485デフォルトの名無しさん
2015/01/24(土) 23:41:25.90ID:uW+Hb/Mt自分は使う側だからと思ってる人も一度はトライすべき
だとわかっていながらやらずに10年が経った
0486デフォルトの名無しさん
2015/01/24(土) 23:57:28.38ID:sa+x1Xzy考え方には同意するが、勉強目的で処理系を作るなら字句解析や構文解析は手書きするべきだと思う。
他で役立つのって特にその部分だから。
0487デフォルトの名無しさん
2015/01/25(日) 00:20:22.56ID:J7dtxD4Gそうかぁ?
構文解析とか泥臭い部分はライブラリに投げた方が勉強する部分にフォーカスできると思うけどなー
lexとかyaccは実績も超がつくほどあるものなんだし
0488デフォルトの名無しさん
2015/01/25(日) 00:29:56.97ID:6mma36Hgあとはノードに対応する処理を適当に書いていくだけで、それこそ単純作業だわ
ソースコードのパースは再帰とか抽象化とかプログラミングの基礎体力を付けるにはいい練習だよ
0489デフォルトの名無しさん
2015/01/25(日) 00:33:47.61ID:J7dtxD4Gプログラミングと言語設計とは別の話だと思うが
0490デフォルトの名無しさん
2015/01/25(日) 00:45:12.52ID:DUp54GVi配列の要素は配列([...])、正の10進数(123)、ダブルクォート文字列("...")に限定
例 [1, 234, [5, "67", []], 8]
30分で解けたらこのスレ卒業
0491デフォルトの名無しさん
2015/01/25(日) 14:43:11.53ID:R3Fg53INなんか簡単にできるほうほうありませんか?
毎回ソースコードをダウンロードして解凍してgemをインストールしないとダメなんでしょうか?
0492デフォルトの名無しさん
2015/01/25(日) 17:00:44.18ID:n4z0u1el公式のSVNリポジトリからチェックアウトするようにしてもいいけど、
実運用でheadを使うのはさすがに危険だから結局バージョンは選ばなきゃいけないので大して手間変わらん
0493デフォルトの名無しさん
2015/01/25(日) 18:11:58.87ID:3aXiO/4Egit pullしたら楽でした
でもgit tagに2.6が含まれていませんでした
githubのredmineのtagを見に行ったら2.6.1まであったのに何故ですかね
0494デフォルトの名無しさん
2015/01/25(日) 18:39:45.60ID:KIPmV6lxbad response Not Found 404って出てきてできないんですが
どうしたらいいですが?
0495デフォルトの名無しさん
2015/01/25(日) 20:47:42.10ID:6mma36Hg公式のSVNリポジトリ使いなよ
gitのはあくまでミラー
0496デフォルトの名無しさん
2015/01/26(月) 17:03:01.35ID:5plsOsTaありがとうございました
0497デフォルトの名無しさん
2015/01/26(月) 19:42:21.97ID:vPTi7mVlこれ日曜から始まるようにする設定て何処でするんですか?
0498デフォルトの名無しさん
2015/01/26(月) 22:29:09.39ID:BphtuPQwhttps://groups.google.com/forum/#!forum/redmine-users-ja
0499474
2015/01/27(火) 10:05:23.11ID:giG1hU9r475のやり方だと、
=begin
〜
=end
〜この部分も、削除されてしまう
=begin
〜
=end
=begin,=end間は(=begin,=endも含めて)削除したいが、
=end,=begin間はそのまま残したい。HELP!
0500デフォルトの名無しさん
2015/01/27(火) 11:29:39.64ID:JO7zk1Y+0501デフォルトの名無しさん
2015/01/27(火) 17:05:12.78ID:AnZGR/ca「最初のbegin〜endしか削除されません」とか言ってきそう・・・
0502デフォルトの名無しさん
2015/01/27(火) 23:03:18.27ID:6gdvwZDa何か変なんですがこれはどういう現象なんでしょうか?遡って代入されてる?
a = b = 1
a = 3
p a #=>3
p b #=>1 bは弄ってない
p "-----"
a = b = []
a << 3
p a #=>[3]
p b #=>[3] 何も入れてないのに勝手に3入ってる
aとbを逆にしてもaに勝手に3入ります
0503デフォルトの名無しさん
2015/01/27(火) 23:34:18.96ID:w1lsmrbK一口で言えば、代入演算子(参照先変更)と<<演算子(参照先は変更しない)の違い
>a = b = 1
a と b が 1 という同一のオブジェクトを参照するようにする
>a = 3
a が 3 というオブジェクトを参照するよう変更する
>a = b = []
a と b が新規の、同一の空配列オブジェクトを参照するように変更する
>a << 3
a の参照先オブジェクト(b と同じ配列)に対して << メソッドを、3 を引数として呼び出す
その動作として、a の参照先オブジェクト(b と同じ配列)に 3 という要素が追加される
と言うわけで、勝手には入ってない
0504デフォルトの名無しさん
2015/01/27(火) 23:42:27.51ID:/EXITyOc例えば、
p a["山田","田中"] #=>8
p a["田中","山田"] #=>8
p a["山田","加藤"] #=>2
のような感じです
どのようにすればいいでしょうか?
0505デフォルトの名無しさん
2015/01/27(火) 23:52:53.45ID:ed+BP8Ek0506デフォルトの名無しさん
2015/01/28(水) 00:01:14.15ID:e5hkyOyGありがとうございます
やっぱりソートしてから引数にとるしか方法は無いんでしょうか…
呼び出したい時に一々ソートするのはスマートで無い気がして…
0507デフォルトの名無しさん
2015/01/28(水) 00:36:13.90ID:UCeJVedt小手先の実装のスマートさなんかどうでもよくなる
0508デフォルトの名無しさん
2015/01/28(水) 00:50:00.54ID:e5hkyOyGなるほどそうですね
ソートしてアクセスする構造をクラスでラップして使うことにします
ありがとうございます
0509デフォルトの名無しさん
2015/01/28(水) 06:54:30.56ID:PxKHvaRd返信遅れましたありがとうございます
代入って単純に引数与えるだけじゃないんですね
配列も"n"と同じようにリテラルぶっ込んでるだけだと思ってたのに複雑だ・・・
0510406
2015/01/28(水) 09:32:53.14ID:g/K+Ovy5Rubyでは、このようにいくら代入しても、コピーが作られず、
単に参照(変数のアドレス)がコピーされるだけだから、
同一のオブジェクトを指す
ここで、文字列の連結に、<< を使うと、
すべての変数が変わってしまう。
+ を使えば別のオブジェクトが作られる
ここで、b=10とすれば初めて、
bは別のオブジェクトとして作られる。Cow(Copy on write)
必要に迫られるまで、なるべく
新たなオブジェクトを作らないようになっているのだろう
オブジェクトの内容そのものを変える、
破壊的なメソッドを呼ぶ際は、同一のオブジェクトは、
すべて変更されてしまうので要注意
漏れも、<< で苦しんだ。この辺を見て
>>434 >>444
0511デフォルトの名無しさん
2015/01/28(水) 10:15:58.27ID:PxKHvaRd質問するときは原因箇所を絞って簡略化したほうがいいですよ
その経過で解決する事もありますし
0512406
2015/01/28(水) 11:14:40.77ID:g/K+Ovy5にも書いたけど、Rubyのさかのぼり代入は怖い
$a=b=c=d=3
ここで、d << 10 とするだけで、すべての変数が310になる。
この参照の連鎖は順次、
関数の引数に渡していっても、断ち切れない
グローバル変数までさかのぼって、変更されてしまう
0513デフォルトの名無しさん
2015/01/28(水) 11:46:52.90ID:H7DQugwdunlessなんて削除するべきだ
pとかよりもっとわかりやすい名前を付けるべきだ
0514デフォルトの名無しさん
2015/01/28(水) 11:54:27.66ID:slxhZiXo0515デフォルトの名無しさん
2015/01/28(水) 11:55:41.74ID:slxhZiXo彼らは多少頭のネジが緩いんで
0516デフォルトの名無しさん
2015/01/28(水) 13:03:50.23ID:g/K+Ovy5Pythonだと、print, pprint
だから面倒くさい
0517デフォルトの名無しさん
2015/01/28(水) 13:12:56.41ID:RMHK3Bx60518デフォルトの名無しさん
2015/01/28(水) 20:51:43.59ID:JcHJzKklさかのぼる、と考えるから破綻するんよ。
変数に入ってるのは、あくまで参照。それだけ頭に入れてれば破綻しない。
0519デフォルトの名無しさん
2015/01/28(水) 21:00:02.47ID:JcHJzKkl基本的にRubyの変数は「何かを指し示しているだけ」であり「中身は無い」
中身のように見えるものは「名もなき場所にある」
代入という操作をしたとき、変数は別の場所を指すように書き換わる
それ以外の操作は、中身に対して行われる
そんだけだよ
さかのぼり代入なんてことは何もしてない
同じ人を指さしてるのに、別人に見えたらおかしい
0520デフォルトの名無しさん
2015/01/28(水) 21:10:51.95ID:ncVbnS0H0521デフォルトの名無しさん
2015/01/28(水) 21:38:51.40ID:GG6BgqZu0522デフォルトの名無しさん
2015/01/28(水) 22:01:28.15ID:93RLbcHPちょっと思いつかない
0523デフォルトの名無しさん
2015/01/28(水) 22:05:04.76ID:OirFWuRy0524デフォルトの名無しさん
2015/01/28(水) 22:51:58.62ID:wg9ENB6e0525デフォルトの名無しさん
2015/01/28(水) 23:15:29.17ID:93RLbcHP0527デフォルトの名無しさん
2015/01/29(木) 01:33:39.82ID:3hN9k9gR代入はヒモを握ること
それまで別の風船のヒモを握っていたなら手放すことになる
<< は風船そのものに字を書き加えること
0528デフォルトの名無しさん
2015/01/29(木) 03:22:32.34ID:4rYhRek3puts b
a = " added"
puts a
b << a
puts b
(c = "base") << " added"
puts c
# C:\work>ruby base.rb
# base
# added
# base added
# base added
0529デフォルトの名無しさん
2015/01/29(木) 10:07:40.13ID:GmAMxhIRInteger#<<は破壊的じゃないから
a=b=3; b<<10
とかやってもaもbも3072にはならない
0530デフォルトの名無しさん
2015/01/29(木) 10:11:39.06ID:GmAMxhIR0531デフォルトの名無しさん
2015/01/29(木) 10:30:49.47ID:3kqkMOuX不用意に連鎖代入 a = b = [] を使わない
変数は箱というよりはむしろ名札なり矢印なり風船のヒモを握る手
オブジェクトそのものを書き換える操作に注意
風船の例えは元ネタがあるのか知らないけどいい例えだと思った
誰も風船掴んでなかったらどこかへ飛んで行ってしまうわけだし
0532デフォルトの名無しさん
2015/01/29(木) 19:19:40.18ID:IUSSB121アンタの解釈した情報もうしわけないが不要だわ
0533デフォルトの名無しさん
2015/01/29(木) 20:09:54.90ID:OMwCYHUr簡単なGUIもどきを作ろうと試みているのですが
可能なのかアドバイスをお願いします。
クイズのような問題提示→ユーザー回答→rubyからの解答
を作ると仮定します
1.
メモ帳等のファイルを開いて、問題文を提示
コンソール上で選択し、結果をメモ帳などに表示すると仮定した場合
リロードの手段をどうしたらよいのか・・・
2.
リロード問題を回避するため
rubyでhtmlを生成し、問題を提示
javascriptでリロードと選択ボタンとフォーム入力を提示
ファイルに回答番号を保存し、rubyが読み込むのを待つ
この場合、ファイルの読み書きをrubyとjavascriptの双方でするため
干渉して不具合にならないのか・・・
そんなことをせずに
鯖を立ててerubyでやれ・・とかナシでお願いします。
cvs形式で保存し、htmlかメモ帳程度の表示でやりたいのです。
身の丈にあった低レベルの覚える事が少ない環境で学んでいこうかなと・・
でもコンソールは目がチカチカするので・・・そちらもナシの方向でw
0534デフォルトの名無しさん
2015/01/29(木) 20:14:04.36ID:bcTkTriTコンソールの背景色を白、文字色を黒にしたらいいんじゃね?
あと鯖ってのは別にマシン1台用意したりする必要はないからな?
0535デフォルトの名無しさん
2015/01/29(木) 20:18:01.12ID:y6zSBPNzruby要らねえじゃん
0536デフォルトの名無しさん
2015/01/29(木) 21:07:53.31ID:3kqkMOuX> 身の丈に合った低レベルの覚えることが少ない環境
ならまず1をコンソール(ターミナル)上でやるべきで
次に2をHTTPサーバとブラウザでやるべきかと思う。そのほうがずっと簡単
1は loop { 問題読み込み; 回答読み込み; 答え合わせ; 結果表示 }
2は標準添付のWebrickが使える
0537デフォルトの名無しさん
2015/01/29(木) 21:09:13.09ID:zGbE6mz9ってやりたいってこと?
これをわざわざrubyとHTMLとjsを絡めて実現するなんてそれこそ身の丈に合ってない気がする
GUIにしたいなら全部jsでやりなよ
0538デフォルトの名無しさん
2015/01/30(金) 02:45:08.71ID:X9ozRA2khttp://daily.2ch.net/test/read.cgi/newsplus/1422528823/
0539デフォルトの名無しさん
2015/01/30(金) 05:32:55.78ID:mjc4GdHjありがとうございました
0540デフォルトの名無しさん
2015/01/30(金) 07:31:01.31ID:aVk8cNPyHTML,CSS,JSを使うのは面倒
0541デフォルトの名無しさん
2015/01/30(金) 07:45:37.27ID:x2QQOjZO0542デフォルトの名無しさん
2015/01/30(金) 10:38:25.34ID:4AGK3OqT0543デフォルトの名無しさん
2015/01/30(金) 10:54:29.13ID:bwBigbzQary.map{$a**2}
みたいに書けないかということです
0544デフォルトの名無しさん
2015/01/30(金) 11:07:09.14ID:bYNQdyK70545デフォルトの名無しさん
2015/01/30(金) 11:12:34.31ID:Abjby/dC聞いたこと無いね
普通のメソッドの引数でもそんな書き方無いから、ブロックもないでしょ
0546デフォルトの名無しさん
2015/01/30(金) 11:32:32.70ID:Abjby/dCyieldはそれに近いな
0547474
2015/01/30(金) 11:33:46.02ID:aVk8cNPy最長マッチ .*
最短マッチ .*?
最初の1か所だけ置換 sub
すべての箇所を置換 gsub
最終的にこれですべての、=begin =end間を削除できますた
print File.read('File1').gsub(/^=begin.*?^=end/m, '')
0548デフォルトの名無しさん
2015/01/30(金) 12:15:45.16ID:aVk8cNPyFile.read('fileA').scan(/abc/){|matched| count += 1}
ブロック変数を使わず、
abc にマッチした回数だけを知りたい場合、
このブロック変数を省略できますか?
0549デフォルトの名無しさん
2015/01/30(金) 12:21:19.07ID:hVjevdcMp File.read('fileA').scan(/abc/)
で確認してみるといい
0550548
2015/01/30(金) 15:23:09.41ID:aVk8cNPy2
p 'aabccababca'.scan(/abc/)
["abc", "abc"]
ありがとう
ところで、Rubyには変数宣言を強制する、
JSの"use strict"のような、厳格モードはありますか?
var a=0;
0551デフォルトの名無しさん
2015/01/30(金) 18:57:53.85ID:gb3cROEI0552デフォルトの名無しさん
2015/01/30(金) 20:33:27.30ID:dK03mtQo何度か提案はされてはいるが、受け入れられてないね
0553デフォルトの名無しさん
2015/01/30(金) 20:46:23.90ID:BzgyBeS/RubyはJSと違ってグローバル変数には必ず$付けなきゃいけないから、
「ローカル変数のつもりで代入したらグローバル変数だった」というのがまずありえない
だから変数宣言がなくても問題ないんだよ
JSのvarってブロックの中で使ってもスコープはメソッド全体になってしまうクソ仕様だから、
varの有無は「ローカル変数か、より広域な変数か」を指定する以上の意味はないので
Rubyの変数名で上記2つを区別する方式に比べてJSのvarが何ら安全性に勝るということはない
0554デフォルトの名無しさん
2015/01/30(金) 21:59:14.01ID:gb3cROEI0555デフォルトの名無しさん
2015/01/30(金) 22:24:09.78ID:+5BNGDg80556デフォルトの名無しさん
2015/01/30(金) 22:59:32.61ID:3CnRTZyK0557550
2015/01/31(土) 00:57:27.52ID:uC1xfWdZ同じスコープ内で、
1, l(エル)、0, O(オー)などの書き間違いで、
別の変数の宣言になってしまうのを防ぎたい
0558デフォルトの名無しさん
2015/01/31(土) 02:13:10.51ID:SZVKn3yTまあ宣言と定義が未分明なRubyじゃ100年たっても実装されるか微妙だな
0559デフォルトの名無しさん
2015/01/31(土) 06:53:11.40ID:s4+AsH4m0560デフォルトの名無しさん
2015/01/31(土) 08:06:56.70ID:Ozkgovrmそれが問題になるほど巨大なメソッドを書くなアホ
0561デフォルトの名無しさん
2015/01/31(土) 09:30:07.21ID:SZVKn3yTコードの長さとは関係ないよ
0562デフォルトの名無しさん
2015/01/31(土) 10:24:29.01ID:gojz97z40563デフォルトの名無しさん
2015/01/31(土) 10:38:26.24ID:Xj+5RYHD0564デフォルトの名無しさん
2015/01/31(土) 10:48:20.45ID:bF0SVAwCプログラミングっていったい何なんやろな
いにしえのタイプライター打つオバちゃんみたいなモンなんやろか
0565デフォルトの名無しさん
2015/01/31(土) 10:52:32.73ID:Ozkgovrm0566デフォルトの名無しさん
2015/01/31(土) 10:54:54.05ID:gojz97z40567デフォルトの名無しさん
2015/01/31(土) 10:56:21.22ID:SZVKn3yT0568デフォルトの名無しさん
2015/01/31(土) 11:05:37.44ID:gojz97z40569デフォルトの名無しさん
2015/01/31(土) 11:10:29.97ID:gojz97z4自分が理解しやすい変数名にして_1 _2 とか付けなきゃいんじゃない
レビューで変なネーミングが気になるなら最後に置換すりゃいいだけだし
0570デフォルトの名無しさん
2015/01/31(土) 11:10:40.58ID:SZVKn3yT0571デフォルトの名無しさん
2015/01/31(土) 11:16:11.00ID:gojz97z40572デフォルトの名無しさん
2015/01/31(土) 11:16:37.37ID:29y+W13dそれは止めた方がいいと思います
0573デフォルトの名無しさん
2015/01/31(土) 11:18:26.81ID:29y+W13dtypoなんかリテラル文字列以外では無縁なのです
活用できるものを活用してないだけでセンスゼロなのです
0574デフォルトの名無しさん
2015/01/31(土) 11:45:59.15ID:Hs82A+Y60575デフォルトの名無しさん
2015/01/31(土) 12:09:16.42ID:Xj+5RYHDruby-lintってのはしてくれる
0576デフォルトの名無しさん
2015/01/31(土) 12:54:23.05ID:iD+tawguRubyで気軽に使えて標準で補完ができるIDE的なものがあればいいのに
それがないから厳格モード的なのがあってもいいと思う
技術的に難しい部分ってあるのかな?
Matzがいらないと思ってるだけかな?
0577デフォルトの名無しさん
2015/01/31(土) 13:49:00.77ID:gojz97z40578デフォルトの名無しさん
2015/01/31(土) 13:59:36.70ID:29y+W13dなんか力点がおかしいんですよ
もしくは制限プレイとでも言うんですかね
0579デフォルトの名無しさん
2015/01/31(土) 14:05:24.47ID:gojz97z40580デフォルトの名無しさん
2015/01/31(土) 16:19:23.10ID:fH2ezq9N0581デフォルトの名無しさん
2015/01/31(土) 17:13:09.77ID:RulzY4Di0582デフォルトの名無しさん
2015/01/31(土) 17:18:51.24ID:Hs82A+Y6くれないと思う
が、そもそもundefinedはユニットテスト通らないし
■ このスレッドは過去ログ倉庫に格納されています