うん、いいとこに気づいたな
String に << を使うと、オブジェクトはそのままで末尾に文字列が追加される
String に += を使うと、以前の文字列と足す文字列を足したものが新しいオブジェクトになる
本当に必要なのはただの長々とした文字列であるはずで、
毎回新しくオブジェクトが生成されるというのはとても無駄だ
str の末尾に 'hoge' を追加する、という処理を体現するコードは
str = str + 'hoge'
ではなく
str << 'hoge'
である、というだけなんだけどね
str + 'hoge' が返すオブジェクトは str とは何の関連性もない
そんなん好みだろ、と言われてしまうとどうにもならんが、かといって
「str がメガ単位の大きさになるかもしれないから今回は + 使うのやめる」
というブレた判断をするのはそれはそれでとても不恰好だろ
このへんがわかるとRubyが面白くなるが、症状が変なほうに進むと
「URIクラスにreplaceが無いのは変だ」とか言いだすので注意
URIにto_strがないのが不便です
せっかく削ったのに…
まあ、パフォーマンス度外視なのがスクリプト言語だしね。
require 'rubygems'したあとYAMLでファイルに保存するんだけど
File.open(file, "w") { |f|
YAML::dump(data, f)
}
と書いてしまうのはWindowsのbinnmodeとかあのへんの問題はない?
>>898 ……多分。
……YAML はテキストだし。
……まあ不安なら "w" を "wb" にでもしたらよろし。
そこまで書いた上に気になってるなら、素直にbinmodeにすればいいと思う。
害はたぶんないだろう。
DOSISHではないプラットフォームでも
テキストモードなら\r\nも改行文字として扱ってくれると便利なんだけど、
そうなっていない理由ってあるのかな。
日ごろ区別する必要のない人たちには不要な機能だから?
902 :
901:2008/04/08(火) 10:50:24
あ、
>>901はテキストモードでの読み込み時の話ね。
universal newlineだね。
導入しようという話はあるんだが。
904 :
デフォルトの名無しさん:2008/04/08(火) 23:58:37
ゲーム作ろうとして、MyGame(Ruby/SDL の Windows バイナリ同梱)
をダウンロードしたんですけど、なぜかインストールできません。
だれか詳しい方、助けてください。(ちなみにOSはvistaでActiveRubyはインストール済みです)
>>904 どの段階で失敗するのかをできるだけ詳しく書きましょう
どうせ一人の力だけでは無理なんだし要点まとめる練習だと思うべし
質問のために要点まとめて問題点洗い出してたら解決したという困った事態がザラにある
907 :
デフォルトの名無しさん:2008/04/09(水) 00:39:24
>>907 書いてある通りだろ
本来ならあるべき場所にsdl(sdl.rb)がないから、ロードに失敗した
その構造だとC:/Program Files/ruby-1.8/lib/ruby/site_ruby/1.8/sdl.rbがないのだろう
おそらく何かの原因でインストールに失敗している
909 :
デフォルトの名無しさん:2008/04/09(水) 01:46:42
>>908 すみませn。ruby初心者どころかPG初心者レベルなので、具体的にどう対処すれば
よいのかわかると幸いなんですが・・・。
>MyGameフォルダ内のinstall_mygame.rbをダブルクリック
>コマンドプロンプトが起動して、終了。
ホントはここでエラーメッセージが印字されてるんだろうなぁ…。
コマンドプロンプトから実行してみるとか。
911 :
デフォルトの名無しさん:2008/04/09(水) 02:01:29
>>910さんのアドバイス通りやってみました。
・・・が結果は同じでしたorz
いや、なにも改善してないんだからまた失敗するのは当たり前で…
コマンドプロンプトから実行しただけで良くなるわけが無くて…
エラーメッセージが吐かれたならそれを読み解けといってるわけで…
Rubyは高級言語なのでWindowsユーザは別の言語をお使い下さい
>>907 # 使ってないから知らんけどvistaなのが悪いとか?
mygame/rubysdl-1.3.0-mswin32-1.8.5-p12/README.ja.win32 読んでみ
特に 3.1 のところ
で、然るべき場所にそれらのファイルがあるかどうか確認
>>909 ここは人力検索サイトじゃない
コマンドプロンプトが起動できるぐらいなら、まず自分で出来る限りのことをやれ
少なくとも
1. コマンドプロンプトの実行結果をきちんと読む
2. sdl.rbが存在するかどうかを確認する
ぐらいはできるだろ?
あときちんとsage
html の table を生成するループってどんな風に書くのがいいの?
今こんなんなんだけど
<table><tr>
<% for data.each_with_key{|x, i| %>
<td><% x.name %></td><td><% x.value %></td>
<% if i % 5 == 0 %></tr><tr><% end %>
<% end %>
</tr></table>
ERBならそれでいい
HTMLとして読みやすいことが第一
Rubyとしての論理構造を気にするなら最初からRubyで書け(w
システムが使ってなくて目立つprefixってなにかありますか?
_myvar =3 は一応通るみたいですが。
>>917 縦にデータ並べたいときとか列の数変えるとき便利かと思ったんですけどこのままでいですかね
>>946からはそういう目的があるとはあんま読めんな
メソッドにして切り出すとスクリプトとしてもうちょっと明快になる気もするが、
ERBならそのまま記述したほうがおそらく素直
ERB使ってるのにRubyスクリプトとして凝らせるというのは方向性が逆
<table><tr>
<% for data.each_with_key{|x, i| %>
<% data2cell_and_print_sepalater_per_5(x,i) %>
<% end %>
</tr></table>
と書いたとしてもERBとして可読性はあがらない
あとeach_with_keyってなんじゃらほい
スレ違いだったらスルーして。
Rubyにredmine入れたんだけど、
英語表記なんだよね。
redmineの設定メニューで
Japaneseにしてるのに英語のまま。
だれか経験したことないですか?
923 :
デフォルトの名無しさん:2008/04/09(水) 22:40:35
rubyの中からシェルの環境変数を設定するにはどうしたらいいですか?
ENVに代入しても、Rubyの中だけでしか有効ではないようです
>>923 まあそりゃそうだろ
「自分」が起動したシェルにしか自分が設定した環境変数の効果は及ばない
「他人」が起動したシェルにも設定を及ぼしたいのなら、OSが管理するシェルの起動設定そのものに手を入れるしかない
それはRubyの仕事ではないので、使ってるシェルの設定ファイルとか設定コマンドとかを直接編集すれ
>>922 インストール時の rake load_default_data で ja を選んだ?
あと、ユーザごとに表示言語の設定があるので、マイアカウントの設定で日本語を選んで。
>>924 Rubyでシェルのコマンド文字列を生成して、シェルのバッククオートを使うとか、
Rubyの中からサブシェルを起動するとか。
脱初心者の目安ってありますか?
>>927 Ruby学習者の15段階
レベル0: Rubyを宝石の名前以外に思いつかない
レベル1: 関数的メソッドだけで乗り切る。ドットの意義がわからない
レベル2: 関数的メソッドを自作する。ドットを「〜の」と訳すがオブジェクトはよくわからない
レベル3: クラスを形だけ自作するがinitializeのスペルを間違える。printfをダサいと感じるようになる
レベル4: モジュールを形だけ自作するようになる。RubyをBetterPerlだと吹聴するようになる
レベル5: cgi.rbを読んで絶望する。array.rbを探すがRubyスクリプトとして存在しないことに憤りを覚える
レベル6: 自作のスクリプトを公開するがバージョン0.1.3で放置される。「それRubyでもできますが」が口癖になる
うわ間違えた、printfではなくsprintfね
ちなみに
「全てを自作オブジェクトで表現しクラス構造が網の目のようになる」
のレベル7の次くらいで有用性を許容します
添付ライブラリのソースを読めるくらいが初心者脱出の目安だと思う…
何やってんだかさっぱりわからん、といううちはまだ初心者ということで
optparseを読めないと初心者脱出にならないのか!
あれはコメント部分に AA 解説がある時点で危険信号が点ってはいるな
身近なとこで net/ の下くらいでいいんじゃないかとも思う
comlex.rb とかも数学の知識ないと読めねーぞ
>>925 それでした。
マイアカントから設定できたんですね。
てっきりsettingからやるのかと思ってました。
935 :
デフォルトの名無しさん:2008/04/11(金) 03:53:51
あるディレクトリの配下を、別のディレクトリの配下に再帰的にコピーしたいです
シェルだと、
cp /path/to/src/* /path/to/dest/
でコピーできますが、これをRubyでやろうとして、
FileUtils.cp_r('/path/to/src/*','/path/to/dest/')
と書くとエラーになります。
うまくコピーするにはどう書いたらいいですか?
936 :
デフォルトの名無しさん:2008/04/11(金) 03:54:38
シェルの場合
cp /path/to/src/* /path/to/dest/ -r
でした
ワイルドカードがいらないんじゃないの
>>935 FileUtils.cp_r(Dir.glob('/path/to/src/*'),'/path/to/dest/')
マニュアルくらい読んどけって話だな
30秒もあれば理解できることだったのに
というか、シェルじゃないのにシェルグロブが利用できると考えるのがそもそもおかし以下略
> FileUtils.cp_r(src, dest, options = {})
> src を dest にコピーします。src がディレクトリであったら再帰的にコピーします。
> その際 dest がディレクトリなら dest/src にコピーします。
> FileUtils.cp_r(list, dir, options = {})
> list[0]、list[1], list[2], ... をディレクトリ dir の中にコピーします。
> list[n] がディレクトリなら再帰的にコピーします。
ということで、ファイルパス文字列かファイルパスが入った配列のどっちかしか受け付けね
Dir.glob がライブラリの内部で正規表現使って記号を探して
自前でディスクを走査して配列返してるだけってのを知ったときはちょっとショックだった