1 :
デフォルトの名無しさん :
2010/03/04(木) 11:00:57 プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では有名ライブラリやアプリが 1.9.1 に完全には対応していないためです)
1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレや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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
バージョンに関するよくある質問 ・Ruby 1.8.5 レンタルサーバ等にいまだに残ってる非安定な古いバージョン 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい ・Ruby 1.8.6 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ ・Ruby 1.8.7 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい ・Ruby 1.9.0 不安定にして先鋭機能が超満載の開発版バージョンだったもの 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に ・Ruby 1.9.1 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている) 本体と添付ライブラリの動作は問題がないのだがgem等外部第三者ライブラリの対応が超適当特に英語圏産 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
,―ヽ_(((((_、―
,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/
>>1 乙ぴょん
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
RUBYOPTに指定可能なオプションの一覧はどこかにありませんか? 設定したら怒られたので
drvwEIKUW
11 :
デフォルトの名無しさん :2010/03/04(木) 18:50:55
>>6 OneClickInstallerでも1.8.7や1.9.1があるけど駄目なのか?
>OneClickInstallerでも1.8.7や1.9.1があるけど どこ? One-Click Installer は 1.8.6 で終了して RubyInstaller に変更されたもんだとばかり
13 :
デフォルトの名無しさん :2010/03/04(木) 18:59:34
15 :
デフォルトの名無しさん :2010/03/04(木) 19:01:55
ああこれがRubyInstallerなのか、公式ではOne-Click Installerってなってるな
17 :
デフォルトの名無しさん :2010/03/04(木) 19:20:13
>>9 何を指定したかは問題ではありません。
指定可能なオプションを知りたいのです。
drvwEIKUW
今日本屋でRubyの本見てたけど沢山あったわ。これだけ書籍が出てるとは。 たのしいRuby 第2版 Rubyではじめる気軽なプログラミングって本も読んだけどあれは 初心者向けじゃないな、というより本読むのが得意な人じゃないとキツそうだ。 プログラミングの本は〇〇の絵本がやっぱり初心者には最適だと思う。
>>20 たしかに小中学校でプログラミング教えるには
たのしいRubyは少しハードルが高いかもしれないな
>>18 ruby --help で出てくるのはすべてを網羅していないので、man ruby
なぜ嫌味な答えしか出来ないのか・・・
>>20 アンク兄貴オッスオッス
初心者にとって独学はどんな本を買ったって難しいよ
逆に言えば誰か教えてくれる人がいれば多少難しい本でもどうってことはない
>>25 編集が追いついてないってことで勘弁してやって
リンク先にも"Legacy"って書いてあることだし
>>22 ありがとうございました。当方Windows環境なのでman rubyできません。
てっきりman rubyに記載されていることはRubyリファレンスマニュアルで
網羅されているだろうと思っていましたがman rubyにしか記載がないものもあるのですね。
>>26 公式的にはいきなりRC2を推すわけにはいかんということなんだろうなとか思ってる
RubyInstaller正式版が出ればOneClickInstallerの記述は消えると思う
>>8 に関連して質問なんですけど
Rubyのコマンドラインオプションで指定できて
RUBYOPTで指定できないオプションってあるんですか?
Rubyのmanpageにもそんなことは書いてないので疑問に思いました。
何度もレスが出てるが代表的な有効オプションはdrvwEIKUWの9種(およびこれらの長い版)だ これ以外はrubyが切り落とすかエラーにするはず
ハチドリ本p.410には以下のように書いてある 。 なお、環境変数のRUBYOPTには、-W, -w, -v, -d, -I, -r, -K, -E, -T オプションを自由に組み合わせて指定できる。 ソースコードを除く公式ドキュメントでは見つけられなかった。 誰か捕捉plz.
答えはすぐそこにあったのですね… VMwarePlayerを導入してUbuntuをセットアップしRubyを追加してman rubyしたところ -Tも入れて10種が指定可能なようです。 Note that RUBYOPT can contain only -d, -E, -I, -K, -r, -T, -U, -v, -w, -W, --debug, --disable-FEATURE and --enable-FEATURE.
ソース以外は知らんなー。 -n -p -a -F -i -l -0 -S -C -x などはワンライナー向けなので常時 指定された状態になっては困る。 --help とか --version とか --copyright などは「表示して終わり」 のタイプだから環境変数に設定するもんでもない。 とか理由はわからんでもないんだけどね。
-Sとか指定できると便利じゃね?
おまいらインタプリタとコンパイラどっちが好き?
インテグラちゃん
それ、Z-80の頃からあるぞ。N-BASICのPコード。
>>984 しかも Rails をかぶせた Ruby は Ruby であって Ruby ではないからなぁ
40 :
38 :2010/03/05(金) 01:52:34
誤解の無いよう、追記。 Pコードのファイルを生成する訳ではないのですね。 当時の2次記憶装置は一般的には、カセットテープだったので。 そのカセットテープのモーターの制御のリレーの接点を「微小時間測定器」で測定すると、 1回目と、2回目以降では明らかな違いがありました。 t検定する必要がないくらい。 中間コードをファイルにはき出したりしたのは、80186のCOBOLの頃かと。 これは、中間コードを実行するために、××の環境が必要とかで、 販売戦略的な意味合いが強い感じ。 嫌われ者の年寄りは、もう寝る。
>>37 の言ってる中間コードって
YARVが処理するためにパース後のASTから
生成されるバイトコードだと思われ
つまり
>>37 はYARVが好き==1.9が好きだってことだ
Ruby1.9を嫌いな人なんていません めんどくさいと思ってる人は多そうだけど
43 :
38 :2010/03/05(金) 02:16:56
>>42 私も
ruby 1.9.1p376 (2009-12-07 revision 26041) [i686-linux]
を常用しています。
実行速度が、速いから。
暇なので、パズルの解法のコードなんぞを書いておりますが、
棺桶が近いので、あんまり待って居られない。
折り返し人生のほうが短いおっさんは日付が変わったらとっとと寝ろ
早起きかもしれないじゃないかー
別に寿命と限ったもんじゃないよね
夜食食ってるときに寿命以外の死亡原因の話するのやめてほしいって言うか本スレでやれ
PコードってBASICでも利用されてたのか なんかPascal処理系の印象が強い気がする
ほんとに Pascal-P の中間コードなのかなぁ? 単に BASIC の内部表現ってだけだったと思うけど。 中間コードを「Pコード」と呼ぶと思い込んでるだけなんでない?
>>49 BASICのほうのPコードはMS用語。pseudocodeのことらしい。
>>50 Rubyはそのへんただのメソッドで、各々のクラスのメソッド定義で動作が自由に変わる
それぞれのクラスのそれぞれのメソッドのマニュアル読め
一般的には
euqal? は Object#equal? そのままで ObjectID の同一性を比較する
eql? は多くの場合 Object#eql? そのままで「オブジェクトのハッシュ値」の同一性を比較する
オブジェクトのハッシュ値は Object#hashで、再定義されることも多い(通常は ObjectID)
== は多くの場合クラスごとに再定義され、そのクラス固有の同一性判定(「意味上同じっぽい」かどうか)を行う
a = URI.parse("
http://example.com/ ") と b = URI.parse("
http://EXAMPLE.com/ ") は
object_id が違うので equal? は偽を返す
eql? は #hash の値が内部表現の配列の hash に再定義されてて、
内部配列的にはハッシュ同等ではないので真を返す
['http', 'example.com', '/'].hash == ['http', 'EXAMPLE.com', '/'].hash が偽
== はこれも再定義されてて、ホストが大文字でも小文字でも規格上は同一とみなさなければならないので
そのように細工された上で何らかの手段で比較されて真を返す
というわけで、Rubyではその手の問答は向かない
>>50 原文を参照すると、 equality と equivalence の違いを問われているんだけど、
これ数学的な話なのかねえ。
Ruby的にはともかく、数学的には
x ※ x であり(反射律)
x ※ y であるとき y ※ x であり(対象律)
x ※ y かつ y ※ z であるとき x ※ z である(推移律)
ような関係 ※ を equivalence という。
equality はそのうち通常等号(=)で表される(相等)関係。
他の equivalence の例としては、
「整数の世界で、nで割ったときの余りの等しさ」とか、図形の
「合同」(形のみ。向きは考えない) 「相似」(加えて比率も考えない)とか。
>>53 やっぱ原文たどったよな
これ日本語に訳した人が悪いわ
>>52 > eql? は #hash の値が内部表現の配列の hash に再定義されてて、
> 内部配列的にはハッシュ同等ではないので
偽を返す、だな
個々の実装による、で一蹴されるものがいくつか…
要するにRubyでequalityの意味を問うのはナンセンスで、 equalityとequivalenceの違いがわかるというのは数学的な素養が あるか否かを見極める質問という感じですかね。
元の記事的には、単に計算機科学の質問をすればいいだけだと思う あとは「ファイルコピーの関数を書いて欲しいが何か質問は?」と聞く
原文見てきた いわゆる等価と等値の区別がつきますか質問でしかないようだが なんで数学とかよくわからん話になってるのん
>>59 日本語での等価と等値がおおむね一緒だからだよ
原文が identity と equality なら簡単な話だったんだがな。
その辺は元々区別してない日本人教祖の致命的な弱点かもな。
直接の元ネタは Common Lisp かね? ただ、Rubyの場合はオブジェクト指向的な整理がされているし それぞれの述語の意味も違う
質問なんですが、Ruby[Cygwinで時前コンパイル]のスクリプトをOcraで実行ファイルにしたとき、 できた実行ファイルにはCygwinのDLLがなにやら色々入ってないみたいなんです。 Ocraで実行ファイル作成時に出るDependencyリストにも無いファイルが無いというエラーが作った実行ファイルから はかれるんですが、どうやったら調べられるのか、どのCygwinのDLLを同じフォルダにコピーしたらいいのか、 しってはるひといらはりますか?
irb上で、 >REXML::Parsers::StreamParser.new('日本語', listener) Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8 となるのですが、バグですかね? 環境:fedora10、ruby 1.9.2dev (2010-03-06 trunk 26825) [i686-linux]
67 :
66 :2010/03/06(土) 05:48:31
すみません。fedora11でした。
rubyにXMLパーサーある?
あるよ REXMLとかXMLParserとか。それぞれ向き不向きがあるので、とりあえず触ってみると良い。
>>66 REXML::Parsers::StreamParser.new('<?xml version="1.0" encoding="utf-8"?><xml>日本語</xml>', nil)
これは通る。
xmlのエンコーディングってどうやって省いたときはどうなるのが
正しいんだっけ……
72 :
66 :2010/03/06(土) 10:30:08
レスありがとうございます。
>>70 考えてみれば、XMLではない文字列を通す必要は無いんですね。
1.8では通ってたので、勘違いしちゃいました。
とはいえ、エンコーディング検出処理のところで read(2)で 2*文字* 読んでるのは間違いのような気もするな。識者求む。 rexml/source.rb class IOSource#initialize
>>65 こういう新刊情報ってどうやって入手してるの?
ソフトバンククリエイティブの新刊情報にはまだ出てないし、
amazonでも検索に引っかからないし
googleの検索結果にはかろうじて出てくるから
キーワードをダイレクトで指定してそれを
スクリプトか何かでチェックしてるのか?
76 :
デフォルトの名無しさん :2010/03/06(土) 11:10:55
ちょ、著者じゃないよ! 出版社でもないからネ.
77 :
デフォルトの名無しさん :2010/03/06(土) 11:13:44
アマゾンの回し者だな
>>74 めんどくさくねえよ
むしろ1.8のほうが「2文字」読み込むのに難儀する
2文字読むのと2バイト読むのとメソッドがきちんと分かれてる1.9のほうがわかりやすい
添付なんだし誰か突っ込んどけという説はあるな
REXMLなんて使ってる人いないんだろうなという感じの
80 :
デフォルトの名無しさん :2010/03/06(土) 12:09:16
著者降臨age
gemのインストールで困っています。 searchでは見える&installでは見えないという状況です。 % gem search -r rubyzip *** REMOTE GEMS *** rubyzip (0.9.4) rubyzip2 (2.0.1) viva-rubyzip (0.9.1.2) % gem install rubyzip ERROR: could not find gem rubyzip locally or in a repository ほかのgemでも同じ状況でした。 環境はFedora12 on VirtualBoxです。
rubyでAPIを処理できますか?
windowsAPIです
87 :
デフォルトの名無しさん :2010/03/06(土) 22:29:20
>>81 install 時も -r を付ければいいような気もしますが、どうですか?
89 :
デフォルトの名無しさん :2010/03/06(土) 22:55:48
>>86 ブラウザって方法次第ではこんなに簡単に作れるのか・・。Rubyブラウザいいねえ
GUIライブラリだけでRuby関係ないんだが
Trident使うライブラリってMFC以外にあんの?
IEコンポーネントとして呼べばいい Tk→OpTcl→InternetExplorer どっちにしてもRubyの関わる分はたいそう少ない
>>86 win32oleでIEコンポーネント操作すりゃいいんじゃないかね。
前にC#でやったことがあるが、COMがわかってりゃ別段困難ではない。
COM/Interopがわかってるような人間はこのスレで質問するわけがない
これから言語の勉強しようとしているのですが RubyでGUYツール作れますか? C#のようにマウスでコントロール配置できたりしますか?
まず言語とIDEの区別ができるようになろうな。
GUYツールワロタ
RubyでGUI用のIDEはありますか?
IDEといえば、CodeGearどうしたのかと思ったらDBツールの会社と 合併して、今は3rdRail以外にTurboRubyなんての出してたのね。
見た感じ3rdRailと同じようにEclipseのプラグインぽいなー と思いつつ機能一覧を見たら、3rdRailからRails関連を取っ払っ た感じだった。
Turboなんとかって命名には不吉な匂いしかしない
今はDelphiもそこの製品扱いなのか……
勉強のためならGladeでいんじゃね? コードエディタとかついてないとイヤなの?
105 :
デフォルトの名無しさん :2010/03/07(日) 02:04:21
C#用のIDEってそんなこと出来るのか
ホームページビルダーみたいな出力だったらいやだな どうなんだ
wxRuby+wxFormBuilderでも使っとけ
109 :
デフォルトの名無しさん :2010/03/07(日) 07:04:30
>>81 こちらでは問題なくインストールいけたが
Ubuntu 9.04 on coLinux
>>86 遅いレスだが情報サンクス
半信半疑でやってみたがあっさり動いた(Ubuntu9.04)
おもしろいね
この言語はどういったユーザーを主に対象にしているんでしょうか? ぐぐってみるとWebアプリケーションとのことだけど Windowsデスクトップアプリを主に作る場合はおすすめできないですか?
>>111 > Windowsデスクトップアプリを主に作る場合はおすすめできないですか?
1ミリもおすすめできません
とても大雑把には C# で試してみることをおすすめします
物足りないなら他の Java なりなんなりを使えばよろし
C# で挫折しないなら他の言語も我慢できましょう
Rubyの初心者向け的立ち位置って微妙だよね このご時世にコンソールアプリケーションが基本とか華がないにも程がある 得意分野が狭いからわかりやすいんだけどさ これでデフォルトでウィンドウ制御しないといけないとかだったらめんどくて吐く
しつもん freeze って実際はどんなときに使うの? マニュアル読まない人用? あと、TypeError という汎用な例外が出るのはなんで? ModifyFrozenObject とかそういう特有の例外ならよかったのに
>>111 いろいろな使い方があると思うけど
俺は簡単な書き捨てスクリプトに主に使ってる
ファイルの名前を書き換えたりとか,複数のファイルからデータ
抽出してまとめ直すとか,ファイルのデータフォーマット変えるとか
そういうのを大量に行いたい時使うこと多い
C++とかで書いても良いけどこういうのはrubyの方が楽
逆に手の込んだもの書く時はC++の方が楽というか安心
単に慣れの問題かも知れんが
116 :
111 :2010/03/08(月) 14:43:33
調べてみたところ、LL系とコンパイラ系の両方1つづつ
覚えていると良いらしいので簡単だと言われている
RUBYをやってみようと思ったのですが
実際どういう感じで使われているのかがよくわからなくて
質問させていただきました
WEBアプリを作ることはまずないんですが
>>115 さんのようなことができるならちょっと興味があります
>>116 やめとけ
君の考えているようなものではない
>>114 例外について。
あまり例外の階層構成については細かく考えられていない。
現在TypeErrorを返している一部はArgumentErrorを返すべき(逆だった
かも)といった指摘も現在進行形で存在する。数学のほうの例外
体系もErrnoとは分けて作るような動きがあったかな。
>>117 使ってるの普通にWindowsだろうしな
コマンドプロンプトの使用の概念から慣れていかないと
RubyがLinuxやらCGIやらと親和性が強くて便利だと言われる理由は
「普段使ってるもの」をRubyスクリプトで直接パワーアップさせることができるから
普段からコンソール使ってコマンドラインプログラムを利用してるLinuxやCGIなんかの場合は
Rubyで作ることができるものがそれそのものと同種のものだから、即取り入れることができる
それこそ、覚えた日から即生活が豊かになる
しかしWindowsは違う
ごく一般的にはウィンドウアプリケーションじゃないとどうにもならん
そして、それは「Rubyを使うべき分野」ではない(苦行の趣味に近い)
Windowsでプログラミングしたことない、、一度も。
俺もWindowsはないな。MS-DOSはTurbo PascalとSmalltalk/VとModula-2ぐらいだな。
>>116 Rubyがそれほど簡単だとは思わないけど。
簡単かどうかで言えばかなり簡単な部類 ただし、プログラミング初心者には難しい リアル師匠にあたる人がいればなんてことないが、これはどの言語でも同じか Perlは基本がわからないわけではないんだがなんともいえず挫折した、とかいような素養で充分なんだが それに該当するものをRuby単体独学で身につけるのは意外と辛いしRubyの役目かどうかもちと怪しい
中学生に EPSON BASIC(中古・マニュアルのみ) → 大学で Perl4 → KENT CGI(笑) → うーんなんか違う という経緯をたどった俺には Ruby はどんぴしゃべったりで一生もの 「ちょっと遅いけどでも許す」ということを本当に口に出して言ったことをよく覚えている Ruby1.4 くらいだったかなあ
どんな顔か想像ついたw
ブラック会社みたいな物言いだな> 他の言語で基礎素養を身につけた方歓迎
>>126 めっちゃ平たく言うと完全初心者を歓待するためのドキュメント準備がない
こんなとこでもいまだに適切な分野の人員不足が足引っ張ってる状態
書籍ならなんとかなりそうな気もするんだが、オンラインでもある程度あったほうがいいよね
PerlとかPythonとかはnewbieを扱うための準備をかなり前からしてる
Rubyはどっちかってと「わかってる人向け」で突っ走ってきたので
128 :
111 :2010/03/08(月) 16:51:19
インストールで挫折した ネットも繋がないといけない?ようで気味悪いので削除しました 皆様ありがとうございました
よーしrubyのためにwindows消して ubuntuいれちゃうぞー
パパやめて!Windows消すぐらいならVMwareかVirtualBox使って!
もともと持ってないならまだしもわざわざ自分から捨てるような権利でもないな というかそのへんは本スレでやれ
Ruby が簡単かどうかは
>>119 さんもが書いているいるように
それまでの慣れや経験に依るだろうね
Unix, Linuxを使って来てシェルスクリプト,sed, awk 等
使ってきた人間だと簡単に感じる
本一冊(hunt/thomas)通勤中読んでいたらすぐに簡単なものは書けるようになった
確かにターミナル使ったことない人にはわかりにくいだろう
つまり新しい言語に対応できない無能なおっさんが いきついた場所がRubyということですね
>>133 真面目にそんなこと言っているのだとしたら、そうとう恥ずかしいぞ。
真面目じゃなくても恥ずかしいわw
今時、小学生でもLinuxでサーバ構築できるというのに...
ここほど口だけ出来る奴が居座ってる初心者スレは無いよな。
そんなことを言っても出せないものは出してあげられませんよ
逆に貧相なCMD.exeでもRubyで花を咲かせることができる windowsユーザーだってRuby使ってるぜ
逆に、WindowsでRubyをバリバリに使ってる人ってガチガチに独自の快適コンソール環境を構築してそうだよなあ。
142 :
デフォルトの名無しさん :2010/03/09(火) 00:42:22
ある課題があって、それをRubyで解決したいのですが御知恵を。。。 課題というのは、仕事でつかってるIBM系のメインフレームのデータセット? という1レコード3Kbyte程度のバイナリファイルをFTPでおとしてきて 読み込み加工して出力し、またメインフレーム上に戻す(できれば)という ものです。 そのバイナリファイルとは別に、項目名と、その項目の値は何バイト目から 何バイトがPACだ、小数点以下は何桁だ、CHARだというレイアウトファイル なるものがあります。文字コードはEBCDICというものらしいです。 このままじゃデータをエクセルに落して、手作業でやらされる羽目になります。。。 どう料理していけば良いでしょう?
どう加工するかによるだろそりゃ。 バイナリファイルの扱い自体は別に困難じゃない。 unpackして適当に加工してまたpackすりゃいい。 問題はEBCDICの扱いになるかな。なんかライブラリあったかなあ?
144 :
デフォルトの名無しさん :2010/03/09(火) 00:52:39
バイナリ列をバイナリのまま扱った経験がないとしたら茨の道と言わざるを得ないが Rubyはそのへんを助けるようなことはしない
COBOLとRubyって、すごい対比だなw 金融機関の人間だけど、そういう場合は必ずいったんRDBに入れたり最悪でもCSVかTSVに変換してるなぁ。 つまり汎用機→情報系用に変換→各種処理→戻し変換→汎用機というルート。 変換にはうちはF*TRANを使ってる。 iconvとかでもEBCDIC扱えるみたいね。 データセットを直接扱うなんて、 リスクが高すぎてうちでは絶対に許してくれない。
質問に?が多すぎ。 バイナリ、とは言うが、実はASCIIの文字列かいな。 .txt の処理は、Rubyだとより柔軟にできる訳だが、今からでは、間に合わないでしょ。 SEDとか、AWKのスクリプトも書けないのか、それともそんなものも知らないのか。 おそらく、今から勉強しても間に合わないから、あなたの得意なエクセルで作業をスタート。 あとは、時間との勝負。 だな。
F*TRANって、FORTRAN? なんで伏字にするの?
FORTRANに嫉妬しているから。
c#なら10行書けば済む処理だな
152 :
149 :2010/03/09(火) 01:41:46
それは、知らんかった。 音(的には)P-TOSのなんとかに似ているね。
154 :
デフォルトの名無しさん :2010/03/09(火) 02:31:05
>>145 まさにその茨の道を進もうとしてるようですよ。
>>147 正直よくわかんね!ってところだからですよ、ええ('A`)
学生の頃も本職になった今もC++で離散系のシミュレーションとかやりつつ時期によっては
しょぼいエクセルの業務システム作りをやってますよ。(VBA嫌いなので得意じゃない)
sed,awkはそんなものがあるのは知ってたけど,perlでやってました。
バイナリとはいいつつ、ファイルレイアウトを見ると間違いなくパック10進数といった類
の補足説明があるので文字だけってことはないようですね。
とまあそんな自己紹介はいいから、とりあえず明日明後日ともうちょっと下調べして出直
してくる。納期もあってないようなもんなのでまったりやりますよ。
>>146 手掛かりくれてありがとう。
>>114 freeze は(少なくとも組み込みや添付では)破壊的動作のメソッドの動作を禁止させるフラグ立て
def hoge!
raise "can't modify frozen Hoge" if self.frozen?
...
end
というメソッド定義に「自分でする」
破壊的動作や内部構造への再代入をされるとどっかに @foo||= なんかで残ってるインスタンス変数とかが
変更前のまま残ってて場合によっては食い違い動作の原因になりそうだとか
そういうおそれがあるクラスに提供する
ぶっちゃけこれ使わずに「お前が困る動作組み合わせは全部書いてあるからちゃんとマニュアル読め」でもいい
マニュアル読まない人が(あるいはうっかりで)よくないタイミングで破壊的動作をしてしまっても
変更して欲しくないとタグ付けされたオブジェクトだったらメソッド動作の時点でエラー出して守ってあげよう、
そんな若さと渋さの間で揺れるナイス・サーティのアナタに贈る鼻歌みたいな応援歌
a = [ [ ] ] a.freeze a.frozen? #=> true a[0].frozen? #=> false なんだよな。 当然といえば当然なんだが。
>>156 それは a つまり Array の freeze メソッドの動作に依存する
配列中の全要素に freeze を適用するという動作にしても構わない(不便だとは思うが)
Array#freeze がそういう「外の入れ物だけフリーズさせる」ような動作にたまたまなってるだけ
freeze の実装自体はもっと柔軟に対処が可能
freeze は def hoge! raise_if_frozen … end とか def hoge! … end freeze_method :hoge! とかいう仕組みを作って簡易に利用できるほうがよかったと思う
freeze 自体が Ruby 文化とあまり適合しないと言われているから うまい構文糖や実装ポリシーが 熱心に研究されていないんじゃないかなあ
evil rubyたのしいです。
private や protected の動作がイマイチなのと根っこはたぶん一緒だよね
if hoge && fuga.size > 0 と if hoge && !fuga.empty? どっちがいい? どっちでもない別の表現がいい?
あと if fuga.size > 0 は unless fuga.empty? にした方がいいんだろうか? どれもお好きなようにっていう程度だろうか
>>162-163 字面が違うから意味が違う
が、fuga が配列みたいなもんなら、俺は empty? の活用をまず考える
empty? を使うことで否定要素が複数混じってしまうようならすっぱり諦めて size の比較とかにする
そんな感じ
あと配列なら Enumerable 由来の any? とか all? とかの利用も考えるといい
>>164 書き忘れてましたfugaはArrayインスタンスです
配列であれば162も163もそれぞれ動作は同じですよね?
なにを心配してるのかわからん sizeが整数や実数を返す可能性とか考えてる?
167 :
162 :2010/03/09(火) 17:42:10
心配しているわけじゃなく
意味が同じなら書き方としてどっちがRubyっぽいのかなと思って
>>162 ,163で例に出した形の文は今まで前者で書いてたんですけど
empty?を使う方がいいという意見を別のところでも見たので。
特に
>>162 の方は否定(!)をつけてまでempty?にするのがいいのかどうかってことです
? を使う述語があるならそっちのほうがいいという話にはどうしてもなるな !foo.empty? みたいなのにはうんざりしてるのか、 ユーザーの作るライブラリでは相反する述語がセットで定義されてることも多い && などで繋ぐ場合は !foo.empty? みたいな記述はけっこう容認されてる雰囲気 if !foo.empty? だけだったら unless foo.empty? 使えという話になるんだけど
>>162 fuga.size > 0 より断然 fuga.empty? をお勧めします。
理由は、fuga.empty? はまさに「空かどうか」を調べるメソッドであり、やりたいことを明確に示しているからです。
これに対し、fuga.size > 0 は「サイズが0より大きいか」を表しており、「空かどうか」を直接表しているわけではありません。
つまり、fuga.size > 0 より fuga.empty? のほうがより抽象度の高い記述になっています。
なお Ruby では .empty? のほうが若干ですが動作速度が速いはずです。
「要素があるか」を調べたいのに「空か」を調べてさらに加えて否定まで付けなきゃならんのは如何なものかってことじゃろ
だから標準で all? とか any? とかあるって それで不足ならメソッドに掃き出すことを厭ってはならね
unlessがあるんだから使おう、と思うか、他の言語と同じようにifで書こう、と思うか、は 微妙なところだな。自分の場合、何年かの周期でふらふらしてる。
メソッドフル活用派とプリミティブ派のたたかいはまだつづく
Pythonスレ 社会人が多く、大人の発言 初心者に優しい Rubyスレ キチガイ、偏執狂、厨房の巣窟
要素の数が0以外なら真を返す、みたいなメソッドがないことが問題をややこしくしてる 本当はこのへんは対称性があってもいい(なくてもいいが) うまいメソッド名が思いつかなかったっぽい雰囲気はあるが
>>170 (誤) さらに加えて
(正) かてて加えて
any? はよいんだけど、 [ nil ].any? #=> false なので 要素が1つでもあるか、という判定としては万能ではないかもなー。
万能ではないも何も > 要素の数が0以外なら真を返す、みたいなメソッドがない という話が既に
def hage? … end def fusa? !hage end みたいなメソッド定義はよく見る empty? も時流に乗るべきだとは思う
富士通御謹製エフトランを知らん奴が意外と多いんだな 汎用機、オフコンを知らん世代が増えて来たったことだな z/OSで仕事してたころはデータセットをFTPのBINでダウンロードして shift-JISに変換とかよくやってたぜ
懐古厨乙
おっさん多いなこのスレ。。
うんにゃ、知らない奴はレスしないだけ バックグラウンドがたまたま見えただけに過ぎない
メソッドと変数が見分けがにくいな
ローカル変数のように見えて実はメソッド、というのはままある。
「値は必ず確固としたオブジェクト」なので、メソッドだろうがローカル変数だろうが 値を返すキーワードが実際は何でできてるのかは使用者からは区別する必要ないよねというポリシーがある mes(foo) としたとき、foo が変数なのかメソッドなのかは実際どうでもいい foo という名前が解決されてその結果返されるオブジェクトだけが重要 代入が文脈依存なのはそれなりに面倒 selfの有無で同じ名前を2回使い分けられるということでもあるが
188 :
デフォルトの名無しさん :2010/03/10(水) 09:26:35
さすがにそれはどうでもよくないだろー local_var()もできないんだし
問題になる状況自体が問題だと思うぞ どういうネーミングだよ
めっちゃプリミティブな名前のインスタンスメソッドを作って、なおかつローカル変数もそのままの名前である場合 uri とか
191 :
デフォルトの名無しさん :2010/03/10(水) 10:34:48
スレ違い
初心者は1.8.7をインストールすればいいんでしょうか?
はい、そうです。
def method1(x) return true if (0...1000).include?(x) return true if (2000...3000).include?(x) return true if (4000...5000).include?(x) return false end --- def initialize @arr = [] for i in 0...1000 @arr.push(i) end for i in 2000...3000 @arr.push(i) end for i in 4000...5000 @arr.push(i) end def method2(x) return @arr.include?(x) end 上のmethod1とmethod2をそれぞれ呼び出したとき、 結果は変わらないと思うんですが、処理速度に違いは出ますか?
def method3(i) case i when 0...1000, 2000...3000, 4000...5000 then true else false end end ほんとうに整数ならこれが速くてわかりやすい 整数なのならわざわざ配列作る必要はない
int x=1000; for(int i=0;i<=x;x*i) { }
201 :
デフォルトの名無しさん :2010/03/10(水) 19:40:05
(0...1000).include?(x) は 0<=x && x<1000 と同じだけど (0...1000).to_a.include?(x) は配列の要素を一つずつ比較するので当然遅くなる
処理が遅いってどういうとき遅いの?
>>202 実際に遅いかどうかプログラム作って確かめてから考えたほうがいい
机上で遅そうだと思っても意外と許容範囲内であることは多い
.NETで作ったdllは参照できますか?
dll <-> COM <-> Ruby
へー、COMなら参照できるのか どういう原理なんだ?
COM Ruby でぐぐると…わあ微妙
pause(2) に相当するメソッドでないんですかね。 とりあえずKernel.#sleepによる無限スリープで代用していますが > sleep(sec = 0) -> Integer > sec が省略されたり 0 を指定した場合、他スレッドからの Thread#run > などで明示的に起こさない限り永久にスリープします。 sleep(0) してもすぐ戻ってきやがる。 マニュアルと実際の挙動が違うのはなぜ? ちなみに引数を省略した場合は仕様通りなんですけど。
pause(2)ってサスペンドの時に発行される奴だっけ? Process.kill :STOP, $$ じゃだめですかね?
>>209 ああ、それいいかもです。
ところでKernel.#sleepの挙動がマニュアルと異なるのが気になりますw
sleep(0) ですぐリターンするのは何故でしょう??
まあ個人的にはただしい挙動だとは思いますが。 シェルから sleep 3 を実行すると0秒後に復帰しますし、永久にスリープはしませんね。はい。
212 :
198 :2010/03/11(木) 00:38:23
みなさん、ありがとうございます。 method1の代わりには、ご提示くださったmethod3が確かに良さそうですね 0...1000等はデータ的な数値(整数)で、頻繁に比較するのですが、 データ専用のクラスに数値の配列とmethod2を定義して呼び出し側のクラスから参照して比較したほうが、 呼び出し側のクラス内に直接method1を書くよりも記述のまとまりとしては良いと思ったんです かと言って、データのクラスにmethod1や3のような記述をしても、 データを管理しているイメージはないですよね
>>212 え、なにそれ
class HogeDataRange
def include?(x)
case x
when 0..1000, 2000...3000 then true else false
end
end
end
puts "13は含まれてるよー" if HogeDataRange.new.include?(13)
とかやる気なの?
Rubyでできないことって何?
>>215 あなたができそうだと思っているようなことは全てうまく行えない
と答えるのが一番実態に近いと思うん
説明してだいたいをわかってもらえるような人はそういう聞き方しないので
そっか
ものそい他人任せだが、他の初心者にやさしい「見た目わかりやすい」言語を学んでからだと Rubyのような言語の立ち位置がよく理解できるかと思う 最初からRubyだけ与えられている状態はけっこう不幸だ だから大学1年の授業にRubyを使うとかいうのは俺はあまりいいと思わん
219 :
212 :2010/03/11(木) 02:53:01
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%B5%D5%B0%FA%A4%ADRuby%2FTk ここの一つ目のサンプルコードをコピペして実行したのですがエラーになってしまいます
それとサンプルのVisualnovelも他のrbファイルを取り込むところで
見つけられないらしくエラーが出てしまいます
requireをしないコードは普通に実行できます
それと実行はRDEでやっています
Pathはbinが環境変数のところで通っています
何がいけないんでしょうか?
XPsp3 Ruby1.8.7 RDE1.1.1.1
C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1:in `require': no such file to load -- tk (LoadError)
from C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1
Complete(1)
tcl入れてないんじゃね?
そのRuby自体が、tkをサポートしてないRubyに見える
net/httpライブラリでデフォルトのリクエストヘッダを設定する賢い方法ない? http.rbのHTTPGenericRequest#initializeを直に書き換えるのは気持ち悪いよな
そのような動作をするクラスやメソッドを別途作る net/http そのものを弄ることは推奨されない 固定の HTTP ヘッダが必要なら、固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る
手順的に不正確だった > 固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る は Net::HTTP オブジェクトを作って固定の HTTP ヘッダを追加して返すメソッドを作る
そこまで書くなら Net::HTTP オブジェクト自体はヘッダのデータ持たないと思うにゃん
よーわからんがこういうの?
require 'net/http'
# Net::HTTP.version_1_2 # 1.8.7では既にtrue
def http_get(uri, header={})
Net::HTTP.start(uri.host, uri.port) do |http|
req = Net::
HTTP::Get.new (uri.request_uri)
header.each_pair{|k, v| req[k] = v}
return http.request(req)
end
end
uri = URI.parse('
http://www.ruby-lang.org/ ')
p http_get(uri, {'Accept-Language' => 'ja'}).response['location']
p http_get(uri, {'Accept-Language' => 'en'}).response['location']
/aaa\/bbb/ という正規表現文字列にマッチする正規表現というのはどう書けばいいんでしょうか。 \/.*?\/ と書いて、中の\/にマッチしないように \/[^\\\/]*?\/ としてもダメでした。
irb> Regexp.new(Regexp.quote("/aaa\\/bbb/")) =~ "/aaa\\/bbb/" 0 irb> Regexp.new(Regexp.quote("/aaa\\/bbb/")) /\/aaa\\\/bbb\// irb> p "/aaa\\/bbb/".scan(/\/aaa\\\/bbb\//) ["/aaa\\/bbb/"] nil irb> p "/aaa\\/bbb/".scan(/\/.+?\\\/.+?\//) ["/aaa\\/bbb/"] どこまで汎用になればいい? 本当にマッチさせたいものはなに?
230 :
220 :2010/03/11(木) 12:41:00
>>230 OneClickInstallerを使って1.8.7になるはずがない
あれは1.8.6しか存在しない
君が使ったのはRubyInstallerで、これはtkライブラリは含まない
Windowsでtkライブラリを使いたいのなら
>>6 のActiveScriptRubyを使うべき
これならActiveTclが別途入ってればなんとかなる
余談だけど
> 更新日時:2005/11/16 21:36:46
5年も前の記事をほいほい参考にすべきではない
>>224-227 Thanks!
やっぱソコソコ手間かかるか
目的を正直に白状すると,デフォルトのUAがアレなので
常時ナチュラルなUAでライブラリを使用したいだけなんだよね
俺仕様ってことで推奨されない方法で行きます
>>228 str = "hoge/aaa\/bbb/fuga"
re = /\/[^\/]++\/[^\/]++\//
p str.slice(re) #=> "/aaa/bbb/"
>>232 Net::HTTP を直接使用することは極力避けたほうがいい(第一面倒だ)
自作のスクリプトで何度も使うというのならそのようなライブラリを自作するチャンス
俺は wget を定義して require 'orelib/wget' してしばらく使い回してたぞ
235 :
232 :2010/03/11(木) 14:15:56
>>234 >極力避けたほうがいい
それはどうして?
net/httpのAPIは結構気に入ってるんだけど
コネクションがスレッドセーフじゃないとか
Errno系の例外が不親切とかそこら辺?
Net::HTTP は抽象度がわりと低いほうだからじゃないでしょうかぬ システム的な問題ではないと推測
237 :
220 :2010/03/11(木) 15:25:24
>>231 仰る通り単体のRubyを入れていたようです
oldと書いていたので新しいもののほうがいいと思って
そっちをダウンロードしてしまったみたいです
ActiveRubyをダウンロード
gemのアップグレード
この時点で試しに
require "tk"
したけどエラー、tcltklibbなどtk関連のファイルがあるのに開けないみたい
>これならActiveTclが別途入ってればなんとかなる
この一文がなければここで挫折してました
そしていろいろぐぐっているとVisualuRubyはすでに入っているようなので
こちらでGUIを作りたいと思います
ありがとうございました
すみません。お尋ねします。 ファイル上書き確認のコードを書いているのですが if File.exist?(outfile) print "#{outfile} は存在しています。上書きしますか ? (y/n): " answer = STDIN.gets if /y/i !~ answer exit; end end 問題ないときもあるのですが、状況によっては(その状況が いまいちよく分からないのですが)printが実行される前に STDIN.getsに入って、何も表示されないまま待ち受け状態に なってしまいます。printの対象を事前にflush(?)するには どうしたら良いのでしょうか?
>>213 あんまりよくわからんなりにソースを読んで見たところ(Windows版Ruby1.8.7だとして)
sleep は引数が無いなら WinapiのSleep(INFINITE)で無限に待つみたいで
引数があるなら Winsockのselectっていうのを呼んでた
selectはタイムアウト0秒だとすぐに帰って来るみたいなので
sleep(0) だと sleep() とは違ってすぐに帰ってくるようだ
るりまが間違ってるんじゃないだろうか?
あんまり自信があるわけじゃないので
だれか詳しい人、正確な説明よろしく
自分で答言ってる if File.exist?(outfile) print "#{outfile} は存在しています。上書きしますか ? (y/[n]): " $stdout.flush exit if $stdin.gets =~ /\Ay/i end
>>238 flushって言葉を知ってるなら
IOのインスタンスでありprint等の出力先である$stdoutにそれをすればいい
と言えばわかるんじゃないかな
242 :
238 :2010/03/11(木) 17:25:47
>>240 , 241
バッチリ動きました。ありがとうございました。
情けないことに$stdinの方をflushして
動かんなー、と悩んでました・・・。
243 :
220 :2010/03/11(木) 18:02:05
tkの方が解説サイトや機能が多いので TCLフォルダにActiveTCL入れてみたけど実行するとエラーになる いろんなサイトみて環境変数にパスもちゃんと入れたのに TCL_LIBRARY TKL_LIBRARY INCLUDE LIBなど 実行するとここを読みに行ってエラー /Ruby/lib/ruby/1.8/i386-mswin32 ここにもActiveRuby入れたときのTCLがあるのになぜエラー? もう疲れたよ・・・
ActiveScriptRuby(ActiveRubyというものは存在しないしこう表現してもいけない)は デフォルトで C:\Program Files\ruby-1.8 にインストールするはずだが C:\Ruby にインストールされるのは RubyInstaller の Ruby
RubyInstallerをアンインストールしなかったのか 予想外だ というかRubyでGUIなんかわざわざやろうという人はもっと熟練して賢いもんだと思ってた
やはりTkへのアクセスの存在は隠したほうがいいのかもしれない もう応対がめんどくさすぎる デフォルトOFFのRubyInstallerの判断は賢い …正式版じゃないからかもしれないが どうしてもTkに処理を渡したいとき用のライブラリであって、 Rubyでウィンドウを作るためにあるわけじゃない なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない
247 :
220 :2010/03/11(木) 18:32:29
簡単なのはRubyと聞いたのでやろうと思ったんだけど まさかインストールするだけで2日かかるなんて
248 :
220 :2010/03/11(木) 18:35:42
>>244 空白開いてるといけないとかどこかで見たから
デフォルト変えてD;\直下にインストールしただけ
エラー表示されるときのパスもちゃんとインストールされた
場所のTCLを参照しているし、でもエラーが出る
RubyInstallerはActivescriptRubyを入れる前に
ちゃんとアインインストールしました
残ったフォルダも直接削除しましたし
>>247 簡単だよ
ただ、OS操作とコマンドライン文化に不慣れなプログラミング初心者が独学でやっても簡単だと言った人がいたなら
俺が許可するのでグーで殴れグーで
251 :
220 :2010/03/11(木) 18:46:47
Rubyを使ってる人は程度が低いので、Ruby以外の知識が要求されるGUIプログラミングを否定しようとします そういった人に騙されないようにしましょう
いや、Rubyとかじゃなく、GUIに関するドキュメント少なすぎるだけだと思う。 LinuxでGTKプログラミングやろうとすると多くの人が挫折するし。
256 :
220 :2010/03/11(木) 19:06:06
環境変数が設定できてないか参照できていないように見える コマンドプロンプトから C:\>echo %TK_LIBRARY% C:\Tcl\lib\tk8.4 C:\>echo %TCL_LIBRARY% C:\Tcl\lib\tcl8.4 C:\>ruby -e "require 'tk'" (何もエラーが出ないまま終了) どうせ RDE がなんかしてるんだろうと思う
Ruby と Tk をインストールしてから一度も RDE を再起動してない場合はこうなるな
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 :2010/03/11(木) 19:56:49
>>257 全く同じ結果でエラーも出ませんでした
もしやと思って、test.rbをdblclickしたら普通に起動しました
ruby consoleで
>test.rbとやってもフォームが表示されました
>>258 再起動は何度もしましたが同じ結果でした
>>259 そのTCLはActiveScriptRubyに入っているTCLですか?
それとも別途インストールしたほうのTCLでしょうか?
どこかのサイトにRubyが参照しているライブラリのディレクトリを表示する
コマンドが書かれていたんですけど、閉じてしまってわからなくなった
詰まる初心者の9割はRDE使ってるよな なんなの
>>261 誘蛾灯みたいなもんだと思う
コマンドプロンプト上から ruby -e "require 'tk'; Tk.mainloop" を実行してウィンドウが出るのに
RDE のエディタ部に require 'tk';Tk.mainloop と書いて F5 押してエラーログが出るなら RDE の問題
zipとrarを回答する短いプログラムを作ろうと思っているんだけど、 OSのコマンドを使わずに作りたい できればwindowsとlinuxのどっちでも動くようにしたい 教えてエロい人!!
264 :
220 :2010/03/11(木) 21:01:03
初心者は蛾扱いか プログラマってこういう人間ばっかりか
>>263 ソース読んでそういうライブラリ作るとか。
tarは自分で作ったことあるよ。
正直RDEというだけで話聞く気9割減
>>264 1〜2日くらいしか考えてないんだろ
そんくらいで怒るなよ
みんな親切にしてるじゃないか
>>263 コマンドじゃなければいいだけなのならほぼ全てのスクリプト言語でできるぞ
その言語環境がインストールされていることが前提だが
というかシェルに展開を任すような処理をしてる言語を俺は知らない
269 :
263 :2010/03/11(木) 21:18:06
>>265 tarを解凍するコードをRubyで書くのって、面倒じゃないんですか?
Rubyの文法がまだ分からないんでorz
頑張って作ってくれと頼まれたもので..
>>269 いやtarの展開だけなら数百行でおk。
アーカイブに追加するのは、ちゃんとテストしないと恐ろしいのでやめた。
面倒なら外部コマンドに投げるのが楽。
>>266 Rubyを知らない人間がRDEを使うのは嫌われる
Ruby on RailsはRubyとは実質無関係なので他所で
Ruby1.9.1はとりあえず初心者は使うな
RubyInstallerはインストール後がめんどくさいから使うな
Rubyで関数と言って教える何かがあったらそいつから即手を切れ
こんなもん?
>>269 それは
「ZIPとTARの仕様構造を自力で調べてそれを展開するようなプログラムを作ることで勉強しろ」
という意味だろうから話がちょっと違う
Rubyは(少なくとも1.8は)いわゆる文字列とバイナリ列は同じなので
○バイト目から△バイト目までをどうにかする、という処理は普通に書ける
もし「外部コマンドがインストールされてないとZip用ライブラリやTar用ライブラリが動作しないのではないか」
と思っているのなら、そんなことはない
普通にインストールされていればRubyは両者をそれこそ3行くらいで展開する
あ、Zipってそっちか それはrubygemからの追加インストールがいるな
273 :
263 :2010/03/11(木) 21:27:41
>>268 zipを解凍するライブラリーはrubyにもあると思いますが、
rarはライセンスのせいでライブラリーが・・・と思ったので
>>270 さすがに、制限時間があるなかで「Rubyの文法 + 解凍のコード」を
書くのは厳しいですね〜
@hoge = hoge こんなコードがrubyにはあるわけですが、 perlと同じく変数は宣言しなくていいんですか? 最近のperlはmyをつけて、変数を宣言するのが一般的になってきていると思うのですが
>>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 でも設定して試してみて
>>274 Rubyの変数はハコではない
Rubyのデータは全てオブジェクトでどこか「オブジェクト置き場」に厳然と存在してて、
「変数代入」はその置き場に転がってるオブジェクトにその名前のラベルを貼る行為に同じ
ただのラベルだから宣言はいらない
オブジェクトはすでに存在してるわけだし
@var = hoge は hoge の指す(というか hoge の返す)オブジェクトに
「@var」という4文字のラベルをつける行為
…実際は宣言してるはずなんだが、完全に隠蔽されててRubyスクリプトからは見えないし触れないし関われない
プログラミングがしてみたい、というだけなら 今はMSのSmall Basicがいいんじゃなかろうか。
>>277 うん、マニュアルだけ見れば十分な既言語取得済該当言語初心者はいつもそう言う
プログラミング初心者に本当に必要なのは十万の解説と百万のサンプル
279 :
274 :2010/03/11(木) 22:19:12
>>276 オブジェクトは既に存在していて、オブジェクトに対して名前をつけているってことか?
@var = hogeはjavaでいうと
class Hoge {
Test test;
void setTest(Test t) {
this.test = t;
}}
と同じになるの?
>>275 ごめん、もうアンインストールした
この2日間、時間の無駄使いしただけだった
281 :
220 :2010/03/11(木) 22:31:58
環境変数という言葉すら初耳の状態からスタートしたおれにとって
まさに
>>278 の言う通り
教えてくれても、専門用語だらけでわからない
それでも単語ひとつひとつぐぐりながらこの2日間がんばったが
コード一つ書かないまま、いや、2行だけは書いたが
終わってしまうとはまさに予想外
俺の考えている初心者とプログラマーの初心者の立ち位置が違いすぎた
あなた達とはもう2度と出会うことはないでしょう
さようなら
>>278 その見地ならJavaが最適ってことで。
でもなぜかJavaを勧める人はあんまりいない、気がする。
>>281 本当にもう見ていないことを期待して書くが、たとえば
キーボードやマウスの使い方、エクスプローラの使い方なんかは言語の範疇外だ
それと同様、コマンドプロンプトやOSの環境変数、標準のインストーラ動作なんかは言語解説の範疇外
コマンドプロンプトに日本語を表示したら化けたとかそういうのも本来無関係
文字コードって何ですかとかシフトジス?ってなんですかとかそういうの知らないのも問題外
HTTPとURI関連のライブラリ使うならRFC準拠の基礎知識くらいは持ってから来いやポートの説明からか泣くぞオラ
とまあ、どこまで巻き戻ることを想定するかは残念ながらこちらで決めさせてもらわざるを得ないのだ
Rubyさんは貧乏でリソースは有限であるがゆえ
もし他の(お金持ちでそれゆえ親切な)言語でプログラミングの楽しさを身に付けたなら、
そのときは気が向いたときにでも振り返ってRubyを検討してみてくれると嬉しい
すこぶるRDEは嫌われてるみたいですが、 ここに居る人はどんな環境使ってるんですかね? 自分は会社だとEmacs。家だとEclisp WindowsだとEmacs使う気が失せるんですよ・・・・。 ちなみに仕事はソフトウェア関連ではなく超初心者です。
最近はさすがに減ったが、「プログラミングの全くの初心者にもRubyは簡単」という喧伝が多すぎたな プログラミングの経験がなくても結構使うまでいける言語である保証は頑張ってしたいところだが、 そこまでの道のりがどなたにも簡単かと言われるとかなり大きな疑問符
>>284 えまくすくりーんぷてぃー
何らかの手段でLinuxを起動して接続してその上でRuby使うのがたぶん一番妥当
Windows上でRuby使うとかなんかボリショイサーカス見てる気分になる
やろうとしたことが GUI でしかも IDE 使用という 二重のトラップにかかったのが不幸だったといわざるを得ない 『たのしい Ruby 』とか適当な初心者本買って コマンドプロンプト+テキストエディタでリベンジしてほしいな 地味だけど
>>287 コマンドプロンプトではエラーなく動作してる時点で
「あっじゃあこっちでやりますRDEはステで」
という判断にならなかったのがなんかもう供養塔立てて忘れないよう祀るレベル
今度から「RubyではGUIできません」と答えることにしようと思う
289 :
デフォルトの名無しさん :2010/03/11(木) 23:10:44
>>281 プログラミング初心者ならそれこそ1日や2日でマスターできるもんじゃないんだから、
根気よくやらないといかんよ・・・
毎日プログラミングし続けて3年くらい使い続ければそこそこプログラミングできるようになる。
頑張れ
290 :
デフォルトの名無しさん :2010/03/11(木) 23:13:57
>>281 誰にGUIをRubyなら簡単にできると教えてもらったのか知らんが、そいつを殴ってもいいぞ
俺ならC#を押すよ。初心者でもポトペタでいきなりGUIが作れる。
サンプルコードもネットにたくさん。フリーのコンポーネントも一杯ある。
Delphiでゲーム作ってプログラミング覚えた俺だけど、いきなりRubyやってたら多分挫折してる
291 :
デフォルトの名無しさん :2010/03/11(木) 23:23:23
最近で見たRuby初心者でいえば、チンパン団のロプロスはすごかったな。 ニートから1年くらいでphp→Rubyと来てtwitter関連のwebサービス立ち上げて、アフィリエイトで飯食ってる。 でもロプロスはRDE使ってるんだよな。 twitter関連のwebサービスのtwilogはユーザー数数万人だが、Railsすら使ってない。 index.cgiだったぞw 何がいいたいかって、GUIじゃなくてwebに興味持てばまだよかったと思う
アフィリエイトって w
しょうもないこと言うやつばっかりになったな
moduleってC++のnamespaceやjavaのpackageと同じ?
クラウドだのシンクライアントだのって数年前のサーバサイドに先祖返りしてるけど Railsは本命にはならんだろうな なんだかんだ言ってcgi+javascriptがこの先も主力だろう
> なんだかんだ言ってcgi+javascriptがこの先も主力だろう > なんだかんだ言ってcgi+javascriptがこの先も主力だろう > なんだかんだ言ってcgi+javascriptがこの先も主力だろう > なんだかんだ言ってcgi+javascriptがこの先も主力だろう > なんだかんだ言ってcgi+javascriptがこの先も主力だろう
気持ちはわかるが5行はやりすぎだ落ち着け
RoR と cgi+javascript じゃ目指してるものが違うから住み分けるんじゃないの? サイトの数としては後者の方が多くなるだろうけど
>>294 C++のnamespaceとJavaのpackageが同じに見えるのなら、
moduleも同じだということにしてもいい。
あ、classも同じでいいよ。
300 :
294 :2010/03/12(金) 00:14:15
>>299 そんじゃ、moduleもpackageみたいに使います
あえて言うなら、何か違いありますか?
今のところ趣味でプログラミングしているんで、namespaceを使うことが無いんだよね〜
だから、namespaceとpackageの細かな違いがわかんない
このスレっていつもこんな感じなのか? プログラムというよりは「自宅サーバ板」のおまけスレみたいだな
3月は春休み
>>301 あなたがここに来たのと同じような理由の人がいます
304 :
デフォルトの名無しさん :2010/03/12(金) 04:47:02
CentOS5のrubyが、rubygemsを入れるには古いので、 RPMとソースインストールを共存させようと思いました。 RPMは/usr/bin、ソースインストールは/usr/local/binに入るので、 位置的には問題なく入ったのですが、 このままだとRPMのrubyが優先的に使われます。 ソースインストールのrubyが優先的に使われるようにするにはどうすればいいですか?
>>281 Cygwin の Ruby なら簡……と言いかけたがダメだなこりゃw
307 :
304 :2010/03/12(金) 08:45:44
ありがとうございます。 よく見たら/usr/local/binが先に書いてあるので このままでもソースインストールのrubyが優先されました
共存か…CentOSにalternative的なものって無かったっけ
>>308 man 8 alternatives
chkconfigパッケージに入ってる。
>>304 うん、Linuxのパスについての勉強しれ
rubyインタプリタは自分の場所を考慮して起動用設定ファイルを読むから、
/usr/local/bin/ruby と /usr/bin/ruby と /home/ore/usr/local/bin/ruby くらい違えば小細工ゼロで共存するはず
updating newgem でメモリ使い切って10分くらいガリガリ言ってる…
最近のrubygem updateはプア環境ではまた辛くなってる 1.2くらいの頃が一番よかった
スワップに突入するくらいメモリがない場合は 一旦アンインストールしてから再インストールしたほうが所要時間的には早いよね アップデート対象のgem一覧を返して終了する、みたいなオプションがないのが辛い
>>263 7-zipインストールを前提にした上で、それをコマンドラインから叩くのが楽かな。
>>314 win32のゲームの配布でRubyスクリプト使ってアーカイブ作ってたときは、俺も7zip使ってたな。
外部コマンドあるならそっちも手っ取り早い
ちょっと質問ですが、ふつーはRubyGemsで入れたライブラリなどのリファレンスくるのって何が手っ取り早いんでしょうか?
今までRailsやってて、るりまのchmと
↓で配布されてたchmと(更新停止中)、
http://d.hatena.ne.jp/kabus/20081202 あとは最新のは
http://railsapi.com/doc/rails-v2.3.5_ruby-v1.8/ とか見てたんですが、
るりまはともかく、railsのchm配布サイトが更新されてなかったり、
最後のサイトはprivateメソッドやnodocのものが乗ってなかったり、不便に感じてます・・・。
こういう不便さを解消できるものでしょうか?
また、ri入れるとRubyGemsのインスコが激遅になるんで使ってないんですが
(.gemrcに gem: --no-ri --no-rdoc とか書いてます)、
普通はri使うもんなんでしょうか?
>>316 基本的にはソース読む
公開されてる部分のドキュメントが内容を正しく反映しているとは限らないし、
端折られてる部分の重要性のほうが高いことがほとんどだから
というかほとんどの場合:nodoc:の使い方が不正
nodocにするべきではないものまでガンガンnodocにしてある
privateメソッドを内部で呼んでいるならその動作もpublicメソッドのドキュメントに反映すべきだし
privateメソッドだからといって説明をしなくてもいいということには絶対にならない
ちなみに「Rubyにはprivateやprotectedは不要」派でございます
>>316 自分が参考にする大まかな順番
1.ri(マクロでエディタから呼び出せると便利)
2.自動生成したUMLクラス図
3.ヘルプファイルや書籍(親切・有名なプロジェクトなら)
4.Google先生
5.ソースコード・テストファイル・スペックファイル
6.自動生成したコード片のコールグラフ(ソースに黒魔術満載の場合)
7.職場のネ申
8.2chで祈りを捧げる(時間をつぶすともいう)
9.諦める
riとrdocは中身は同じだからrdocでもいいと思う。好みで。
超初心者向けの言語でない事は確実だな。 教祖が使ってるデビアンから入る必要が有るし。特に広く一般に普及してるウィンドウズからは敷居が高い。
>privateメソッドだからといって説明をしなくてもいいということには絶対にならない >ちなみに「Rubyにはprivateやprotectedは不要」派でございます リファクタリングのコストが高くなりすぎないか?
拡張子の変更がうまくいきません foo = "foo.c" File.extname(foo) = ".o" とするとエラーが出ます
extnameが返すのは左辺値じゃない。 1.9 なら Pathname('foo.c').sub_ext('.o').to_s で。 1.8 なら素直に文字列置換。
>>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"
rubyの処理系(windows)の違いを教えてください ActiveScriptRubyと公式な実装(ビルドが沢山ある?)があるみたいですが
>>322 C#ならファイル名変更なんて簡単に一行でできるのに
かわいそw
>> 323
sub_extなんてものがあったのですね。
ありがとうございます。勉強になりました。
以前リファレンスを探したときは見つけられませんでしたので見直しましたが
やはり1.9のリファレンスにsub_extがありません。
>>324 違います
公式なWindowsバイナリは存在しない
(Windowsで動作するようなソースは取り込まれているが、コンパイルしたものそのものは配布していない)
バイナリはすべて有志の個人またはネット上の第三者プロジェクトの提供による
あとは
>>6 これでは端折ったが要はActiveScriptRubyがMSWin32でRubyInstallerがMinGW32
この言葉が理解できないならこれ以上の情報は不要なので素直にActiveScriptRuby使え
これはほぼ全てのスクリプトでWindows環境だと思ってもらえる
通常の利用上の問題はないから
>>329 windowsで公式な実相が無いなら、適当に選ぶことにしますわ
thx
>>328 riには普通にあったよ
るりまにはないようだ
>>330 適当に選んでは駄目
実用上、コンパイラが何かということよりも
プラットフォーム文字列にwin32の文字列が含まれているかどうかが重要
C:\>ruby -e "p RUBY_PLATFORM"
"i386-mswin32"
mingw32はRubyに慣れた人向け
スクリプトの修正とかできない人が使ったらどーでもいいとこで詰まるぞ
>>332 こんぱいるしたひとがるびーのさばにふぁいるをおいてる
インストーラつきじゃないから少なくとも初心者スレで話題に出すようなもんでもないかと
>>332 そういやこれは結局どうなったんだっけ
本気で「ふぁいるおきば」以上の意図はないんだっけ
根性入れて更新するけど公式にサポートしたバイナリではないとかそんな立ち位置なんだっけか
Rubyにはサポートレベルというものがあるんだが、 実はWindows系とMacOSXとFreeBSDは同じレベルにあるんだよな。 とてもそんな扱いを受けているようには見えないが。
ガラクタの寄せ集め言語なんていらない
Pathologically Eclectic Rubbish Listerのこと?
初期Rubyユーザが母なるPerlを叩く図式は最高にかっこわるかったな
RubyでGUIは鬼門、という方向に話が流れてるなあ… Pythonのように、インストールすれば即座にTkも使える状態になってれば 少しは違ったんだろうか… かといって、VisualuRubyを推すのもどうなんだという気もするし… アレはWindows限定だし… 言語の作者自身が「Windowsなんか知らね」属性の人だったのが そもそも不幸の始まりだったのだろうか… Windows嫌ってる人って、GUIも否定的な人が多い印象もあるし
何も見ずにもう一回書いてみろ
うが。何故瞬間に2レスも間に入るw
Wdh=cgi["width"] <INPUT type="text" name="width" value="50"> print Wdh Wdh =Wdh / 2 としたところ、 undefined method `/' for "":String と怒られてしまいました。右も左も分からないので解決策をご教示願います。
>>343 とりあえず、てきとうな解説サイト(お勧めは特にない)か本読め
345 :
343 :2010/03/12(金) 20:25:16
すみません、追記です。 print Wdhの結果は何も表示されませんでした。
346 :
343 :2010/03/12(金) 20:33:33
>>347 適切ではあったとは思う
変数の規則知らない上にエラーの読み方わからんのではさすがに遠隔ではどうにも
単純には、文字列(String)は整数(Integer)ではないから割り算したいなら 変換しろ、ってだけのことなんだけど。 cgiがCGIクラスのインスタンスだとして、こいつの返すパラメータはかなり 変態なので、今後もいろいろ罠に掛かるかもしれない。
>>349 >Wdh
>print Wdhの結果は何も表示されませんでした
352 :
343 :2010/03/12(金) 21:25:59
数々のエスパーレスありがとうございます。
すみません、Wdhが読み込まれてない原因はHTMLのFORM文にミスがあったせいでした。
>>349 個人的にRubyの変数に型はないからString/Integerは気にしなくておkという先入観があったのですが、この先入観はトチ狂ってるのですね。
エラーは脱せていませんがおすすめの書籍と関連サイトで粘ってみようと思います。ありがとうございました。
変数には型はない。 オブジェクト(値・モノ)には型(クラス)がある。 これは、変数はどんな型のオブジェクト(値・モノ)でも指せるってこと。
>>331 へぇそうなんだ
riはファイル数削減のため削除した
ウィルスチェックを毎日フルスキャンする義務があるんで
消したらだいぶスキャン時間が短くなった
何度でも言われるがRubyの変数は箱ではなくただのラベル いつ剥がれるか(変数名で参照できる範囲)は決まってるが、貼る先のオブジェクトは区別しない
356 :
343 :2010/03/12(金) 21:41:39
わかり易い説明ありがとうございます。 なるほど、ラベルに入ったオブジェクトの型は明示してやる必要があるのですね。 アドバイス通りに検索するとすぐに解答がありました。 Wdh=cgi["width"].to_i として解決しました。
タコツボここに極まれり、か
そもそも型とかいう考え方は即ごみ箱に捨てろ
型(Type)だな 一時期オブジェクトの説明に間違って使われたタイヤキの鋳型(flask)が後を引いて…はいないか
>>360 あれは「型」という字にはタイプとテンプレートと鋳型の3つがあるということを失念した例示だったと思う…
タイプやテンプレート相当のものを持った言語を中途半端に習った人大混乱
この流れはすごいなあ というかたのしいRubyってタイヤキの例え使ってなかったか
>>362 うん使ってる
言われてみれば言葉の選び方的にあまりよくないな
鯛焼きのカタという言葉は「変数の型」を想起させて混同させる可能性があるのか
第3版が出ようかというときに新しすぎる知見だろそれ
鋳型ならいい?
タイヤキの型って、まさしく鋳型じゃない?
>>363 の言葉選びのポイントがよくわからん
>>363 型ってのはそもそも値の集合と操作の集合なので
別にRubyに使ってもなんもおかしくない
んでクラスとインスタンスは英語で言うところのaとtheの関係なので
タイヤキの鋳型とタイヤキでなんも問題ない
数学的な話ではなく、変数の型とクラスの型の2つの混同で
クラスを従来の変数の型のようなものとして誤解してしまう可能性があるという話では
>>356 のように
それは「変数に型があるかデータに型があるか」の話 型ってそもそもなによって話とは無関係
>>336 Windowsならスレッドがちゃんと動くが他のプラットフォームだと動かない、
とかいう罠があったりしたこともあるので、なかなか侮れない。
Unicode の U+2295 みたいな表記を Ruby1.8 で該当バイナリ文字列に変換する方法はありませんか
>>369 「U+2295」が文字列という前提で
(0.入力文字列の書式をチェックします。)
1.分割します。
U+ … ポイ
22 … 1バイト目
95 … 2バイト目
2.1バイト目と2バイト目をごにょごにょします。Array#pack() 、かなあ?
>>369 require 'nkf'
s = 'U+3042 U+3044 U+3046'
puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+(\d+)/){"#{$1};"})
>>371 > /U\+(\d+)/
16進数じゃない?
/U\+([0-9a-fA-F]{4,6})/
でいける?
>>371 間違ってるぞ
puts NKF.nkf('-w, --numchar-input', s.gsub(/U\+([\da-f]+)/i){"#{$1};"})
1.8では、量が多くない場合はNKFに頼るのが間違いないと思う 1.9だと簡単なんだけど
$ 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] うひょう
本来はiconv使うべきとは思うが、実用的なのはnkfだしなあ。
377 :
デフォルトの名無しさん :2010/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 :2010/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]
ライブラリのインストールに滅茶苦茶時間掛かるんだが なにこれ
gem search -r hoge searchっていちいち入力するの面倒いだけど、searchの短いオプションって無いの?
スレのバージョンお勧めに従わない人間は自業自得なのでスルー
>>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)
質問ですが、 PythonのPython Image LibraryみたいなRubyの画像処理ライブラリってありますか?
>>382 ありません
ImageMagickインストールしてgem install rmagickするしかないねえ
用途にもよるけど、既存のCで書かれた画像処理ライブラリを Rubyから呼び出して使うことが多いと思う。 RMagick(ImageMagickのライブラリを使用) Ruby/GD2(GD2を使用) Rcairo(cairoを使用) など。 ImageMagickは機能過多だ、サムネが作りたいだけなんだという 人向けにImageScienceというのもあるな。サムネ作成専用。
>>381 スレの勧めないバージョンインストールしておきながら
お勧めなら引っかからない基本的エラーで文句言うような人はスルー
というのが正しいかと思う
お勧めでなくても入り口以外で引っかかってるなら質問どうぞ
>>378 バグっぽい気がしたのでチケット切ってみた。 #2955
>>383-384 なるほど、ありがとうございます。
画像出力より入力の機能の方を重視したいので
PILと同程度のライブラリとなるとImageMagickをつかないといけないんですか・・・
FFIするならGIL辺りが良さそうですね。
参考になりました。
春休みスレ
>>388 間違ってるならあとから正せばいい
質問者には数時間くらいは待ってもらえるといいかもしれん
>>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"
あくまで例なのでコッチのほうがいいとか指摘してください
あんまりコマンドのエイリアスは設定しない方がいいって 誰か言ってなかった?
* 別の環境に移ったときになんぞこれってなるからエイリアスすんな派 * 自分好みに環境をカスタマイズしてこそUNIXのシェルだろJK派 どっちを選ぶも自由
393 :
66 :2010/03/13(土) 12:03:56
>>386 ありがとうございます!
文句を言いたいわけじゃなく、バグなのか仕様なのか自分の勘違いなのか自信が持てないから、
このスレを利用させてもらっちゃったんですが、相応しくなかったみたいですね。
すみません。
もう書くの止めときます。
394 :
380 :2010/03/13(土) 12:46:52
>>381 seaね、ありがとう
>>390 linuxを使っているならaliasを使うけど、
今はwindowsを使っているからそんな方法があるなんてわからんかったよ
>>393 1.9.1だったなら俺も
>>385 に同意だけど、1.9.2devは本スレが妥当じゃないかな
ライブラリが全然整理されてない印象<Ruby
うおお、ライブラリが全然整理されてない印象さんがRubyと喋ったぞ
<Rubyでなくて>Rubyだと思う 固定された意味はないけど 質問 エンコーディングプラグマ、通称マジックコメント、は、 該当するマルチバイト文字のようなもんが書かれてないようなライブラリを 自作して公開する場合はつけないほうがいい?
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\ はちゃんとあるんだけどね 環境変数が問題なのかな?
>>400 動かないのならエラーメッセージを貼っておくれ
スクリプトをダブルクリックして実行したのなら
コマンドプロンプトから実行して
おー、WindowsでQtライブラリ使ってる人初めて見た
rubygemsでインストールしたパッケージのヘルプってどうやって見れますか?
>>398 書かない場合は US-ASCII を指定したのと同義。
ASCII文字しかないなら書いても書かなくても結果は同じ。
8ビット目が立ったシングルバイト文字は入れてないよね?
正規表現の動作が変わるんじゃなかったか
407 :
400 :2010/03/13(土) 14:14:30
>>403 gemディレクトリ/ruby/1.8とか/doc/ の中にファイルが入ってるので好きなときに読め
ActiveSriptRubyの場合はC:\Program Files\ruby-1.8\lib\ruby\gems\1.8\doc\
>>407 require 'rubygems'
require 'Qt4'
>>406 US-ASCIIなソースにUS-ASCII以外のマジコメを書く場合?
411 :
400 :2010/03/13(土) 14:26:51
>>409 文法を覚える前にテストをするもんじゃないですねwww
助かりました、ありがとうございます
>>403 HTMLファイルでいいならシェルから
gem environment
した出力の
- GEM PATHS:
の1行目(になかったら2行目)の場所の doc ディレクトリの中に
#=>って習慣なの?
習慣かどうかはしらん ふつうコメントの直後にスペースをひとつ挟むから # => value だよな はちどりのRuby本もそうなってる
個人的にはあまり好きではない まあ、書籍向けの表現だと思う
gem install -r XXXX ERROR: could not find gem XXXX locally or in a repository 何これ?
文字通り。
420 :
413 :2010/03/13(土) 17:37:04
>>419 linuxでそう入力しただけだけど
得にそれ以外に何もしていない
421 :
420 :2010/03/13(土) 17:37:46
422 :
420 :2010/03/13(土) 17:39:28
ごめん、ただのスペルミスですたorz
まずはgem search- rを使うんだ、でその結果から選ぶがよろし 自分で入力せずに素直にbash,zshの補完機能に頼った方がいいと思う
他の言語のisXXXメソッドは、XXX?とrubyではなってるみたいですね 三項演算子とかと一緒に使うと読みにくいと思います お前らはどうやっていますか? return windows.visible? ? 値A : 値B
それほどでも・・・ return (windows.visible?) ? 値a : 値b
ぶっちゃけ、うっかり window.visible? A : B と書いて怒られることはよくある。
427 :
424 :2010/03/13(土) 22:13:57
そんなもんですか そんじゃ気にしないようにしますわ
条件演算子はぶっちゃけそれほど使わない 不自然感を感じてるうちにifとかに書き換わるのでむしろラッキー
include Enumerable した場合、自分のクラスで each を定義しますが def each @array.each do |e| yield(e) end end def each(&block) @array.each(&block) end どちらが好ましい書き方なんでしょうか?
後者 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 :2010/03/13(土) 23:43:14
前者は昔の名残だね。
前者は return @array.to_enum unless block_given? を最初 にやればよさそうだけど、今回は無理に使うこともないな。
javaかC++のプログラマのための、Ruby入門のサイトを教えてください
C++やJavaの特有事情は忘れて勉強したほうが習得はうまくいきそうな気がする それこそBasicの制御構造レベルの知識だけある人のほうが吸収早そう
>>424 return windows.visible?? a : b
疑問符を二個つなげてすげー疑問って雰囲気を醸し出す
>>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]
/あ
440 :
66 :2010/03/14(日) 07:03:08
春休みで盛況だなw
moduleってパッケージとMixinを、実現するための予約語なんだよね Mixinは実装を持ったインターフェイスみたいなもんだから、 moduleはmoduleを継承する事ができるの?
>>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 よくねー
人間を継承した俺がいたとして、翼が欲しいと思ったら
class 俺 < 翼
end
するのか? 俺は翼の一種なのか? 俺は翼の子分か? 人間且つ翼の俺って何?
翼って機能だろ
class 俺
機能追加 翼
end
とするのが筋だろ、わかりやすいし、渾然一体になる継承よりは機能外すのも簡単そうだ
だから翼はモジュールにして、includeで追加する
実際は
俺 = 人間.new(params)
俺.extend(翼)
とするのが妥当ではあるがまあ細かいこと気にするな禿げるぞ
447 :
442 :2010/03/14(日) 13:12:23
○引数で複数のディレクトリパスを与える ○与えられたディレクトリに対して再帰的にファイルを全て削除する ○ただし.txt拡張子が付くファイルのみ削除しない プログラミングに不慣れながらこんなスクリプトを書こうと思い、以下のようになりました。 #!/usr/bin/ruby require 'fileutils' ARGV.each do |i| FileUtils.rm(Dir.glob(i + '**/*[^(txt)]'), :force => true) end 突っ込みどころなどありましたら教えていただけないでしょうか。 簡単なテストをすると意図したように動くのですが少し不安なので質問させていただきました。 自分で怪しいと思ってる箇所は以下の2箇所です。 @ i + '**/*[^(txt)]' こんな指定の仕方でいいのだろうか AそもそもFileUtilを使うべきなのか 宜しくお願いします。
>>448 他のスレから飛ばされてきたなら、
飛ばされましたって書かないとダメだよ
Dir.globのワイルドカードはあまり知らんが(Windowsユーザーなもので) 否定形なのはRubyでやったほうが無難だと思う Dir.glob(i.sub(/\/?$/,'/**/*')).reject{|e| test(?d,e) or e =~ /\.txt$/i}
i ってなんだろう? そもそもグロブでいいのか。
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
*[^(txt)] は、 最後の文字が 開き括弧 でも t でも x でも t でも(アゲイン) 閉じ括弧 でもない という意味になるんじゃないか?
>>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
$ 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"]
はいはい勘違いゴルファーは帰ってね
[^(txt)]を検証しただけじゃね?
マニュアル嫁でよくね?
どっちでもいいよ…
ここは初心者スレだろ? テンプレ読めない奴はカエレ 暴れるなら本スレでやr
検証が漏れてないかどうかはどうやって検証すればいいのかという
rmdir -rで綺麗さっぱり消せばいいのにw
RubyをWindowsで開発環境構築する方法教えてください。 OSはWindows7です
開発環境ってたとえばなーに
>>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 < 正規表現活用)ですし、プラットフォーム
毎に微妙な挙動差も考えるとムダにドツボにはまりそうですし、(少なく
とも「初心者」は)あまり積極的に使わない方がよくない?
>>468 書いてるあなたがすでにglobの罠にはまっているという。
再帰的に走査したいんだよ。> **/
Dir.glob('**/*') は許容されるべき というか普通はこれしか使わない 残りは返ってきた配列に入った文字列を正規表現とかでどうにかする 短く1行で書かないと家にいる妻がスナイパーに撃たれるとかそういう時にのみグラブ条件を書く
1行記述を強要する妻かw
472 :
468 :2010/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
いや恐妻家なんだろうw
要求を呑まないと何も知らない家族が射殺されるというのはわりとポピュラーな展開かと グラブ文字処理はメソッド独自だから、明白な全抜き出し以外は正規表現などを駆使、という方向性は妥当 グラブ処理の時点で小細工すると後々遺恨になるぞ
なるほど
>>466 まずはテンプレくらい嫁よ
・ActiveScriptRubyをインスコ
・るびまのchmをダウンロード
・NetBeans IDE(統合開発環境)をインスコ
これでなんとかなるだろ。Rails開発ならcoLinuxかPortableUbuntu入れろ。
>>466 あ、あと、c:\Program Files\以下にはRubyをインスコしない方がいいみたい。
RubyGemsが動作しないとかの報告があった
(今のバージョンはどうかしらん)
ねこび〜ん勢力の工作を検知しました
Windowsでも、XPなら c:\usr\local\ruby とかにインストールした方が精神衛生上よろしい気がする UACとか入るとそう簡単にはいかないんだろうけど
>>479 ねこび〜んはダメだね
コードの補完が遅すぎて使えない
array = [1,2,3,4,5]とすると配列ができますが、わかんなくなりませんか? javaとかだったら、IDEが配列だよって教えてくれるけど やっぱり、最初にこうするべきなんですかね? array = Array.new
>483 ならない Array.new はリテラルに比べると遅い。
>>477 >・るびまのchmをダウンロード
リファレンスchmならASRに同梱されてたはず
それと初心者スレでるりまとは呼ばない方がいいよ
486 :
483 :2010/03/15(月) 14:27:49
a = [1, 2, 3, 4, 5] はわけわかんなくならないが hogedata = [] は hogedata = {} との区別がわけわかんなくなることはある ので、そういうときは hogedata = Array.new と書くことはある 要素が入ってれば配列なのか Hash なのかは一発なのでわざわざ初期化なんてしない
>>485 > それと初心者スレでるりまとは呼ばない方がいいよ
なんで?
というかるりまるびまってなんですか?
ここは大喜利すべきか
まあ、マニュアルという認識でいいよ chm形式のマニュアル読んでれば十分
>>488 マイナーな専門用語は避けるべき。初心者スレだし。
>>488 まさにこの流れが理由
るびまと区別がついてないならなおさら
何やら貢献できたようで何より 1.9.1は初心者向けじゃなかったのかー 今まさにダブルクリッコするところだったぜー ここに来てよかった ってことでActiveScriptRubyなるものをダウソしてきます
ここIDないのね 494は489の人てことでw
質問です エクセルで書かれた名簿を整理して出力するプログラムを書いているのですが、 名前、郵便番号、住所の分離が上手くいきません 与えられた名簿は半角or全角スペースで区切られているのでsplitを使おうと試みているのですが、 例えば以下のように記述すると"―"や"県"が消えてしまいます puts '山田 太郎 〒0000−0000 山田県山田333-333-333-333'.split(/[ 〒]+/) 何か良い知恵があればなにとぞご教授お願いします ちなみに元のプログラムではputsせず、分離後にある配列に入れています
497 :
496 :2010/03/15(月) 17:34:18
追記失礼します rubyはver1,87を使用しております
>>496 Excelってことなので、WindowsでSJISのソースコードとして、
スクリプトの先頭に
#! ruby -Ks
もっと推奨の方法があったかもしれない
499 :
496 :2010/03/15(月) 17:51:44
>>498 ご教授いただいたとおりにしたところ速やかに改善されました!
ありがとうございます
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だとそのような問題は起きない(のかな?)
るびまってRubyのマニュアルのことだったの? Ruby Magazineの事だと思ってた
るびま:Rubyist Magazine るりま:Ruby reference manual Ruby Magazineだと思いこんでると、無関係な記事が多すぎるように映るかもね
>>501 どっちでもいいよ
いやよくはないが
初心者的にはるびまは読むべきではない
古くて有害な情報が渾然一体となっている
Rubyinstか。失礼。 上のほうよく見たらるびまとるりまの区別が付いてない(人がいる)って話だったのね 読み違えてたわ
まだ間違ってるぞw
508 :
496 :2010/03/15(月) 18:29:54
>>500 亀ですが、ありがとうございます
これを気に文字コードにも意識を向けてみます
くっ Rubyist
includeは名前空間を使えるようにするものってことで、おk? C++@namespaceみたいな感じ
なんというか include はふつうに include だと思うのだが 既存言語の機能になぞらえないと理解し難いほど複雑難解な概念なのだろうか
includeの動作的には本当に
>>444 だよね
メソッドを探す順番の指定をする方法のひとつ
モジュールの存在理由のほうがムズカシイかもしれない
514 :
510 :2010/03/15(月) 20:34:24
読んでいた記事が間違えていたらしい 本当の使い方は、結局なんなんだろ? Mixinを実現するためにしか使わないのか
モジュールは、メソッドを用途ごとにまとめるためのしくみ メソッドがあるだけで、オブジェクトには依存しない機能のカタマリ 共通の機能をメソッドから追い出して別途メソッドを作るのと同じように、 共通の機能をクラスから追い出して別途モジュールを作る(でincludeする)というのも妥当
516 :
デフォルトの名無しさん :2010/03/15(月) 20:45:11
Mixinのためと単なる名前空間のため両方に使われる
517 :
510 :2010/03/15(月) 20:54:21
プロパティも実装されていない糞言語
それで遊んでくれるのはPythonスレぐらいだぞ ここは意外とDRY
クラスインスタンス変数とは、そのクラスオブジェクトの特異クラスに属する インスタンス変数という理解で正しいですか?
ごめん、さっき違うスレで質問したけど理解してなかった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って何が違うのさ?
理解してたらああは言わん クラスインスタンス変数はクラスオブジェクトが存在する限り存在する 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
特異メソッド上で書くからわかりにくい? class Hoge @hoge2="hoge2" end p Hoge.instance_variable_get(:@hoge2) は "hoge2" を返すよ
"プログラミング言語 Ruby" のp.326のなかほどに クオート文字列にマッチすることを意図した正規表現の例が以下のように 載ってるんだけど,文字集合内で番号指定後方参照ってできたっけ? /(['"])[^\1]*\1/ わがRuby1.9.1ではこうなった re = /(['"])[^\1]*\1/ p %('\1')[re] #=> nil p %('hoge'hoge')[re] #=> "'hoge'hoge'" いちおう念のために言っておくと クオート文字列にマッチする正規表現を求めているわけじゃなくて 文字集合内で後方参照や部分式呼出しができるか否かの確認ね
globってワイルドカードでも正規表現でもないのか なんでこんな面倒なもん作ったんだ
いや、zshの**を取り込んでるくらいで、 ワイルドカード(UNIXシェルの、だが)だよ。
ああ勘違いしてたわ txtだけはじかれてるのかと思った
ほぼワイルドカードじゃね?
あら遅レス失礼した
globにlsコンパチの引数受け付けるようにしてくれ
>>532 UNIXで誰がファイル名展開をやってるか知ってるかい?
えっ? 誰かがやってるなんてことあるわけないでしょう?
echo *
もうshellの機能をrubyに組み込むべきだなw login shellを/bin/rubyshにできていいかもしれないw
RubyShell って面白そうだな。 誰も使わないだろうけど。
RashだかRushってシェルがなかったっけ
イラネ
とある人のウェブページに、perlをログインシェルとして使ってみた報告があるぞ。 一度読んでおくといい。
いやRushが既にあるから
コマンドライン引数は定数じゃないの? 普通に文字列を代入できるんだけど
>>542 Rubyの定数は、警告 warning: already initialized constant ARGV
は出るけど代入自体はできる。
あ、あと、 ARGV << 'hoge' なんてのは「定数への代入」じゃないからな。
$ 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'
代入はできるけど、データのコンテナとして ARGV を使うのはおすすめはしない ただ、これは グローバル変数と定数を使う→ クラス変数を使う→ インスタンス変数だけを使う→ 全部引数での受け渡しにする→ 引数の数が大量になって鬱陶しいのでアクセサメソッド経由のインスタンス変数と引数の併用にする というような変遷をどうしてもみんな辿るので今はまだ気にしなくてもいいとも言える
546 :
542 :2010/03/16(火) 12:25:44
とにかくコマンドライン引数には入れるなってことでしょ
def hoge= この=って何?
>>547 そのまんま
「hoge=」 という5文字の名前のメソッド
ただ、末尾に = があるメソッド定義を Ruby は特別に扱うので、引数つきで定義しておいたほうがいい
あと、foo.hoge = と = の前に空白があっても、Ruby はとりあえず foo のメソッドの中から hoge= を探す
foo.set_hoge(v) とするよりも foo.hoge = v と書けたほうがなんかわかりやすくね、という理由で特別扱いされてる
「プログラミングRuby 第2版 言語編」ですが、今から読むには 古すぎますか?それとも第3版が出て、絶版になる前に読んでおく べき? たのしいRuby、Well-Grounded Rubyist、初めてのRuby は読みました。
>>548 >「hoge=」 という5文字の名前のメソッド
通常の方法では代入文でしか呼べないから、ただのメソッドではなく演算子定義の一種と見た方がいい
一応引数無しでも定義できるけど__send__使わないと引数なしでは呼べない
Rubyのユーザーは学生と暇人が多いのか? C/C++のスレには全然書き込みが無いんだけど Rubyは簡単だから、学生に人気があるのかな
最近質問が多いね、春休みなんじゃないの? まあ俺も春休みだけど。。
去年からずっとやすm
仕事探せ
学生と暇人とニートがいないとプログラミング言語は成長致しませぬゆえ
学生と暇人なんて放っておいても沸いてくるんだから 無職連中はとりあえず生活基盤作れ
暇な香具師を無料で奉仕させてこそオープンソースだしな。
>>549 初めてのRuby(yugui本)を読んで自分のものと出来たのなら
好きに進んでいいよ。
Rubyはいつになったら仕様が固定されるの? 安心して使えない
1.8 は少なくともあと5年は使えるな。
>>562 レスどうも。
ツール作りでもしてみます。
本の内容が新しいかどうかという話なら、新しくはない 1.8.7の1.9新機能入りプログラミングができないというのはなんとも歯痒い が、それはWebの情報でアップデートできる程度なので問題はなさそうかも むしろ最初からこれ教えたら混乱しそう
ちなみに今から使い始めるならどのバージョンがお勧めなんだ
始めるだけなら 1.8.7 の最新だと思うが、 最新(p249)はString#inspectで最後の多バイト文字が文字化けするという デバッグや実験中に微妙にイラッとするバグがある。 気になるなら p174 で。 1.9系は夏に1.9.2が出るのでそのときまた判断だな。
やっと1.9sp2が出るのか。
それはまだ 1.9正式が出ただけ sp1が今度出る
>>571 $KCODE を設定した上で p で日本語を表示しようとした場合に最後の文字がバイト列のままになる
だ
p で日本語を表示しようとさえしなければ問題はないし、俺は表示しようと思ったこともない
というかむしろ p を使うような事態のときは1.9でもデフォルトでバイト列表示しろやわかりにくいわぼけー
どういう日本語を普段扱ってるかで違うんだろうな、このへん
p の意義からしてエンコーディングを考慮するほうが正当 ShiftJIS 文字列とか表示されて端末乱れるのはイラッとくるが
オブジェクトを機能拡張するためにモジュールで拡張したんだけど さらに状態の保持が必要な機能追加がしたくなった モジュールへの修正じゃ対応できないの?
require 'Hoge' include Hoge なんで、requireにはシングルクォートを付けないと怒られるのに includeには付けなくても怒られないの? たまたま、そうなっただけなのかな〜
>>577 require は基本的にはファイルパス
実際のファイルの大文字小文字が考慮される
(が、あまりにも面倒なのでファイル名の時点で小文字だけにしようという取り決めがある)
include の引数はモジュール名、つまり定数
>>576 すれば
include はするたびにその順番に機能する
require 'Hoge' は主ファイル名だからじゃね?
582 :
576 :2010/03/16(火) 19:47:24
>>579 (and all)
どうすれば状態を保持できますか?
状態って何
>>577 requireも単なる関数的メソッドとして実装されているのも理由の一つ
Hogeというキーワードはrequireの実行を終える前には当然定義されていないし
予約語でもないから、リテラルを使うしか渡す方法(requireメソッドを実行する方法)がない
「Hogeをrequireしろ」「Hogeってなんだ?」
「Hogeを読めばわかる」「だからそのHogeって何だよ」
NameError: uninitialized constant Hoge
Symbolでもよさそうだけどそのへんは
>>578 なんだろう
585 :
576 :2010/03/16(火) 20:01:14
もともとのオブジェクト以外に追加の情報を保持したいんですが たとえば配列クラスに最大値を保持するなど
>>585 エスパー発揮で
obj = [1,2,3]
obj.instance_eval{ @mymax = self.max }
obj.define_singleton_method(:mymax){ @mymax }
p obj.mymax
なんか頭の悪そうなコードですまん
>>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 :2010/03/16(火) 21:18:59
では言い直します。 自分で書いたクラスのオブジェクトに追加の情報を持たせるには、 継承したり別のクラスに包含すれば可能だけど、すでにModuleで拡張しているので そこはできるだけ触らずにModuleに少し書き足す程度で実現できないか? Module内でインスタンス変数的な情報を保持する何かを定義できないか?
>>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
>>586 Moduleの使い方・考え方が間違ってるような気がするなあ
あるクラスがModuleをincludeした時点でそのクラスのインスタンスは
存在していないわけだからインスタンス変数を設定したり保持したり
できないでしょ
アクセサの定義ならModuleでもできるけど
module M
def data
@data
end
def data=(arg)
@data = arg
end
end
class C
include M
end
591レス目 ズレている人はレスデータの再読み込みをしてください
592 :
576 :2010/03/16(火) 22:01:45
それだとobj.barを書かなければいけません。 質問は、Module内を書き換えるだけで、外側には一切手を加えずに@fooを初期化できるかということです。
なにその出来の悪いGUIのリストみたいな現象
module内でinitialize書き直したら?
ほんとにできない?
597 :
576 :2010/03/16(火) 22:18:32
>>590 インスタンスが作成された時点でincludeされたmoduleを通して
何かしらinitialize的メッセージが送られるようなことは無いよねって話です
あるいはC言語で言うところのスタティック変数は無いよねってことでも結構です
>>594 もう試した
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
>>595 めんどくさい、が正解だと思う
include先が継承とかしてたらsuper呼ばんといかん
600 :
576 :2010/03/16(火) 22:51:09
>>598 すばらしい!!
ありがとうございました。
読み込むモジュールを変えるとinitializeが スイッチされるってのは面白いかも なんか騙されてるような気もするなあ
まあ、あまり性質のよいものではない
複雑なマッチ条件を使いたい場合、 if /hoge/ =~ obj.str and /huga/ !~ obj.str and ... と延々と続いて見づらいのですが、スマートに書けますか?
>>603 メソッドにしてしまうのがひとつの手ではある
基本的には全部書くしかない
自分が時々やるのは match1 = obj.str =~ /hoge/ match2 = obj.str !~ /fuga/ match3 = obj.str =~ /fuge/ if match1 and match2 and match3 body_stmt end こう。 でも条件分岐だけで10行超えるなら独立のメソッドにする
なるほど。ありがとうございます。
&&= 使った方が無駄なマッチングがないんじゃないかな。 正規表現のマッチくらいでそんなに重くなったりしないけど〜。
>>481 aptanaよりは軽いぞw
そもそもRubyの文脈考慮するコード補完でまともに高速に補完できるIDEみたことない。
俺もそれは困っているし、もっとよいIDEがあればぜひ教えて欲しい。
irbとかJavaとかC#みたいにバンバン補完できればいいんだけどねー。早々簡単にできないのわかってていってるけどw
テキストエディタレベルの単語補完ならばNetBeansでも高速できる(デフォだとたしかCtrl+K)。
現在の単語に続く語を見つけるだけならEmacsでも超高速でできるぞ
>>609 もちろん、vimでもxyzzyでも単語の補完はできるけど、
>>481 はそういうこといってるんじゃないんだろうし
インテリセンスみたいなやつだろ
>>575 > ShiftJIS 文字列とか表示されて端末乱れるのはイラッとくるが
これは 1.9.2 の改善点の一つ
実行しているスクリプトが置かれているディレクトリを調べる方法を教えてください
__FILE__
File.dirname($0)
Dir.pwd
617 :
613 :2010/03/17(水) 11:25:40
絶対パスで欲しいんですが
expand_path … は内部で呼ばれてるからいらないんだっけか
ああ、やっぱいるよな
>>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"
>>481 >>608 NetBeansの文脈依存補完ってどのレベルまで補完してくれるの?
変数の参照先オブジェクト(のクラス)を推測したり
メソッドチェーンの返り値を推測して
続きのメソッド名を補完できたりする?
>>618 だいぶ前にあったのは expand_path の基点となる第2引数が自動で dirname されてるという話だと思った
dirname の中で expand_path が使われるということはないように見える
622 :
613 :2010/03/17(水) 11:51:55
$0 と __FILE__ ってどうちがうんですか?
$0 は実行中のスクリプトのファイル名 __FILE__ はそれが書かれているファイル自身のファイル名 スクリプトファイルを実行した場合は両者が一致する。 requireなどで他のファイルから読み込まれた場合は一致しない。
相談です。
ttp://www.rubylife.jp/ini/japan/index5.htmlのページにある 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 ')'
と表示されます。
でも「表示する」の部分を「日本語で表示」に変えるとちゃんと文字化けします。
原因がプログラムで解決できるものなのかエディタを変えないといけないと解決できないのかも分からないので、
どうしたらよいかを教えてくれないでしょうか?
俺はこのサイト(正確には「このチュートリアルサイト群」)はあまり好きではない
初期のSEOがあまりに迷惑で悪い印象が残ってしまっている
はともかく
>>625 あんま気にするな
表示する端末のサポートするエンコーディングと
文字列のエンコーディングが合致していないとまともに動作しない、が本質
ぶっちゃけ、日本語文字列を直接書いてしまったファイルが、-Ks などのエンコーディング指定なしで
日本語文字列を含んだRubyスクリプトとしてきちんと解釈される保証はない
「うわーまともに動いてねーよ」と納得したら次のステップに行ってよし
回答ありがとうございます。納得してから気にせず先に進みたいと思います。 どうしても出費を抑えたいのでそういったサイトに頼っているのですが… 自業自得か。orz
文字列変えるだけでパースエラーになったりならなかったりってのは エンコーディングの不一致とは関係ないんじゃない? 表 (SJISのダメ文字のひとつ) の位置が問題なのかな。
629 :
デフォルトの名無しさん :2010/03/17(水) 12:41:59
RubyってWindows用だといろいろあるじゃないですか Linux用の場合は1つしかないのでしょうか? このへんであまり考えたくない為、もしLinuxで1つしかなのでしたらLinuxで始めたいと思います。
それエンコードの不一致でおきる問題ですがな
>>629 1.6.x
1.8.x
1.9.x
いろいろある
Rails のバージョンによってもさらにバリエーションがw
>>629 まあ動作的にはひとつとみなしてよいかと
少なくともWindowsのような面倒なことはない
Windows 版のどこがどう問題なのですか
スレでWindowsという文字を見ると不機嫌になってしまうおじちゃんからいじめを受けます
Windowsで使いたければPython使った方が良いんじゃない? RubyはWindowsのメンテナが不足気味。LinuxかMacで使うべき。 Rails だって Windows はサポートしてなくて、今までたまたま 動いてたけどいつの間にか動かなくなったとか聴いた。
ほらな
漏れもそう思う RubyはWindowsと相性が悪い Pythonの方がWindowsとの親和性は高い *nixの場合はどっちでも相性が良い つまりPython>Rubyであって Rubyを選ぶ理由がないんだよなぁ
つまりC#最強ということですね
Pythonってインデントで書くから気持ち悪い
VBみたいな記述のRubyのが気持ち悪い
end ってw
Rubyはプログラミングと関係ない部分で手間がかかる
>>637 そんなポータビリティが常に必要か?
たとえばMacOSXで動作しないバイナリを吐く言語で書く意味は何?
うん、あなたはRubyをWrite once, run anywhereの再来だと吹き込まれたのかもしれないが、それは違う それを暴いたのは俺たちかもしれないが、殴るなら暴いた人間ではなくあなたを騙した人間を殴れ
IronRubyが出る頃には、まともになってる?
>>644 似たようなものに「Rubyは初心者にも簡単」があるな
パソコン初心者やプログラミング言語初心者の人にとって独習可能なほど易しいとはそれほど思えない
初期(または現在も)の謳い文句に「Cで拡張ライブラリを書くのも簡単」があった これも 「(動作上速度等で不満があれば、あなたが使い慣れている)Cで拡張ライブラリを書くのも (たとえばこんなふうにC言語でずらっと書けばほら)簡単」 という意味だったからな 初心者として想定しているレベルがそもそもぜんぜん違う C言語をある程度使えることは当然だし、Perlや主要UNIXコマンドの動作を知っていることや 文字エンコーディングの知識をもっていることも当たり前とされている (初心者の想定としてはワークステーションの使い方教えられて慣れた感じの大学3年生くらい?) それはマニュアル見れば一目瞭然 「Cのあれ」「コマンドのあれ」「Perlのやつ」という表現ばかりだ 最近は文章上は若干表現が砕かれたが、知識として知っていることが前提なのは何も変わらないのでむしろ
隔離スレに帰れ
質問スレだしなあ ・ Ruby自体は便利 ・ ただしコンピュータ初心者やプログラミング初心者が独習可能なほど易しいかは怪しい ・ Windows上ではあまり便利ではない ・ Rubyは便利だが、儲かることや役に立つこととは別の便利さ こんな感じ?
・ Rubyは自分のため ・ Javaは給料のため ・ Pythonは他人のため ・ Rubyがコンピュータ初心者やプログラミング初心者が独習可能なほど易しいかは怪しい ・ Rubyは自分のために使うと便利だが、Windows上ではあまり便利ではない こうだ
Windows上で便利に使いこなしてるおれは勝ち組
Ruby厨っていつも言い訳してるよねw 便利ってなんだよw まともなIDEもないのに便利も糞もあるか ライブラリはバグだらけで使えない バージョン変わると言語仕様も変わってソース書き直しw
>>620 (NetBeans勧めておいてなんだが)文脈依存補完は重くてあまりつかってないんだが、
あまり優秀でない感じがした。irbの補完とどっこいどっこい
静的型付けの言語みたいに hoge.(ドット) ってうっていきなりリファレンス替わりにいきなり補完の候補だして
書き始めることはできない感じだった。補完速度の遅さももちろんあるが、候補が多すぎる。
メソッド名途中まで書いてからならかなりしぼれる。この辺はirbもそうだけど。
どんな技術で補完してるかは詳しくないので公式サイトなりでも調べてもらった方がよい気がする
なんか春を感じるな
>>646 (Windowsユーザー以外の、パソコン初心者以外には)「Rubyは初心者にも簡単」
>>655 それは初心者とは言わない
コンソールでちまちまやっているのが日常のやつなんて一部
それなのに「初心者がはじめるにはどの言語か」という発言だけで
Rubyすすめるバカがいるからな
>>656 あれは意図的な悪意だろ
俺らが止めることはもはやできない
>>625 です。エディタので文字コード指定再読み込みをUTF−8
でしたらちゃんとエラー表示がなくなり日本語が表示されましたので一応ご報告を。
なんでもできるなら迷わずC#だな これでできないことはないし 非常に便利 Rubyのどこが便利なんだよwwアホかw
これから学ぶならPHPではなくパイソンかルビーがオヌヌメ って記事読んでこのスレに来たけど騙されたか・
>>661 C#がいいよ
未だに進化し続けている言語はこれぐらい
>>662 Pythonは進化は一休み宣言してる
Rubyは進化のためなら互換性を切り捨てることを厭わない
>>661 これから( のために)学ぶなら( な)PHPではなく
( な)パイソンか( な)ルビーが( の点で)( な人に)オヌヌメ
これが全部埋まってないようなものは与太
信じるほうが悪い
女に嫌われるタイプだなw
PHPっていらない子なの?
むしろRubyは初心者向け言語ではない難しい言語だっていう イメージをもっと広めてもらいたい Rubyが超得意ですキリッっていっても 初心者向け言語ねプッ初心者いらね とあしらわれるのが現状の就職戦線だからな
rubyをやる気なくしてきた…(´;ω;`)
今のところプログラムの話題なし Ruby擁護レス、批判レス、バグ報告レスだけ
Rubyで就職狙うなんてありえんわww これがWindowsもないころなら 簡単と言ってもよかったがな 今更文字処理得意ですなんて言われてもな 真っ黒い画面で文字打つだけって最近のガキじゃ無理だな
Rubyをやりたくてやるんじゃない、やってしまうのがRubyist
>>671 加齢臭がします><
>真っ黒い画面で文字打つだけって最近のガキじゃ無理だな
小学生でも出来るよそんな事^^
Rubyistはスキルも性格もいいので開発メンバーからは良くたよりにされる だがたよりにされたいからRubyをやってもダメだと言う事が最近わかった Rubyをやるのは真にRubyistの人だからRubyをやりたくてやるんじゃないやってしまう者がRubyist PHPerはざんねんがはっきりいってスキルはつかわないし性格も裏メールとかイマイチだから信頼されにくい
つまんねっていってるんだよ C#ならいきなりGUIが作れます
>>674 妄想乙
Ruby信者は各スレを荒らしている
キチガイばかりが集まった低脳集団
だから就職でも嫌われるんだよ
ブロントさんネタがどこでも通じると思ったら大間違い。
>>661 >>669 結局、用途によるよ
(異論はあるだろうが)初心者=Windowsとして・・・
・ちょっとした文字列処理とかの書き捨てるようなスクリプトには便利
・mechanizeとか使って、コピペサイトや2chからエロ画像とか自動収集してきてzip化!!1とかに便利
・かっちょえー、webサービス作りたい!!11とかならcoLinuxかVMWareか入れてRails学ぶ
・別にちょっとしたCGI的webアプリならRailsじゃなくてもいい(やってる人はやってる)
他の言語でもできる、と言われたらそうだけどw
「Rubyはプログラミングを楽しみたい人のための言語」というように言われるが、それはあるとおもうよ。
(ただし、環境整えるの面倒とか、Windowsでこのライブラリ動かねーとか普通にあるのはおいておいてだな)
Ruby信者=C++も使えないバカ ここはC言語わからなくて逃げ出しちゃった子の巣窟
一人変なのがすみついたな・・・
初心者スレでここは云々言われても
ぶっちゃけ、ここが本スレじゃないの?
ぷ
>>678 それぐらいならC#で余裕で出来るな
まずインストールでこける
無事インストールできてもRubyは日本語リファレンスが充実していない
サンプルがない
ユーザー数が少ない
Rubyスレは低脳ばかり
就職で使えない
特異言語のRuby覚えても他の言語で応用が効かない
ライブラリはバグだらけ
メンテナンス作業をするために時間をとられてWindowsユーザーはまずプログラミングに集中できない
初心者=Windowsユーザーではない
大部分の初心者がWindowsユーザーということだ
まともにレスするのが馬鹿らしくなってきた。。。
>>684 C#スレから来ました
スレとは関係ないんですが、もしかしてニートですか?
僕も30歳ニートです。
>>678 仮想osにubuntuでも入れれば使いやすくなると言うこと?
将来性の面ではrubyはいいと言うのをよく見かけるけど、
これに関しては他のと比較してどうですか?
> Rubyはプログラミングを楽しみたい人のための言語
個人的にはこれが気になる。
趣味だから楽しんでなんぼだし
楽しくないよバグだらけで GUIすらまともに作れない IDEもないじゃねぇ
オーケー IDEをNGワードにした WIDEとかAIANMEIDEN(ローマ字綴り)とかの話題をしないようにお願い
>>687 とりあえず仮想OSの話だけ。
webアプリ作るのに便利なRailsというRubyで動く代表的なwebフレームワークがあるんだけど、
それを使うには仮想OSやcoLinuxでUbuntuでも入れた方が、格段にトラブルが少ない、ということ。
Railsのコア開発者がそもそもWindows使ってなくて、Windowsだとイマイチ不安定だったり起動が遅かったりするのと、
Windowsでそのまま動かせないライブラリなんかがあったりする。
最終的に動作させるOSもUbuntuとかのUnix系OSになるだろうし、
仮想OSにUbuntuかCentOS入れて開発した方が楽ということ。
ただし、そもそもRailsは共有レンタルサーバーだと動かしにくい(というか重い)のに注意。
だからRails使わずにCGIで頑張って作ってる人もいることはいる。Railsばかり注目されて目立たないけど。
ちなみに、ちょっとしたスクリプト書いたり学習する分には別に仮想OSじゃなくても問題ないだろう。
I.D.Eもない糞言語なんて今時やってられるかよ 真っ黒い画面で文字打つだけで何が便利だよww どこが楽しいんだよwww笑わせるなww
ID欲しいな。 IDEは別にいいや。
この荒らし他のスレでもいるっぽい?数日続くようなら後でまとめて運用に報告してくるんで、スルーしといて下さい。 下手にレスしてまきぞえ規制くらってもしらん
批判されると荒しとかどんだけゆとりなんだよ
>>693 C#スレにコピペ荒ししたのお前だな
報告しておいたから
コア開発者というのはだいたい10人くらいなのだが、その半分くらいはWindows使ってるはず。 Windows向けのコードも数人書いてるし、定期的にビルドもされている。 Windowsで遅いってよく言われるのは、バイナリモードの話と、プロセスの起動が遅いって話じゃないかな。 前者はFAQだし、後者はcygwinのconfigureで顕著だけどWindows自体の話だからどうにもならん。 Windowsで動かないライブラリがあるのはその逆も真なはずだからいいよね。
>>697 1.8.7-p160のような話も混じってるのかもね
ライブラリの不満は動くかどうかよりも
バイナリが用意されていない(gem install一発で使えない)のほうが多い気がする
もしかしたらASRでも一発でいける方法・設定があるのかもしれないけど俺は知らない
てかRubyがJava|C++|C#|Pythonじゃないって、だからなんなのって感じ
>>699 PerlやPHPもIDEがないから流行ってないんだよきっと
ぶっちゃけインタプリタで最強なのはPHPしかないよ Rubyはメモリ関係が弱いって言うじゃんしかもWinは動作保証してないんでしょ Pythonはあの独特なコーディングと日本語訳がないから英語読めない人お断りじゃん
IDEらっきょ
いや別に最強とか決めるためにプログラム言語使ってるわけじゃないんで
ASRをインスコしてデスクトップのショートカットをダブルクリックしたら コマンドプロンプトが起動した… WINのrubyってコマンドでプログラム書くの? 自分は何か致命的なミスをおかしてますか?
>>705 なる
もーちょっとあちこち見て回ります
>>704 文法に沿って書いたテキストファイルをruby.exeに読み込ませると
ruby.exeが必要なRuby用ファイルを読み込んで
テキストファイル内で指定された動作を対象ファイルとかに対して行う
動作を指定したいことがないような人には無用の長物
>>704 あれはRubyを実行するのに都合のいい設定済みのコマンドプロンプト
>>704 コンパイルするときいちいちコマンドプロンプトで
ファイル名書いてやらないとだめだよ
またライブラリ使うとオプションも書かないとだめだし
何度もテストするのにいちいちファイル名を文字入力しなければならない
スレ住民一同苦笑しております
しまったコンパイラじゃなかったわ
>>707-709 ども
開発環境はRDE?
なんか上の方でRDEは嫌われてるっぽいんですが
というか仮想OSでUBUNTU辺りでやった方が良いの?
もーなにがなんだかw
>>710 ここで自分の質問が問題あるならこれをもってROMに戻ります
問題あるならここにでも行って帰ってくんなと言う誘導でも下さいね
>>712 RDEはRuby無関係のRDE固有のトラブルを自力で切り分けて解決できる人向け
「普通のRubyではできるのにRDEでは違うということはRDEが悪い」という判断ができないと無理
基本はテキストエディタさえあれば作成は可能で、それだけで作ってる人もわりといるが、
そういうことに慣れていないならそれだけで嫌になる可能性はたいへん高い
>>712 多分インストールする時点で挫折するでしょう
ここではインストール方法は教えないので自力でやってください
>>712 >>710 は
>>709 あて
とりあえずWindowsでやってみて不満が出るようなら
仮想マシン+Ubuntuへの乗換えを検討してみたらいいんじゃないか
出回ってる本で勉強するぐらいならWindowsでもまったく問題ないよ
コマンドプロンプトの使い方がわからなかったら
カレントディレクトリっていう概念とCD、DIRコマンドの使い方だけ抑えてくれ
テキストエディタは保存と編集だけできれば十分
めんどくさ
>>712 なんらかの、IDEと呼ばれるタイプの開発環境を使用したことがないのなら何も勧めない
>>714 の言うようにRDEは初心者が使うものではない
どうしてもウィンドウが3つくらいないと死ぬとかそういう病気の場合は
EclipseかNetBeansがいちおうRubyに対応している
ただ、IDEを使ったことがないなら使用は勧めない
IDEの余分な操作で余計に混乱すると思うから
メモ帳でも開いて
puts "Hello, Ruby!"
と1行書いて "a.rb" とでもしてファイル保存して
ruby console ダブルクリックして a.rb を黒い画面にドラッグアンドドロップしてEnterすると
Hello, Ruby!
と黒い画面の次の行に表示される
そんな程度
>>713-716 了解
しばらくエディタでやってみます
>>715 インストールは何のインスコを指してるのか判然としないが
とりあえず自力でやります
>>717 めんどくさいことわざわざどうも
ruby console ダブルクリックして a.rb を黒い画面にドラッグアンドドロップしてEnterすると ↑この作業を毎回しなければならないのは苦痛でしかない C#ならF5押すだけで済む
a.rbをダブルクリックでおk
インタプリタの意味が無いな
>>719 コマンドプロンプトの履歴は上キー
一覧から選びたいならF7
コマンドライン入力中に履歴補完したいなら入力途中でF8
ファイル名補完は設定によってはタブでも動作する
723 :
デフォルトの名無しさん :2010/03/17(水) 19:15:35
rubyで出来たpukiwikiのパーザってありますか?? pukipaはtableが使えないのでダメでした
あと
>>719 > C#ならF5押すだけで済む
それはC#の機能ではない
そもそもC#に編集機能などない
それはVisualStudioの機能だ
>>709 csc /t:winexe hoge.cs /r:PresentationFramework.dll /r:PresentationCore.dll /r:WindowsBase.dll
こうですね、わかりません
726 :
デフォルトの名無しさん :2010/03/17(水) 19:53:08
>>◆Y4m3jU.1h. 全レスはとても親切だと思うんだけど, 入門書の第1章を読めばわかるレベルの質問ならば 入門書を挙げるだけでいいと思う。 なにも読まずにつまづいて調べもせずに いきなり人に聞こうとする質問者に 手を差し伸べてたらキリがない。 あと妙な書き込みにレスつけてると相手の思う壺。
>>726 こうやって可視化すると文句言えるんだな
この板はIDあったほうがいいなと思うことはある
C#荒し厨(C#厨ではない)にはレスつけずスルー推奨 C#スレ見たけどあっちでも嫌われてるじゃねーか(そりゃそうか
>>724 そんなのわかっているし、そういう発言自体がナンセンスなの
言語だけでプログラミングできるとでも思ってるわけ?
開発ツールがなければできないだろ
電波飛ばして直接ハードディスクにデータ書き込む気?
匿名になると無責任になるってばっちゃが言ってた
C#で湧いてくる人を見ると 『あぁブビ厨ってこんな感じだったんだろうなぁ』 と、当時が偲ばれてノスタルジックになれる ・・・かもしれない
最近Rubyはじめた初心者だけど、IDEとか使わない方が 覚えることが少なくて楽だと思う 確かにDOSプロンプトで作業するとなんかイライラするけど、 cygterm (cygwin+teraterm) の端末なら快適
cygwinならminttyもいいぞ "mintty -"でログインシェルで起動するのを忘れずに
DOSプロンプトなんてとっくに滅んで存在しないだろ。 NT系は最初から「コマンド プロンプト」だぜ。 つか、現代のコマンドプロンプトは、ヒストリついてるし、 最初からファイル名補完有効だし、意外と便利。
UTF-8も満足に表示出来ないターミナルで便利とかちょっと PowerShellならまあ…っていまだに使い方わからんけど
最近はPowerShellとか言うやつじゃないのか。
コマンドプロンプトからPowerShellを起動した場合はUTF-8表示できなかったような ただPS用にISEっていう統合環境があってそれなら表示できる ただPSは肝心の文法がキメラでして
統合開発環境ってのはまずそいつの使い方を知らないと勉強を進められんからな 知ってりゃいろんな事がボタンひとつで出来るかもしらんが環境変わるとまた使い方を調べにゃならん そしてWindowsはこれがないとプログラミングがまともに出来ない
コマンドプロンプトUTF-8非対応のおかげで、rspecとかautotestで文字化けするから spec_helperとかでモンキパッチで変換かますか、 autotestでCtrl+Cで強制終了してしまうのを我慢してUTF-8対応cygwinターミナル使うかという感じだ。 PowerShellだと表示出来るのかな、試してみるか・・・ 結局、UTF-16に変換かまさないといけなかったらあまりおいしくないなあ
>>740 IDEというか統合環境のいいところは、1つ覚えたら大体他もそれなりに使える、というところじゃないかなぁ?
そんなにカスタマイズしなくても馬鹿でも使えるからいいんであって。
emacsとかvimはカスタマイズしないとまともに使えないだろw
エディタとコマンドプロンプトの切り替えにAlt+Tabがあれば基本なんとかなるだろ 必須になる意味がわからん まさかマウスクリックでタスク切り替えしてるのか
>エディタとコマンドプロンプトの切り替えにAlt+Tabがあれば基本なんとかなるだろ そんな環境でプログラミングしてるのか大変だな
>>741 ISEはあくまでPowerShell用の環境
コマンドプロンプトの上位互換的使いかたはできないと思われ
もしISEのプロンプトからirbとかしようものなら
延々入力を待ち続けてCtrl+Breakするまで戻ってきますん
エディタカスタマイズ派 統合開発環境派 メモ帳+Alt+Tab派 他には?
脳内にRubyインタプリタ実装派
cmd.exeでUTF-8の表示だけできれば満足ならプロパティでフォントをMSフォントに変更してchcp 65001してやりゃいい 入力はあきらめた方がいいけど
ここは本スレか
本スレです。
なんというかココ酷いね
752 :
デフォルトの名無しさん :2010/03/18(木) 02:39:30
rubyで出来たpukiwikiのパーザってありますか?? pukipaはtableが使えないのでダメでした
なんでこんなに粘着アンチは毎日ネガキャンに必死なんだろうな 周囲の環境を否定することでしか自我を保てない哀れな野郎だ
Windows厨なんで開発環境といったら ・メモ帳 ・TeraPad ・RDE ・Eclipse ぐらいしかしらんなぁ IronRubyに限るなら ・SharpDevelop っていうのもありだな 個人的には、RDEが好きなんだが バグが多いのと、開発が止まっているのが難点だな IDEは、どっちかというと、オレのように頭の悪いやつ向けだな オブジェクトがどこにあるとか、どこにどのメソッドがあるとか 解りやすくしてくれる。 ただし、設定が面倒で、動作がもっさりしてる。 そういうのが嫌いなら、TeraPadとかの高機能テキストエディタがいいね 何にも設定しなくても、それなりに見やすい。 動作も、さくさくしてる。 IDE使ってると見落としがちな、Rubyそのものの動作を体感できる。 初心者は逆にこっちのほうが良いかもね。 しばらく、メモ帳つかってメンドクセーって思うようになったら、IDEつかってみたら?
>>748 chcp 65001するとまともに使えない@Vista
そういうのが嫌いなら、TeraPadとかの高機能テキストエディタがいいね ^^^^^^^^^^^^^^^^^^^
メモ用紙で充分
自由帳と脳内インタプリタでおk
require するファイルがたくさんある場合 thread を使って並列に読み込むと 速くなりますか? 何か副作用はありませんか?
結局I/Oでブロックされそうだな。
インストール時に1枚のファイルにするようにするとかの気遣いが欲しいところ require 'hoge' するとでっかいひとつ require 'hoge/foo' だと個別
Rubyのスレッドの実装っていまどうなってるんだっけ
じゃあ質問を変えるよ requireに限らず、ボトルネック回避以外の目的にスレッドを使って高速化することはできる?
>>767 できない
少なくとも1.8ではできない
C++で作られているライブラリのバインディングを使っているのですが、 列挙型ってどうすればいいんですか? >Ruby には言語の機能としての列挙型がない。 >ちょっと使いたいことがあって、いくつかのパターンで列挙型ぽく振舞うものを書いてみた。 こんな事を書いてる記事もあるわけですが、いちいちこんなに面倒くさい事をしないとダメなのかな
p true and false #=> true p true && false #=> false なんで? あれなんか凄い勘違いしてる?
773 :
デフォルトの名無しさん :2010/03/18(木) 14:48:24
かぶりすぎワロタ
>>771-773 thx 把握した
そして and or が嫌いになった
condition = hoge and fuga
も
condition = (hoge and fuga)
か
condition = hoge && fuga
としなきゃいけないわけか
ちなみにPerl5の同様の演算子を踏襲している。 式2つをえせ英語として読めるように書きたいときはand/or を使う感じ。 do(it) || raise; do it or raise;
a == 0 and b < 0
perl のは or die と書きたかったがためだけにこうしたような気がしてならない
Perl はどうかしらんが Ruby で foo or bar and baz は (foo or bar) and baz なので注意。 foo || bar && baz は foo || (bar && baz)
RubyもPHPみたいにCGIとして動作させることができるの?
もちろん
Rubyというか 標準出力を吐けるものならなんでもCGIで使用可能 むしろCGIって名前自体がそういう意味なんだと思うけど httpdでハンドラが適切に設定されている必要はある
>>782 ただしすこし遅い
PHPやPerlより確実に遅い(mod_rubyでも素のPHPに勝てるか怪しい)
遅くてもいいようなまったり用途向け
786 :
デフォルトの名無しさん :2010/03/18(木) 17:29:44
>>783-784 サンクス
それ出来るならちょうどよかった
PHP以外に何か軽くでも使えるように勉強しようと思ってたんだ
Perlすらgeekしか知らないような頃、CでCGI書いてる会社の先輩が いて、あきれるやら感心するやら。 # もちろんCで書くことが必要な状況ならそうすべきだけど。
なぜあきれるやら関心するやらなのか解りかねる。
感心ならともかく呆れるのは理解できない
rubyでcgi書いててそこから呼ぶモジュールはがんがんCで書いてたなあ
つい先日もCでCGIを書く仕事があった。 非常にアホ臭いとは思ったが、呆れるとか感心するとかいうようなものでもないな。
で?
文字列:ABC=DEFG パターン:ABC 文字列がABCから始まるかを調べる方法ありませんか?
/\AABC/
>>796 それで理解できる人はそういう質問はしないと思う
str = "ABC=DEF"
if /\AABC/ =~ str then
puts "ABCから始まっています"
else
puts "ABCから始まってません"
end
「正規表現」についての知識は必須なので、
使いやすい簡単なのだけは覚えておくといい
798 :
795 :2010/03/19(金) 00:09:40
>>797 これくらいの事なら、メソッドで準備されているかな?と思ったので
こういうのも。 s = 'ABC=DEF' s.start_with?('ABC') #=> true
正規表現で簡単にできる「これくらいの事」をすべて メソッドで装備していたらかなり煩雑だと思う
ruby -e 'p String.instance_methods - Object.instance_methods' とかやって、それっぽい名前のメソッドがないか探してみるのもよい。
>>799 はRuby1.8.7以降とRuby1.9.1以降限定
初心者的に大きな問題はないとは思うが
>>800 String#include?さんなめんあ
start_with? なのか starts_with? 派との間で血みどろの抗争が繰り広げられたに違いない
>>804 ruby的には、is_a? 以外は原形不定詞を使うとかいう約束だったと思う。
三単現派は ActiveSupport を使えば starts_with? を定義してくれる。
JavaはstartsWith, endsWithなんだな
>>805 なるほど
この場合主語が単数なのはほぼ異論無いとして、一人称なのか二人称なのか三人称なのか。
意外と深い?のでその原則は結構ナイスかも。
って日本人ユーザからすると面倒なだけとか。
is_a? との類推で三単現にしてしまうんだよなあ まったく is_a? は鬼っ子だ 初心者の皆さんにおかれましては is_a? は表記的に時代遅れなので kind_of? 使ってくださいね
>808 is_a? と kind_of? は意味が違うことをわかってんの?
810 :
804 :2010/03/19(金) 00:39:03
>>805 興味深いマジレスありがとう
原型不定詞ってなんだっけってなったのは内緒
>>809 あまり is-a と kind-of を区別してるとは思えないし、そもそも実装上区別してねえ
んなこと言うなら is_a? から kind_of? と instance_of? の機能を、kind_of? から instance_of? の機能外せ
instance_of? と混ざったかな?
814 :
804 :2010/03/19(金) 00:49:18
>>807 d。読んできた
他の名前との一貫性からstart_withになったけど
Pythonに敬意を表してstarts_withにするのしないのって話もあったのかw
File.exist? File.exists? みたいに両方あるのもあるよね。
ポリシーのまったく無かった時代の古いメソッドだな まあ今もポリシーとか薄いけど
だからRubyは汚いんだよ。 Pythonの美しさをみ・・Pythonも似たようなもんか。
メソッド(に相当するもの)の名前のつけ方は似たようなもんだな どこも決定打に欠ける 永遠の問題なのかもしれない
rubyはCASを目指しているのですか?
カス
そろそろrubyの次の言語で再出発する季節だな。 今度はguiとideとrails標準で。
こうして
>>821 は旅立って行ったのであった。
ー完ー
アップキャストとダウンキャストがないから不便だ
e-
wxRubyをいじってみたくて導入しようとしたら cygwin用が用意されてなくてコンパイルもそのままじゃ出来なかった ↓みたいに_rb_〜〜が見つからないって大量に言われるんだけど Rubyのソースとか必要なのか?どっかのパス指定ができてないだけなのか? /home/hoge/wxruby-2.0.1/src/Icon.cpp:1410: undefined reference to `_rb_define_class_under' /usr/lib/ruby/1.8/i386-cygwin/ruby.h:697: undefined reference to `_rb_cFixnum' 色々いじってコンパイルしてみてるけど諦めてRuby自体mswinにするか・・・
Makefile とか configure 読めないのに cygwin 使おうとする男の人って…
なんかインストールだけでなく運用自体が茨の道のようにも見える mswin32でやったほうがよさそうなふいんき
>>826 そりゃここでこちょこちょ勧める人がいるからだろ
ぶっちゃけ初心者にはcolinux+Debianとか勧めておけばいいのに
cygwinはwin,*nix両方知らなきゃいけないから難しいよ
>>825 こういうひとってなんでRubyやめようと思わないのかな
はじめに Ruby ありきなんだよな 目的と手段を取り違えるタイプ
>>828 俺は勧めてないしテンプレにも一文字もないぞ
>>830 Rubyで遊んでみるのが目的なのに他の手段でウィンドウ作ってどうする
色々勉強足らずのようなので精進します Rubyありきなのはどうしようもないですがcygwinありきだった点を直そう おとなしくmswin32でいじることにします
「Rubyの初心者」のスレなのに 「プログラムの初心者」と決めつけて・勘違いして回答してるのが何人かいるな
>>833 「OS操作や他言語プログラミング等にある程度造詣があってRubyに挑戦しようとしてる人」
の質問はそれなりに洗練されている
そういうような質問にはそれなりの回答が返ることが多い
プログラミング経験者なのにPC初心者向けな回答をされたという場合は
そりゃ質問の書き方がまずいのだろ
>>829 なんでRubyやめようと思うと思うの?
なんでRubyやめようと思うと思わないの?
思わないことに理由を求められても
>>837 このひとはなにもかんがえてません
ずっといます
いったい誰と戦っているんだ
中高生の春休みにはまだちょっと早いと思うんだが、 ここ数日どのスレもなんか雰囲気違うな
もっと簡単に使えるrubyみたいな言語が有ればいいのにね。 visual rubyとかmsが用意すればいいのに。
諦めきれずにやってたらインストールできた 単純に-lrubyが足りなかっただけでした やっぱり次につまずくまでcygwinで行こうと思います
るび厨って未だにema糞だから言語、エディタ、デバッガ、ライブラリ、ドキュメントが 高度に統一された環境がどれほど快適であるか理解できないんだろうね。
Rubyを使ってない人がなんでこのスレにいるの?
かまってくれるからだろう
1.9 への覚悟を決めた さっき 1.8.7 を入れた
visual basicみたいなrubyがあればいいってことだろ。 phpなんかも、php + sql starter見たいなの配布してるしねえ。 rubyもそういうお手軽さを提供しないと、いつまでもマニア向けのまま終わる事に成る。
Windows環境で手軽なものが必要だろうね LinuxとかUnix系使ってる場合は使い始めるのにそんなに壁無いと思う
PerlやPythonやPHPでIDEセットみたいなものが普及したらそのとき考える 他の言語で普及してないということはそれなりに理由があるもんだ それと、Rubyはバージョンが1未満のころから一貫してマニア向けでしかない これはPerlも同じ
「マニア向け」の意味に依るけど,Unix系使ってきて他の言語 知ってるととっつきやすいけどな 別にRubyだけってわけでなく他の言語メインに使ってる
というかRuby自体どう見ても第二言語だろ sedやawkを知ってるとアホみたいに作業効率が上がるのと同じ 単語操作はCでもできるがsedやawk経由のほうが作業速度は速い
853 :
デフォルトの名無しさん :2010/03/20(土) 09:58:10
rubyからメールを送れるプログラムてできる? ただし、OSがHomeeditionこれて無理かな?
>>853 できるよ
普通にSMTP操作すればいい
地味に難易度上げてるな
>>851 Windows で Ruby のとっつきにくさって
言語の仕様とか経験とか以前に
インストールの面倒臭さとか
cygwin/mingw混在とか
本質と関係ないどうでも良い部分で
無駄に時間取られることだよ
>>853 できるけど、それを質問してくるレベルの知識ではできない。
おっさんしゃべり場になってるな
>>855 当たり前だ
自動車ってどうやってエンジンかけて運転するんですかという小学生の質問に
仔細に答えるわけにはいかない
>インストールの面倒臭さとか >cygwin/mingw混在とか gemがどうのapacheがどうのとなるとメンドイけど 単体で使うだけのインストールなら mswin32のzipをダウンロードして解凍してPATHをとおすだけ 言い換えればその面倒さはRuby本体以外の部分にある
cygwin使っておきながら、他のコンソールアプリケーションとのバッティングに文句言うとかありえん
ActiveScriptRubyをダウンロードしてダブルクリックしていくつかボタンクリックする作業が難しいというような人は Rubyにまだ向いてないとおもう
初心者スレでいうのもなんだけど、そこまで初心者に媚びる必要はないと思う。
>>799 s = 'ABC=DEF'
s.rindex('ABC', 0) #=> true
s.rindex('DEF', 0) #=> false
なら古いバージョンでも動く
867 :
865 :2010/03/20(土) 12:04:20
>>863 激しく同意。
自分はさらに極端で、プログラム初心者、PC初心者は放置でいい気がする。
第二言語としてRubyを使おうとしてる初心者に対して優しくするのはよいと思うけど。
んなこといったらこのスレ自体いらんがな
×しょしんしゃ ○しょしんもの これを受け入れる
こっち系の才能のある人ってやっぱりアスペとかコミュ能力に問題抱えてる人が多いのかしら そう思わせるレスが多い
俺の〜の頃はとか語りだしちゃう馬鹿 誰もお前には聞いてない
お前にもな
やめろやめろ喧嘩になる
話は変わるけど、1.8.7-p249でUTF-8の文字列をinspectすると末尾の全角文字が 文字化けする状態は放置されたままなんだね。 とりあえず、string.cを修正してからmakeすれば直るんだけど。 1.8.8では直るらしいから、それでいいじゃんと思われてるのかな。
p249の次のパッチレベルリリースで直るんじゃない。 緊急再リリースするほどの問題ではないという判断なのでしょう。
javaのinstanceofのように、変数とクラスを比較して同じか調べたいのですが 誰か教えてください
kind_of?
OneClickInstallerでRubyをインストールしてしまったので、1.8.7にバージョンアップしたいのですが、 現在インストールしているRuby1.8.6をアンインストールすべきでしょうか? Ruby on Rails と Ruby gemsもインストールしているので、アンインストールしていいものか悩んでいます。 よろしくお願いします。
>>881 Rubyのバージョンアップはアンインストール前提
既存の Ruby の設定を考慮する Windows 用インストーラーというのも今のところ存在しない
現時点で gem list するとインストール済み gem 一覧が出てくるのでそれメモっておいて 1.8.7 でもインストールしろ
1.8.6 → 1.8.7 であるなら GEMHOME に該当するディレクトリを退避して上書きでも動作はするはずだが保証はしない
OneClickInstaller 1.8.6とASR 1.8.7を共存させたら ・cmdからruby script.rb ->1.8.6環境で起動 ・ruby consoleからruby script.rb ・cmdからscript.rb ・rbファイルのダブルクリック ->1.8.7環境で起動 パッケージが違うとはいえ、混沌とした アンインストールまじおすすめ
885 :
878 :2010/03/20(土) 19:36:17
毎度、お世話になっています また、ちょっとおしえてください def test value str = String.new if str == value ←同じ型か? どうか調べたい!! p "同じ型" else p "違う型だよ" end end test(strと比較するクラス名) こういう処理をしたかったのですが、クラスはClassって型なんですね なんか勘違いしていました
Rubyに型はない
(以下既存ループ)
>>885 Rubyにおけるクラスとインスタンスという概念をとりあえず勉強しろ
(オブジェクト指向としてのクラスとインスタンスという大仰な概念は不要)
話はそれから
>> a = "hello" => "hello" >> b = 3 => 3 >> a.kind_of?(String) => true >> a.kind_of?("world".class) => true >> a.kind_of?(b.class) => false
そろそろこういう>> =>書き方をするひとが出てくるんじゃないかと思ってた
>>> じゃないだけいいだろう
irbの出力のこと?
>>888 $ mv ~/.irbrc dot.irbrc
$ irb --simple-prompt
>> 1
=> 1
>>891 退避しなくても -f オプションがあるよ
$ irb --simple-prompt
irb> exit
$ irb -f --simple-prompt
>>
ここまで10分 なんというフルボッコ
kind_ofって必要かね。 RubyでいうとMix-inとかで解決すべきところだと思うのだが。 Javaだとインタフェースになるのかな。
は?
型を調べて処理を分岐するようなのはダックタイピングじゃないって言いたいのかな 別にそんなにこだわる必要ないと思うけど
>>894 まず、そうゆうネタは本スレに振った方がいいと思う
主張っぽいのがあるなら特に
その上で、Mix-inで解決ってのは意味がわからんが
Mix-inされてるかどうかって所にkind_of?なんかの使い道もあろうと
でもkind_fとタイプした瞬間「これでいいのかなぁ」というなんとも後ろめたい感情が沸き起こるわけですが…。 自分だけですかね。 オブジェクト指向だの大見得切っといてこんなことしちゃっていいのかしらウフフ、的なね。
何について言ってんの?
kind_ofとか、呼び出された側で型判定して動作を変えるのはポリモーフィズムじゃないよねという話。
>>894 このくらいのレベルの話で本スレに行かなきゃならんのか・・・
だからっつって、method_missing前提もどうかって話にも なるんじゃないかと思う
呼び出された側ってどっちだい?
なんでkind_ofにつっかかってるのかわからんね
インスタンスにメソッド追加できるんだし 結局、スタイルの問題でしょ? まぁ、確かにライブラリとかで kind_of 連発してたら しょんぼり感が漂うな
>>894 だけで終わってたらどう頑張ってもふわっふわな話になるわ
具体的事例がないならとりあえず本スレ行っとけ
Mix-inとかで解決ってのが謎を深める
インスタンスがあるメソッドを持つことを確認するのに kind_of を使ってる ってことなんでしょ インターフェースで強制すべきってことでMix-inという話になる で、906に続く
>>909 その上で、何が不満なのかを書かないと話にならない
あんたが言うように使うこともあるだろうし、それはまさにJavaのインターフェイスの
使い方の一つだけど、それがRubyで「できる」ことに問題があるのかな?
kind_of?と関係ない話だ
いや、おれ894じゃないから知らないよw 「謎」って言うから書いただけ 全く不満はございません
Mix-inで強制とかできるの?
そりゃkind_of?で弾けば可能だ。あれ?
Rubyはとりあえず自分が今すぐに便利ならそれで良いやって言語だった。そうだった。
本当に文句を付けたいところは動的型付けなんじゃ?
1..10を1..無限にするには、どうすればいいの?
Rangeオブジェクトではできない 1から始めて整数値をえんえん増やす処理をさせたい場合はそのようにループを書く
ダックタイピングってさ、例えばオブジェクトが read というメソッドを持っていることを仮定するわけじゃん? さらにいえば、そのreadメソッドがこちらが期待する動作を仮定しているじゃん? こういうのって問題にならないのかな。 組み込みクラスならまだしも、ユーザ定義のクラスでこんなにうまくいくの?
うん
>>920 名前ってどうするの?
たとえば hoge というメソッドが期待している振る舞いをすると仮定しているが
その「hoge」という名前は、IPアドレスのように偉い人たちが統一的に管理しているわけでもなく
みんなそれぞれ勝手に決めるわけでしょ?
※ そんなこといったらモジュールの名前空間も衝突す(ry
ダックタイピングしたいなら ruby やめて python にするといいよ
inspectメソッドみたいに、固定的に名前を決めちゃうのもどうかなぁ、って思うんだけど。 実質 Ruby の予約語じゃね? 例えば p メソッドは、inspectがオブジェクトを文字列に変換してくれることを期待しているから ユーザ定義のクラスでも、そのことを念頭に置いて、メソッド名を決めなくちゃいけない。
ある動作を期待されるメソッドをユーザが別の動作で定義して動作がうまくいかない場合は 別の動作で定義したユーザが悪い
>>924 だから、その名前をどうするかって話だよ。
俺様ライブラリのクラスで、readというメソッドを定義したとする。
でも俺様ライブラリのreadメソッドは、IOクラスの振る舞いはしないとする。
ところが、Aさんが俺様ライブラリをIOクラスの振る舞いをすると期待して使ってしまう。
するとAさんは、「お前、なんでreadなんて名前にしたの?氏ね」
と文句を言われる。なんで?
× 文句を言われる ○ 文句を言う
>なんで? 原因分かってるのに聞くなよ
ああ、inspectメソッドみたいに全てを把握しないといけないのか。 メソッド名も、メソッド定義も気をつけないとなー。
しかしつまらんスレだな
何を問題としてるかわからん read というメソッドがあるライブラリを拾ってきて、ブラックボックス的に使ったら たまたま名前が同じだけで期待しない動作だった、ってのを懸念してるように 見えるけど
静的型かじってないとまるで理解できない悪寒
そんなことを心配するなんて あなた(俺様)は何も悪くありません どんなAPIを設計するかはあなた(俺様)の自由 APIが使いにくいからといっても,あなた(俺様)が文句を言われる筋合いは全くないでしょう ユーザーは単にあなた(俺様)のライブラリを使わなければよいのですから
まあそれはいいとしても、inspectって固定的に決めちゃうのはどうなの? initializeもか。
追加するとき問題になる場合は、先頭に__を付ければ解決
Object#__send__ がいい例だね...
initialize も inspect も使いたいように使ったらいいんじゃないっスか? 別に予約語でもなんでもないんだから
広く普及している使い方に反する使い方をしていれば フィードバックを貰って改定するとか、俺流を貫いて淘汰されるとか するんじゃないかね。
938 :
238 :2010/03/21(日) 13:40:16
FAQかもしれないけど、空の配列をハッシュのデフォルトにする 方法はないですか?もう下のようなコードを書くのはうんざり・・・。 animals = Hash.new ... if animals[:dog] animals[:dog] << "pochi" else animals[:dog] = ["pochi"] end
animals = Hash.new([])
940 :
939 :2010/03/21(日) 13:46:43
ああ、そういやこれはダメだったな
>>938 > もう下のようなコードを書くのはうんざり
そういうクラスを作ればいいだけでは…
animals = Hash.new{|h,k| h[k] = []}
>>938 あんまり変わらないけど、これはどう?
animals = Hash.new
animals[:dog] ||= []
animals[:dog] << "pochi"
if animals[:dog] animals[:dog] << "pochi" else animals[:dog] = ["pochi"] end ↓これでもいける。 animals[:dog] ||= [] animals[:dog] << "pochi" ↓これでもいける。 (animals[:dog] ||= []) << "pochi"
あれ?Hashってキーが見つからないときのデフォルト値って設定出来なかったっけ?
946 :
238 :2010/03/21(日) 14:04:02
>>941 確かに自分の場合、Hashを拡張してしまうのが早いかも。
>>942 Hashをブロックで初期化できるとは知りませんでした。
これは覚えておかないと!
ありがとう。
947 :
238 :2010/03/21(日) 14:11:36
>>945 普通のデフォルト値として[]を渡すと、同じArrayインタンス
が使いまわされるので、目的に適わないのです。その点、
942のコードなら大丈夫。
みんなが便利を目指してる訳ではないしな。 教祖のrubyの教えを信じるものはrubyで救われるが、信じない異教徒にはrubyは助けに成らない。
>>948 俺なんか別にどの言語も信者ではないな
どの言語でも何でこんなアホなんだと思う場面あるし
実際は言語がアホな場合も自分がアホな場合もあるけど…
レスもらえないからとうとう自演を始めた
ほかでやってね
「Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである (Enjoy programming)」 この部分においてはRUBYは他の言語の追随を許さないのでしょうか? これから学ぼうと思ってるのですがここ見ててそんな疑問が浮かびました 皆さんの印象で結構ですのでお願いします
馬鹿な俺様が初めて使いこなせた言語
>>954 初プログラミングならたぶん快適
他の静的型付け言語の経験があるならキイイイイイイイッってなるかもしれん
いろんな意味で細かいことを気にしない人は楽しめるんじゃなかろうか
>>954 そんなこと気にせずさっさとインスコして試したらいいよというのが正直な印象
有名どころの言語をあれこれ使ってみて自分に合うのを選んだらよろし
プログラミング初心者はとにかく処理系と戦いながら何度も試行錯誤を重ねることがわりと重要なので、 そういう点ではRubyは優れているといってよろしかろう?
ただしWindowsを除く。
対話環境がある言語は有利だわな Windowsプラットフォーム固有の問題を出せるまで使い倒したなら もう初心者卒業だろうw
>>942 だと代入せずに参照しただけで要素が追加されてしまうので
animals = Hash.new {[]}
animals[:dog] <<= "pochi"
Windowsなら.NETにREPLがあるF#がガチ いまVS2010RC入れて触ってみたんだけど、これは良いわ インタラクティブシェルのキーバインドがreadlineじゃなくてcmd.exeなのと VS2008には有ったemacs系のキーバインドが無くなっちゃったのが 個人的には痛いけど、これからプログラムの勉強始める人なら関係ないよね
色々どもです954です でもおいらWINDOWS環境だw
Smalltalkやってたので言語覚えるのは比較的楽なんだけど、環境が良く分からん 1.9だと、まだデバッガが対応していない?
デバッガって標準添付されてるでしょ なのに動かないの?
>>964 VMwareにubuntuでも入れとけ
>>966 あー、いきなりRadRailsのIDEでデバッグしようとしてるのがいけないのか
リファクタリングツールとかないと生きていけない体になっているので、いきなりIDEに手を出したのが不味かったのかも
>>965 いわゆるデバッガと言われて想像するような性能のものは無い
言語仕様的な問題なんじゃないかとうっすら想像中
>リファクタリングツールとかないと生きていけない体になっている と >いきなりIDEに手を出した の間に関連性を見出そうと頑張っています しばらくお待ちください
いきなり(Rubyでも)IDEに手を出した(そしてがっかりした) ってことだろうね
Smalltalkやってたぐらいだから、IDEどっぷりでしょ Smalltalkは言語というより環境そのもの。EclipseとかでKentが再現しようと頑張ってるけど及ばない領域が多い 今でこそそこそこ使えるIDEが出てきたけど、RubyのIDEは正直糞レベル
rubyの文字列連結って超不便じゃね? FixnumとStringの連結くらいでエラー出すなよな
あらゆる種類のオブジェクトがString相手の+メソッドを特別扱いすべきだと?
>973 "#{foo}" 使えよ
強く型付けされた言語で、 あたかも暗黙の型変換が起きたかのような挙動は危険すぎる to_s で明示的に変換するべき
動的型言語における暗黙の型変換はエラーの温床になる
何でこのスレはキチガイばっかり何ですか?
きちがいがきちがいをよぶ きちがいにしかきちがいはみえない
Array#joinは勝手に変換するけどな。 [1,2,3,[{:a=>"a", :b=>"b"}],].join #=> "123bbaa"
順序の無いハッシュまで変換してるとか最高にすかぽんたんですね
Hash#to_s の挙動は 1.9 で変わった irb1.9> puts [1,2,3,[{:a=>"a", :b=>"b"}],].join 123{:a=>"a", :b=>"b"}
勝手に変えんな
rubyでstringの文字コードを調べる方法ないですか? #!ruby -Kuと$KCODEで指定しているのですが、 C++のフレームワークを経由して表示させたい文字列を取得しているため
>>984 文字エンコーディング情報を別途保持して渡すか、require 'guess' して NKF.guess(str) した数値を
NKF::SJIS とか NKF::UTF8 とかと比較する
次スレ立てるよ
987 :
985 :2010/03/22(月) 11:47:14
ERROR:新このホストでは、しばらくスレッドが立てられません。
またの機会にどうぞ。。。
>>6 の新稿
Windows で Ruby を使う初心者はとりあえず ActiveScriptRuby の 1.8.7 をインストールして慣れろ
OneClickInstaller は単に古すぎ、RubyInstaller は MinGW32 版で現状扱い怪しい、cygwin 版は cygwin マニア専用
IDE のお勧めは特にない(せいぜい汎用のEclipseかNetBeans)、RDE は古くて独自すぎで Ruby に慣れた人向け
■ Windows でとにかく迷いたくない普通の人 … ActiveScriptRuby 1.8.7
ttp://arton.hp.infoseek.co.jp/indexj.html の題字のでかい 「ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub」
マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/ の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」
夢のお告げ等、何かの間違いで Ruby の知識がないうちから 1.9.1 を使って苦しみたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.1-p数字 Microsoft Installter Package」
ERROR:スレ立ては●を使うと出来ますよ。
RubyInstaller使いやすかったよ
しかしくだらんスレだな
スレたていってきますよ
>>989 RubyInstallerだからだめという話にはなってねー
中身がMinGW32であることが、問題切り分けとスクリプト手修正のできない初心者には厳しいという話
馬鹿にはrubyは無理。 梅。
むしろバカはruby意外は無理
バカには何渡してもできないからどうしようもない
パカは優秀
ふふっ♪ばーか♪
千
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。