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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0653デフォルトの名無しさん
2011/04/01(金) 19:57:00.25接続そのものは行われるので、変な接続先やパスワードを設定するとエラーが出る
0654デフォルトの名無しさん
2011/04/01(金) 19:59:59.90CentOSでRuby使うのだけはやめておけ
というかわざわざCentOS使う人が多いのはなんで?
0655デフォルトの名無しさん
2011/04/01(金) 20:04:55.980656デフォルトの名無しさん
2011/04/01(金) 20:09:32.19パッケージのRubyが5年前の不安定版のままなだけ
0657デフォルトの名無しさん
2011/04/01(金) 20:11:19.04aptとかyumとかそんなの一切使わないけど
0658デフォルトの名無しさん
2011/04/01(金) 20:14:32.26おなじです。表示までいかないです。
>>654
あ、そうなんですね。ありがとうございます。
逆にこれがおすすめってのありますか?
>>657
自分もそうしようとしてました。これ参考にしたらいけるのかなーって。
http://d.hatena.ne.jp/rx7/20100611/p1
0659デフォルトの名無しさん
2011/04/01(金) 20:15:38.190660デフォルトの名無しさん
2011/04/01(金) 20:16:18.48特に初心者は
新しい言語環境試すのにとりあえず最新版をコンパイルしてホームにインストールとかするのはマニアだけです
0661デフォルトの名無しさん
2011/04/01(金) 20:21:23.27Linuxもプログラミングもはじめてでちゅこんぱいるってなに、という人には勧めないが、まあ、そんな程度だ
0662デフォルトの名無しさん
2011/04/01(金) 20:27:57.48まあ趣味の世界でしかrubyを動かす事のない人にはパッケージで管理してればいいよ
0663デフォルトの名無しさん
2011/04/01(金) 20:40:43.62個人的には普通なんて存在しないと思うよ
0664デフォルトの名無しさん
2011/04/01(金) 21:48:09.19現時点でならRVMだな!
0665デフォルトの名無しさん
2011/04/02(土) 16:09:15.090666デフォルトの名無しさん
2011/04/02(土) 16:11:05.27PHPやPERLやPYTHONでは出来るのですがRubyではあまり聞かないので
0667デフォルトの名無しさん
2011/04/02(土) 16:20:32.35「コンパイル済み」の状態のバイナリを持ち歩くことはできない
Ruby実行環境ごとひとつのexeファイルにまとめてスクリプトを実行することはできる
0668デフォルトの名無しさん
2011/04/02(土) 17:42:38.810669デフォルトの名無しさん
2011/04/02(土) 19:27:42.05Try Ruby 日本語サイトにも置いといてくれよ
0670デフォルトの名無しさん
2011/04/02(土) 21:04:47.20個人的にはそれで困ったことはないが
|: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i '
: :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : | |
: :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : | |
: :|: : : : |イ|: :|:/ |:/ |:/ |ハ: : |: : : | \_,ノ
: :|: : : : | レヤ示ト rテv|:./|: : : :|
ヽ|: : : : |/{:::::::i } トイ レ: :|/|/ 関東地方
( |: : : : 代c::ノソ レリ |: : : : | 東北地方 北海道地方
.〈.|: : : : |x`¨ 、¨x.|: : : i:| にいる
\|i: : : :| , /|: : : i:| すべての 愛すべき 国民へ 告ぐ
∨リ\: :iト 、 `´ ィ |: : /|リ
‐┴―\|- 〈 >rァ 爪|V |/
:::::::::::::::::::::::ヽ \ リ
::::::::::::::::::::::::__\
:::::::::::::::/ ::r――‐へ rっr‐-、_
:::::::::/ ::// ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄|..
:::/ ::/ / ヽ|. L|_|_ト' |
/ ::::/ / \ ただちに 逃げろ |
. :::/ |/ | |
0672デフォルトの名無しさん
2011/04/03(日) 20:20:05.210673デフォルトの名無しさん
2011/04/03(日) 20:41:41.53例えば, ( http://weather.jp/XXXX.html ) というページの, 2010年のhtmlを保存( 2010.txt )しようとした場合,
year = gets().to_i
output_file = File.open( )
open( )
・
・
・
となると思います
これらの File.open( )と open( ) には どのように記述すればよいでしょうか?
今回の場合,
File.open の中には ("2010.txt" , "w") , open の中には ("http://weather.jp/2010.html") が最終的に入力されれば良い, ということは分かりますが
数字が変数に代入されている場合どのようにして記述してやればいいのでしょう?
0674デフォルトの名無しさん
2011/04/03(日) 20:50:41.10StringとArrayとHashの3つだけ眺めてわかった気になるだけでもかなり違う
で、文字列の中に変数(やメソッド返り値)の結果を埋め込むには
文字リテラルを "" で囲って作った上で #{ } を使う
year = 2010
path =
0675デフォルトの名無しさん
2011/04/03(日) 20:52:44.84"http://weather.jp/#{year}"
"http://weather.jp/%d" % year
あとruby getweather.rb 2011とかしてコンソールから起動する場合は
コマンドライン引数2011をARGV[0]で取れるよ
0676デフォルトの名無しさん
2011/04/03(日) 21:00:16.67>>674続き
year = 2010
path = "#{year}.txt"
とすると、path は "2010.txt" になる
あと、かんたんスクリプトの作り方として、外部入力確定は後回しにしたほうがいいと思うぞ
year = 2010 # あとで外部入力にする
url = "http://weather.jp/#{year}.html"
path = "#{year}.txt"
html = open(url).read
File.open(path, 'w'){|f| f.print(html)}
とかやって、2010.txt がうまく書き込まれるようになってからおもむろに year をなんとかする
0677デフォルトの名無しさん
2011/04/03(日) 21:08:40.86…どうやらとても基本的なことを学び足らなかったようですね…
課題に向かうときは簡単な土台から積み上げていくテクニック おっしゃるとおりです
もう少し下積みしてからもう一度挑戦したいと思います. ありがとうございましたm(_ _)m
0678デフォルトの名無しさん
2011/04/04(月) 05:25:55.510679デフォルトの名無しさん
2011/04/04(月) 05:30:36.59require 'open-uri' として open メソッドを書き換える必要がある
open の引数の信頼性に注意
0680デフォルトの名無しさん
2011/04/04(月) 12:48:59.07Rubyにおける「普通の環境」=rvm
0681デフォルトの名無しさん
2011/04/05(火) 01:16:21.14Rhodes + Macが無いと無理なんでしょうか?
どうも解説ページが少なくてわからない・・・。
0682デフォルトの名無しさん
2011/04/05(火) 03:12:07.440683デフォルトの名無しさん
2011/04/05(火) 04:50:03.970684デフォルトの名無しさん
2011/04/05(火) 09:15:46.40なんで?
0685デフォルトの名無しさん
2011/04/05(火) 16:36:21.75>>679でわかるようにKernel#openは書き換えられてるかもってことでは?
0686デフォルトの名無しさん
2011/04/05(火) 21:27:18.56そっか、ないんですね・・・。
世の中のipadアプリケーションエンジニアは
みんなMac持ちなのか・・・?
0687デフォルトの名無しさん
2011/04/05(火) 22:26:39.05データ関連いじるならまだしも
0688デフォルトの名無しさん
2011/04/06(水) 01:04:18.28WebアプリならiPadに最適化されたUIにする手もあるがネイティブアプリを開発したいんだよな
> 世の中のipadアプリケーションエンジニアは
> みんなMac持ちなのか・・・?
もしそこに気付けなかったのならiPadでの開発はやめておいた方がいいかもしれない
0689デフォルトの名無しさん
2011/04/06(水) 08:37:45.890690デフォルトの名無しさん
2011/04/06(水) 08:59:19.72何故関数が呼び出されるのでしょうか?
irb(main):001:0> l = lambda{puts "lambda"}
=> #<Proc:0x00007ff619093dc0@(irb):1>
irb(main):002:0> l.call
lambda
=> nil
irb(main):003:0> l[]
lambda
=> nil
0691デフォルトの名無しさん
2011/04/06(水) 09:08:25.400692デフォルトの名無しさん
2011/04/06(水) 09:38:55.16単なる.call()の略記法としてそういうメソッドが定義されてるだけ
本当は()にしたかったんだろうけど、言語仕様的に無理があるんで
それっぽい表記で、かつメソッドとして有効な名前として[]が選ばれた
0694デフォルトの名無しさん
2011/04/06(水) 12:47:49.62今は3種あるのかな
Proc#call
Proc#[]
proc_obj.()
0695デフォルトの名無しさん
2011/04/06(水) 13:08:26.82マニュアルってそろってないのですか?
0696デフォルトの名無しさん
2011/04/06(水) 13:20:54.54文字エンコーディングに関して造詣がある人向けのガイドもある
が、どちらに関しても初心者な人が読めるかどうかまでは保証しない
ぐぐって出た記述がRuby1.9で動作するかどうかは初見ではわからないので、それで挫折しない心も必要
0697デフォルトの名無しさん
2011/04/06(水) 13:35:05.88ASCII-8BIT のことを「つまりバイナリです」と言われて納得してもらえるくらいの事前知識があれば問題ない
0698デフォルトの名無しさん
2011/04/06(水) 13:50:29.27C++で作っていたCGIを移植するべくRubyを始めようと思っています
一般的なプログラミングと文字コードに関して一通りの知識を有しています
それでもやはりRuby初学者は1.8から始めるべきでしょうか
1.9では速度も相当改善されていると聞きます
なので1.9から始めたいという気持ちが強いのですが
よく考えるとレンサバでは1.8しか使えないことがほとんどなので
選択の余地がありません。本当にありがとうございました。
0699デフォルトの名無しさん
2011/04/06(水) 14:22:27.75一般の人がふつうに(Ruby上で)文字列作ってふつうに文字列使うライブラリではふつうに遅いよ
ベンチマークが速いのは、単に負担がかかる動作を回避してるからに過ぎない
0700デフォルトの名無しさん
2011/04/06(水) 14:26:35.700701デフォルトの名無しさん
2011/04/06(水) 14:31:26.81ライブラリ中で速くなった部分がたくさん使われてて遅くなった部分があまり使われてないと
最終的にそのライブラリは「Ruby1.9では速くなった」になる
そんだけ
遅くなった筆頭がたまたま文字列作成だったので、
文字列たくさん作るようなライブラリは1.8よりも遅くなる可能性が高い
0702デフォルトの名無しさん
2011/04/06(水) 14:38:16.710703デフォルトの名無しさん
2011/04/06(水) 14:46:50.20ただ、それはRubyを学んで使い倒してる人の間でのお話で、
初心者スレとしては「いきなりRuby1.9は逆にめんどくさいぞ」というのが一応結論
めんどくさくてもいいなら1.9から始めるといい
ひょっとしたら君にとってはめんどくさく感じられないかもしれないし
このスレの想定する初心者というのはかなり初心者だから
0704デフォルトの名無しさん
2011/04/06(水) 18:04:20.520705デフォルトの名無しさん
2011/04/06(水) 18:46:53.32Ruby 1.9 以上で 引数がひとつだけならば
Proc#===
を演算子形式で呼べる
lambda{|x| 2**x} === 3 # => 8
本来はcaseなどで真偽値を返す用途に使うのだろうけど
カリー化すれば複数の引数も何とか
(lambda{|x,y| x**y}.curry === 2) === 3 # => 8
メソッドとして呼べば複数の引数も渡せる
lambda{|x,y| x**y}.===(2,3) # => 8
で、「you普通にcallしちゃえよ」と突っ込まれる
0706デフォルトの名無しさん
2011/04/06(水) 19:32:48.32また、gemというのはPythonやPHPやApacheなどにも対応してそうですね
linuxのaptみたいなのがwinでも使えると便利ですね
0707デフォルトの名無しさん
2011/04/06(水) 20:21:24.200708デフォルトの名無しさん
2011/04/06(水) 23:30:10.87gemで直接Ruby本体(ruby)をアップデートすることはできない
でも707も言ってるとおり、pikというソフトウェアを使うと似たようなことはできる
コマンドラインからのrubyの一発インストールとか、バージョンアップとか
0709デフォルトの名無しさん
2011/04/06(水) 23:50:25.53pik教えてくれてありがとうございます
0710デフォルトの名無しさん
2011/04/07(木) 02:43:36.63そうですね。Rubyでネイティブアプリを作りたいです。
やはり無理なのか・・・。
0711デフォルトの名無しさん
2011/04/07(木) 16:05:35.890712デフォルトの名無しさん
2011/04/07(木) 23:20:18.54定番はrvmだがWindowsならpikだと思う
pikはRuby本体のインストールだけならmingw版やさらにDevKit(gemのコンパイルに使う)がバイナリですぐに入るしむしろrvmより楽かもね
0713デフォルトの名無しさん
2011/04/08(金) 15:40:26.26以下の各ケースでは、どちらの言語を選択したらよいでしょうか?
1.ゲームを作る場合
2.レンタルサーバを借りてWEBサイトを制作する場合
個人的な未開として1についてはライブラリの選択肢が多いほうを選択したいのですが、どちらが多いのかわかりません。
2についてはPythonだとバージョンにより特定のライブラリが使えなかったりするので互換性の面でRubyのほうがいいのかなと考えてます。
0714デフォルトの名無しさん
2011/04/08(金) 15:51:35.160715デフォルトの名無しさん
2011/04/08(金) 16:21:13.78最近のGoogleさんは物凄くて鼻血が出ちゃうわ
で、まあ、どっちにしてもPythonでいいんじゃないのと思う
ゲームみたいなのを作るのも、安い共用レンタルサーバでCGIとしてガンガン動作させるのも、
今のところRubyの得意分野ではない
0716デフォルトの名無しさん
2011/04/08(金) 17:01:22.260717デフォルトの名無しさん
2011/04/08(金) 17:21:35.08文字列操作が強力でテキストファイルの整形を手軽にできるとか
0718デフォルトの名無しさん
2011/04/08(金) 17:27:59.240719デフォルトの名無しさん
2011/04/08(金) 17:32:35.10就職できるぞwww
0720デフォルトの名無しさん
2011/04/08(金) 17:35:20.77第三者ライブラリとか含めるとかなり違うが
0721デフォルトの名無しさん
2011/04/08(金) 17:36:56.38Ruby1.9.2です
基本的に問題ないでしょうか?
0722デフォルトの名無しさん
2011/04/08(金) 17:39:41.261.9で動作する記述はあったっけ?
0723デフォルトの名無しさん
2011/04/08(金) 17:42:53.51日本語文字列とかじゃなければだいたい大丈夫なはず
まあ、動かなかったらこことかで聞けばいい
3回くらい躓けば慣れる程度のことだし
スレ的には躓きまくることでRubyそのものを諦められてしまうことを恐れてるっぽいが
0724デフォルトの名無しさん
2011/04/08(金) 18:04:02.41'require':no such file to load -- openssl(LoadError)
というエラーが出て動きません。
Cygwinでは予め入っているので動きます。どうすれば動くようになる
でしょうか?よろしくお願いします。
0725デフォルトの名無しさん
2011/04/08(金) 18:22:51.830726デフォルトの名無しさん
2011/04/08(金) 18:40:45.96でも同じエラーが出ます。
0727デフォルトの名無しさん
2011/04/08(金) 19:17:17.670728デフォルトの名無しさん
2011/04/08(金) 19:21:46.45マニュアルくらい読め
0729デフォルトの名無しさん
2011/04/08(金) 19:40:21.63なったスクリプト言語はもう卒業かな。sha1なんてどこで手に入れれ
ばいいの?NTL使ってC++に移植したほうがいいかも。
0730デフォルトの名無しさん
2011/04/08(金) 19:42:57.22第一ネットしかしない一般ユーザーがRubyを動かすために態々Ruby
インストールするなんてWindows環境じゃありえないし。
0731初心者ですが
2011/04/08(金) 19:48:29.44http://rubyforge.org/frs/?group_id=167&release_id=45627
0732デフォルトの名無しさん
2011/04/08(金) 19:53:05.571.9をやるうえでこのマニュアルは参考にしてはいけないのですか?
0733デフォルトの名無しさん
2011/04/08(金) 20:05:47.50完成版ではありません網羅してませんという程度の意味
現状、内容そのものは合ってはいる
致命的に不足してるが
0734デフォルトの名無しさん
2011/04/08(金) 20:17:31.71実際のソース読んだほうが早い
0735デフォルトの名無しさん
2011/04/08(金) 20:22:03.03やっぱり動かないよ。require 'digest/sha1' LoadError
0736デフォルトの名無しさん
2011/04/08(金) 20:23:11.55ローカル変数名とかを適切にしまくって短めのメソッドにしてる場合、
(日本語の)文章で説明するより早そうな場合も多々…
0737デフォルトの名無しさん
2011/04/08(金) 20:23:44.35どういう開発してるんだ?
0738デフォルトの名無しさん
2011/04/08(金) 20:26:19.841.9.2での日本語表示についてご教示お願いします
# -*- encoding: utf-8 -*-
require "kconv"
a = "あ"
puts Kconv.tosjis(a)
で日本語が表示できました
しかし日本語があるごとに毎回Kconv.tosjis()を書くのは面倒です
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45331
を元に以下のようにしてPHPのecho()みたいにしてみました
# -*- encoding: utf-8 -*-
require "kconv"
def echo(*arg)
puts NKF.nkf("--ic=UTF-8 --oc=Windows-31J", arg.map{|x|x.to_s}.join("\n"))
end
a = "あ"
echo(a)
もっと楽な方法ってございませんか?
0739デフォルトの名無しさん
2011/04/08(金) 20:33:44.35http://rubyforge.org/frs/?group_id=167&release_id=45627
0740デフォルトの名無しさん
2011/04/08(金) 20:36:36.37その上で、mswin32ではなくmingw32を選ぶ理由を述べよ
さらに、マニュアルとかすっ飛ばして自前でコンパイルしようとする理由も述べよ
それと、解説サイト探さずにファイルだけ持ってきてどうにかしようとする理由も言ってくれるとうれしい
0741デフォルトの名無しさん
2011/04/08(金) 20:53:28.30# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
puts "ねこだいすき"
> TYPE ja.rb
# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
puts "縺ュ縺薙□縺・☆縺・
> ruby ja.rb
ねこだいすき
>
0742デフォルトの名無しさん
2011/04/08(金) 20:56:20.20ruby -EWindows-31J:UTF-8 ja.rb
としてもいい
本当はこっちのほうがいいんだけど、なんかこれがうまく動かないWindowsの環境があったはず
0743デフォルトの名無しさん
2011/04/08(金) 20:57:09.621.自分のマシンに最適化して-march=core2 とかコンパイルオプションを
付け足して早く動かしたいから。
2.昔と同じ感覚でやっているので。昔のRubyは簡単に覚えられてmake
一発すぐ完成だったのに、最近のは使わない機能だけが肥大化して、
本当に使いたい部分が後回しにされている。昔はマニュアルなんか要
らなかったし読むのも面倒くさい。
3.楽でしょ?お手軽さが一番なんだよ。
あ、後パス通したら動いたので感謝。まだ使えるねw
0744デフォルトの名無しさん
2011/04/08(金) 20:59:23.010745デフォルトの名無しさん
2011/04/08(金) 21:25:58.83うちの
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
では動作しないっぽい気がする
いい機会だし1.9.2に上げよう
っていうか2009もないわな
0746デフォルトの名無しさん
2011/04/08(金) 21:31:24.01すごい・・・すごすぎます
0747デフォルトの名無しさん
2011/04/08(金) 21:34:03.07-EWindows-31J:UTF-8
って
-E Windows-31J:UTF-8
でも動くんだけどどうなってるんだこれ
-EWindows-31J:UTF-8でググってもヒットしなかった
0748デフォルトの名無しさん
2011/04/08(金) 22:12:06.41ttp://www.openspc2.org/reibun/Ruby/var/007/index.html
a = [1,2,3,4]
b = a
puts b[2]
と
a = [1,2,3,4]
b = a.dup
puts b[2]
は結果は同じなんですが何が違うのでしょうか?
0749デフォルトの名無しさん
2011/04/08(金) 22:13:57.39Rubyに対する引数から
・ "-Eなんとか" を探して、先頭の -E を取り除いて使う
・ "-E" を探し、見つかったらその次の引数を使う
という処理をすればいい
基本的にはRubyの中で正規表現を頑張りまくってる状態
0750デフォルトの名無しさん
2011/04/08(金) 22:21:03.73Object#dupはオブジェクトを複製して新しいオブジェクトを作る
a.object_idとb.object_idを表示してみるとわかるかも
オブジェクトとはなんぞやということがわからなければその勉強をするといい
Rubyには必須の知識で、理解すれば効率が上がるぞ
0751デフォルトの名無しさん
2011/04/08(金) 22:29:45.690752デフォルトの名無しさん
2011/04/08(金) 22:53:45.83i +=1 と i-= 1って書くのめんどくさい
■ このスレッドは過去ログ倉庫に格納されています