10/03/11 13:47:54
>>224-227
Thanks!
やっぱソコソコ手間かかるか
目的を正直に白状すると,デフォルトのUAがアレなので
常時ナチュラルなUAでライブラリを使用したいだけなんだよね
俺仕様ってことで推奨されない方法で行きます
233:デフォルトの名無しさん
10/03/11 13:53:49
>>228
str = "hoge/aaa\/bbb/fuga"
re = /\/[^\/]++\/[^\/]++\//
p str.slice(re) #=> "/aaa/bbb/"
234:デフォルトの名無しさん
10/03/11 13:59:46
>>232
Net::HTTP を直接使用することは極力避けたほうがいい(第一面倒だ)
自作のスクリプトで何度も使うというのならそのようなライブラリを自作するチャンス
俺は wget を定義して require 'orelib/wget' してしばらく使い回してたぞ
235:232
10/03/11 14:15:56
>>234
>極力避けたほうがいい
それはどうして?
net/httpのAPIは結構気に入ってるんだけど
コネクションがスレッドセーフじゃないとか
Errno系の例外が不親切とかそこら辺?
236:デフォルトの名無しさん
10/03/11 14:28:03
Net::HTTP は抽象度がわりと低いほうだからじゃないでしょうかぬ
システム的な問題ではないと推測
237:220
10/03/11 15:25:24
>>231
仰る通り単体のRubyを入れていたようです
oldと書いていたので新しいもののほうがいいと思って
そっちをダウンロードしてしまったみたいです
ActiveRubyをダウンロード
gemのアップグレード
この時点で試しに
require "tk"
したけどエラー、tcltklibbなどtk関連のファイルがあるのに開けないみたい
>これならActiveTclが別途入ってればなんとかなる
この一文がなければここで挫折してました
そしていろいろぐぐっているとVisualuRubyはすでに入っているようなので
こちらでGUIを作りたいと思います
ありがとうございました
238:デフォルトの名無しさん
10/03/11 16:51:12
すみません。お尋ねします。
ファイル上書き確認のコードを書いているのですが
if File.exist?(outfile)
print "#{outfile} は存在しています。上書きしますか ? (y/n): "
answer = STDIN.gets
if /y/i !~ answer
exit;
end
end
問題ないときもあるのですが、状況によっては(その状況が
いまいちよく分からないのですが)printが実行される前に
STDIN.getsに入って、何も表示されないまま待ち受け状態に
なってしまいます。printの対象を事前にflush(?)するには
どうしたら良いのでしょうか?
239:デフォルトの名無しさん
10/03/11 17:08:07
>>213
あんまりよくわからんなりにソースを読んで見たところ(Windows版Ruby1.8.7だとして)
sleep は引数が無いなら WinapiのSleep(INFINITE)で無限に待つみたいで
引数があるなら Winsockのselectっていうのを呼んでた
selectはタイムアウト0秒だとすぐに帰って来るみたいなので
sleep(0) だと sleep() とは違ってすぐに帰ってくるようだ
るりまが間違ってるんじゃないだろうか?
あんまり自信があるわけじゃないので
だれか詳しい人、正確な説明よろしく
240:デフォルトの名無しさん
10/03/11 17:08:27
自分で答言ってる
if File.exist?(outfile)
print "#{outfile} は存在しています。上書きしますか ? (y/[n]): "
$stdout.flush
exit if $stdin.gets =~ /\Ay/i
end
241:デフォルトの名無しさん
10/03/11 17:09:19
>>238
flushって言葉を知ってるなら
IOのインスタンスでありprint等の出力先である$stdoutにそれをすればいい
と言えばわかるんじゃないかな
242:238
10/03/11 17:25:47
>>240, 241
バッチリ動きました。ありがとうございました。
情けないことに$stdinの方をflushして
動かんなー、と悩んでました・・・。
243:220
10/03/11 18:02:05
tkの方が解説サイトや機能が多いので
TCLフォルダにActiveTCL入れてみたけど実行するとエラーになる
いろんなサイトみて環境変数にパスもちゃんと入れたのに
TCL_LIBRARY TKL_LIBRARY INCLUDE LIBなど
実行するとここを読みに行ってエラー
/Ruby/lib/ruby/1.8/i386-mswin32
ここにもActiveRuby入れたときのTCLがあるのになぜエラー?
もう疲れたよ・・・
244:デフォルトの名無しさん
10/03/11 18:11:21
ActiveScriptRuby(ActiveRubyというものは存在しないしこう表現してもいけない)は
デフォルトで C:\Program Files\ruby-1.8 にインストールするはずだが
C:\Ruby にインストールされるのは RubyInstaller の Ruby
245:デフォルトの名無しさん
10/03/11 18:18:22
RubyInstallerをアンインストールしなかったのか
予想外だ
というかRubyでGUIなんかわざわざやろうという人はもっと熟練して賢いもんだと思ってた
246:デフォルトの名無しさん
10/03/11 18:24:04
やはりTkへのアクセスの存在は隠したほうがいいのかもしれない
もう応対がめんどくさすぎる
デフォルトOFFのRubyInstallerの判断は賢い
…正式版じゃないからかもしれないが
どうしてもTkに処理を渡したいとき用のライブラリであって、
Rubyでウィンドウを作るためにあるわけじゃない
なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない
247:220
10/03/11 18:32:29
簡単なのはRubyと聞いたのでやろうと思ったんだけど
まさかインストールするだけで2日かかるなんて
248:220
10/03/11 18:35:42
>>244
空白開いてるといけないとかどこかで見たから
デフォルト変えてD;\直下にインストールしただけ
エラー表示されるときのパスもちゃんとインストールされた
場所のTCLを参照しているし、でもエラーが出る
RubyInstallerはActivescriptRubyを入れる前に
ちゃんとアインインストールしました
残ったフォルダも直接削除しましたし
249:デフォルトの名無しさん
10/03/11 18:38:28
>>247
簡単だよ
ただ、OS操作とコマンドライン文化に不慣れなプログラミング初心者が独学でやっても簡単だと言った人がいたなら
俺が許可するのでグーで殴れグーで
250:デフォルトの名無しさん
10/03/11 18:40:00
>>249
スレのテンプレすら読めない人も追加で
251:220
10/03/11 18:46:47
>>246
>なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない
ここを見たので、この通りやろうとして躓きました
URLリンク(jp.rubyist.net)
逆になぜ作ってはだめなのか私にはわかりません
そういった説明もないですし
252:デフォルトの名無しさん
10/03/11 18:48:50
>>250
そだな、>>1の注意書きとか読めてないような人にはたぶん無理だな
253:デフォルトの名無しさん
10/03/11 18:51:41
Rubyを使ってる人は程度が低いので、Ruby以外の知識が要求されるGUIプログラミングを否定しようとします
そういった人に騙されないようにしましょう
254:デフォルトの名無しさん
10/03/11 19:00:11
>>253
今のお前恐ろしくつまんないんだけど…
255:デフォルトの名無しさん
10/03/11 19:05:13
いや、Rubyとかじゃなく、GUIに関するドキュメント少なすぎるだけだと思う。
LinuxでGTKプログラミングやろうとすると多くの人が挫折するし。
256:220
10/03/11 19:06:06
エラー内容
D:/Ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so: tcltklib: fail to open tcl_dll (LoadError)
from D:/Ruby/lib/ruby/1.8/tk.rb:6
Complete(1)
ソースコード
require "tk"
Tk.mainloop
xpsp3で以下をダウンロード
ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub
ActiveTcl8.5.8.1.291945-win32-ix86-threaded.exe
参考サイト
URLリンク(arton.hp.infoseek.co.jp)
URLリンク(www.db.is.kyushu-u.ac.jp)
URLリンク(lldev.jp)
など・・
こんな感じです
257:デフォルトの名無しさん
10/03/11 19:27:32
環境変数が設定できてないか参照できていないように見える
コマンドプロンプトから
C:\>echo %TK_LIBRARY%
C:\Tcl\lib\tk8.4
C:\>echo %TCL_LIBRARY%
C:\Tcl\lib\tcl8.4
C:\>ruby -e "require 'tk'"
(何もエラーが出ないまま終了)
どうせ RDE がなんかしてるんだろうと思う
258:デフォルトの名無しさん
10/03/11 19:29:51
Ruby と Tk をインストールしてから一度も RDE を再起動してない場合はこうなるな
259:デフォルトの名無しさん
10/03/11 19:43:46
RubyもTclも入ってない環境だったので Windows 7 Ultimate 64-bit で試してみた
1. ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub をインストール
2. ActiveTcl8.5.8.1.291945-win32-ix86-threaded.exe をインストール
(インストーラは管理者として実行)
> cd "C:\Program Files (x86)\ruby-1.8\bin"
> irb
irb(main):001:0> require 'tk'
=> true
irb(main):002:0> Tk.mainloop()
# ここでTcl/Tkのウインドウが表示される
=> true
ウインドウを出すところまでは普通に動くね
260:220
10/03/11 19:56:49
>>257
全く同じ結果でエラーも出ませんでした
もしやと思って、test.rbをdblclickしたら普通に起動しました
ruby consoleで
>test.rbとやってもフォームが表示されました
>>258
再起動は何度もしましたが同じ結果でした
>>259
そのTCLはActiveScriptRubyに入っているTCLですか?
それとも別途インストールしたほうのTCLでしょうか?
どこかのサイトにRubyが参照しているライブラリのディレクトリを表示する
コマンドが書かれていたんですけど、閉じてしまってわからなくなった
261:デフォルトの名無しさん
10/03/11 20:00:39
詰まる初心者の9割はRDE使ってるよな
なんなの
262:デフォルトの名無しさん
10/03/11 20:12:21
>>261
誘蛾灯みたいなもんだと思う
コマンドプロンプト上から ruby -e "require 'tk'; Tk.mainloop" を実行してウィンドウが出るのに
RDE のエディタ部に require 'tk';Tk.mainloop と書いて F5 押してエラーログが出るなら RDE の問題
263:デフォルトの名無しさん
10/03/11 20:58:57
zipとrarを回答する短いプログラムを作ろうと思っているんだけど、
OSのコマンドを使わずに作りたい
できればwindowsとlinuxのどっちでも動くようにしたい
教えてエロい人!!
264:220
10/03/11 21:01:03
初心者は蛾扱いか
プログラマってこういう人間ばっかりか
265:デフォルトの名無しさん
10/03/11 21:05:01
>>263
ソース読んでそういうライブラリ作るとか。
tarは自分で作ったことあるよ。
266:デフォルトの名無しさん
10/03/11 21:10:03
正直RDEというだけで話聞く気9割減
267:デフォルトの名無しさん
10/03/11 21:13:10
>>264
1~2日くらいしか考えてないんだろ
そんくらいで怒るなよ
みんな親切にしてるじゃないか
268:デフォルトの名無しさん
10/03/11 21:16:51
>>263
コマンドじゃなければいいだけなのならほぼ全てのスクリプト言語でできるぞ
その言語環境がインストールされていることが前提だが
というかシェルに展開を任すような処理をしてる言語を俺は知らない
269:263
10/03/11 21:18:06
>>265
tarを解凍するコードをRubyで書くのって、面倒じゃないんですか?
Rubyの文法がまだ分からないんでorz
頑張って作ってくれと頼まれたもので..
270:デフォルトの名無しさん
10/03/11 21:21:00
>>269
いやtarの展開だけなら数百行でおk。
アーカイブに追加するのは、ちゃんとテストしないと恐ろしいのでやめた。
面倒なら外部コマンドに投げるのが楽。
271:デフォルトの名無しさん
10/03/11 21:25:18
>>266
Rubyを知らない人間がRDEを使うのは嫌われる
Ruby on RailsはRubyとは実質無関係なので他所で
Ruby1.9.1はとりあえず初心者は使うな
RubyInstallerはインストール後がめんどくさいから使うな
Rubyで関数と言って教える何かがあったらそいつから即手を切れ
こんなもん?
>>269
それは
「ZIPとTARの仕様構造を自力で調べてそれを展開するようなプログラムを作ることで勉強しろ」
という意味だろうから話がちょっと違う
Rubyは(少なくとも1.8は)いわゆる文字列とバイナリ列は同じなので
○バイト目から△バイト目までをどうにかする、という処理は普通に書ける
もし「外部コマンドがインストールされてないとZip用ライブラリやTar用ライブラリが動作しないのではないか」
と思っているのなら、そんなことはない
普通にインストールされていればRubyは両者をそれこそ3行くらいで展開する
272:デフォルトの名無しさん
10/03/11 21:27:13
あ、Zipってそっちか
それはrubygemからの追加インストールがいるな
273:263
10/03/11 21:27:41
>>268
zipを解凍するライブラリーはrubyにもあると思いますが、
rarはライセンスのせいでライブラリーが・・・と思ったので
>>270
さすがに、制限時間があるなかで「Rubyの文法 + 解凍のコード」を
書くのは厳しいですね~
274:デフォルトの名無しさん
10/03/11 21:47:28
@hoge = hoge
こんなコードがrubyにはあるわけですが、
perlと同じく変数は宣言しなくていいんですか?
最近のperlはmyをつけて、変数を宣言するのが一般的になってきていると思うのですが
275:デフォルトの名無しさん
10/03/11 21:51:18
>>260
> そのTCLはActiveScriptRubyに入っているTCLですか?
というか ActiveScriptRuby には Ruby と Tcl をつなぐものしか入ってなくて
Tcl は ActiveState のサイトから持ってきた ActiveTcl に入ってる
ActiveTcl をインストール済みなら環境変数 PATH を使って
Ruby/Tk が勝手に Tcl を見つけてくれるはずだよ
でもって
> もしやと思って、test.rbをdblclickしたら普通に起動しました
> ruby consoleで
> >test.rbとやってもフォームが表示されました
RDEの設定に問題があるんだろうから
RDE から ENV['PATH'] して Tcl\bin が含まれているかチェック
もし含まれていなければ環境変数 PATH か RUBY_TCL_DLL に
Tcl\bin でも設定して試してみて
276:デフォルトの名無しさん
10/03/11 21:55:04
>>274
Rubyの変数はハコではない
Rubyのデータは全てオブジェクトでどこか「オブジェクト置き場」に厳然と存在してて、
「変数代入」はその置き場に転がってるオブジェクトにその名前のラベルを貼る行為に同じ
ただのラベルだから宣言はいらない
オブジェクトはすでに存在してるわけだし
@var = hoge は hoge の指す(というか hoge の返す)オブジェクトに
「@var」という4文字のラベルをつける行為
…実際は宣言してるはずなんだが、完全に隠蔽されててRubyスクリプトからは見えないし触れないし関われない
277:デフォルトの名無しさん
10/03/11 22:02:08
プログラミングがしてみたい、というだけなら
今はMSのSmall Basicがいいんじゃなかろうか。
278:デフォルトの名無しさん
10/03/11 22:07:28
>>277
うん、マニュアルだけ見れば十分な既言語取得済該当言語初心者はいつもそう言う
プログラミング初心者に本当に必要なのは十万の解説と百万のサンプル
279:274
10/03/11 22:19:12
>>276
オブジェクトは既に存在していて、オブジェクトに対して名前をつけているってことか?
@var = hogeはjavaでいうと
class Hoge {
Test test;
void setTest(Test t) {
this.test = t;
}}
と同じになるの?
280:デフォルトの名無しさん
10/03/11 22:24:11
>>275
ごめん、もうアンインストールした
この2日間、時間の無駄使いしただけだった
281:220
10/03/11 22:31:58
環境変数という言葉すら初耳の状態からスタートしたおれにとって
まさに>>278の言う通り
教えてくれても、専門用語だらけでわからない
それでも単語ひとつひとつぐぐりながらこの2日間がんばったが
コード一つ書かないまま、いや、2行だけは書いたが
終わってしまうとはまさに予想外
俺の考えている初心者とプログラマーの初心者の立ち位置が違いすぎた
あなた達とはもう2度と出会うことはないでしょう
さようなら
282:デフォルトの名無しさん
10/03/11 22:36:06
>>278
その見地ならJavaが最適ってことで。
でもなぜかJavaを勧める人はあんまりいない、気がする。
283:デフォルトの名無しさん
10/03/11 22:42:04
>>281
本当にもう見ていないことを期待して書くが、たとえば
キーボードやマウスの使い方、エクスプローラの使い方なんかは言語の範疇外だ
それと同様、コマンドプロンプトやOSの環境変数、標準のインストーラ動作なんかは言語解説の範疇外
コマンドプロンプトに日本語を表示したら化けたとかそういうのも本来無関係
文字コードって何ですかとかシフトジス?ってなんですかとかそういうの知らないのも問題外
HTTPとURI関連のライブラリ使うならRFC準拠の基礎知識くらいは持ってから来いやポートの説明からか泣くぞオラ
とまあ、どこまで巻き戻ることを想定するかは残念ながらこちらで決めさせてもらわざるを得ないのだ
Rubyさんは貧乏でリソースは有限であるがゆえ
もし他の(お金持ちでそれゆえ親切な)言語でプログラミングの楽しさを身に付けたなら、
そのときは気が向いたときにでも振り返ってRubyを検討してみてくれると嬉しい
284:デフォルトの名無しさん
10/03/11 22:46:46
すこぶるRDEは嫌われてるみたいですが、
ここに居る人はどんな環境使ってるんですかね?
自分は会社だとEmacs。家だとEclisp
WindowsだとEmacs使う気が失せるんですよ・・・・。
ちなみに仕事はソフトウェア関連ではなく超初心者です。
285:デフォルトの名無しさん
10/03/11 22:47:03
最近はさすがに減ったが、「プログラミングの全くの初心者にもRubyは簡単」という喧伝が多すぎたな
プログラミングの経験がなくても結構使うまでいける言語である保証は頑張ってしたいところだが、
そこまでの道のりがどなたにも簡単かと言われるとかなり大きな疑問符
286:デフォルトの名無しさん
10/03/11 22:49:52
>>284
えまくすくりーんぷてぃー
何らかの手段でLinuxを起動して接続してその上でRuby使うのがたぶん一番妥当
Windows上でRuby使うとかなんかボリショイサーカス見てる気分になる
287:デフォルトの名無しさん
10/03/11 22:50:44
やろうとしたことが GUI でしかも IDE 使用という
二重のトラップにかかったのが不幸だったといわざるを得ない
『たのしい Ruby 』とか適当な初心者本買って
コマンドプロンプト+テキストエディタでリベンジしてほしいな
地味だけど
288:デフォルトの名無しさん
10/03/11 22:54:57
>>287
コマンドプロンプトではエラーなく動作してる時点で
「あっじゃあこっちでやりますRDEはステで」
という判断にならなかったのがなんかもう供養塔立てて忘れないよう祀るレベル
今度から「RubyではGUIできません」と答えることにしようと思う
289:デフォルトの名無しさん
10/03/11 23:10:44
>>281
プログラミング初心者ならそれこそ1日や2日でマスターできるもんじゃないんだから、
根気よくやらないといかんよ・・・
毎日プログラミングし続けて3年くらい使い続ければそこそこプログラミングできるようになる。
頑張れ
290:デフォルトの名無しさん
10/03/11 23:13:57
>>281
誰にGUIをRubyなら簡単にできると教えてもらったのか知らんが、そいつを殴ってもいいぞ
俺ならC#を押すよ。初心者でもポトペタでいきなりGUIが作れる。
サンプルコードもネットにたくさん。フリーのコンポーネントも一杯ある。
Delphiでゲーム作ってプログラミング覚えた俺だけど、いきなりRubyやってたら多分挫折してる
291:デフォルトの名無しさん
10/03/11 23:23:23
最近で見たRuby初心者でいえば、チンパン団のロプロスはすごかったな。
ニートから1年くらいでphp→Rubyと来てtwitter関連のwebサービス立ち上げて、アフィリエイトで飯食ってる。
でもロプロスはRDE使ってるんだよな。
twitter関連のwebサービスのtwilogはユーザー数数万人だが、Railsすら使ってない。
index.cgiだったぞw
何がいいたいかって、GUIじゃなくてwebに興味持てばまだよかったと思う
292:デフォルトの名無しさん
10/03/11 23:25:56
アフィリエイトって w
293:デフォルトの名無しさん
10/03/11 23:33:24
しょうもないこと言うやつばっかりになったな
294:デフォルトの名無しさん
10/03/11 23:37:41
moduleってC++のnamespaceやjavaのpackageと同じ?
295:デフォルトの名無しさん
10/03/11 23:39:29
クラウドだのシンクライアントだのって数年前のサーバサイドに先祖返りしてるけど
Railsは本命にはならんだろうな
なんだかんだ言ってcgi+javascriptがこの先も主力だろう
296:デフォルトの名無しさん
10/03/11 23:55:12
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう
297:デフォルトの名無しさん
10/03/12 00:00:44
気持ちはわかるが5行はやりすぎだ落ち着け
298:デフォルトの名無しさん
10/03/12 00:04:14
RoR と cgi+javascript じゃ目指してるものが違うから住み分けるんじゃないの?
サイトの数としては後者の方が多くなるだろうけど
299:デフォルトの名無しさん
10/03/12 00:10:38
>>294
C++のnamespaceとJavaのpackageが同じに見えるのなら、
moduleも同じだということにしてもいい。
あ、classも同じでいいよ。
300:294
10/03/12 00:14:15
>>299
そんじゃ、moduleもpackageみたいに使います
あえて言うなら、何か違いありますか?
今のところ趣味でプログラミングしているんで、namespaceを使うことが無いんだよね~
だから、namespaceとpackageの細かな違いがわかんない
301:デフォルトの名無しさん
10/03/12 00:15:24
このスレっていつもこんな感じなのか?
プログラムというよりは「自宅サーバ板」のおまけスレみたいだな
302:デフォルトの名無しさん
10/03/12 01:15:58
3月は春休み
303:デフォルトの名無しさん
10/03/12 01:41:29
>>301
あなたがここに来たのと同じような理由の人がいます
304:デフォルトの名無しさん
10/03/12 04:47:02
CentOS5のrubyが、rubygemsを入れるには古いので、
RPMとソースインストールを共存させようと思いました。
RPMは/usr/bin、ソースインストールは/usr/local/binに入るので、
位置的には問題なく入ったのですが、
このままだとRPMのrubyが優先的に使われます。
ソースインストールのrubyが優先的に使われるようにするにはどうすればいいですか?
305:デフォルトの名無しさん
10/03/12 05:11:32
>>281
Cygwin の Ruby なら簡……と言いかけたがダメだなこりゃw
306:デフォルトの名無しさん
10/03/12 08:24:01
>>304
PATH
307:304
10/03/12 08:45:44
ありがとうございます。
よく見たら/usr/local/binが先に書いてあるので
このままでもソースインストールのrubyが優先されました
308:デフォルトの名無しさん
10/03/12 08:59:02
共存か…CentOSにalternative的なものって無かったっけ
309:デフォルトの名無しさん
10/03/12 10:19:39
>>308
man 8 alternatives
chkconfigパッケージに入ってる。
310:デフォルトの名無しさん
10/03/12 11:04:29
>>304
うん、Linuxのパスについての勉強しれ
rubyインタプリタは自分の場所を考慮して起動用設定ファイルを読むから、
/usr/local/bin/ruby と /usr/bin/ruby と /home/ore/usr/local/bin/ruby くらい違えば小細工ゼロで共存するはず
311:デフォルトの名無しさん
10/03/12 12:47:40
updating newgem でメモリ使い切って10分くらいガリガリ言ってる…
312:デフォルトの名無しさん
10/03/12 13:14:55
最近のrubygem updateはプア環境ではまた辛くなってる
1.2くらいの頃が一番よかった
313:デフォルトの名無しさん
10/03/12 13:35:05
スワップに突入するくらいメモリがない場合は
一旦アンインストールしてから再インストールしたほうが所要時間的には早いよね
アップデート対象のgem一覧を返して終了する、みたいなオプションがないのが辛い
314:デフォルトの名無しさん
10/03/12 14:00:19
>>263
7-zipインストールを前提にした上で、それをコマンドラインから叩くのが楽かな。
315:デフォルトの名無しさん
10/03/12 14:15:22
>>314
win32のゲームの配布でRubyスクリプト使ってアーカイブ作ってたときは、俺も7zip使ってたな。
外部コマンドあるならそっちも手っ取り早い
316:デフォルトの名無しさん
10/03/12 14:34:25
ちょっと質問ですが、ふつーはRubyGemsで入れたライブラリなどのリファレンスくるのって何が手っ取り早いんでしょうか?
今までRailsやってて、るりまのchmと
↓で配布されてたchmと(更新停止中)、
URLリンク(d.hatena.ne.jp)
あとは最新のは URLリンク(railsapi.com) とか見てたんですが、
るりまはともかく、railsのchm配布サイトが更新されてなかったり、
最後のサイトはprivateメソッドやnodocのものが乗ってなかったり、不便に感じてます・・・。
こういう不便さを解消できるものでしょうか?
また、ri入れるとRubyGemsのインスコが激遅になるんで使ってないんですが
(.gemrcに gem: --no-ri --no-rdoc とか書いてます)、
普通はri使うもんなんでしょうか?
317:デフォルトの名無しさん
10/03/12 14:45:15
>>316
基本的にはソース読む
公開されてる部分のドキュメントが内容を正しく反映しているとは限らないし、
端折られてる部分の重要性のほうが高いことがほとんどだから
というかほとんどの場合:nodoc:の使い方が不正
nodocにするべきではないものまでガンガンnodocにしてある
privateメソッドを内部で呼んでいるならその動作もpublicメソッドのドキュメントに反映すべきだし
privateメソッドだからといって説明をしなくてもいいということには絶対にならない
ちなみに「Rubyにはprivateやprotectedは不要」派でございます
318:デフォルトの名無しさん
10/03/12 15:34:10
>>316
自分が参考にする大まかな順番
1.ri(マクロでエディタから呼び出せると便利)
2.自動生成したUMLクラス図
3.ヘルプファイルや書籍(親切・有名なプロジェクトなら)
4.Google先生
5.ソースコード・テストファイル・スペックファイル
6.自動生成したコード片のコールグラフ(ソースに黒魔術満載の場合)
7.職場のネ申
8.2chで祈りを捧げる(時間をつぶすともいう)
9.諦める
riとrdocは中身は同じだからrdocでもいいと思う。好みで。
319:デフォルトの名無しさん
10/03/12 16:26:18
超初心者向けの言語でない事は確実だな。
教祖が使ってるデビアンから入る必要が有るし。特に広く一般に普及してるウィンドウズからは敷居が高い。
320:デフォルトの名無しさん
10/03/12 16:31:50
>privateメソッドだからといって説明をしなくてもいいということには絶対にならない
>ちなみに「Rubyにはprivateやprotectedは不要」派でございます
リファクタリングのコストが高くなりすぎないか?
321:デフォルトの名無しさん
10/03/12 16:33:37
>>319
お前Ruby以外使ったことないだろ
322:デフォルトの名無しさん
10/03/12 18:44:12
拡張子の変更がうまくいきません
foo = "foo.c"
File.extname(foo) = ".o"
とするとエラーが出ます
323:デフォルトの名無しさん
10/03/12 18:51:52
extnameが返すのは左辺値じゃない。
1.9 なら Pathname('foo.c').sub_ext('.o').to_s で。
1.8 なら素直に文字列置換。
324:デフォルトの名無しさん
10/03/12 18:57:48
>>322
# File.extnameメソッドは最後のドット以降の文字列(いわゆる拡張子)
# を返すだけ。設定はできない。
foo = "foo.c"
p File.extname(foo) #=> ".c"
# File.basenameメソッドは第2引数に文字列を与えるとファイル名の末尾から
# その文字列を取り除く。
p File.basename(foo, File.extname(foo)) #=> "foo"
# おそらくあなたがしたい事はこれ
p File.basename(foo, File.extname(foo)) + ".o" #=> "foo.o"
325:デフォルトの名無しさん
10/03/12 19:23:30
rubyの処理系(windows)の違いを教えてください
ActiveScriptRubyと公式な実装(ビルドが沢山ある?)があるみたいですが
326:デフォルトの名無しさん
10/03/12 19:25:51
>>325
C#なら何も悩むことはないよ
327:デフォルトの名無しさん
10/03/12 19:27:05
>>322
C#ならファイル名変更なんて簡単に一行でできるのに
かわいそw
328:デフォルトの名無しさん
10/03/12 19:30:20
>> 323
sub_extなんてものがあったのですね。
ありがとうございます。勉強になりました。
以前リファレンスを探したときは見つけられませんでしたので見直しましたが
やはり1.9のリファレンスにsub_extがありません。
>>324
違います
329:デフォルトの名無しさん
10/03/12 19:31:04
公式なWindowsバイナリは存在しない
(Windowsで動作するようなソースは取り込まれているが、コンパイルしたものそのものは配布していない)
バイナリはすべて有志の個人またはネット上の第三者プロジェクトの提供による
あとは>>6
これでは端折ったが要はActiveScriptRubyがMSWin32でRubyInstallerがMinGW32
この言葉が理解できないならこれ以上の情報は不要なので素直にActiveScriptRuby使え
これはほぼ全てのスクリプトでWindows環境だと思ってもらえる
通常の利用上の問題はないから
330:デフォルトの名無しさん
10/03/12 19:36:13
>>329
windowsで公式な実相が無いなら、適当に選ぶことにしますわ
thx
331:デフォルトの名無しさん
10/03/12 19:38:10
>>328
riには普通にあったよ
るりまにはないようだ
332:デフォルトの名無しさん
10/03/12 19:39:34
>>329
fURLリンク(ftp.ruby-lang.org)
これはどういう位置づけなの?
333:デフォルトの名無しさん
10/03/12 19:46:00
>>330
適当に選んでは駄目
実用上、コンパイラが何かということよりも
プラットフォーム文字列にwin32の文字列が含まれているかどうかが重要
C:\>ruby -e "p RUBY_PLATFORM"
"i386-mswin32"
mingw32はRubyに慣れた人向け
スクリプトの修正とかできない人が使ったらどーでもいいとこで詰まるぞ
334:デフォルトの名無しさん
10/03/12 19:49:13
>>332
こんぱいるしたひとがるびーのさばにふぁいるをおいてる
インストーラつきじゃないから少なくとも初心者スレで話題に出すようなもんでもないかと
335:デフォルトの名無しさん
10/03/12 19:54:58
>>332
そういやこれは結局どうなったんだっけ
本気で「ふぁいるおきば」以上の意図はないんだっけ
根性入れて更新するけど公式にサポートしたバイナリではないとかそんな立ち位置なんだっけか
336:デフォルトの名無しさん
10/03/12 19:58:21
Rubyにはサポートレベルというものがあるんだが、
実はWindows系とMacOSXとFreeBSDは同じレベルにあるんだよな。
とてもそんな扱いを受けているようには見えないが。
337:デフォルトの名無しさん
10/03/12 19:58:50
ガラクタの寄せ集め言語なんていらない
338:デフォルトの名無しさん
10/03/12 20:05:45
Pathologically Eclectic Rubbish Listerのこと?
339:デフォルトの名無しさん
10/03/12 20:13:26
初期Rubyユーザが母なるPerlを叩く図式は最高にかっこわるかったな
340:デフォルトの名無しさん
10/03/12 20:13:38
RubyでGUIは鬼門、という方向に話が流れてるなあ…
Pythonのように、インストールすれば即座にTkも使える状態になってれば
少しは違ったんだろうか…
かといって、VisualuRubyを推すのもどうなんだという気もするし…
アレはWindows限定だし…
言語の作者自身が「Windowsなんか知らね」属性の人だったのが
そもそも不幸の始まりだったのだろうか…
Windows嫌ってる人って、GUIも否定的な人が多い印象もあるし
341:デフォルトの名無しさん
10/03/12 20:13:40
何も見ずにもう一回書いてみろ
342:デフォルトの名無しさん
10/03/12 20:14:07
うが。何故瞬間に2レスも間に入るw
343:デフォルトの名無しさん
10/03/12 20:24:04
Wdh=cgi["width"]
<INPUT type="text" name="width" value="50">
print Wdh
Wdh =Wdh / 2
としたところ、
undefined method `/' for "":String
と怒られてしまいました。右も左も分からないので解決策をご教示願います。
344:デフォルトの名無しさん
10/03/12 20:25:04
>>343
とりあえず、てきとうな解説サイト(お勧めは特にない)か本読め
345:343
10/03/12 20:25:16
すみません、追記です。
print Wdhの結果は何も表示されませんでした。
346:343
10/03/12 20:33:33
>>344
ありがとうございました。
347:デフォルトの名無しさん
10/03/12 20:40:36
>>344でよかったのだろうか…
348:デフォルトの名無しさん
10/03/12 20:43:31
>>347
適切ではあったとは思う
変数の規則知らない上にエラーの読み方わからんのではさすがに遠隔ではどうにも
349:デフォルトの名無しさん
10/03/12 20:45:44
単純には、文字列(String)は整数(Integer)ではないから割り算したいなら
変換しろ、ってだけのことなんだけど。
cgiがCGIクラスのインスタンスだとして、こいつの返すパラメータはかなり
変態なので、今後もいろいろ罠に掛かるかもしれない。
350:デフォルトの名無しさん
10/03/12 20:53:25
>>349
>Wdh
>print Wdhの結果は何も表示されませんでした
351:デフォルトの名無しさん
10/03/12 20:59:49
>>343
たのしいRuby 第3版
URLリンク(www.amazon.co.jp)
352:343
10/03/12 21:25:59
数々のエスパーレスありがとうございます。
すみません、Wdhが読み込まれてない原因はHTMLのFORM文にミスがあったせいでした。
>>349
個人的にRubyの変数に型はないからString/Integerは気にしなくておkという先入観があったのですが、この先入観はトチ狂ってるのですね。
エラーは脱せていませんがおすすめの書籍と関連サイトで粘ってみようと思います。ありがとうございました。
353:デフォルトの名無しさん
10/03/12 21:28:19
変数には型はない。
オブジェクト(値・モノ)には型(クラス)がある。
これは、変数はどんな型のオブジェクト(値・モノ)でも指せるってこと。
354:デフォルトの名無しさん
10/03/12 21:29:51
>>331
へぇそうなんだ
riはファイル数削減のため削除した
ウィルスチェックを毎日フルスキャンする義務があるんで
消したらだいぶスキャン時間が短くなった
355:デフォルトの名無しさん
10/03/12 21:33:08
何度でも言われるがRubyの変数は箱ではなくただのラベル
いつ剥がれるか(変数名で参照できる範囲)は決まってるが、貼る先のオブジェクトは区別しない
356:343
10/03/12 21:41:39
わかり易い説明ありがとうございます。
なるほど、ラベルに入ったオブジェクトの型は明示してやる必要があるのですね。
アドバイス通りに検索するとすぐに解答がありました。
Wdh=cgi["width"].to_i
として解決しました。
357:デフォルトの名無しさん
10/03/12 21:52:41
>>356
違う
Rubyには型は存在しない
クラスは型ではない
>>353は誤り
358:デフォルトの名無しさん
10/03/12 21:56:58
タコツボここに極まれり、か
359:デフォルトの名無しさん
10/03/12 22:01:38
そもそも型とかいう考え方は即ごみ箱に捨てろ
360:デフォルトの名無しさん
10/03/12 22:08:36
型(Type)だな
一時期オブジェクトの説明に間違って使われたタイヤキの鋳型(flask)が後を引いて…はいないか
361:デフォルトの名無しさん
10/03/12 22:11:13
>>360
あれは「型」という字にはタイプとテンプレートと鋳型の3つがあるということを失念した例示だったと思う…
タイプやテンプレート相当のものを持った言語を中途半端に習った人大混乱
362:デフォルトの名無しさん
10/03/12 22:15:51
この流れはすごいなあ
というかたのしいRubyってタイヤキの例え使ってなかったか
363:デフォルトの名無しさん
10/03/12 22:25:27
>>362
うん使ってる
言われてみれば言葉の選び方的にあまりよくないな
鯛焼きのカタという言葉は「変数の型」を想起させて混同させる可能性があるのか
第3版が出ようかというときに新しすぎる知見だろそれ
鋳型ならいい?
364:デフォルトの名無しさん
10/03/12 22:34:09
タイヤキの型って、まさしく鋳型じゃない?
>>363の言葉選びのポイントがよくわからん
365:デフォルトの名無しさん
10/03/12 22:44:17
>>363
型ってのはそもそも値の集合と操作の集合なので
別にRubyに使ってもなんもおかしくない
んでクラスとインスタンスは英語で言うところのaとtheの関係なので
タイヤキの鋳型とタイヤキでなんも問題ない
366:デフォルトの名無しさん
10/03/12 22:51:37
数学的な話ではなく、変数の型とクラスの型の2つの混同で
クラスを従来の変数の型のようなものとして誤解してしまう可能性があるという話では
>>356のように
367:デフォルトの名無しさん
10/03/12 23:02:35
それは「変数に型があるかデータに型があるか」の話
型ってそもそもなによって話とは無関係
368:デフォルトの名無しさん
10/03/13 00:09:45
>>336
Windowsならスレッドがちゃんと動くが他のプラットフォームだと動かない、
とかいう罠があったりしたこともあるので、なかなか侮れない。
369:デフォルトの名無しさん
10/03/13 00:13:40
Unicode の U+2295 みたいな表記を Ruby1.8 で該当バイナリ文字列に変換する方法はありませんか
370:デフォルトの名無しさん
10/03/13 00:24:07
>>369
「U+2295」が文字列という前提で
(0.入力文字列の書式をチェックします。)
1.分割します。
U+ … ポイ
22 … 1バイト目
95 … 2バイト目
2.1バイト目と2バイト目をごにょごにょします。Array#pack() 、かなあ?
371:デフォルトの名無しさん
10/03/13 00:27:09
>>369
require 'nkf'
s = 'U+3042 U+3044 U+3046'
puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+(\d+)/){"#{$1};"})
372:デフォルトの名無しさん
10/03/13 00:32:54
>>371
> /U\+(\d+)/
16進数じゃない?
/U\+([0-9a-fA-F]{4,6})/
でいける?
373:デフォルトの名無しさん
10/03/13 00:37:46
>>371
間違ってるぞ
puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+([\da-f]+)/i){"#{$1};"})
374:デフォルトの名無しさん
10/03/13 00:52:39
1.8では、量が多くない場合はNKFに頼るのが間違いないと思う
1.9だと簡単なんだけど
375:デフォルトの名無しさん
10/03/13 01:20:47
$ cat a.rb
require 'nkf'
sikaru = NKF.nkf('-w, --numchar-input', %w(20B9F).map{|s| "#{s};"}.join)
p sikaru
puts sikaru
$ ruby -Ku ./a.rb
a.rb:2: [BUG] Segmentation fault
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]
うひょう
376:デフォルトの名無しさん
10/03/13 04:18:36
本来はiconv使うべきとは思うが、実用的なのはnkfだしなあ。
377:デフォルトの名無しさん
10/03/13 05:37:51
>>369
"U+20B9F".gsub(/U\+([0-9A-Fa-f]{4,6})/){[$1.to_i(16)].pack("U*")}
>>371
-w, の , が余計
378:66
10/03/13 05:57:18
> File.expand_path('あ', '/'.force_encoding(Encoding::ASCII))
Encoding::CompatibilityError: incompatible character encodings: UTF-8 and US-ASCII
となるのですが、これはバグ?
ちなみに実際やりたいことは、Tempfile.open('あ') です。
環境:fedora11、ruby 1.9.2dev (2010-03-06 trunk 26825) [i686-linux]
379:デフォルトの名無しさん
10/03/13 06:46:02
ライブラリのインストールに滅茶苦茶時間掛かるんだが
なにこれ
380:デフォルトの名無しさん
10/03/13 10:12:06
gem search -r hoge
searchっていちいち入力するの面倒いだけど、searchの短いオプションって無いの?
381:デフォルトの名無しさん
10/03/13 10:50:10
スレのバージョンお勧めに従わない人間は自業自得なのでスルー
>>379
そりゃ君のパソコンがプア過ぎるのだよ
気になるなら -V をつけて gem install -V hogehoge すると固まったような時間帯に何してるのか見える
"Building native extensions. This could take a while..." はCで書かれたファイルをコンパイル中(ものによっては遅い)
ごっついライブラリだと定番ライブラリを10個くらい追加インストールするからどんなマシンでも一見とても遅いぞ
来週くらいに gem -V update しても遅いならまたおいで
>>380
sea
なにこれ超中途半端
正確には先頭から文字列にマッチするコマンド探してるので、s と se では複数マッチしてエラー
$ gem s mechanize
ERROR: While executing gem ... (RuntimeError)
Ambiguous command s matches [search, server, sources, specification, stale]
$ gem se mechanize
ERROR: While executing gem ... (RuntimeError)
Ambiguous command se matches [search, server]
$ gem sea mechanize
*** LOCAL GEMS ***
mechanize (1.0.0, 0.9.3)
382:デフォルトの名無しさん
10/03/13 11:01:06
質問ですが、
PythonのPython Image LibraryみたいなRubyの画像処理ライブラリってありますか?
383:デフォルトの名無しさん
10/03/13 11:13:21
>>382
ありません
ImageMagickインストールしてgem install rmagickするしかないねえ
384:デフォルトの名無しさん
10/03/13 11:13:50
用途にもよるけど、既存のCで書かれた画像処理ライブラリを
Rubyから呼び出して使うことが多いと思う。
RMagick(ImageMagickのライブラリを使用)
Ruby/GD2(GD2を使用)
Rcairo(cairoを使用)
など。
ImageMagickは機能過多だ、サムネが作りたいだけなんだという
人向けにImageScienceというのもあるな。サムネ作成専用。
385:デフォルトの名無しさん
10/03/13 11:15:29
>>381
スレの勧めないバージョンインストールしておきながら
お勧めなら引っかからない基本的エラーで文句言うような人はスルー
というのが正しいかと思う
お勧めでなくても入り口以外で引っかかってるなら質問どうぞ
386:デフォルトの名無しさん
10/03/13 11:19:17
>>378
バグっぽい気がしたのでチケット切ってみた。 #2955
387:デフォルトの名無しさん
10/03/13 11:21:38
>>383-384
なるほど、ありがとうございます。
画像出力より入力の機能の方を重視したいので
PILと同程度のライブラリとなるとImageMagickをつかないといけないんですか・・・
FFIするならGIL辺りが良さそうですね。
参考になりました。
388:デフォルトの名無しさん
10/03/13 11:23:54
春休みスレ
389:デフォルトの名無しさん
10/03/13 11:32:34
>>388
間違ってるならあとから正せばいい
質問者には数時間くらいは待ってもらえるといいかもしれん
390:デフォルトの名無しさん
10/03/13 11:55:34
>>380
俺は面倒だから工夫してる。何度も同じコマンドうつのはDRYじゃあるめえ
Windowsなら以下の内容をgems.batとしてパスが通ったところに置いておき、コマンドラインで gems hoge で検索
gem.cmd search --details --both --all %*
Unix系でbashなら、~/.bashrcに以下を書いておいて gems hogeで検索
alias gems="gem search --details --both --all"
あくまで例なのでコッチのほうがいいとか指摘してください
391:デフォルトの名無しさん
10/03/13 11:58:15
あんまりコマンドのエイリアスは設定しない方がいいって
誰か言ってなかった?
392:デフォルトの名無しさん
10/03/13 12:03:40
* 別の環境に移ったときになんぞこれってなるからエイリアスすんな派
* 自分好みに環境をカスタマイズしてこそUNIXのシェルだろJK派
どっちを選ぶも自由
393:66
10/03/13 12:03:56
>>386
ありがとうございます!
文句を言いたいわけじゃなく、バグなのか仕様なのか自分の勘違いなのか自信が持てないから、
このスレを利用させてもらっちゃったんですが、相応しくなかったみたいですね。
すみません。
もう書くの止めときます。
394:380
10/03/13 12:46:52
>>381
seaね、ありがとう
>>390
linuxを使っているならaliasを使うけど、
今はwindowsを使っているからそんな方法があるなんてわからんかったよ
395:デフォルトの名無しさん
10/03/13 12:55:19
>>393
1.9.1だったなら俺も>>385に同意だけど、1.9.2devは本スレが妥当じゃないかな
396:デフォルトの名無しさん
10/03/13 12:55:54
ライブラリが全然整理されてない印象<Ruby
397:デフォルトの名無しさん
10/03/13 13:11:18
うおお、ライブラリが全然整理されてない印象さんがRubyと喋ったぞ
398:デフォルトの名無しさん
10/03/13 13:45:08
<Rubyでなくて>Rubyだと思う
固定された意味はないけど
質問
エンコーディングプラグマ、通称マジックコメント、は、
該当するマルチバイト文字のようなもんが書かれてないようなライブラリを
自作して公開する場合はつけないほうがいい?
399:デフォルトの名無しさん
10/03/13 13:45:51
あ、>>398は1.9.1の場合ね
400:デフォルトの名無しさん
10/03/13 13:48:35
require 'Qt4'
app = Qt::Application.new(ARGV)
hello = Qt::PushButton.new('Hello World!')
hello.resize(100, 30)
hello.show()
app.exec()
テストコード(コピペ)を動かそうとしているんだけど、動かない
>C:\Ruby\lib\ruby\gems\1.8\gems\qtruby4-2.1.0-x86-mswin32\lib\ はちゃんとあるんだけどね
環境変数が問題なのかな?
401:デフォルトの名無しさん
10/03/13 13:52:19
>>400
動かないのならエラーメッセージを貼っておくれ
スクリプトをダブルクリックして実行したのなら
コマンドプロンプトから実行して
402:デフォルトの名無しさん
10/03/13 13:59:36
おー、WindowsでQtライブラリ使ってる人初めて見た
403:デフォルトの名無しさん
10/03/13 14:08:03
rubygemsでインストールしたパッケージのヘルプってどうやって見れますか?
404:デフォルトの名無しさん
10/03/13 14:09:59
>>398
書かない場合は US-ASCII を指定したのと同義。
ASCII文字しかないなら書いても書かなくても結果は同じ。
8ビット目が立ったシングルバイト文字は入れてないよね?
405:デフォルトの名無しさん
10/03/13 14:12:27
>>403
riかrdocか。
gem server を起動して URLリンク(localhost:8808) でも読める。
406:デフォルトの名無しさん
10/03/13 14:13:09
正規表現の動作が変わるんじゃなかったか
407:400
10/03/13 14:14:30
>>401
test.rb:1:in `require': no such file to load -- Qt4 (LoadError)
from test.rb:1
見てのとおりライブラリの読み込みに失敗しています
URLリンク(let-your-heart-soar.txt-nifty.com)
この通りにやって、C++のチュートリアルは動くようになっています
でも、こんな事をやってqtrubyに関係あるのか疑問
>>402
ruby gtk2を使おうかなと思ったけど、gtk+のライブラリ全然わかんないから
linuxでもqtrubyが動けば、linuxで開発してwindowsでexeを作ろうかな~と
それに、2週間くらい前にこんな本を買ったし
>入門 Qt 4 プログラミング
>URLリンク(www.oreilly.co.jp)
408:デフォルトの名無しさん
10/03/13 14:15:52
>>403
gemディレクトリ/ruby/1.8とか/doc/ の中にファイルが入ってるので好きなときに読め
ActiveSriptRubyの場合はC:\Program Files\ruby-1.8\lib\ruby\gems\1.8\doc\
409:デフォルトの名無しさん
10/03/13 14:17:57
>>407
require 'rubygems'
require 'Qt4'
410:デフォルトの名無しさん
10/03/13 14:25:42
>>406
US-ASCIIなソースにUS-ASCII以外のマジコメを書く場合?
411:400
10/03/13 14:26:51
>>409
文法を覚える前にテストをするもんじゃないですねwww
助かりました、ありがとうございます
412:デフォルトの名無しさん
10/03/13 14:44:08
>>403
HTMLファイルでいいならシェルから
gem environment
した出力の
- GEM PATHS:
の1行目(になかったら2行目)の場所の doc ディレクトリの中に
413:デフォルトの名無しさん
10/03/13 16:20:07
#=>って習慣なの?
414:デフォルトの名無しさん
10/03/13 16:25:32
>>413
URLリンク(doc.okkez.net)
415:デフォルトの名無しさん
10/03/13 16:26:05
習慣かどうかはしらん
ふつうコメントの直後にスペースをひとつ挟むから
# => value だよな
はちどりのRuby本もそうなってる
416:デフォルトの名無しさん
10/03/13 16:39:23
個人的にはあまり好きではない
まあ、書籍向けの表現だと思う
417:デフォルトの名無しさん
10/03/13 17:23:40
gem install -r XXXX
ERROR: could not find gem XXXX locally or in a repository
何これ?
418:デフォルトの名無しさん
10/03/13 17:33:32
文字通り。
419:デフォルトの名無しさん
10/03/13 17:33:47
>>417
その質問に至った経緯をまず聞こうか
420:413
10/03/13 17:37:04
>>419
linuxでそう入力しただけだけど
得にそれ以外に何もしていない
421:420
10/03/13 17:37:46
名前を間違えた
>>417ね
422:420
10/03/13 17:39:28
ごめん、ただのスペルミスですたorz
423:デフォルトの名無しさん
10/03/13 17:39:54
まずはgem search- rを使うんだ、でその結果から選ぶがよろし
自分で入力せずに素直にbash,zshの補完機能に頼った方がいいと思う
424:デフォルトの名無しさん
10/03/13 21:46:53
他の言語のisXXXメソッドは、XXX?とrubyではなってるみたいですね
三項演算子とかと一緒に使うと読みにくいと思います
お前らはどうやっていますか?
return windows.visible? ? 値A : 値B
425:デフォルトの名無しさん
10/03/13 22:07:58
それほどでも・・・
return (windows.visible?) ? 値a : 値b
426:デフォルトの名無しさん
10/03/13 22:10:57
ぶっちゃけ、うっかり
window.visible? A : B
と書いて怒られることはよくある。
427:424
10/03/13 22:13:57
そんなもんですか
そんじゃ気にしないようにしますわ
428:デフォルトの名無しさん
10/03/13 22:20:29
条件演算子はぶっちゃけそれほど使わない
不自然感を感じてるうちにifとかに書き換わるのでむしろラッキー
429:デフォルトの名無しさん
10/03/13 23:03:17
include Enumerable した場合、自分のクラスで each を定義しますが
def each
@array.each do |e|
yield(e)
end
end
def each(&block)
@array.each(&block)
end
どちらが好ましい書き方なんでしょうか?
430:デフォルトの名無しさん
10/03/13 23:27:40
後者
irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each(&b); @a.each(&b); end; end
irb1.9> p C.new.each
#<Enumerator:0x931483c>
irb1.9> class C; include Enumerable; def initialize; @a=[1,2,3]; end; def each; @a.each{|e| yield(e)}; end; end
irb1.9> C.new.each
LocalJumpError: no block given (yield)
431:429
10/03/13 23:43:14
>>430
なるほど、ありがとうございます。
432:デフォルトの名無しさん
10/03/14 00:00:43
前者は昔の名残だね。
433:デフォルトの名無しさん
10/03/14 00:10:16
前者は return @array.to_enum unless block_given? を最初
にやればよさそうだけど、今回は無理に使うこともないな。
434:デフォルトの名無しさん
10/03/14 00:16:42
javaかC++のプログラマのための、Ruby入門のサイトを教えてください
435:デフォルトの名無しさん
10/03/14 00:19:42
URLリンク(www.google.co.jp)
436:デフォルトの名無しさん
10/03/14 00:21:15
C++やJavaの特有事情は忘れて勉強したほうが習得はうまくいきそうな気がする
それこそBasicの制御構造レベルの知識だけある人のほうが吸収早そう
437:デフォルトの名無しさん
10/03/14 00:44:12
>>424
return windows.visible?? a : b
疑問符を二個つなげてすげー疑問って雰囲気を醸し出す
438:デフォルトの名無しさん
10/03/14 00:48:41
>>386 のチケット、 r26909 で修正された。
$ ruby -ve "puts File.expand_path('あ', '/'.force_encoding('US-ASCII'))"
ruby 1.9.2dev (2010-03-13 trunk 26909) [x86_64-darwin10.2.0]
/あ
439:デフォルトの名無しさん
10/03/14 02:15:40
>>430
前者の書き方しか知らなかった。
440:66
10/03/14 07:03:08
>>395
今度から本スレに書きます。
>>438
ありがとうございました。
確認しました。
441:デフォルトの名無しさん
10/03/14 08:44:47
春休みで盛況だなw
442:デフォルトの名無しさん
10/03/14 11:49:30
moduleってパッケージとMixinを、実現するための予約語なんだよね
Mixinは実装を持ったインターフェイスみたいなもんだから、
moduleはmoduleを継承する事ができるの?
443:デフォルトの名無しさん
10/03/14 12:18:51
>>438
乙乙!!
444:デフォルトの名無しさん
10/03/14 12:24:46
>>442
> moduleはmoduleを継承する事ができるの?
そもそも文法的に継承できない(module M2 < M1 は SyntaxError)
メソッド検索順位のひとつ上にモジュールをぶちこむ include を使う
module M1; def m; "M1!"; end; end
module M2; include M1; end # M2 の上に M1
module M3; include M2; end # M3 の上に M2
module M4; include M3; end # M4 の上に M3
class C; include M4; end # C の上に M4
p C.new.m
p C.ancestors # 継承とインクルード込みの検索優先順位を表示
結果
"M1!"
[C, M4, M3, M2, M1, Object, Kernel]
検索順位的には継承と同じなので実用上の問題はない
class C1; end
class C2 < C1; end
class C3 < C2; end
p C3.ancestors #=> [C3, C2, C1, Object, Kernel]
445:デフォルトの名無しさん
10/03/14 12:40:44
じゃあ継承でいいじゃん
446:デフォルトの名無しさん
10/03/14 12:46:49
>>445
よくねー
人間を継承した俺がいたとして、翼が欲しいと思ったら
class 俺 < 翼
end
するのか? 俺は翼の一種なのか? 俺は翼の子分か? 人間且つ翼の俺って何?
翼って機能だろ
class 俺
機能追加 翼
end
とするのが筋だろ、わかりやすいし、渾然一体になる継承よりは機能外すのも簡単そうだ
だから翼はモジュールにして、includeで追加する
実際は
俺 = 人間.new(params)
俺.extend(翼)
とするのが妥当ではあるがまあ細かいこと気にするな禿げるぞ
447:442
10/03/14 13:12:23
>>444,>>446
ありがとう
>>445
なりすましっぽく見えるレスだな
448:デフォルトの名無しさん
10/03/14 23:18:08
○引数で複数のディレクトリパスを与える
○与えられたディレクトリに対して再帰的にファイルを全て削除する
○ただし.txt拡張子が付くファイルのみ削除しない
プログラミングに不慣れながらこんなスクリプトを書こうと思い、以下のようになりました。
#!/usr/bin/ruby
require 'fileutils'
ARGV.each do |i|
FileUtils.rm(Dir.glob(i + '**/*[^(txt)]'), :force => true)
end
突っ込みどころなどありましたら教えていただけないでしょうか。
簡単なテストをすると意図したように動くのですが少し不安なので質問させていただきました。
自分で怪しいと思ってる箇所は以下の2箇所です。
① i + '**/*[^(txt)]' こんな指定の仕方でいいのだろうか
②そもそもFileUtilを使うべきなのか
宜しくお願いします。
449:デフォルトの名無しさん
10/03/14 23:25:51
>>448
他のスレから飛ばされてきたなら、
飛ばされましたって書かないとダメだよ
450:デフォルトの名無しさん
10/03/14 23:39:50
>>448
死んでいいよ
451:デフォルトの名無しさん
10/03/14 23:41:46
Dir.globのワイルドカードはあまり知らんが(Windowsユーザーなもので)
否定形なのはRubyでやったほうが無難だと思う
Dir.glob(i.sub(/\/?$/,'/**/*')).reject{|e| test(?d,e) or e =~ /\.txt$/i}
452:デフォルトの名無しさん
10/03/14 23:43:52
i ってなんだろう?
そもそもグロブでいいのか。
453:デフォルトの名無しさん
10/03/14 23:45:01
require 'fileutils'
noop = verbose = ARGV.include?(':noop')
ARGV.each do |s|
pathlist = Dir.glob(File.join(s, '**/*'))
pathlist.delete_if{|path| File.extname(path) == '.txt'}
pathlist.each do |path|
FileUtils.rm(path, :force => true, :noop => noop, :verbose => verbose)
end
end
$ ruby ./del.rb tgtdir :noop
454:デフォルトの名無しさん
10/03/14 23:45:48
*[^(txt)] は、
最後の文字が 開き括弧 でも t でも x でも t でも(アゲイン) 閉じ括弧 でもない
という意味になるんじゃないか?
455:デフォルトの名無しさん
10/03/14 23:48:11
>>453
next ですっ飛ばしていいと思う
require 'fileutils'
noop = verbose = ARGV.include?(':noop')
ARGV.each do |s|
Dir.glob(File.join(s, '**/*')).each do |path|
next if File.extname(path) == '.txt'
FileUtils.rm_r(path, :force => true, :noop => noop, :verbose => verbose)
end
end
456:デフォルトの名無しさん
10/03/14 23:48:38
>>454
それはない
457:デフォルトの名無しさん
10/03/14 23:56:02
$ ls
x.c x.doc x.tex x.txt
$ ruby -ve 'p Dir.glob("*[^(txt)]")'
ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
["x.c", "x.doc"]
458:デフォルトの名無しさん
10/03/14 23:57:18
はいはい勘違いゴルファーは帰ってね
459:デフォルトの名無しさん
10/03/14 23:58:40
[^(txt)]を検証しただけじゃね?
460:デフォルトの名無しさん
10/03/15 00:00:42
マニュアル嫁でよくね?
461:デフォルトの名無しさん
10/03/15 00:01:32
どっちでもいいよ…
462:デフォルトの名無しさん
10/03/15 00:04:39
ここは初心者スレだろ?
テンプレ読めない奴はカエレ
暴れるなら本スレでやr
463:デフォルトの名無しさん
10/03/15 00:05:49
検証が漏れてないかどうかはどうやって検証すればいいのかという
464:デフォルトの名無しさん
10/03/15 00:11:10
>>458
どこをゴルフと誤認したのか気になる。
465:デフォルトの名無しさん
10/03/15 01:18:47
rmdir -rで綺麗さっぱり消せばいいのにw
466:デフォルトの名無しさん
10/03/15 01:54:20
RubyをWindowsで開発環境構築する方法教えてください。
OSはWindows7です
467:デフォルトの名無しさん
10/03/15 01:55:11
開発環境ってたとえばなーに
468:デフォルトの名無しさん
10/03/15 02:22:10
>>448
「再帰的」と書かれていますが、別に find を使うような要件ではなく
引数のディレクトリ直下のみ走査すればよさそうなので、こんなかんじ
ではいかがでしょうか。
require 'pathname'
ARGV.each do |d|
Pathname(d).children.each do |f|
f.unlink unless f.extname == ".txt"
end
end
# Pathname は標準添付ライブラリだから使ってもいいよね
ところで、Ruby に限らず Perl でも Python でも glob ってシェルの
ワイルドカード展開のエミュレートだと思いますが、機能としては中途半
端(文字列の単純比較 < glob < 正規表現活用)ですし、プラットフォーム
毎に微妙な挙動差も考えるとムダにドツボにはまりそうですし、(少なく
とも「初心者」は)あまり積極的に使わない方がよくない?
469:デフォルトの名無しさん
10/03/15 02:33:02
>>468
書いてるあなたがすでにglobの罠にはまっているという。
再帰的に走査したいんだよ。> **/
470:デフォルトの名無しさん
10/03/15 02:42:35
Dir.glob('**/*') は許容されるべき
というか普通はこれしか使わない
残りは返ってきた配列に入った文字列を正規表現とかでどうにかする
短く1行で書かないと家にいる妻がスナイパーに撃たれるとかそういう時にのみグラブ条件を書く
471:デフォルトの名無しさん
10/03/15 04:18:21
1行記述を強要する妻かw
472:468
10/03/15 05:11:59
>>469
うへ、自分がドツボにはまっていました、というか **/* の意味を
知らんかった orz
>>470
を参考に Pathname.glob でも使えばよいのでしょうが、あえて
Find 利用ということで:
require 'pathname'
require 'find'
Find.find(*ARGV) do |f|
t = Pathname(f)
t.unlink if t.file? and t.extname != ".txt"
end
473:デフォルトの名無しさん
10/03/15 05:24:32
>>471
強要しているのはスナイバーかと。>>470 は愛妻家なんですね。
474:デフォルトの名無しさん
10/03/15 08:55:46
いや恐妻家なんだろうw
475:デフォルトの名無しさん
10/03/15 09:57:07
要求を呑まないと何も知らない家族が射殺されるというのはわりとポピュラーな展開かと
グラブ文字処理はメソッド独自だから、明白な全抜き出し以外は正規表現などを駆使、という方向性は妥当
グラブ処理の時点で小細工すると後々遺恨になるぞ
476:デフォルトの名無しさん
10/03/15 10:41:36
なるほど
477:デフォルトの名無しさん
10/03/15 12:43:17
>>466
まずはテンプレくらい嫁よ
・ActiveScriptRubyをインスコ
・るびまのchmをダウンロード
・NetBeans IDE(統合開発環境)をインスコ
これでなんとかなるだろ。Rails開発ならcoLinuxかPortableUbuntu入れろ。
478:デフォルトの名無しさん
10/03/15 12:44:12
>>466
あ、あと、c:\Program Files\以下にはRubyをインスコしない方がいいみたい。
RubyGemsが動作しないとかの報告があった
(今のバージョンはどうかしらん)
479:デフォルトの名無しさん
10/03/15 12:53:05
ねこび~ん勢力の工作を検知しました
480:デフォルトの名無しさん
10/03/15 13:02:44
Windowsでも、XPなら
c:\usr\local\ruby
とかにインストールした方が精神衛生上よろしい気がする
UACとか入るとそう簡単にはいかないんだろうけど
481:デフォルトの名無しさん
10/03/15 13:17:04
>>479
ねこび~んはダメだね
コードの補完が遅すぎて使えない
482:デフォルトの名無しさん
10/03/15 13:35:16
ActiveScriptRubyはデフォルトのインストール場所が性善説に過ぎる
URLリンク(d.hatena.ne.jp)
まあこれは間違えるほうが悪いんだけれども
483:デフォルトの名無しさん
10/03/15 14:06:24
array = [1,2,3,4,5]とすると配列ができますが、わかんなくなりませんか?
javaとかだったら、IDEが配列だよって教えてくれるけど
やっぱり、最初にこうするべきなんですかね?
array = Array.new
484:デフォルトの名無しさん
10/03/15 14:20:31
>483
ならない
Array.new はリテラルに比べると遅い。
485:デフォルトの名無しさん
10/03/15 14:21:39
>>477
>・るびまのchmをダウンロード
リファレンスchmならASRに同梱されてたはず
それと初心者スレでるりまとは呼ばない方がいいよ
486:483
10/03/15 14:27:49
>>484
そうですか
ありがとうございます
487:デフォルトの名無しさん
10/03/15 14:44:11
a = [1, 2, 3, 4, 5] はわけわかんなくならないが
hogedata = []
は
hogedata = {}
との区別がわけわかんなくなることはある
ので、そういうときは
hogedata = Array.new
と書くことはある
要素が入ってれば配列なのか Hash なのかは一発なのでわざわざ初期化なんてしない
488:デフォルトの名無しさん
10/03/15 15:14:22
>>485
> それと初心者スレでるりまとは呼ばない方がいいよ
なんで?
489:デフォルトの名無しさん
10/03/15 16:05:56
というかるりまるびまってなんですか?
490:デフォルトの名無しさん
10/03/15 16:18:20
ここは大喜利すべきか
491:デフォルトの名無しさん
10/03/15 16:21:11
まあ、マニュアルという認識でいいよ
chm形式のマニュアル読んでれば十分
492:デフォルトの名無しさん
10/03/15 16:24:11
>>488
マイナーな専門用語は避けるべき。初心者スレだし。
493:デフォルトの名無しさん
10/03/15 16:25:13
>>488
まさにこの流れが理由
るびまと区別がついてないならなおさら
494:デフォルトの名無しさん
10/03/15 16:50:12
何やら貢献できたようで何より
1.9.1は初心者向けじゃなかったのかー
今まさにダブルクリッコするところだったぜー
ここに来てよかった
ってことでActiveScriptRubyなるものをダウソしてきます
495:デフォルトの名無しさん
10/03/15 16:51:41
ここIDないのね
494は489の人てことでw
496:デフォルトの名無しさん
10/03/15 17:31:53
質問です
エクセルで書かれた名簿を整理して出力するプログラムを書いているのですが、
名前、郵便番号、住所の分離が上手くいきません
与えられた名簿は半角or全角スペースで区切られているのでsplitを使おうと試みているのですが、
例えば以下のように記述すると"―"や"県"が消えてしまいます
puts '山田 太郎 〒0000-0000 山田県山田333-333-333-333'.split(/[ 〒]+/)
何か良い知恵があればなにとぞご教授お願いします
ちなみに元のプログラムではputsせず、分離後にある配列に入れています
497:496
10/03/15 17:34:18
追記失礼します
rubyはver1,87を使用しております
498:デフォルトの名無しさん
10/03/15 17:48:49
>>496
Excelってことなので、WindowsでSJISのソースコードとして、
スクリプトの先頭に
#! ruby -Ks
もっと推奨の方法があったかもしれない
499:496
10/03/15 17:51:44
>>498
ご教授いただいたとおりにしたところ速やかに改善されました!
ありがとうございます
500:デフォルトの名無しさん
10/03/15 17:53:59
Rubyが取り扱う文字のエンコーディングを指定しなければASCIIとして扱われてしまうのでそういうことになる
Ruby 1.8まででは
1 Ruby起動時にスイッチで -Ks とかで指定する
2 スクリプト先頭に
#!ruby -Ks
とか書いておくとスクリプト実行時にそのスイッチが考慮される
3 $KCODE を設定する
4 個々の正規表現のオプションでエンコーディングを指定する
ただし1,2はスクリプト自体のエンコーディングと正規表現の振る舞いの両者を変更するが
3,4だと正規表現の振る舞いを変えるだけなので
スクリプトがシフトJISで書かれていると
p "表" # エンコーディングを正しく指定しないと 文字列リテラルが終了してないことに("\225\" と同じ扱い)
とかのいわゆるダメ文字(2バイト目が\)問題にぶち当たる
UTF-8やEUC-JPだとそのような問題は起きない(のかな?)
501:デフォルトの名無しさん
10/03/15 18:05:26
るびまってRubyのマニュアルのことだったの?
Ruby Magazineの事だと思ってた
502:デフォルトの名無しさん
10/03/15 18:15:09
>>491
どもです
礼するの忘れてやした
503:デフォルトの名無しさん
10/03/15 18:16:09
るびま:Rubyist Magazine
るりま:Ruby reference manual
Ruby Magazineだと思いこんでると、無関係な記事が多すぎるように映るかもね
504:デフォルトの名無しさん
10/03/15 18:16:29
>>501
どっちでもいいよ
いやよくはないが
初心者的にはるびまは読むべきではない
古くて有害な情報が渾然一体となっている
505:デフォルトの名無しさん
10/03/15 18:19:31
>>503
それ、テンプレに入れたらどうかね?
506:デフォルトの名無しさん
10/03/15 18:24:13
Rubyinstか。失礼。
上のほうよく見たらるびまとるりまの区別が付いてない(人がいる)って話だったのね
読み違えてたわ
507:デフォルトの名無しさん
10/03/15 18:27:44
まだ間違ってるぞw
508:496
10/03/15 18:29:54
>>500
亀ですが、ありがとうございます
これを気に文字コードにも意識を向けてみます
509:デフォルトの名無しさん
10/03/15 19:16:01
くっ
Rubyist
510:デフォルトの名無しさん
10/03/15 19:51:11
includeは名前空間を使えるようにするものってことで、おk?
C++@namespaceみたいな感じ
511:デフォルトの名無しさん
10/03/15 19:53:43
なんというか include はふつうに include だと思うのだが
既存言語の機能になぞらえないと理解し難いほど複雑難解な概念なのだろうか
512:デフォルトの名無しさん
10/03/15 20:00:50
includeの動作的には本当に>>444だよね
メソッドを探す順番の指定をする方法のひとつ
513:デフォルトの名無しさん
10/03/15 20:07:50
モジュールの存在理由のほうがムズカシイかもしれない
514:510
10/03/15 20:34:24
読んでいた記事が間違えていたらしい
本当の使い方は、結局なんなんだろ?
Mixinを実現するためにしか使わないのか
515:デフォルトの名無しさん
10/03/15 20:39:59
モジュールは、メソッドを用途ごとにまとめるためのしくみ
メソッドがあるだけで、オブジェクトには依存しない機能のカタマリ
共通の機能をメソッドから追い出して別途メソッドを作るのと同じように、
共通の機能をクラスから追い出して別途モジュールを作る(でincludeする)というのも妥当
516:デフォルトの名無しさん
10/03/15 20:45:11
Mixinのためと単なる名前空間のため両方に使われる
517:510
10/03/15 20:54:21
>>515-516
thx
518:デフォルトの名無しさん
10/03/15 22:17:04
プロパティも実装されていない糞言語
519:デフォルトの名無しさん
10/03/15 22:27:30
それで遊んでくれるのはPythonスレぐらいだぞ
ここは意外とDRY
520:デフォルトの名無しさん
10/03/15 22:52:35
クラスインスタンス変数とは、そのクラスオブジェクトの特異クラスに属する
インスタンス変数という理解で正しいですか?
521:デフォルトの名無しさん
10/03/15 23:00:11
ごめん、さっき違うスレで質問したけど理解してなかったorz
3 class Hoge
4 def self.set
5 @hoge = "dynamic"
6 $hoge = "static"
7 end
8
9 def self.out
10 puts @hoge
11 puts $hoge
12 end
13 end
14
15 Hoge.set
16 Hoge.out
実効結果
dynamic
static
$hogeと@hogeって何が違うのさ?
522:デフォルトの名無しさん
10/03/15 23:12:55
理解してたらああは言わん
クラスインスタンス変数はクラスオブジェクトが存在する限り存在する
Hoge と書くことで定数 Hoge に Class クラスのインスタンスが Ruby によってセットされる
(同名のクラス定義がなかった場合は定数とみなされ、事前に代入されてない未定義定数でエラー)
で、Hoge.set を実行することでインスタンス変数 @hoge がインスタンスの中でふつうに設定される
それが属するインスタンスとは Class クラスのインスタンスで、つまり定数 Hoge が指すものだ
だから、無理矢理 Hoge の内容を nil にするとインスタンス変数 @hoge はスコープごと失なわれる
irb> class Hoge; def self.set; @hoge='hoge'; end; end
irb> Hoge.set
irb> p Hoge.instance_variable_get(:@hoge)
"hoge"
irb> Hoge = nil
(irb):4: warning: already initialized constant Hoge
irb> p Hoge.instance_variable_get(:@hoge)
nil
523:デフォルトの名無しさん
10/03/15 23:22:49
特異メソッド上で書くからわかりにくい?
class Hoge
@hoge2="hoge2"
end
p Hoge.instance_variable_get(:@hoge2)
は "hoge2" を返すよ
524:デフォルトの名無しさん
10/03/15 23:38:33
"プログラミング言語 Ruby" のp.326のなかほどに
クオート文字列にマッチすることを意図した正規表現の例が以下のように
載ってるんだけど,文字集合内で番号指定後方参照ってできたっけ?
/(['"])[^\1]*\1/
わがRuby1.9.1ではこうなった
re = /(['"])[^\1]*\1/
p %('\1')[re] #=> nil
p %('hoge'hoge')[re] #=> "'hoge'hoge'"
いちおう念のために言っておくと
クオート文字列にマッチする正規表現を求めているわけじゃなくて
文字集合内で後方参照や部分式呼出しができるか否かの確認ね
525:デフォルトの名無しさん
10/03/16 00:23:29
>>457が何でそうなるのか解説求む
526:デフォルトの名無しさん
10/03/16 00:27:01
>>525
>>454
527:デフォルトの名無しさん
10/03/16 00:28:31
globってワイルドカードでも正規表現でもないのか
なんでこんな面倒なもん作ったんだ
528:デフォルトの名無しさん
10/03/16 00:31:15
いや、zshの**を取り込んでるくらいで、
ワイルドカード(UNIXシェルの、だが)だよ。
529:デフォルトの名無しさん
10/03/16 00:31:34
ああ勘違いしてたわ txtだけはじかれてるのかと思った
530:デフォルトの名無しさん
10/03/16 00:32:09
ほぼワイルドカードじゃね?
531:デフォルトの名無しさん
10/03/16 00:32:50
あら遅レス失礼した
532:デフォルトの名無しさん
10/03/16 00:33:41
globにlsコンパチの引数受け付けるようにしてくれ
533:デフォルトの名無しさん
10/03/16 00:34:20
>>532
UNIXで誰がファイル名展開をやってるか知ってるかい?
534:デフォルトの名無しさん
10/03/16 00:44:33
えっ? 誰かがやってるなんてことあるわけないでしょう?
535:デフォルトの名無しさん
10/03/16 03:16:47
echo *
536:デフォルトの名無しさん
10/03/16 03:27:47
もうshellの機能をrubyに組み込むべきだなw
login shellを/bin/rubyshにできていいかもしれないw
537:デフォルトの名無しさん
10/03/16 07:53:49
RubyShell って面白そうだな。
誰も使わないだろうけど。
538:デフォルトの名無しさん
10/03/16 07:55:47
RashだかRushってシェルがなかったっけ
539:デフォルトの名無しさん
10/03/16 08:46:18
イラネ
540:デフォルトの名無しさん
10/03/16 09:30:18
とある人のウェブページに、perlをログインシェルとして使ってみた報告があるぞ。
一度読んでおくといい。
541:デフォルトの名無しさん
10/03/16 09:33:51
いやRushが既にあるから
542:デフォルトの名無しさん
10/03/16 11:51:29
コマンドライン引数は定数じゃないの?
普通に文字列を代入できるんだけど
543:デフォルトの名無しさん
10/03/16 12:01:40
>>542
Rubyの定数は、警告 warning: already initialized constant ARGV
は出るけど代入自体はできる。
あ、あと、 ARGV << 'hoge' なんてのは「定数への代入」じゃないからな。
544:デフォルトの名無しさん
10/03/16 12:03:05
$ ruby -e "ARGV=nil"
-e:1: warning: already initialized constant ARGV
いやきちんと定数として警告出ますが
というかただの定数に過ぎない
Rubyはこれを起動時から用意してるだけで、用意したあとは特別扱いをしない
ただの配列を指す定数で、配列としての動作に従う
配列だから、要素を弄る限りはオブジェクトIDが同一で、定数としての適正を失わない
irb> arr = [1, 2, 3]
irb> arr[0] = 'one'
irb> ARGV[0] = 'one'
545:デフォルトの名無しさん
10/03/16 12:18:43
代入はできるけど、データのコンテナとして ARGV を使うのはおすすめはしない
ただ、これは
グローバル変数と定数を使う→
クラス変数を使う→
インスタンス変数だけを使う→
全部引数での受け渡しにする→
引数の数が大量になって鬱陶しいのでアクセサメソッド経由のインスタンス変数と引数の併用にする
というような変遷をどうしてもみんな辿るので今はまだ気にしなくてもいいとも言える
546:542
10/03/16 12:25:44
とにかくコマンドライン引数には入れるなってことでしょ
547:デフォルトの名無しさん
10/03/16 12:47:18
def hoge=
この=って何?
548:デフォルトの名無しさん
10/03/16 13:00:04
>>547
そのまんま
「hoge=」 という5文字の名前のメソッド
ただ、末尾に = があるメソッド定義を Ruby は特別に扱うので、引数つきで定義しておいたほうがいい
あと、foo.hoge = と = の前に空白があっても、Ruby はとりあえず foo のメソッドの中から hoge= を探す
foo.set_hoge(v) とするよりも foo.hoge = v と書けたほうがなんかわかりやすくね、という理由で特別扱いされてる
549:デフォルトの名無しさん
10/03/16 13:07:59
「プログラミングRuby 第2版 言語編」ですが、今から読むには
古すぎますか?それとも第3版が出て、絶版になる前に読んでおく
べき?
たのしいRuby、Well-Grounded Rubyist、初めてのRuby
は読みました。
550:デフォルトの名無しさん
10/03/16 13:08:28
>>548
理解した、ありがとう
551:デフォルトの名無しさん
10/03/16 13:16:29
>>548
>「hoge=」 という5文字の名前のメソッド
通常の方法では代入文でしか呼べないから、ただのメソッドではなく演算子定義の一種と見た方がいい
一応引数無しでも定義できるけど__send__使わないと引数なしでは呼べない
552:デフォルトの名無しさん
10/03/16 13:17:42
>>551
Rubyの演算子はメソッドですよ
553:デフォルトの名無しさん
10/03/16 13:24:32
Rubyのユーザーは学生と暇人が多いのか?
C/C++のスレには全然書き込みが無いんだけど
Rubyは簡単だから、学生に人気があるのかな
554:デフォルトの名無しさん
10/03/16 13:29:41
最近質問が多いね、春休みなんじゃないの?
まあ俺も春休みだけど。。
555:デフォルトの名無しさん
10/03/16 13:30:46
去年からずっとやすm
556:デフォルトの名無しさん
10/03/16 13:31:17
仕事探せ
557:デフォルトの名無しさん
10/03/16 13:32:16
>>555
勝った!
558:デフォルトの名無しさん
10/03/16 13:33:11
>>557
お前は必死に仕事探せ
559:デフォルトの名無しさん
10/03/16 13:35:25
学生と暇人とニートがいないとプログラミング言語は成長致しませぬゆえ
560:デフォルトの名無しさん
10/03/16 13:37:43
学生と暇人なんて放っておいても沸いてくるんだから
無職連中はとりあえず生活基盤作れ
561:デフォルトの名無しさん
10/03/16 13:39:35
暇な香具師を無料で奉仕させてこそオープンソースだしな。
562:デフォルトの名無しさん
10/03/16 14:18:15
>>549
初めてのRuby(yugui本)を読んで自分のものと出来たのなら
好きに進んでいいよ。
563:デフォルトの名無しさん
10/03/16 14:43:10
Rubyはいつになったら仕様が固定されるの?
安心して使えない
564:デフォルトの名無しさん
10/03/16 14:48:04
1.8 は少なくともあと5年は使えるな。
565:デフォルトの名無しさん
10/03/16 15:06:10
>>562
レスどうも。
ツール作りでもしてみます。
566:デフォルトの名無しさん
10/03/16 15:08:40
本の内容が新しいかどうかという話なら、新しくはない
1.8.7の1.9新機能入りプログラミングができないというのはなんとも歯痒い
が、それはWebの情報でアップデートできる程度なので問題はなさそうかも
むしろ最初からこれ教えたら混乱しそう
567:デフォルトの名無しさん
10/03/16 16:19:22
>>563
固定化されることはないと思う
568:デフォルトの名無しさん
10/03/16 16:22:33
>>563はそもそも使わないからどうでもいい
569:デフォルトの名無しさん
10/03/16 18:52:28
ちなみに今から使い始めるならどのバージョンがお勧めなんだ
570:デフォルトの名無しさん
10/03/16 18:58:53
>>569はテンプレも読まないからどうでもいい
571:デフォルトの名無しさん
10/03/16 18:58:54
始めるだけなら 1.8.7 の最新だと思うが、
最新(p249)はString#inspectで最後の多バイト文字が文字化けするという
デバッグや実験中に微妙にイラッとするバグがある。
気になるなら p174 で。
1.9系は夏に1.9.2が出るのでそのときまた判断だな。
572:デフォルトの名無しさん
10/03/16 19:16:27
やっと1.9sp2が出るのか。
573:デフォルトの名無しさん
10/03/16 19:18:21
それはまだ
1.9正式が出ただけ
sp1が今度出る
574:デフォルトの名無しさん
10/03/16 19:22:45
>>571
$KCODE を設定した上で p で日本語を表示しようとした場合に最後の文字がバイト列のままになる
だ
p で日本語を表示しようとさえしなければ問題はないし、俺は表示しようと思ったこともない
というかむしろ p を使うような事態のときは1.9でもデフォルトでバイト列表示しろやわかりにくいわぼけー
どういう日本語を普段扱ってるかで違うんだろうな、このへん
575:デフォルトの名無しさん
10/03/16 19:25:49
p の意義からしてエンコーディングを考慮するほうが正当
ShiftJIS 文字列とか表示されて端末乱れるのはイラッとくるが
576:デフォルトの名無しさん
10/03/16 19:34:14
オブジェクトを機能拡張するためにモジュールで拡張したんだけど
さらに状態の保持が必要な機能追加がしたくなった
モジュールへの修正じゃ対応できないの?
577:デフォルトの名無しさん
10/03/16 19:35:16
require 'Hoge'
include Hoge
なんで、requireにはシングルクォートを付けないと怒られるのに
includeには付けなくても怒られないの?
たまたま、そうなっただけなのかな~
578:デフォルトの名無しさん
10/03/16 19:41:28
>>577
require は基本的にはファイルパス
実際のファイルの大文字小文字が考慮される
(が、あまりにも面倒なのでファイル名の時点で小文字だけにしようという取り決めがある)
include の引数はモジュール名、つまり定数
579:デフォルトの名無しさん
10/03/16 19:44:08
>>576
すれば
include はするたびにその順番に機能する
580:デフォルトの名無しさん
10/03/16 19:44:15
require 'Hoge' は主ファイル名だからじゃね?
581:デフォルトの名無しさん
10/03/16 19:46:41
>>578-580
ありがとう
582:576
10/03/16 19:47:24
>>579 (and all)
どうすれば状態を保持できますか?
583:デフォルトの名無しさん
10/03/16 19:51:32
状態って何
584:デフォルトの名無しさん
10/03/16 19:52:35
>>577
requireも単なる関数的メソッドとして実装されているのも理由の一つ
Hogeというキーワードはrequireの実行を終える前には当然定義されていないし
予約語でもないから、リテラルを使うしか渡す方法(requireメソッドを実行する方法)がない
「Hogeをrequireしろ」「Hogeってなんだ?」
「Hogeを読めばわかる」「だからそのHogeって何だよ」
NameError: uninitialized constant Hoge
Symbolでもよさそうだけどそのへんは>>578なんだろう
585:576
10/03/16 20:01:14
もともとのオブジェクト以外に追加の情報を保持したいんですが
たとえば配列クラスに最大値を保持するなど
586:デフォルトの名無しさん
10/03/16 20:22:21
>>585
エスパー発揮で
obj = [1,2,3]
obj.instance_eval{ @mymax = self.max }
obj.define_singleton_method(:mymax){ @mymax }
p obj.mymax
なんか頭の悪そうなコードですまん
587:デフォルトの名無しさん
10/03/16 20:25:30
>>585
本当にしたいことを書いたほうがいいと思う
include ではクラスにもともとあるメソッドを上書きすることができる
でも、おそらくはそれが解決方法ではないと思われ
組み込みや標準添付のクラスを拡張することは好ましいこととは考えられてない(オープンクラスのくせに)
自分でクラスを作ってインスタンス変数とかにオブジェクトを保持するほうがいい
オブジェクトの操作は自作のクラスのメソッド経由で行う
class HogeData
def initialize(a)
raise ArgumentError, 'must be Array' unless a.kind_of?(Array)
@hogedata = a
end
def <<(e)
return if @hogedata.size > 2
@hogedata << e
end
def data; @hogedata; end
end
irb> hoge = HogeData.new([1,2])
irb> p hoge.data
[1, 2]
irb> hoge << 3
irb> p hoge.data
[1, 2, 3]
irb> hoge << 4
irb> p hoge.data
[1, 2, 3]
588:576
10/03/16 21:18:59
では言い直します。
自分で書いたクラスのオブジェクトに追加の情報を持たせるには、
継承したり別のクラスに包含すれば可能だけど、すでにModuleで拡張しているので
そこはできるだけ触らずにModuleに少し書き足す程度で実現できないか?
Module内でインスタンス変数的な情報を保持する何かを定義できないか?
589:デフォルトの名無しさん
10/03/16 21:34:12
>>588
よくわからんけどこれでダメ?
ダメならどうダメかをコードとして提示してくれると他の案を言えるかも
module M
end
class C
include M
def foo
@foo
end
end
module M
def bar
@foo = :bar
end
end
obj = C.new
obj.bar
p obj.foo #=> :bar
590:デフォルトの名無しさん
10/03/16 21:53:46
>>586
Moduleの使い方・考え方が間違ってるような気がするなあ
あるクラスがModuleをincludeした時点でそのクラスのインスタンスは
存在していないわけだからインスタンス変数を設定したり保持したり
できないでしょ
アクセサの定義ならModuleでもできるけど
module M
def data
@data
end
def data=(arg)
@data = arg
end
end
class C
include M
end
591:デフォルトの名無しさん
10/03/16 21:55:33
591レス目
ズレている人はレスデータの再読み込みをしてください
592:576
10/03/16 22:01:45
それだとobj.barを書かなければいけません。
質問は、Module内を書き換えるだけで、外側には一切手を加えずに@fooを初期化できるかということです。
593:デフォルトの名無しさん
10/03/16 22:02:14
なにその出来の悪いGUIのリストみたいな現象
594:デフォルトの名無しさん
10/03/16 22:04:28
module内でinitialize書き直したら?
595:デフォルトの名無しさん
10/03/16 22:08:09
>>594
それはできない
596:デフォルトの名無しさん
10/03/16 22:16:53
ほんとにできない?
597:576
10/03/16 22:18:32
>>590
インスタンスが作成された時点でincludeされたmoduleを通して
何かしらinitialize的メッセージが送られるようなことは無いよねって話です
あるいはC言語で言うところのスタティック変数は無いよねってことでも結構です
>>594もう試した
598:デフォルトの名無しさん
10/03/16 22:20:06
module M
def self.included(klass)
klass.class_eval do
def initialize
@foo = :bar
end
end
end
end
class C
def initialize
@foo = :baz
end
attr_reader :foo
include M
end
p C.new.foo #=> :bar
599:デフォルトの名無しさん
10/03/16 22:21:22
>>595
めんどくさい、が正解だと思う
include先が継承とかしてたらsuper呼ばんといかん
600:576
10/03/16 22:51:09
>>598
すばらしい!!
ありがとうございました。
601:デフォルトの名無しさん
10/03/17 00:02:54
読み込むモジュールを変えるとinitializeが
スイッチされるってのは面白いかも
なんか騙されてるような気もするなあ
602:デフォルトの名無しさん
10/03/17 00:16:58
まあ、あまり性質のよいものではない
603:デフォルトの名無しさん
10/03/17 00:26:10
複雑なマッチ条件を使いたい場合、
if /hoge/ =~ obj.str and /huga/ !~ obj.str and ...
と延々と続いて見づらいのですが、スマートに書けますか?
604:デフォルトの名無しさん
10/03/17 00:27:24
>>603
メソッドにしてしまうのがひとつの手ではある
基本的には全部書くしかない
605:デフォルトの名無しさん
10/03/17 00:31:44
自分が時々やるのは
match1 = obj.str =~ /hoge/
match2 = obj.str !~ /fuga/
match3 = obj.str =~ /fuge/
if match1 and match2 and match3
body_stmt
end
こう。
でも条件分岐だけで10行超えるなら独立のメソッドにする
606:デフォルトの名無しさん
10/03/17 01:02:19
なるほど。ありがとうございます。
607:デフォルトの名無しさん
10/03/17 03:52:24
&&= 使った方が無駄なマッチングがないんじゃないかな。
正規表現のマッチくらいでそんなに重くなったりしないけど~。
608:デフォルトの名無しさん
10/03/17 08:17:07
>>481
aptanaよりは軽いぞw
そもそもRubyの文脈考慮するコード補完でまともに高速に補完できるIDEみたことない。
俺もそれは困っているし、もっとよいIDEがあればぜひ教えて欲しい。
irbとかJavaとかC#みたいにバンバン補完できればいいんだけどねー。早々簡単にできないのわかってていってるけどw
テキストエディタレベルの単語補完ならばNetBeansでも高速できる(デフォだとたしかCtrl+K)。
609:デフォルトの名無しさん
10/03/17 08:43:03
現在の単語に続く語を見つけるだけならEmacsでも超高速でできるぞ
610:デフォルトの名無しさん
10/03/17 09:03:06
>>482
> URLリンク(d.hatena.ne.jp)
複数引数のsystemを使うべきところだな。
クォートだとなんだの気にする必要がなくなる。
611:デフォルトの名無しさん
10/03/17 09:33:26
>>609
もちろん、vimでもxyzzyでも単語の補完はできるけど、>>481はそういうこといってるんじゃないんだろうし
インテリセンスみたいなやつだろ
612:デフォルトの名無しさん
10/03/17 09:52:28
>>575
> ShiftJIS 文字列とか表示されて端末乱れるのはイラッとくるが
これは 1.9.2 の改善点の一つ
613:デフォルトの名無しさん
10/03/17 11:07:47
実行しているスクリプトが置かれているディレクトリを調べる方法を教えてください
614:デフォルトの名無しさん
10/03/17 11:10:40
__FILE__
615:デフォルトの名無しさん
10/03/17 11:12:36
File.dirname($0)
616:デフォルトの名無しさん
10/03/17 11:19:01
Dir.pwd
617:613
10/03/17 11:25:40
絶対パスで欲しいんですが
618:デフォルトの名無しさん
10/03/17 11:27:05
expand_path … は内部で呼ばれてるからいらないんだっけか
619:デフォルトの名無しさん
10/03/17 11:31:17
ああ、やっぱいるよな
>>617
:~$ cat a.rb
p File.dirname(__FILE__)
p File.dirname(File.expand_path(__FILE__))
:~$ ruby a.rb
"."
"/home/ore"
:~$ ruby /home/ore/a.rb
"/home/ore"
"/home/ore"
620:デフォルトの名無しさん
10/03/17 11:38:49
>>481
>>608
NetBeansの文脈依存補完ってどのレベルまで補完してくれるの?
変数の参照先オブジェクト(のクラス)を推測したり
メソッドチェーンの返り値を推測して
続きのメソッド名を補完できたりする?
621:デフォルトの名無しさん
10/03/17 11:40:27
>>618
だいぶ前にあったのは expand_path の基点となる第2引数が自動で dirname されてるという話だと思った
dirname の中で expand_path が使われるということはないように見える
622:613
10/03/17 11:51:55
>>619
ありがとうございます
623:デフォルトの名無しさん
10/03/17 11:53:48
$0 と __FILE__ ってどうちがうんですか?
624:デフォルトの名無しさん
10/03/17 11:59:29
$0 は実行中のスクリプトのファイル名
__FILE__ はそれが書かれているファイル自身のファイル名
スクリプトファイルを実行した場合は両者が一致する。
requireなどで他のファイルから読み込まれた場合は一致しない。
625:デフォルトの名無しさん
10/03/17 12:09:46
相談です。
URLリンク(www.rubylife.jp)のページにある
1 #! ruby -Ku
2 print("表示する")
3 [EDF]
というプログラムをterapadで作り保存してコマンドプロンプトで実行すると、
そのページに依れば文字化けした言葉が出てくるはずなのですが、しかし
test1-3.rb:2: unterminated string meets end of file
test1-3.rb:2: syntax error, unexpected $end, expecting ')'
と表示されます。
でも「表示する」の部分を「日本語で表示」に変えるとちゃんと文字化けします。
原因がプログラムで解決できるものなのかエディタを変えないといけないと解決できないのかも分からないので、
どうしたらよいかを教えてくれないでしょうか?
626:デフォルトの名無しさん
10/03/17 12:29:10
俺はこのサイト(正確には「このチュートリアルサイト群」)はあまり好きではない
初期のSEOがあまりに迷惑で悪い印象が残ってしまっている
はともかく
>>625
あんま気にするな
表示する端末のサポートするエンコーディングと
文字列のエンコーディングが合致していないとまともに動作しない、が本質
ぶっちゃけ、日本語文字列を直接書いてしまったファイルが、-Ks などのエンコーディング指定なしで
日本語文字列を含んだRubyスクリプトとしてきちんと解釈される保証はない
「うわーまともに動いてねーよ」と納得したら次のステップに行ってよし
627:デフォルトの名無しさん
10/03/17 12:36:07
回答ありがとうございます。納得してから気にせず先に進みたいと思います。
どうしても出費を抑えたいのでそういったサイトに頼っているのですが…
自業自得か。orz
628:デフォルトの名無しさん
10/03/17 12:37:44
文字列変えるだけでパースエラーになったりならなかったりってのは
エンコーディングの不一致とは関係ないんじゃない?
表 (SJISのダメ文字のひとつ) の位置が問題なのかな。
629:デフォルトの名無しさん
10/03/17 12:41:59
RubyってWindows用だといろいろあるじゃないですか
Linux用の場合は1つしかないのでしょうか?
このへんであまり考えたくない為、もしLinuxで1つしかなのでしたらLinuxで始めたいと思います。
630:デフォルトの名無しさん
10/03/17 12:42:37
それエンコードの不一致でおきる問題ですがな
631:デフォルトの名無しさん
10/03/17 12:43:33
>>629
1.6.x
1.8.x
1.9.x
いろいろある
Rails のバージョンによってもさらにバリエーションがw
632:デフォルトの名無しさん
10/03/17 12:43:42
>>629
まあ動作的にはひとつとみなしてよいかと
少なくともWindowsのような面倒なことはない
633:デフォルトの名無しさん
10/03/17 12:44:44
Windows 版のどこがどう問題なのですか
634:デフォルトの名無しさん
10/03/17 12:46:21
スレでWindowsという文字を見ると不機嫌になってしまうおじちゃんからいじめを受けます
635:デフォルトの名無しさん
10/03/17 12:48:55
Windowsで使いたければPython使った方が良いんじゃない?
RubyはWindowsのメンテナが不足気味。LinuxかMacで使うべき。
Rails だって Windows はサポートしてなくて、今までたまたま
動いてたけどいつの間にか動かなくなったとか聴いた。
636:デフォルトの名無しさん
10/03/17 12:50:04
ほらな