Ruby 初心者スレッド Part 41
■ このスレッドは過去ログ倉庫に格納されています
0001京 ◆SsSSsSsSSs
2011/02/10(木) 13:47:51★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0446デフォルトの名無しさん
2011/03/11(金) 15:00:13.720447デフォルトの名無しさん
2011/03/11(金) 15:34:37.78keys %hash = 64;
と指定できるのですが、Rubyにもそういう機能はありますでしょうか?
0448デフォルトの名無しさん
2011/03/11(金) 15:37:39.50book_list.sort_by {|book| book.score }
>>447
残念ながらない
0449デフォルトの名無しさん
2011/03/11(金) 15:48:19.11ないですか。
�d
0451デフォルトの名無しさん
2011/03/15(火) 11:20:01.58GoFなデザインパターンは、Rubyみたいな後発で動的で完全オブジェクトで
プロックとブロックが跋扈してるような言語ではあまり新鮮な有り難味がないかも
「あーこれ名前ついてたんだー」とか思うことがしばしばある
0452デフォルトの名無しさん
2011/03/15(火) 18:10:19.84ウェブサイトに必須のようだから。
0453デフォルトの名無しさん
2011/03/17(木) 20:02:07.00i = [0..100]
puts i
とやっても期待した結果が得られません。
(実行結果=[0..100])
配列をバラバラにして取得するにはどうすればいいでしょうか?
0454デフォルトの名無しさん
2011/03/17(木) 20:06:49.060455デフォルトの名無しさん
2011/03/17(木) 21:05:24.01末尾を含まないRangeは 0...100 (ドット3つ)
0456デフォルトの名無しさん
2011/03/17(木) 21:40:39.05(0..99).to_a だな
Range クラスというのがある
開始と終了と succ メソッドの返り値(と比較メソッド)だけ見てる変なクラスだ
0457デフォルトの名無しさん
2011/03/17(木) 21:44:20.33それよりもこれじゃないかと思った。
[*0..99]
0458デフォルトの名無しさん
2011/03/17(木) 23:00:58.580459デフォルトの名無しさん
2011/03/18(金) 00:55:26.51Rangeクラスって、Rubyの特徴的な機能の一つだよね
これも何かほかの言語にあった機能を、Rubyが取り込んだものなんだろうか
0460デフォルトの名無しさん
2011/03/18(金) 01:05:24.55その状態をRuby以前にオブジェクト化したものがあるかは生憎知らない。
0461デフォルトの名無しさん
2011/03/18(金) 10:05:59.40>i = [0..100]
>puts i
これは
r = 0..100
i = [r]
と同じである、つまり
・「0..100」というRangeオブジェクトが1つだけ入った配列
になる。
0から99までの配列の作り方は>>454以降を参照。
0462デフォルトの名無しさん
2011/03/18(金) 16:10:31.920463デフォルトの名無しさん
2011/03/18(金) 18:36:28.23Rangeもイテレータ呼んだり出来るからね
0464デフォルトの名無しさん
2011/03/18(金) 18:59:06.05って書けるようになったんだっけ?
1.9で演算子?の優先順位が変わったとか。
代わってないか。
0465デフォルトの名無しさん
2011/03/18(金) 19:01:44.690466デフォルトの名無しさん
2011/03/18(金) 20:17:55.760467デフォルトの名無しさん
2011/03/18(金) 22:18:53.23これどういう意味?
0468デフォルトの名無しさん
2011/03/18(金) 22:51:01.340469デフォルトの名無しさん
2011/03/18(金) 23:04:00.96[*1..3] == [1,2,3]
マニュアル見たら [*obj] の説明は無かったが
メソッド呼び出しの最後の引数に*をつけると、配列を展開して渡せる
それと同じことが 配列リテラルでもできる
[0,1,2,*7..9] == [0,1,2,7,8,9]
Ruby 1.9からは、ちょっと拡張されて
最後の引数だけじゃなくてどこでもよくなって、複数でも可能に
[*1..3,5,*7..9] == [1,2,3,5,7,8,9]
0470デフォルトの名無しさん
2011/03/18(金) 23:47:42.590471デフォルトの名無しさん
2011/03/19(土) 03:34:32.77-e: ASCII incompatible encoding needs binmode (ArgumentError)
どうすれば?
0472デフォルトの名無しさん
2011/03/19(土) 08:14:35.15$ ruby -E utf-16le -e ""
-e: ASCII incompatible encoding needs binmode (ArgumentError)
> ruby -E utf-16le -e ""
<internal:prelude>:3:in `require': incompatible character encodings: Windows-31J
and UTF-16LE (Encoding::CompatibilityError)
とか出るのをどうすればいいかという話だよね
0473デフォルトの名無しさん
2011/03/19(土) 14:10:46.54質問した人じゃないけど、すごくわかりやすいです。
横から�d
0474デフォルトの名無しさん
2011/03/19(土) 14:44:21.99Windowsユーザーの方に質問です
みなさんはどのような環境でプログラミングされていますか?
RDEやEclipse、NetBeans等いろいろあるので
どれを選択すべきか悩んでいます
意見を頂けないでしょうか?
0475デフォルトの名無しさん
2011/03/19(土) 14:51:00.17基本はVirtualBox上にLinux入れて、自前コンパイルをインストールした環境。
パッケージングシステムとgemの相性が悪いので…
んで、Windows上で使うものの時にはNetBeans + JRubyで。
rawrでexe化が出来るので…。Macのappも作れるよ。
0476デフォルトの名無しさん
2011/03/19(土) 15:59:44.25IDEがない時代に考えられた言語で、スクリプト単体で動作するように作られてるから
標準入力と標準出力をきちんと把握したあとで
(悲しいけどこれ最重要、IDEべったりの人はここで詰まる)
IDEがサックサクの環境ならEclipseでいいんでないかね
NetBeansが次点人気
RDEはとりあえず初心者は捨てていい
あと、Javaや.netのような親切で高度で指一本な連携サポートはできないのでご注意
0477デフォルトの名無しさん
2011/03/19(土) 16:07:19.44IDE上からは実行できるんですが普通に使う方法がわかりませんというのはFAQに近い
エディタとコマンドプロンプトで作って、ある程度納得してから進む道決めたほうがいいかもしれん
うまい教科書があるといいんだけど
0478デフォルトの名無しさん
2011/03/19(土) 16:10:44.330479デフォルトの名無しさん
2011/03/19(土) 16:15:33.40あんなものを最初に触らせること自体「俺ならできる、だからお前もやれ!」という体育会系の思考だわ
0480デフォルトの名無しさん
2011/03/19(土) 16:24:47.12Rubyでも似たようなことをしたいと思って使うもんだ
Ruby初心者には若干厳しく、統合開発環境初心者には鬼だ
そのへん見極めて勧めないと逆効果になりかねん
0481デフォルトの名無しさん
2011/03/19(土) 16:36:06.270482デフォルトの名無しさん
2011/03/19(土) 16:37:39.540483デフォルトの名無しさん
2011/03/19(土) 16:49:36.590484デフォルトの名無しさん
2011/03/19(土) 17:24:16.66Vim → あの Vim で Ruby スクリプトが書ける
メリットだと思うほう使え
0485471
2011/03/19(土) 17:32:37.82で行けた
0486デフォルトの名無しさん
2011/03/19(土) 17:35:27.03それは要件満たしてるのか?
0487471
2011/03/19(土) 20:28:00.070488デフォルトの名無しさん
2011/03/19(土) 21:14:01.61で、12,34,56と消費するイテレータってないんですか?
[[1,2],,,というのはなしで
0489デフォルトの名無しさん
2011/03/19(土) 21:18:30.870490デフォルトの名無しさん
2011/03/20(日) 02:00:07.70ありそうなので、探したんだけど、無いから自分で作った。
習い初めのものなので、つっこみはご勘弁。
# 多次元配列と文字列の複製
# dataの値を新しいアドレスを作成して複製
def copy(data)
if Array.try_convert(data) == nil
String.try_convert(data) ? data.dup : data
else
(0 ... data.size).map{|i|
copy(data[i])
}
end
end
0491デフォルトの名無しさん
2011/03/20(日) 03:10:30.28Marshal.load(Marshal.dump(data)じゃいやだったの?
0492デフォルトの名無しさん
2011/03/20(日) 04:15:52.140493デフォルトの名無しさん
2011/03/20(日) 06:58:31.33多次元配列はRubyにはない
0494デフォルトの名無しさん
2011/03/20(日) 07:15:53.69多次元配列自体は存在できないわけではないんだが、専用にクラス作らんといかんぬ
0495デフォルトの名無しさん
2011/03/20(日) 13:28:18.96obj[x][y][z] が
obj[x, y, z]
ではなく
retx = obj[x]
rety = retx[y]
retz = rety[z]
return retz
というレシーバ依存のメソッドチェーンである時点で、もうどうしようもない
単純には諦めてネストした巨大な配列にするしかなく、実用的には NArray gem を使うとかしかないわ
0496デフォルトの名無しさん
2011/03/20(日) 15:58:00.200497デフォルトの名無しさん
2011/03/20(日) 15:59:56.68だから NArray ではご不満ですか
0498デフォルトの名無しさん
2011/03/20(日) 19:00:14.350499デフォルトの名無しさん
2011/03/20(日) 19:21:54.20だ
0500デフォルトの名無しさん
2011/03/20(日) 20:19:24.330501デフォルトの名無しさん
2011/03/20(日) 20:57:00.75そう刺々しくせずに生温かく見守ってあげてください
0502デフォルトの名無しさん
2011/03/20(日) 22:06:39.16なんでわざわざ同じように間違えるまで放置しなければならないのかと
0503デフォルトの名無しさん
2011/03/20(日) 22:19:45.81どこが実際的な脅威なのか不明
0504デフォルトの名無しさん
2011/03/20(日) 22:29:57.66「ary[0][1]はRuby使いにとってary[0]のそのまた[1]にしか見え」てない実例だと思う
0505デフォルトの名無しさん
2011/03/20(日) 22:41:55.58「私Rubyわかってませんこれからここで勢いよく躓きますみなさん見ててください」
と言ってるようなもんだろ
m = Array.new(3, [])
と書いてあったら危険なのと同じ
それは違いますそれは動きませんと言ってあげること自体は非難されるべきではない(今回は言い方がアレだが)
なんでニヤニヤ笑いながら手を差し伸べずに眺めて失敗してから先輩風吹かせて「いやーそれはねー」とか言うの
0506デフォルトの名無しさん
2011/03/20(日) 22:48:39.13先生、それは単に参照とはなんぞやの問題です
多次元配列以前の問題です
0507デフォルトの名無しさん
2011/03/20(日) 22:54:52.23「ネストした配列は多次元配列ではない」というのは、
それと同様にtrap::Arrayに書かれていてもおかしくないと思う
>>506
たぶんこのレベルの話をしてる
ttp://www.ruby-lang.org/ja/man/html/trap_Array.html
0508デフォルトの名無しさん
2011/03/20(日) 22:56:44.90誰も得しないだろ
0509デフォルトの名無しさん
2011/03/20(日) 23:05:16.65まさに参照の問題じゃない
同じオブジェクトを指すという
0510デフォルトの名無しさん
2011/03/20(日) 23:17:12.97配列が出てこない str.gsub(/re/, '\1') とかにしたほうがよかったか
>>505は具体的な配列の動作の話してるわけじゃないぞ
0511デフォルトの名無しさん
2011/03/20(日) 23:23:46.56誰に言ってるかわからないからアンカつけれ
0512デフォルトの名無しさん
2011/03/21(月) 11:48:09.04IDEはIDEに慣れた人が使う開発環境だよ
特にRubyのようにIDEの利用者が少ないなら、JavaやC#のようにサクサク使えないのを分かった上でIDEに慣れた人が使うものだと思うよ
もしWindowsでC#やVB.netをvimやemacsで開発する人がいたらちと酔狂だなとは思うかもしれないが、慣れている環境というのを差し引くのは難しいよ
俺の結論も>>475なんだが>>474が初心者なら特に多くの人が使っていない開発環境を積極的に使う理由がないな
趣味でちょっとしたスクリプトを書くのなら何でもいいんだがな
0513デフォルトの名無しさん
2011/03/22(火) 09:34:14.490514デフォルトの名無しさん
2011/03/22(火) 10:47:09.45コード補完+ステップ実行+変数ウォッチできるだけでも開発効率が段違い。
ruby.exe+テキストエディタな環境と排他でもなんでもないから
IDEでパーツ作って残りは従来環境で仕上げてテストする事も普通にできる。
2011年にもなってIDEは是か非かなんてあまりにも不毛すぎるよ。
0515デフォルトの名無しさん
2011/03/22(火) 11:22:11.430516デフォルトの名無しさん
2011/03/22(火) 14:45:58.74そういった者に向く入門書はないでしょうか
調べてみると「Ruby1はじめてのプログラミング」が良いらしいですがこちらは如何でしょう
0517デフォルトの名無しさん
2011/03/22(火) 15:53:07.01くっそー誰だそんなやたらピンポイントに的確なレビューしてる奴は
ttp://www.amazon.co.jp/product-reviews/4797357401/
提供する問題が若干独り善がりであるという指摘は前からうっすらあった
書き換えたの送ったら更新してくれるかなあ
Ruby1ってあれだよねピンクのガゼルの大きいやつ
ttp://www.amazon.co.jp/dp/4798117994/
Rubyの初心者向け薄い本は当人の当たり外れが大き過ぎるので
できれば事前に立ち読みとかしてマッチングしてもらえるとまいっちんぐなことにならないんだが
内容としては普通に初心者向けだと思う
…つまり、下手したら本の半分くらいが自分にとって不要な記述である可能性があるってことだけど
たのしいRubyより前に位置する本であることは保証するよ
1.9に関する記述がなかった気がするが、まあそれは必要になってから上乗せで勉強すればええ
0518デフォルトの名無しさん
2011/03/22(火) 17:40:21.14http://www.amazon.co.jp/dp/4873112923 これか
http://www.amazon.co.jp/dp/4798019437 これ
0519デフォルトの名無しさん
2011/03/23(水) 11:33:45.48ttp://i.yimg.jp/images/weather/general/forcast/clouds_sun_st.gif
この画像をローカルにキャッシュしたいのですが、ディレクトリをどこに置いていいのかわかりません
Otenki::Config とかクラスを作って、ユーザが事前に指定しない場合は動作しない、みたいなのがいいんでしょうか
Otenki::Config.cache_dir = "/home/ch2/otenki/cache" # 必須
Otenki.new.show
インストール先に勝手に gems/otenkiview-0.1.2/cache/ を作ってそこに一律保存する、みたいなのってよくないですよね?
0520デフォルトの名無しさん
2011/03/23(水) 12:11:05.93うーん、現在の天気を調べるクラスは別にいいんだけど
画像までライブラリに含むのはどうかと思うなあ
ライブラリ使う人が違う画像を使いたいと思ったらどうするの?
0521デフォルトの名無しさん
2011/03/23(水) 12:18:48.81gems/libname-1.0.0/ のライブラリホームにスクリプトが書き込むのはよろしくないな
パーミッションの関係で書き込めないことが多いし、スーパーユーザーで書き込んだら上書きできない
永続的な設定ファイルとかをどうしようかというのはみんな悩んでるんだけどね
0522デフォルトの名無しさん
2011/03/23(水) 12:26:35.20いつのまにか $HOME/.otenki/cache/ みたいなのを作る糞ライブラリもあるけどな
0523デフォルトの名無しさん
2011/03/23(水) 20:18:16.60という話ではないのか。
↑なら post_install フックでやりゃいいんだけど。
0524デフォルトの名無しさん
2011/03/23(水) 20:33:35.92doc = Nokogiri.parse(open(天気予報サイト).read)
yohou_text = doc.at('今日の天気文字列').inner_text
mark_src = doc.at('img/今日の天気マーク')['src']
local_cache = @cache_dir + File.basename(mark_src)
File.open(local_cache, 'w'){|f| f.print(open(mark_src).read)} unless File.exist?(local_cache)
puts <<EOS
<title>今日のお天気</title>
<img src="file://#{local_cache}">
今日の天気は#{yohou_text}です!
EOS
とかやるんじゃないの
で、@cache_dir の初期値をどうしましょうと
ライブラリが共通で使うなら gem インストール時になんか適当に自動で GET すればいいじゃんね
0525デフォルトの名無しさん
2011/03/24(木) 01:10:55.51Linux使ったことないから、こういう目的にshareを使って良いものなのかどうかわからないけど
0526デフォルトの名無しさん
2011/03/24(木) 01:33:01.49ただ、ふと考えてみたら、他のユーザーが使った後にはシステムデフォルトの画像が変わってるかもしれないって、
結構、嫌な仕様じゃね?
0527デフォルトの名無しさん
2011/03/24(木) 05:14:06.81まあ、そういうような共用読み書きディレクトリの指定方法がないのも確かなんだが
Webのキャッシュって言ったら普通はログインユーザーごとに個別だろ、普通は
意外とこのへんの基本設定のデファクトって固まってないのね
0528デフォルトの名無しさん
2011/03/24(木) 05:28:34.06指定されてなかったらデフォルト使うのではなくエラーで止める
ユーザーが指定しなくても適当にクラスをnewしてgetするだけで
適当にホームにディレクトリ掘って永続保存してあら便利、みたいなのはキモいのでやめるべき
0529デフォルトの名無しさん
2011/03/24(木) 09:37:28.58そもそもこれはキャッシュなのか
0530デフォルトの名無しさん
2011/03/24(木) 09:43:17.91てかそこを突っ込んでどうする
0531デフォルトの名無しさん
2011/03/24(木) 09:50:57.66ライブラリ動作用のユーザーディレクトリ位置なんてうまい固定回答がない分野なので、
初心者スレとしてはもうそこらへん突っ込むしかないのよ
知りませんってレスするわけにはいかないだろプライドとしてw
0532デフォルトの名無しさん
2011/03/24(木) 12:09:49.67ホームディレクトリに勝手に設定ファイル作るソフト排除してたら何も出来ないよ
俺はユーザの指定が無いならホームに勝手に作っていいと思う派
0533デフォルトの名無しさん
2011/03/24(木) 12:37:45.18プログラミングが可能な程度のPCリテラシ持ちだとみなしてよいでそ
ほとんど存在しないものに対してコストをかけるこことほど間抜けなものもない
0534デフォルトの名無しさん
2011/03/24(木) 13:35:56.84セキュリティ考えろよカス、ユーザに確認とれメンテ苦労するわ
0535デフォルトの名無しさん
2011/03/24(木) 18:55:38.82Ruby始めて4年くらいなのだがなんか絶望した
0536デフォルトの名無しさん
2011/03/24(木) 21:02:35.450537デフォルトの名無しさん
2011/03/24(木) 21:19:58.84無軌道に書いて半日とかはさすがになんかちょっとアレだが
0538デフォルトの名無しさん
2011/03/24(木) 21:23:42.74セキュリティって何ですか?おいしいの?
>>519のプログラムがセキュリティを確保するにはどうしたらいいの?
0539デフォルトの名無しさん
2011/03/24(木) 21:37:41.15悲惨だよね。
0540デフォルトの名無しさん
2011/03/24(木) 22:47:39.98expected ってリテラルのような実際の値で書くべきだよね?
def arr_change(arr)
arrを標準メソッドでアレしてコレした配列
end
に対して
expected = arrを標準メソッドでアレしてコレした配列
arr_change(arr).should eql(expected)
というテスト書いても実際的な意味はないですよね
expected = [741, 332, 93, (中略), 23140, 9847, 30994, 4, 43098]
arr_change(arr).should eql(expected)
と、若干長いリテラルになったとしても書くべきですよね
0541デフォルトの名無しさん
2011/03/24(木) 23:02:24.27セキュリティしらないの?
0542デフォルトの名無しさん
2011/03/25(金) 00:21:37.34知らないな
アプリケーションがホームにディレクトリ掘ったりファイル作ったりするだけで
破綻してしまうようなセキュリティてどんなん
もちろんそのアプリケーションが悪意を持って作られたってんなら話は別だが
>>534
一応言っておくと俺は>>532で「ユーザの指定が無いなら」と前置きしてるんだから
ユーザに確認しなくてもセキュリティが確保できる方法を示してくれよ
人の事をカス呼ばわりするんだからそれくらい出来るだろう?
0543デフォルトの名無しさん
2011/03/25(金) 00:30:02.920544デフォルトの名無しさん
2011/03/25(金) 00:47:27.545年後に自分の文章を読んでみろ、カスと呼ばれた意味がわかる
俺は教えない
0545デフォルトの名無しさん
2011/03/25(金) 01:03:44.47知らない事は教えられんわな
せっかくだから俺が>>519のプログラムを作るならこのようにするってのを書いとく
(gemはOSのパッケージシステム使ってて意識した事無いんで考慮してない)
ライブラリの提供する機能は指定場所日時の天気をSymbolやStringで返すだけ。
問題の画像ファイルはそのライブラリを使用するアプリケーションが用意する。
利用者に同じ画像ファイルを使わせるために配布物の中にあらかじめ納めておく。
用意できず他所から持ってくるならインストール時にユーザに確認を取ってからやるか
手動でダウンロードさせる。
各ユーザの設定ファイルでファイルの場所を指定するのも良いだろう。
どっちにしてもキャッシュやセキュリティ等の問題は発生しない。
■ このスレッドは過去ログ倉庫に格納されています