4 :
デフォルトの名無しさん :04/09/13 03:54:14
4.get!
5.get?
1 << 乙
7 :
デフォルトの名無しさん :04/09/13 14:33:05
Rubyってどうしてこんなに使いづらいんですか?
554 名前:デフォルトの名無しさん[sage] 投稿日:04/09/09 17:52
埋め込みはRubyでやろうかと思ったけど面倒そうなので一分であきらめた。
埋め込みたければ言語にはこだわらずにメジャーなの使ったほうがいいんじゃないの。
555 名前:デフォルトの名無しさん[sage] 投稿日:04/09/09 21:56
簡単だけどな・・・
どこが難しかったの?
556 名前:デフォルトの名無しさん[sage] 投稿日:04/09/09 23:12
>>555 難しいという以前にRubyの低レベルな知識が皆無な状態で
ここからここまでを読めば埋め込みできるってドキュメントが見つからなかったから。
ついでに技術デモになるようなexeも実際に採用したフリーウェアも見当たらなかった。
557 名前:デフォルトの名無しさん[sage] 投稿日:04/09/10 00:37
Apolloはチェックしたのか?
ttp://www.moriq.com/apollo/ 558 名前:デフォルトの名無しさん[sage] 投稿日:04/09/10 02:00
チェックしたよ。その上での>556。
WEB眺めてもApollo\Docを眺めても(だいたいApolloのヘルプなんて置いてないし)
どこから手をつけていいのかわからなかったし
簡単に行きそうな気配が微塵もしなかった。
で結局DMokeyに落ち着いた。
シンプルなヘルプを上から下まで一読してあっさり動いたよ。
>RMagick といえば、cygwin で動かせた人います? 動いてますよ。
>>7 少なくともPerlよりは使いやすそうだと思ったが…
オフィシャルのリファレンスが全て日本語だし。わかりやすいかと聞かれると微妙だけど…
とっつき難くはある
Perlのほうがとっつきやすいね。Rubyはオブジェクト指向向きに出来てるけど Perlはベタ書きでダラダラやってもそれなりに苦労せずに動かせるから。 保守は絶対したくないけどさ。
ダラダラ書く程度なら、PerlもRubyも大差ないと思うけど。
ブロック終端が基本的に(少なくとも入門サイトレベルでは)endで、 インデント+endでダラダラ書きすぎると、ブロック構造読み取り(&デバッグ) すらも大変になってくるから、if {}ってな感じのPerlのほうがそういう用途には 向いてるんじゃないかと思う。
{}が読みやすいって、慣れの問題なんじゃない? Cがはやり始めたころは、{}は読みにくい、begin,endが良いって意見が根強かったけど。
生のVimでブロック終端間移動(%コマンド)が通るから{}が好きだったり
商いねぇ
すいません。eRubyでライブラリのロードパスを追加するにはどうすればいいんですか?
>>17 こういう方法は?
<% $LOAD_PATH << '追加したいパス' %>
オブジェクト指向スクリプト言語RubyのP163に下のようなコードが あるだけど、%rの意味がわかりません。 case http_header_analyze(sock) when %r|^/$|
よく調べたらわかりました。 正規表現ですね。
22 :
デフォルトの名無しさん :04/09/13 18:15:44
・・・ pthread_t theThread; void *thread_code(void *t) { ・・・ } main() { ・・・ pthread_attr_init (&attr); sched_param.sched_priority = 4; pthread_attr_setschedparam (&attr, &sched_param); ret = pthread_create (&theThread, &attr, thread_code, (void *) 0 ); ・・・ } 優先度4のスレッド(thread_code 0)を作る部分なのですが、 main の中のこの4行を、優先度、スレッド名、スレッド番号を持つマクロに変換するには どのようにしたらよいでしょうか?
誤爆しました。すんません。
24 :
デフォルトの名無しさん :04/09/13 20:23:35
Tabとスペース混ぜてインデントする人に聞きたいんだけど、どうしてあんなことしてるの? しかもタブ幅は8。 エディタによって激しく読みづらくなる
>>24 Emacs だとデフォルトでそうなっちゃうと思う。
漏れも以前そうだったけど、最近は (setq-default indent-tabs-mode nil) としてる。
>>24 emacsのデフォルトの挙動だからでは。
emacs使いの人は (setq indent-tabs-mode nil) してからコードを書いて欲しい
27 :
デフォルトの名無しさん :04/09/13 20:33:25
>>24 ホワイトスペースという言語がある。
お前がインデントだと思っている部分はおそらくホワイトスペースで書かれている。
一つのソースがコンパイラを使い分けることで二通りの解釈ができるということだ。
emacs厨って何度言っても絶対に変態的インデントやめないんだよな・・・ マジ迷惑
29 :
デフォルトの名無しさん :04/09/13 20:40:42
emacs厨ってどんな言語使ってるんですか? Rubyですか? Cとかではないですよね?
elisp
Ruby厨ってどんなエディタ使ってるんですか? emacsですか? 秀丸とかではないですよね?
viヵゎぃぃょvi WinだとなぜかNoEditorだが。
gVimメインだけど、テキストの関連付けがVxEditorだから何故かメインの座にはVxが座ってる。
Cを米国とすると Rubyは北朝鮮 Basicは中国みたいなもんだな
Winで書くことがメインなんでK2Editor
Winで書くことがメインなんでzyzzy
名前間違えてまで必死棚
40 :
デフォルトの名無しさん :04/09/13 22:15:47
WindowsではやはりRDEだな。 あれは本当によくできている。 eclipseプラグインのやつにも、もう少しがんばってくれれば面白いものができそうな感じなんだけど
『プログラミングRuby』はよい入門書のように思ったけど、どう?
初心者向けなら原先生の「Ruby プログラミング入門」も良いと思う。
Rubyレシピブックって良いの?
>42 ごめん、両方とも立読みしかしていないけど…… > たのしいRuby これって、Class作成まで言及していたっけ?オブジェクト指向は 自分で用途に沿ったクラスを設計して使うというのが重要だと思うので、 クラスを使うところまでしか無いんじゃなぁ…… 初心者向けにはいいかもね > Rubyレシピブック 大半がリファレンスマニュアルに書かれているような気が…… もうちょっと(リファレンスに載っていないような)Tips的な内容を 期待していたんだけど…… まあ、リファレンスマニュアルよりわかりやすいから、そういう目的で 使うならいいかもね
>43 マジお勧め。これでRubyの概要がだいたい判る。 Programming RubyのライセンスはOpen Publication Licenseなんで、 誰か和訳して公開してくれないかな。
>>46 『たのしいRuby』はクラスの作成についても書いてあるよ。モジュールとか
Mix-in とかの説明もちゃんとある。 GUI をやらなければ説明はひととおりあ
るし。
まあ、初心者向けにはよいかも、という意見には同意。
おう、お前ら、cgi のソースコードデバッグってできるのか? できるんだったら、すいません、やり方教えてください。 (できないような悪寒はしています)
>>49 え?普通に
$ ruby -d hoge.cgi
でできねぇか?
デバッガを使いたいんなら debug.rb を require すればいいよ $ ruby -rdebug foo.rb
998 :デフォルトの名無しさん :04/09/14 21:57:40 スレに対するサービス拒否アタックまで残り2 999 :デフォルトの名無しさん :04/09/14 21:58:02 ↓当スレに対するサービス拒否アタック↓ 1000 :デフォルトの名無しさん :04/09/14 21:58:51 matz は日記のかわりにドキュメントを書いてほしい 1001 :1001 :Over 1000 Thread 208 KB [ 2ちゃんねるも使っている 完全帯域保証 専用サーバ Big-Server.com ] 30,000円/月 ★ 転送量無制限タイプも新登場。 なんか、1001がサボってないか?
ほ、ほんまや……何があった?
1001の文章を、板独自にカスタマイズできるようになったらしい。
ごめ。最近仕事がPerlなもんで。
DoSアタックで1001スレストプロセスが落ちたのかと思ったよ:D
> 1000 名前:デフォルトの名無しさん[sage] 投稿日:04/09/14 21:58:51 > matz は日記のかわりにドキュメントを書いてほしい こころから同意。 いや、本当に。 お願い。 日記のかわりにコードを書くでも可。
ドキュメントといえば、 Ripper ってどうなの? akr さんが軽く突っ込みを入れていたけど。
>>57 matz が日記に書いたら勝手に実装してくれる小人さん多数きぼんぬ。
るびまのインタビューに「あなたはなぜドキュメントを書かないのか」って質問入れてくれ。
>>57 -
すぐ実装したら仕事なくなっちゃうでしょ。適当に時間稼いで間を持たせないと・・・
こういう流れになると「お前がドキュメントを書け」と言われそうだが、 ドキュメントって、分かってる人じゃないと書けないのよね。 分からないからドキュメントを見たいのに。
>>50 >>51 う〜ん、その場合、フォームとかクッキーとかはどうすればいいんでしょ?
64 :
デフォルトの名無しさん :04/09/15 00:45:29
>>62 最小限の記述で必要十分な説明をする能力に欠けてるような気がする。
ドキュメントの質が低い。分量同じでももっとまともなのかけるだろ普通。
業務ではいったいどんなドキュメント書いてるのかね。
Windows向けのフリーウェアやライブラリの方がよっぽどちゃんとしたヘルプがついてるよな。
ルビ厨ってプロ意識に欠けてるよ。いくら趣味でやってるとはいえプロのプライドっつうもんがあるだろ。
matzがドキュメントよりソース読め派だからどうしようもない。 あと、Rubyを広める気は本当に全く無いんだと思う。
Moonwolfさん、Planetについて激しく勘違いしてるような気が。 とはいえ、人力であれだけできるというのもすごいけど。
>63 フォームは標準入力から、クッキーは環境変数 HTTP_COOKIE から渡せるよ。
CGI クラスって、new を2回やるとインスタンスがおかしくなりますけど(標準入力を二度読めないから?) 他の CGI ライブラリだと、解決されてたりしますか?
なんでわざわざ2回newするの?
71 :
デフォルトの名無しさん :04/09/15 09:56:51
ドキュメントが悪いっていう香具師はもう漏れ的には釣りとしかいいようがない。 これ以上何が足りないっていうのか。
松七誌出乙
ローカル内輪言語に何期待しても無駄。 HSPのがよっぽどオープンでフレンドリーだよ。
>>71 HSPやRubyみたいな厨言語に期待するお前がアホ
ドキュメント書けとかほざいてるやつは、 一体何のドキュメントが足りないのか言ってみろ。
変数の中身が文字列か配列かを判断したいんだけど、変数の中身のタイプを判別するにはどうしたらいい?
>78 moonwolf氏のblogがあったことを今知った
83 :
デフォルトの名無しさん :04/09/15 13:20:22
>>81 if v.class == String
elsif v.class == Array
end
>>81 case
when v.is_a?(String)
...
when v.is_a?(Array)
...
end
でも可。 is_a? の場合はサブクラスでも拾われるという差がある。
>>84 ふつーこうしない?
case v
when String
when Array
end
>>85 うそ〜?と思ったが、そのコードで動くのね。
しかし、'case v'って言ったら、vの値を評価してるかの
ように思えるが、vの型を評価するの?
>86 ===が、右辺にClassが来るときは……ってオーバーライドされてるんでなかろか。 知らんけど。
>> 85,86,87 if String===v ... elsif Array===v ... end
>>88 でもさぁ、
>p "a"===String
は false なんだけど、
・・・と書き込もうと思ったが、
String==="a" は true なのね・・・・・orz
===って右と左を区別するのか。よぐわがんね。
cgiでSocket関係を使うと getaddrinfo: no address associated with hostname. (SocketError) とか getaddrinfo: servname not supported for ai_socktype. (SocketError) がでるんだけどなんで? コマンドラインで動かすときは大丈夫なんだけど、cgiのときと何が変わるの?
>89 まぁ、そういうトリッキーなことを考えずに、 素直にis_a?使っとけってことじゃないかなぁ。 ===使ったってメソッド呼んでることに違いはないんだし。
>>89 ===演算子もメソッドだから。
String === "a" は String.===("a")。
で===の中はこんな
def String.===(obj)
obj.is_a?(self)
end
なんでしょう。
=== って一応、比較演算子なんでしょ? 比較演算子で、左右入れ替えると結果がことなるって気持ち悪いな。
記号の見た目は左右対象だけど、 主に所属関係・包含関係をチェックするメソッドだから、 左右入れ替えて結果が同じ方が気持ち悪いな。
===なんて記号をつかわなければよかったのにね。
#!/usr/local/bin/ruby -Ke class Object alias :∋ :=== end v = "aString" if String ∋ v puts "String" elsif Array ∋ v puts "Array" end
もうクックルにしか見えない!
rubyのロゴって何ですか? 結局ナスカの地上絵風ので決定だったのですか?
>>97 Ruby って2バイト文字の識別子使えるのか・・・・。
知らんかったよ。
>>101 そうなんだよね。
ってなわけで、 2バイト文字で AA な Ruby コード募集。
半角括弧使用禁止、*使用禁止、;使用禁止、半角スペース使用禁止 つらい
禁止じゃないだろ
こんなファイルtemplate.txt(他人が更新する)を用意して ---------------- おはようございます。〜〜 #{month}月#{day}日: 〜〜 ---------------- こんなソース ---------------- #!/usr/bin/env ruby tmp = "" File.open("template.txt") { |f| tmp = f.read } month = 9 day = 15 text = eval %Q|"#{tmp}"| puts text ---------------- 書いたんだが、 もっとスマートな書き方ない?
>106 $ cat t.txt <%=month%>月<%=day%>日 $ ruby -rerb -e 'month,day = 9,15; puts ERB.new(ARGF.read).result' t.txt 9月15日
漏れも eruby 使うのが王道だと思うが、あえて、ちみのコードにてをいれると >month = 9 >day = 15 > >puts eval('"'+IO.read('template.text)+'"') って感じになりました。 '"'+〜'"'ってのが汚い感じだけど。
puts eval %Q|"#{IO.read('template.txt')}"| で行けました・・・・orz
>>106 だと、templateに"が入ったときがよくない
>>97 $ ruby -e p [1,2] === 1'
false
$ ruby -r set -e 'p Set[1,2] === 1'
false
112 :
81 :04/09/16 01:59:18
なんか沢山レスが付いてる。thx 結構いろいろな方法があるみたいだな。勉強になるよ。
blikiのソースって公開されないのかなあ
>>111 >>95 =
>>97 です。
確かに「包含関係」って言ったのは正しくないみたいですね。
さらに、数学苦手なので、「所属性」を表す記号を (そもそも存在するのかさえも)
知らないので適当書きました。
すいません。
>>106 eval 使うのは怖くない?
class String
def replace(words); self.gsub(/#\{(\w+)\}/) { words[$1] }; end
end
words = { "month" => month, "day" => day, }
puts text = tmp.replace(words)
2.0の引数名を指定して引数渡すのってオリジナルなのそれともなんかのパクリ?
>>116 VBにもその機能があるのは知ってる。
VBがなにからパクったか、あるいはオリジナルなのかは知らん。
>>116 オレがはじめてみたのはAdaで時期は80年代だった。
>116 漏れの個人的意見としてはObjective-Cっぽくも感じる。 (あれは引数名がメソッドシグニチャに埋め込まれてるつー方がまだ正確か)
>>116 CGI とか見たく、hash でその機能を実現してるのもあるよね。
実行速度的は hash と変わらない感じなのかな。
ところで、その機能はどんな表記で利用できるの?
>121 漏れも見えない。 つーか、IEとFirefoxでそれぞれソース表示させたら全然違うし。
>>121 macOS10.3.5 ブラウザSafari1.2.3ですが閲覧不可です。
以下のメッセージが表示されています。
------------------------
ページ “
http://cvs.m17n.org/~akr/diary/ ” を開けませんでした。
エラー:無効なサーバ応答(NSURLErrorDomain:-1011)
、エラー番号とこのメッセージが表示される前に行った動作の説明を記載して、“Safari”メニューから“Apple にバグレポートを送信”を選択してください。
------------------------
やれやれ。
>>107-110 ,115
アリガトー
テンプレート系は、CGIじゃなくてもerb使うのが王道なのね。
evalは最後の手段と。
>>115 は面白いな。
勉強になりまスタ
erbもevalしてるけどな
evalやinstance_evalを安易に使う風潮があるよな。
>>126 テンプレートの対象がHTMLならamritaも便利ですよ。
>>116 70年代前半のLISPかSmalltalkのどっちか。
プログラミングまったく初めてでRubyを勉強するために 「たのしいRuby」を買ってきたんですが いきなり文字列だとかメソッドだとか言われてもちんぷんかんぷんです。 基礎の基礎の考え方から勉強できるような本はないでしょうか。
釣り?
> リファレンスマニュアルは参照している。 > だが、作者の頭の中にしかない仕様は参照できない。 どうよ?
>>131 とりあえず自分の名前を表示するプログラムを作ってみよう。覚えるには使ってみるのが一番だと思う。
あとは「自分が書いたプログラムで何をしたいか」だな。
「簡単なプログラム」でこれはないだろう・・・ 難しくはないにしても激しくわかりづらい。 Ruby入門ではなくRubyによるプログラミングの入門書ってのは確かにないかもな。 line = '' indent=0 $stdout.sync = TRUE print "ruby> " while TRUE l = gets unless l break if line == '' else line = line + l if l =~ /,\s*$/ print "ruby| " next end if l =~ /^\s*(class|module|def|if|case|while|for|begin)\b[^_]/ indent += 1 end if l =~ /^\s*end\b[^_]/ indent -= 1 end if l =~ /\{\s*(\|.*\|)?\s*$/ indent += 1 end if l =~ /^\s*\}/ indent -= 1 end if indent > 0 (ry
だれかさんが言ってたけど、 結城浩先生,Rubyに転ばないかな〜。
結城氏はPerlやJavaなどの実用度や完成度の高く普及した環境にしか興味がないんだよ。 コードの字面で一喜一憂するほど子供じゃないからね。
宗教上の理由もあったりして。
wxRubyのサンプル(images.rbw)なんだけど > paint do | dc | > dc.clear > dc.draw_bitmap(@bitmap, 0, 0, false) > end って何やっているんだかわかる人いる? paint do | dc |とendの働きがさっぱりわからん… doってRubyのマニュアルにもないしwxRubyのマニュアルにも見あたらないし…
>>137 読解力無いの?それは「『簡単なプログラム』の例」ではないでしょ。
# 書かれた当時は irb も無かったはず。
>>141 ……ネタか?
do … end は { … } と(ほとんど)同じだが。
ところでみなさま、do … end と { … } の違いって何?優先順位だけ?
昔は「値を返す時は{ … }」だったみたいだけど。(Rubyist Magazine より)
144 :
デフォルトの名無しさん :04/09/17 13:54:01
質問を釣り扱いしたりネタ呼ばわりするRubyコミュニティって腐ってますね。
さすがに、ブロックを質問するのは、かなりありえない。
>>145 だよな。
リファレンスマニュアルにだってちゃんと・・・、と思ったら見当たんねー。
どこかに書いてある?
matzの脳内
yield から辿って「メソッド呼び出し」の「イテレータ」で見つかった。 こりゃふつーは捜し当てられないんじゃなかろうか。
>>146 Rubyの文法 > メソッド呼び出し > ブロック付きメドッド呼び出し
>>143 ごめんなさい。大マジです。マヌケな質問に答えてくれてありがとうございます。
do〜endと{〜}ってほとんど同じなんですか…
書き換えてみたらそのまま動きました。
リファレンスマニュアルの機能別検索を見て無い無い思っていたんですけど
メソッド呼び出しの所にあったんですね…_| ̄|○ il||li
でも言われてみれば、「doって何だろ?」と思った人が検索する時に
ここにたどり着くのは容易じゃないかもなあ。
どうすりゃ分かりやすいだろう。
・do は予約語っぽい → 予約語一覧から、それぞれ関係ある項目にリンクを貼る
とかか?
>>151 ネタ扱いして失礼。最初どんな風に検索してどのページを見たか
(そしてどこで諦めたか)を教えてくれると、リファレンスを改善できて助かる。
>>149 ,
>>150 スマソ。以前手元にコピーしてきてた古いの見てた。
# 当時は「イテレータ」だった。
初学者にとってはRubyは同機能異表記な機能が多すぎて混乱する上に 冗長な表記を避けて書かれた既存のコードを読む場合可読性が非常に低く 暗号的という意味ではPerlと大差なかったりするとかしないとか。
>>152 俺の場合…
・doって制御構造で使われていたような…→for/whileとかであるけど単独の使用例は見つからず→空振り
・んじゃ検索で「do」を…→当然のように大量引っ掛かかる→あきらめ
・なら機能別検索で…→do単独の項目が見つからず→お手上げ
でした。
できればリファレンスマニュアルが項目ごとに全文検索できればいいのですが…
今の構造じゃ難しそうですね。
>>154 大なり小なり言語にはつきまとう問題だと思う。オブジェクト指向な言語ほど顕著かも
C++なんかも他人のコードはかなり読みにくい気がする。
確かにRubyは自由度が高すぎる感はあるよね。あと、"ほぼ"同機能なコードがあったりとか。
>>154 >初学者にとってはRubyは同機能異表記な機能が多すぎて混乱する
「他人の書いたコードを読む時」ってことかな。
両方知ってて好きな方を使う分にはいいけど、初学者は
「この例に出てくるcollectって何? mapとは違うの? …(調べる)…って一緒かよ!」
みたいになる、と。
>冗長な表記を避けて書かれた既存のコードを読む場合可読性が非常に低く
こっちはよく分からないので例キボン。
個人的には、Hashでよく使われる「var ||= value」は可読性が低いと思う。
hash['key'] = value unless hash['key']
が冗長なんで
hash['key'] ||= value
なんて書きたくなる気持ちは分かるけど……。
there is more than one way to do itだよ matzがLarryについて尊敬する点ってのはここなんだろう
>125 たいがい亀だが Firefoxはマイナーってことでせうか。 # Firefox0.9.2(Japanese,Windows)では見れてまつ。
「Content-Encoding deflate」でぐぐれ
冗長といえば a+=1
>>140 そういえば結城さんもクリスチャンだよな。
>>160 そして「なんで Fixnum#++ がないの?」と話はループ・・・
ちょっとわかりにくいんだけど… class A < CC @@foo = 'hoge' class B < DD def hoge ここで@@fooを読み書きしたい end end end の場合どうしたらいい?
>>163 class A で @@foo のアクセスメソッドを定義してやれば?
>>140 プロテスタント(結城)とモルモン(まつもと)だもんな。
ヤバイよな。
>>115 String#replace(other) を置き換える方が怖くない?
>>166 あわわわ、確かに。 (元々の String#replace の存在をすっかり忘れてた・・・)
>>164 なるほど。できました。
やってみて思ったんだけど変数のようにデータを出し入れできるオブジェクトって作れなかったっけ?
Aの下にそのようなクラスが定義してB::hogeないでオブジェクトを生成すればデータの出し入れが
便利になりそうだと思ったんだけど…
連続で質問すまん
169 :
デフォルトの名無しさん :04/09/17 20:57:17
>>166-167 そういえば、知らないうちにメソッドを置きかえてたというのを防止することってできるの?
>170 moduleで囲ってmoduleごとfreezeかねぇ module B def self.teste; p 'test' end end module B def self.teste; p 'test2' end end #=>can't modify frozen object (TypeError)
172 :
デフォルトの名無しさん :04/09/17 21:22:10
スマン、抜けてた module B def self.teste; p 'test' end end B.freeze module B def self.teste; p 'test2' end end #=>can't modify frozen object (TypeError)
あ、-W のときはちゃんと教えてくれるのね
% ruby -W -e 'class String; def replace; end end' -e:1: warning: method redefined; discarding old replace
クラス変数があってほんとによかったと思うことってどれくらいあるのかな。
>175 グローバル変数的な使い方を良くするよ。
一度でいいから言ってみたい。 「次のようにすると core を吐きます。」
>>177 そんなに大したもんじゃないつーか
泡沫Rubyistの俺でも数回でたことある。
仕事で普通に使ってたら出て支障きたした。
むしろBug出すぎw
ただ頑張って直してパッチ書いて
取り込んでもらった時は嬉しかった。
仕事で普通に使うことを許される会社っていいな。
$1とかってスレッドごとに独立してるの?
試せよ
ディレクトリ移動を行うスクリプトを書きたいのですが、 Dir.chdir だとスクリプト内でしかディレクトリ変更が効きません。 % pwd /home/ruby % ruby -e'Dir.chdir("/home")' % pwd /home/ruby 動作としては、こんな感じにしたいのですが。 % pwd /home/ruby % cd.rb /home % pwd /home なにか方法はあるのでしょうか?
>>182 それはRuby云々ではなくUNIX FAQ。
結論だけ言うと「普通は無理」。
まともな方法では親プロセスには影響できない。
>>182 カレントディレクトリというのはプロセスごとに持っている情報。
子プロセスが作られるときには親プロセスのを引き継ぐけど、
子プロセスから親プロセスのそれは変更できない。
>>183 >>184 なるほど。ありがとうございました。
じゃあ、 Rubyスクリプトの出力を受け取って
cd を実行するようなシェルスクリプトをつくって
% . hoge.sh
としてカレントシェル内で実行する、って方法か
alias hoge='. hoge.sh'
にしておくとか。
moonwolf氏が空回りしてると思う人の数→(1)
matz七誌出乙
Ruby Garden の松は matz ということでFA?
詮索好きだなぁ・・・
>>186 ruby-listの読書会のはともかく、首藤プラネットは良いと思う。
リンク先見るかどうか、寸評のおかげで決められるし。
>>186 日本人にはめずらしく行動力だけはズバ抜けていて、そこはマジで尊敬するけど…
あ れ は P l a n e t と は 言 わ な い よ な 。
むしろ、ruby-talk便りとかそっちの方が正確だろうな。
あるいはRuby Watchとか。
wxRubyに関するサンプルとか資料がまとまっている所ってどっかある? 画像の動的な書き換え方がわからなくて… 何かイベントがあったときに表示されている画像を書き換えたいんだけど Image書き換えてサーフィスに変換してbitbltで転送しても画面が書き換わってくれない。 いったん別のウインドウで隠して再度アクティブにすれば書き換わってくれるのだが…_| ̄|○
>>192 ソースを読んでドキュメントとチュートリアルとサンプルと
その他雑多な資料を作成してください。
あなたがやらない限り未来永劫ないままです。
>>191 あれを行動力というのか?まあそうかもしれんけど。
Moonwolfの行動力って、るびきちのそれと似てるんだよね。
planetって本来どういうのなの?
さんくす。アグリゲータの一種なのね。
そういや bdb1-0.2.2 のバグはどうなった?
やっぱrubyはまだベータレベルだな(w
akr さんと同レベルの人があと2,3人にたら、まつもとさんは過労死しそうな予感。
akrって誰?
>>195 > あれを行動力というのか?まあそうかもしれんけど。
> Moonwolfの行動力って、るびきちのそれと似てるんだよね。
うーん、本人には失礼かもしれないけど、同意してしまう。
205 :
デフォルトの名無しさん :04/09/20 13:31:14
age
206 :
デフォルトの名無しさん :04/09/20 13:41:46
ruby-talkウイルス来すぎ
Window::refreshで解決しました。 wxRuby使うと激しくRubyらしからぬコードになるような気がするのは気のせいか…?(´・ω・`)
>>201 >やっぱrubyはまだベータレベルだな(w
だからハックのやり甲斐があるんじゃない?御輿に乗るだけが能じゃないでしょ?
210 :
デフォルトの名無しさん :04/09/20 21:04:59
例えばRubyで,2chの特定のスレッドを定期巡回して,1000まで到達したら, ローカルにテキストファイルとして保存するようなプログラムを書きたいのですが, どのような方法が良いでしょうか? URLとかスレッドごとに変わってしまうので,その辺がややこしくて...
>>210 巡回スレ全てに更新チェックを行い
更新されているスレのデータを差分取得。
1000でスレが止まったら巡回スレからはずす。
1001まで行ったら無視する。
特定のスレを追うんならURLは変わらんだろう? 何を考えてるのかわからん。
>>211 返信ありがとうございます.
巡回してるスレッドが1000に到達したら,新しいスレッドを自動的に巡回
できるようにしたいのですが,その部分はやはり手動でやらなくては
ならないでしょうか?
210とは違うんだが、時々鯖が変わったりするみたいだけどそれは問題ないの? アホなこと言ってたらゴメソ
>>217 や
>>214 に対しては完璧な方法は無理。
ただ、設定ファイルを簡潔にして管理しやすくすれば、鯖の移動くらいは設定
ファイルを置換一発で可能というくらいにはできるはず。鯖の移動なんてそん
な頻繁には起きないし、それでいいんでは?
次スレの検出は、自分もラスト30くらいのレスからパターン検出くらいしか思
いつかないな。
>>217 2chブラウザはスレ一覧更新すると移転追いかけるから、
板移転時はスレ一覧(subject.txt)を取りにいくと30xと移転先のLocationを返されるんだと思う
Rubyマニュアルのnet/httpのところにリダイレクトへの対応について載ってるよ
Rubyってコードが置いてあるディレクトリの取得ってできたっけ? コードが置いてあるディレクトリ以外からスクリプトを実行したときも コードが置いてあるディレクトリと同じ所にあるファイルをrequireとかしたいんだけど…
>221 一応 __FILE__ つうのもあるけど、起動スクリプトからの相対パスみたいだね。 絶対パスを取るにはどうすりゃいいのかね?
>>222 サンクス。__FILE__から取得したパスを加工すれば何とかなりそうです。
mswin32なせいかコードが置いてある場所とは違うところからコードを実行すると
絶対パスが返ってくるようです。
>絶対パスを取るにはどうすりゃいいのかね?
File.expand_path(__FILE__)
はどう?
>223 ダメでした @ mswin32 1.8.1 >224 >File.expand_path(__FILE__) 「カレントを移動していない」という前提が必要ですな。 p File.expand_path(__FILE__) # => D:/.../test_testfield.rb" FileUtils.cd( "lib" ) p File.expand_path(__FILE__) # => D:/.../lib/test_testfield.rb" #...は省略部分 といった感じ。
226 :
shige :04/09/21 00:23:52
Windowsのパスに厳密にマッチする正規表現ってどんなの?
全部を正規表現では書かないか、厳密にはしないのがいいんじゃないか。 パスの途中の予約語の出現禁止とか、 ショートとロングとか、 全体の長さとか、 いろいろまんどくさそだ。
MoonWolf氏に関しては、やってることは凄いと思うんだが、単に躁鬱病患者が 躁期に入っているだけにも見える。 もしそうなら、鬱期に入った途端に全てのプロジェクトが中断してしまうわけで、 うかつに氏のやってることに賛同できない。 せめて複数人でプロジェクトを立ち上げてくれればいいんだが、他人の協力は 拒んでいるようだし。
230 :
デフォルトの名無しさん :04/09/21 13:24:16
Bash スクリプトを書いていて、文字列処理で難儀になっても、 そのまんま Bash で押し通すことがあるんや。 Ruby で書き直すのが難儀な部分。 (1) getopts と case を GetoptLong に書き直すこと。 全体的な構造の書き直しと、GetoptLong::REQUIRED_ARGUMENT 等の定数が難儀。 (2) -d, -w やらなんやらファイルテスト演算子を、 FileTest.directory?(), FileTest.writable?() に書き直すこと。 # _d, _w で代替したいちうわけや。 (3) -nt, -ot やらなんやらファイルテスト演算子相当メソッド。 FileTest.newer?(file1, file2), FileTest.older?(file1, file2)
つうか、planet.ruby-lang.org作って海外のRuby hackersのblogを 集約してくれるとすごく欲しい。
-- sample -- $ cat sample.sh #!/usr/bin/bash while getopts a:b:cde Opt; do case "$Opt" in a ) echo "a has $OPTARG";; b ) echo "b has $OPTARG";; c|d|e) echo "$Opt specified.";; * ) exit 1;; esac done [ $OPTIND -gt 1 ] && shift $((OPTIND-1)) [ -d "dir" ] && echo "dir" [ "a.txt" -nt "b.txt" ] && echo "a.txt is newer than b.txt" echo "end of the script."; exit 0 -- end -- Bash から Ruby へ書き直しの指針みたいなものおまへんか。 require 'bash' とかすると、楽になるライブラリーおまへんか。 "option requires an argument -- b" "illegal option -- x" とかも自動で出て欲しい。
FileTesterクラスと単項マイナス演算子でファイルテスト演算子を実現できないかな?
require 'shugyo'
Perl ―> Ruby 本はあるが、Bash ―> Ruby 本は無いな。 基本的なことやけど、var=~/bin を Ruby ではどう書くのかとか。 ワテは、Bash から離れたいとは思いまへん。 Ruby で OO しようとも思いまへん。 ただ、ちーとばかし難儀になりよったとき助けてくれればええのや。 それなのに Ruby ときたら・・・ ワテが楽できなければ、サーバーの Ruby ライブラリ更新するつもりはない。 いちいち、ドキュメント読まなければならへんし。 おっちゃんは忙しいや、調べさせるな。 # Ruby 自体は気に入っとる。
> Perl ―> Ruby 本はあるが、Bash ―> Ruby 本は無いな。 そりゃ単にニーズが無いからでしょ。
>230 文字列処理がマンドクセとこだけ、インラインでRubyスクリプト書いて ``で結果取ったら如何か。
>>230 Bash と Ruby はターゲットが微妙に違うんだと思うけど。
シェルスクリプトで楽なところは、シェルスクリプトでやればいいし。
面倒なとこ(正規表現とか)だけワンライナーで Ruby に渡せばそれでいいんじゃ
ないかな、と思います。
というのが元の「そのまま Bash で押し通す」って意味? 無理して Ruby に
する必要はないと思う。
書いてあることは、やろうと思えばそんなに難しいことではないでしょう。た
とえば、def _d(v); FileTest.directory?(v); end のようなものを全部自作
しておくとか。一度作っておけば、あとは使い回せるしね。
Object指向言語に向かって、調べるのが面倒と言われても…… と、思った。
とりあえずSunのJava API Docsを見習ってほしい。 # もれはこないだWikiにちょっと貢献したぞ
また話がループしそうな悪寒
ライブラリとか書くとき、どの形式でドキュメント書きゃいいかわかんないんだよね。
「Ruby で日々のシステム管理を楽にする本」
カッコの入れ子に対応してマッチする正規表現って書けますか? たとえば、Cの関数の第1引数の一覧を抜き出そうとして、/\w+\(([^)]+)[,)]/ と書くと $1 には第1引数が入りますが、 foo((x+y)+z) と書くと、"(x+y"までしか入りません。 正規表現では無理!racc 使えって言われるような感じもするんですが、 racc だとCの文法全部 .y ファイルに書かないといけないので、 正規表現ですませられないかなぁ・・・と思ってるんです。
絶対無理です。
>>244 端的に言うと正規表現「だけ」で書くのは無理。文脈自由文法の世界だから。
ただ、 Perl では正規表現を独自拡張して、こういうのに対応しているね。
とはいえ、 racc/yacc を使えというのはさすがに大仰すぎると思う。
対処法1:
入れ子の数の限度が決まっているなら、その数まで対応するように書くことは
できる。たとえばその例題なら、/\w+\((.*?(\(.*?\))?.*?)\)/ とかね。
対処法2:
関数を自分で書く。開きカッコが来たら自分自身を呼んで、閉じカッコが来た
らそれまでスキャンした内容を返す関数を書くだけだから、簡単だと思う。
StringScanner とかあるし。
どうせ racc とかは、BNF(みたいなやつ)から関数を自動生成するためのプロ
グラムに過ぎないから、たいした手間じゃなきゃ自分で書く方が楽な場合もあ
る。
おもいっきりスレ違いだけど、perlreの言語クラスって何に相当するの?
L4+α
>>230 Rubyはシェルスクリプトの代替に向いていないです。
Getopt::Stdやファイルテスト演算子もある Perl で良いと思う。
CPANもあるし、perldocもあるので調べる苦労が少ない。
>CPANもあるし、perldocもあるので調べる苦労が少ない。 Rubyはプログラミングには向いていないです。
>>246 >Perl では正規表現を独自拡張して
そうなんですか?おもしろそうですね。調べてみます。
対処法1だと、ちょっと汎用性におとるので、対処法2で
検討してみたいと思います。scan とか遅いんだろうなぁと
思ってましたが、StringScanner なんてのが
あるんですね。勉強になりました。
正、負の数両方あり得る場合で負の数を認識する簡単な方法ってある? i = 0xFFFFFFa8 #=>-88 i = 88 #=>88
>>252 何がしたいのかわからないので、もっと詳しく。
とりあえず
i = 0xFFFFFFa8 #=> 4294967208
だよ。
>>256 スマン
符号の向きと絶対値が欲しい。
一応、
i = 0xFFFFFFa8
if i > 0x7FFFFFFF then
i = 0xFFFFFFFF - biHeight + 1
sign = 'minus'
else
sign= 'plus'
end
とかやれば実現できるけどイマイチスマートじゃないので…
>>257 さっぱり言ってる意味わかんねー。
[0xffffffa8].pack("I").unpack("i")[0]
>>257 絶対値は Numeric#abs で取れるからいいとして、
符号の方は、直球だけどこんな感じかなあ。
class Numeric
def sign
(self > 0) ? :plus : ((self < 0) ? :minus : :zero)
end
end
これで
>>252 の答えになってるか全く自信ないけど。
Rubyでシェルプログラミングの話題が出てるのに、 「Rubyシェルプログラミング -irb&irbsh徹底活用-」 という本の話題が、全く出ないことにワラタ。
252は、Rubyでは巨大な数が自動的に Bignum になるのを知らないんじゃないの?
i = 0xFFFFFFa8
i.class # => Bignum
Ruby で普通にやってるかぎり、一番上のビットが立っちゃって負数になるこ
とはないよ。
>>258 みたいな例はあるか。
>>260 irbsh ってスクリプト書けるの?
262 :
デフォルトの名無しさん :04/09/22 23:42:03
いやでも、 Rubyで挫折って、わかる気がするなあ。 ずっと意味不明なバージョンアップ追ってたら頭おかしくなりそうだし、 何を作ってもとろい速度のスクリプト眺めてると鬱になりそうじゃん? かといって思想のまるでない開発ML覗いても、PerlとPythonの猿真似しか話題ないし、 こんなの与えても娯楽を常に要求する一般人は見向きもしない。 そもそもUNIXでしか見掛けない、哀れな言語、というのが一般人の見解だし。 そうそう、最近CVSあぼーんで言語の信用かなり悪くしたよね。 この事件でRubyはビジネスで成功できないことがまた証明されてしまったわけだ。 昔からRubyは関係者同士で常に足を引っ張って成長しない。 お金の匂いしないよね。全然。 そんな言語だから、挫折が常態であるのは必然なんだと思う。
265 :
デフォルトの名無しさん :04/09/23 00:24:07
ほらきた。 Ruby使いって貶されると、 すぐ言葉少なになるよね。 もう貶されるのに慣れちゃった? ちょっと、心をおちつけて。 Rubyを知らなかったあの頃を思い出してごらん。 あの頃の君達は希望に満ち溢れていたよね。 そう、今まで君達は、とっても悪い夢を見ていたんだ。 Rubyなんか捨てて、あの頃見ていた希望を取り戻そうよ!
>>261 じゃあ -1 を16進表現にしたらどうなるかと思ったら、
irb(main):001:0> "%x"%-1
=> "..f"
fが無限に続いてるってことか?
>>265 Ruby ユーザには厨が多いというが、
こういう変な粘着も多いな。
rubyyyyyyyyyyyyyyyyyyyyyyyy is No1
そういや、Ruby2.0の開発ってどこで議論しているの? >265 >Rubyを知らなかったあの頃を思い出してごらん。 あまり変わらないなぁ。 Rubyを知らなかったころは……DelphiでプロパティLove/C++でTemplate Loveだったしなぁ >267 気でも狂ったか? >270 そんなこと書いているヒマあったらコード&ドキュメント書け。
> そういや、Ruby2.0の開発ってどこで議論しているの? matzの脳内
Ruby教本部
やべぇ、松江に辿り着く前に鳥取の砂地獄にのまれちまう。
どういう経路で松江に行くんだよっ!
巡礼の途中で鳴門の渦潮にのまれて、気がついたときには Debian教の信者になっていました。
まつもとさんの9/21の日記って、どこのこと?
ここのことだろ。 お前ら態度悪すぎだよ。しかも個々のレスの質が低い。 ネットワークトラフィックを浪費することを自覚して反省しろ。
>>280 の言葉に「私は正しい」とか「管理する立場だから」とかいう慢心があった
ことは否定できない。間違っていたのは
>>280 の方だ。あやまれ。
ゴメンチャイ
wiki ベースにでもしてくれれば手伝うよ。
Ruby初学者(しかもプログラミング初体験)です。
>>283 わたしはなにもできないんですけれど、
完成を期待してます。
がんばってください!
# 声援だけならだれでもできるって...とほほ。
MoonWolfタソが早くも息切れ気味のようです。
>284 wikiベースも考えたけど、日本語版の存在がなぁ…… アレはOPLじゃなさそうだから、翻訳に混在すると不味いです。 誰が翻訳したかわかるようにしないとね。一応
もともと金が絡まない話なんだから中断も予測範囲内。
なんか「うわ、釣れてるw」とか言ってるんですよ。 「反応少なすぎ」って、どんな反応があるもんだと期待してたんですかね。
Ruby/Tkってかなりお手軽ですね。 なんかRubyと相性いいかも。
TK入れるのマンドクサ
Ruby/GTK2 のドキュメント揃えて欲すい、英語で良いから。 大きな変更点である、TreeView周りのマヌアルが欠けてる……
畑耕すのにつまようじ使うようなもんだな>RubyでGUI
前の方でwxRubyはRubyっぽく書けないという話が出ていたけど、 他のGUIツールキットはどんな感じですか?
>>292 Tkってかなりでかくない?
インストールもコピーして終わりってわけにもいかないし
というかTclはイラネ。 でも世間ではTcl捨ててる実装の方が少数派なんだよな。
net/httpでmultipart/form-dataなものを送信できますか?
>>299 Part7で出てる。
googleキャッシュにしか残ってないようだ。
505 名前:501[sage] 投稿日:04/02/18 19:58 うーん、こんな感じかなー。 filename = 'hoge.txt' str = File.open('hoge.txt') { |f| f.read } name = 'upfile' cont_type = "text/html" boundary = 'foooobarrrbazzz' ### データ data = <<END --#{boundary} Content-Disposition: form-data; name="#{name}"; filename="#{filename}" Content-Type: #{cont_type} #{str} --#{boundary}-- END ### ヘッダー header = { 'Content-Length' => data.length.to_s, 'Content-Type' => "multipart/form-data; boundary=#{boundary}", } require 'net/http' http = Net::HTTP.new('192.168.0.1', 80) resp_header, resp_body = http.post('/cgi-bin/hoge.cgi', data, header) もうちょっとでうまくいきそう。でもわからん。
508 名前:501[sage] 投稿日:04/02/18 21:41
>>505 "\r" をいれたらうまくいった。
### データ
data = <<END
--#{boundary}\r
Content-Disposition: form-data; name="#{name}"; filename="#{filename}"\r
Content-Type: #{cont_type}\r
\r
#{str}
\r
--#{boundary}--\r
END
次のようにすると core を吐きます。 ↓
$ ruby -e 'puts "core"'
>305 内臓まで吐いたらあ〜るになってしまう。
文字列を連結するのに配列使うよりString#concatの方がかなり速いけどもっと速い方法ってある?
>>309 thx.
それ読んだ上でもちっと速い方法はなにかないかなと…
無茶言ってスマソ
ある程度でかいデータを処理しようとするとちょっとの差がもろに
実行時間に響くんだよな…_| ̄|○
>310 これ言ったらおしまいかもだけど それならC/C++で書いた方が……
>>311 やっぱそうか…C/C++でやれば一瞬で終わることはわかっているんだけど
複数のプラットフォームで動かすことを考えているのでC/C++の使用はちょっと難しかったり…
とりあえず地道に詰めてみるよ…
nByteごとに分割処理って配列にしてからeachするよりもwhileとString#self[nth, len]の
方がかなり速いのね…
>>312 速度が要求される部分だけC/C++で拡張モジュール書くというのはダメ?
というか移植性で問題になるところって何かあるの?
>308 プラットフォームはなに? Cygwinだったらmswinに変更するだけで随分違うよ
Ruby/Qt,QtRubyのプログラムを windows上で開発したいんですけど 方法ありますか?
>>313 独自にRuby以外で拡張モジュールを作ってしまうと実行する側で
拡張モジュールのコンパイルを求めることになってしまうから…
配布用のスクリプトなのでできればRubyのみにしたいんです。
>>314 mswinです。
いちおう努力はされてるみたいだけどね。 $ /usr/bin/time ruby168 -e 's = "" ; 1000000.times{s.concat("a")}' 1.41 real 1.26 user 0.12 sys $ /usr/bin/time ruby181 -e 's = "" ; 1000000.times{s.concat("a")}' 0.79 real 0.77 user 0.00 sys
% /usr/bin/time ruby -ve 's = ""; 1000000.times{s.concat "a"}' ruby 1.6.7 (2002-03-19) [i386-linux] 5.01user 0.60system 0:05.60elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (221major+397minor)pagefaults 0swaps % /usr/bin/time ruby-1.8p2 -ve 's = ""; 1000000.times{s.concat "a"}' ruby 1.8.2 (2004-07-29) [i686-linux] 4.27user 0.02system 0:04.29elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (228major+389minor)pagefaults 0swaps
Emacs系エディタをお使いの方へ (setq-default indent-tabs-mode nil) を設定しましょう。 これを設定しないと、スペースとタブが混ざってしまいます。
混ざってるとなんかまずい事でもあるの?
他のエディタで表示が崩れるから。 個人的にはもう一歩進んでPerlを使うことを推奨したい。 これによって多くの人にとって可読性・保守性が大幅に向上するからね。
はいはい
>>322 2〜3行目に関しては、
みんな十分知った上で Ruby を使ってるんですよっ ☆
>>322 2行目:Rubyを戻したらPerlだよな…進ませたら何になるんだろう?
3行目:Perlより読みやすいからRuby使い出しました!
>>322 他のエディタで表示が崩れるなら、
個人的にはもう一歩進んでEmacsを使うことを推奨したい。
これによって多くの人にとって可読性・保守性が大幅に向上するからね。
俺ならモードとかタブ幅の設定とかはソースに書くけど。
☆
そうだな。いろんなプロジェクトをいじる場合はスタイル決めうちじゃマズーだろ。 emacs なら file variable 推奨。vimにも同様の機構はありそうだ。
タブがどうのと粘着してる奴って 今時タブを態々8以外にちまちま指定してるわけ? もしかしてviとかで自分でちまちまハードタブつかってインデントしてるとか?
HSPネタ以来の盛り上がりだな
タブ幅は3だろー。
きっとプロポーショナルフォントをつかってるんだろうな
>>335 shugo さんも以前 3タブ (SPC 3 つ?) だったような。
331ってなんかかわいそう。
>308 連結だけならarray.joinのほうが速いかも。
わたなべひろふみさんて何歳ぐらいのかたのですか?
transamiさんて何歳くらいのかたですか?
341 :
292 :04/09/26 03:00:37
レスがついていたので、いちおう。 Tkってそんなインストール面倒なのかな? うちで使ってるのは、FreeBSD と Windows だけど FreeBSDはPorts一発で、コンパイル時間もほとんどかからなかったし、 Windowsの場合だとActiveTclとかいうのでインストールした。 インストールは確かに手軽じゃないけど、書き方が手軽ってこと。 そりゃ、ウィジェットとか少ないのかもしれないけど、 逆に全部、把握できるくらいだから、ちょうどいいかも。 それに、書く行数が少ない気がする。初心者向きかも。 感じ的には、Zope(Pyだけど)とかよりtDiaryが 使ってて気持ちいいって感じ。(うまく言えないけど)
LISP使い始めてからタブ幅2ですが。 ただのスペースと区別が付けばいいので。
Zopeとtdiaryを比較するのはいかがなものかと。 あまりに違いすぎて(ry
俺もタブ幅2。GNU Coding Standardsの影響もあるけど、そもそも幅を多めに 取るのが好きじゃないので。でも世間では4か8が多いんだろうな。
>>343 禿同。
プラットフォームそのものと一Webアプリを同列に比較するのは乱暴杉。
>>331 おれは331に同意だな。
Tab幅を8以外にする理由が分からんし、Tab幅を8にした環境が用意できない理由もわからん。
「Tabが8じゃない人が読むとインデントが崩れるからTabを使うな」っていわれたことがあるんだけど、
なんでそんな設定をしているやつのためにわざわざこっちが合わせなきゃならんのか。
思わず「じゃあTabを8にしてから読んでください」と捨て台詞をいうところだった。
Tab幅とは別に、インデント幅は2でも4でも何でもいいけど。
タブを使わない奴は抽象度が低い
おれもTAB=2だけど かなり読みやすいよ 最近長い名前扱うから特に
インデントはブロックレベルだけで行なわれるわけではない
質問です。 Arrayの中に入れるオブジェクトをFixnumとか特定の型のオブジェクトに 限定することってできますか?(他のを入れようとすると例外を投げるとか) 継承して[]=とかのメソッドを全部オーバーライドすると面倒だし。
>351 できない。
これは有名なRubyの限界
>>347 あなたがインデント幅は2でも4でもなんでもいいと思っているように、世の中には、
タブ幅は2,4,8のどれでもいいと思っている人もいるのだよ。
>>351 継承はしないで、つかうメソッドだけ委譲したほうがいいじゃない?
無理やり実現する必要はないだろ 元々そういうもんなんだから
何ら手を加えずに機能を増やすってのが無茶だと思うが。 forwatable を改造して委譲先のメソッドを呼ぶときに 型チェックするようにしたら?
タブ幅の話がまだ続いているようですが、そういえばRuby用の ソースコード整形ツールって何かあります?
map! みたいに引数の型がチェックできないこともあるんだから。 たいていの場合は必要なメソッドだけ定義するのがいいと思うぞ。 数値とそれ以外みたいな分け方なら NArray というのもある。
配列の要素の型を指定できなくて困ったことってないんだけど、どんなときに困る? それとも気分の問題?
本気でわからないならただのアホだな
使う側が呼び出しの規約を守るべきだと思うけどね。 型を限定すると Array の強みが失われるんだし。 もし型を限定したいならそういうクラスを作ればいいだけかと。
>>355 はーい、質問です。
・「タブ幅は2,4,8のどれでもいい」なら、8でもいいわけだよね?なぜわざわざ2や4に設定するの?
・「タブ幅は2,4,8のどれでもいい」といいながら、なぜ他人にはタブじゃなくてスペースを使ってインデントするよう言ってくるの?どれでもいいなら、気にしないでいいじゃん。
純粋にね、タブ幅を8以外に設定する理由がほんとにわからないの。355のような「8でなくてもいい」というのが理由とは思えない。
365 :
デフォルトの名無しさん :04/09/26 17:51:34
ルビ厨ってアホばっかでつね
動的な型と静的な型にはそれぞれ特長/欠点があるからね。 Arrayは汎用目的で作られているから、型チェックの機構を盛り込まなかったんじゃない? それに、 ・オブジェクトが指定したメッセージを受け付ける ・メッセージを渡した後に、正しい結果を返す だったら、オブジェクトを渡される側はオブジェクトの中身を気にする必要ないし。 まあ、やるんだったらAdapter パターンでも使って型チェックを追加かねぇ
実行時の型チェックって アスペクト指向じゃ無理なのかね 特異アスペクトなんてあるのか知らんけど
はーい、355じゃないけど回答でーす。 >「タブ幅は2,4,8のどれでもいい」なら、8でもいいわけだよね?なぜわざわざ2や4に設定するの? プログラムじゃない文章とか読む/書くときに便利だからです。 Outlook Expressとかタブ幅4だしね。 #Winは4が一般的じゃない? ・「タブ幅は2,4,8のどれでもいい」といいながら、〜〜 インデントするときにTab+Spaceで行いやがるクソエディタが存在するからです。 Emacsなんかもそうですな。 それに、↑の話にも関連するけど、Outlook Express使うようなユーザーに 「タブ幅8文字にしてくれ」というよりも、プログラマに「スペース使ってくれ」と 言ったほうが納得してもらいやすいから。
タブ/スペースとか幅とかEmacs/ViとかRubyと関係ない. 他にスレ立ててやってほしい.
> プログラムじゃない文章とか読む/書くときに便利だからです。 > Outlook Expressとかタブ幅4だしね。 > #Winは4が一般的じゃない? これは「タブ幅は2,4,8のどれでもいい」ってのと矛盾してるね。 > インデントするときにTab+Spaceで行いやがるクソエディタが存在するからです。 > Emacsなんかもそうですな。 タブ幅とインデント幅をごっちゃにして考えてるね。
>>368 なぜここでOutlookがでてくるのかわからん。Outlookでプログラム書くわけじゃないだろ。
>#Winは4が一般的じゃない?
メモ帳でもタブは8だろ。
>プログラムじゃない文章とか読む/書くときに便利だから
じゃあプログラムとそれ以外で設定を自動的にかえるようにすればいいじゃん。
モードごとにタブ幅を設定するなんて簡単だろ。
その程度のことを自分でやらずに、他人に設定を強要するのはいかがなものか。
ていうか、ほんとにこんなことが理由なのか?もっと説得力のある理由はないのか?
>>372 せっかくripperが入ったんだから、誰か作って
別に、タブでインデントするなとは言わない。 タブでインデントするならタブだけを使い、 タブとスペースを混ぜるな、ということ。
ようするにema糞厨は氏ねと
>>373 え、るbyて整形ツールみたいなのないの?
るbyスクリプトで書けないの?
ちょっと、かっこわるいですよ?
ようするに matz 氏ねと?
ようするにあれだろ、LispじゃなくてRubyで拡張するEmacsもどき作ろうぜって話だろ? とりあえず名前はRemacsでいい?
前にエイプリルフールネタか何かであったな。
>371 ホントの理由は >374 だね。 インデントについてはエディタごとに挙動が異なるので、やりづらいったらありゃしない。 最近はタブ文字をスペース8コに置き換えてからハクるけどな。 Emacs(のデフォルト)はほんとにクソですな。そのくせGNUコーディング規約のインデントは 8文字じゃなかったりするし…… >じゃあプログラムとそれ以外で設定を自動的にかえるようにすればいいじゃん。 全てのエディタでファイル種類ごとにインデントとか設定できる訳じゃ無いんでな。
>>378 それはそれで面白そうだけど、整形ツールって言ったら普通はC/C++で
言うところのGNU indentとかastyleのようなものを指すと思う。
>最近はタブ文字をスペース8コに置き換えてから お前も普通に糞だな
本来ならmatzの特権でコーディングスタンダードを定めるべきなんだが 本人からして変態エディタ愛好家だからそれも無理なんだよな。不幸なことに。
むしろスレ違いな議論にいつまでも粘着してる連中をスペースで置換したい。
>>385 作者以外が決めたものなんてなんの価値なんてないだろ
CなんかK&R以外のコーディング規約がいくつもありますが何か?
389 :
デフォルトの名無しさん :04/09/26 20:46:08
>>380 >全てのエディタでファイル種類ごとにインデントとか設定できる訳じゃ無いんでな。
おいおい、素人ユーザーじゃあるまいし、プログラマがそんなこというかね。
プログラマなら「ファイル種類ごとにインデントとか設定」できるエディタを使うべきだろ。
この言い訳を聞いていると、「エディタがないとインデントできないからLispやSchemeは使わない」とか
「すべてのブラウザで使えるわけじゃないからCSSは使わない」というのと同じだな。
Rubyは素人が楽しくプログラミングがコンセプトじゃないのか?
それはHSPです。
……解った!!>389 は他人にコードを見られる前提でプログラムしていないな。 確かにそれなら「タブ幅を8文字にしているやつは気でも狂っているんじゃない?」て 言っても別に害は無いわな。
ごめん ×タブ幅を8文字にしているやつは ○タブ幅を8文字にしていないやつは
395 :
デフォルトの名無しさん :04/09/26 21:45:47
オプソは混沌としてるのが好きなんでしょ。 くだらない字面で自己主張するのが好きなんでしょ。 なんでもばらばらで非効率的なのが好きなんでしょ。 わけのわかんない理屈こねて正当化する必要はないんだよ。
それにしてもRubyで作られた有料ソフトが 世間にでてこねーな、ようするに使い物に ならんということだ www.onitama.tv/product.html にあるHSP製の有料ソフトみたいな ハイレベルなのはひとつもない
むしろHSPでB2Bのサービスしてるやつがいるのかが知りたいところだ。
ActiveStateがRubyで商売はじめてくれると嬉しい。
>397 ホントにHSPで書いているのかな?プログラムのほとんどがDLLだったりして…… C++ & 適当なフレームワークの方がいいと思うんだけど
これは超極秘裏情報なんで口外して欲しくはないんだが 次世代言語としてHSPがLiveDoorに買収されることになったんだよ。
HSPに代わる燃料としてTAB幅が出現するも、 既にRubyスレ住人はHSPについて十分な知識があり即レス可能であったため、 TAB幅にはHSPよりも多くの利点があるにも関わらず、 RubyスレはHSPを燃料として使いつづけた。 これは、PerlとRubyの関係にも当てはまる。 デファクトスタンダードのものと置き換わるには、かなり大きな利点が無ければいけない。 なぜなら、デファクトスタンダードであることは、とても大きな利点であるからだ。
>>400 過去のHSPスレにコミケで入手した奴のレスがあったが、
特製DLLを少し使ってるそうだ。
おにたま氏の方がまつもと氏よりもハッカーとしての才能が
あるんだろうが、なにせヲタだからな〜。
ヤバイ。Rubyヤバイ。まじでヤバイよ、マジヤバイ。 Rubyヤバイ。 まず遅い。もう遅いなんてもんじゃない。超遅い。 遅いとかっても 「VBと同じくらい?」 とか、もう、そういうレベルじゃない。 何しろダイナミック。スゲェ!なんかコンパイラとか無いの。最適化とかJITとかを超越してる。動的だし超遅い。 しかもモジュールはC言語で作るらしい。ヤバイよ、C言語だよ。 だって普通は言語自身で作成するじゃん。だって自分の書いたソースがそのままモジュールにならなかったら困るじゃん。いまどきC言語でデバッグとか困るっしょ。 書いたソースが増えてって、まとまった機能を抽出できそうなのに、モジュール化するために1からC言語に書き換えるとか泣くっしょ。 だから他の言語は自身で作成できる。話のわかるヤツだ。 けどRubyはヤバイ。そんなの気にしない。C言語頼りまくり。Ruby使ってるんだかC言語使ってるんだかよくわかんないくらい二刀流。ヤバすぎ。 モジュールはC言語で作るっていたけど、もしかしたらPerlでプリプロセスするかもしんない。でもPerlって事にすると 「じゃあ、Ruby使ってる意味ってナニよ?」 って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。 あと超寒い。HSPと競ってる。タブ幅で言うと8。ヤバイ。寒すぎ。バナナで釘打つ暇もなく死ぬ。怖い。 それに超役立たずで何もできない。案件超ガラガラ。それに超のんびり。ロハとか平気で出てくる。ロハて。小学生でも言わねぇよ、最近。 なんつってもRubyは電波が凄い。荒らしとか平気だし。 うちらなんて電波とかたかだかMLで出てきただけで上手く扱えないからアクセス規制したり、放置してみたり、検閲削除したりするのに、 Rubyは全然平気。電波を電波のまま扱ってる。凄い。ヤバイ。 とにかく貴様ら、Rubyのヤバさをもっと知るべきだと思います。 そんなヤバイRubyスレに書き込んでる俺とか超偉い。もっとがんばれ。超がんばれ
藻前ら釣られすぎ
税金使ってんだからもっとマシなもんにしろというのが本音かな
暇を持てあましている
>>405 、いつもいつも粘着乙
>405 >何しろダイナミック。スゲェ!なんかコンパイラとか無いの。 動的<->静的 のどっちに比重を置くか、だよね。 Rubyの場合は極端に動的にしちまっているから、その代償としてコンパイラとか 最適化が死ぬほど難しいんだけど。 ただ、遅さの大部分がGCのせいらしいから、世代別GCとか参照カウンタGCとかに すればある程度は良くなると思うけどね…… >モジュールはC言語 拡張モジュールのこと?普通のモジュール(Module, Class)はRubyで書けるけど…… >荒らしとか平気だし まあねぇ。 >俺とか超偉い でもさ、もうちょっと情報の精度と密度を上げようよ。
>>397 RPGツクールが使っているんじゃなかったっけ?
それと、俺は業務で ruby を使ってプログラムを作り、客先に納入しているよ。
(一部Cを使っているけど)
>>409 そんな、テンプレレスにマジレスせんでも・・・
>>380 > >371
> ホントの理由は >374 だね。
なら、最初から論点をそこに絞って主張しなよ。わかりにくいなぁ。
わざと煽ってるんだろうけどさ。
まあ、気持ちは良くわかったので、少なくとも今後俺が書くスクリプトは
タブとスペースを混在させないように気をつけるよ。
410の会社に転職したいと思った香具師の数→(1)
matz自身Rubyでモノ作って飯食ってるって言ってなかったっけ? (印税や講演料の類を除いた上での話)
>>392 > 素人はRuby使うな……と。ふうン。
どうやったらそんな解釈が・・・それは曲解だろ。
それにわざわざタブ幅を独自に設定するやつが素人とも思えんし、素人のことを考えるならなおさらタブ幅は変えないほうがよくないか。
> じゃあ逆に聞いてみるけど、タブ文字を使うメリットって何?
ファイルサイズが小さくなるから。Javaのようにコンパイルする言語だと意味ないけど、インタプリタはスクリプトを毎回読み込む必要があるから、スクリプトはなるべく小さくしたい。効果は気持ち程度だろうけど、特にCGIはね。
つうかね、そんなことを聞くまえに、タブ幅を変更するメリットって何よ?「Outlookが4に設定してあるから」が本当に理由なのか?
ちゃんとした理由があればタブ幅が8じゃない環境も考慮するけど、その理由がぜんぜん明確に説明されなくて、ただ単にタブを使うなといわれるだけじゃ納得できねいだろ。
>>393 > ……解った!!>389 は他人にコードを見られる前提でプログラムしていないな。
話ずれてる。今はなぜタブ幅を変更するのか、変更することにどんなメリットがあるかを問題にしている。
タブ幅を変えるやつこそ、他人のコードを読むことを前提にしてない、といえないか。
「タブが8じゃない人のことを考えてプログラム書け」といわれるのは、「メモ帳しか使えない人のことを考えて文字コードはSJIS、改行は\r\nで書け」といわれるぐらい意味わからん。
タブ幅の話はもう疲れた。早く結論出して。
どこで見たか忘れたけど(tDiary回りだっけ?) ・インデントはタブ文字オンリー。 ・タブ文字の表示幅は自分の好きな値にする。 →同じコードが各人の好みどおりに表示されて(゚д゚)ウマー という意見に納得したので、オレはそうしている。ちなみにオレの表示幅は2。 ……だけど、長い行を途中で折り返した時 func( foo, bar, baz ) # ←この行のインデント の見た目をキレイにするには、上のやり方だと無理なんだよなあ。
>>415 >ファイルサイズが小さくなるから。Javaのようにコンパイルする言語だと
>意味ないけど、インタプリタはスクリプトを毎回読み込む必要があるから、
>スクリプトはなるべく小さくしたい。
いまどきこんなの気にしてる奴なんているのか?
まあ415がいるわけだが(w
つーか逆を言えばこんなこと気にするぐらいならRubyなんて使ってられないだろ(w
さらに言えばRubyではこんなアホな方法で速度アップするしかないのか?
コメントもおちおち書いてられないじゃないか。
まるで古代のBASICだな。
インデントにタブなんか使う人間はそろそろ引退してくれ。
ふつータブ幅とインデント幅は別じゃないの? emacs でも vi でもタブは8でインデントは4にしてるけど
>>421 シーッ。ここはそういう区別がついてないワナビー君たちを眺めて楽しむべきだよ
そしてふりだしにもどる
何わなびなの?
>>418 それ、おもしろい。長い行の折り返しでは、前の行のインデント分はタブで行って、それ以降はスペースを使って字下げすればいけるんじゃないか。
>>419 >つーか逆を言えばこんなこと気にするぐらいならRubyなんて使ってられないだろ(w
そうか?Symbol#===とSymbol#==の速度差や、return 100 とただの 100 の速度差を気にする人間がいるくらいだぞ、別にスクリプトサイズを気にしたっておかしくないだろ。
サイズをうまく小さく出来ると、読み込みを行うシステムコールの呼び出し回数を減らすことができるんだから、おれは気にする。ディスクI/Oを減らすのは高速化の基本だし、なによりロジックにまったく手を入れることなく高速化できる方法なんだから。
HTMLファイルの余計な空白を削除するツールがあるのも、おんなじ理由だろ。Googleのトップページのソースを見てみろ、改行さえ削ってるぞ。そこまでしてサイズを減らしたいってことだよ。やりすぎだとは思うが。
というかな、419も話ずれてる。「スクリプトサイズや速度は気にしない」ことと「タブ幅を8以外に設定する」こととは関係ないだろ。
>>420 >素人に限らず、多くの人を相手にする場合は不確定要素(タブ)は使わないのが
>ベターだと思うけどね。あるいはタブ文字しか使わないか……
それは「タブ文字を使わない理由」であって「タブ幅を変更する理由」ではないだろ。
また話がずれてるんだよな。わざと言ってるのか?
>全然変わらないんじゃない?文字数の違いなんて全体の数ppmぐらいしか
>影響しないと思うけどね。
「全体の数ppmぐらいしか影響しない」からといって「タブ幅を変更する」理由にはならないでしょ?
>>421 おれもそうしてる。
追記。
>>420 >タブ幅8だと深過ぎない?見やすさだとタブ幅2〜4ぐらいがベターだと思う。
それ、インデント幅とタブ幅とをごっちゃにしている。インデント幅は2でも4でも何でもいいよ。でもそれとタブ幅とは別問題。
とにかく、Emacs では よくわからない人は設定しておいて。 (setq-default indent-tabs-mode nil)
>>425 うーん、
>Symbol#===とSymbol#==の速度差や
とスクリプトの文字数が減らせるってのは議論の次元が異なると思うぞ。
Symbol方面の速度差ってのはループで如実に効いてくるが、
スクリプトの字面はパース時にしか効いてこない。
後者はまず無視できるファクターだ。
無視できない場合はevalを使ったときだが、こいつはここでの議論にはまず関係ない。
ボトルネックは考えるより探せ、と思う。 まぁ、コーディングによる速度チューニングを愉しみとすることもありだとは思う。
430 :
デフォルトの名無しさん :04/09/27 09:56:33
動的静的 インデント 実行速度 ・・・ ネタもコミュニティの勢いも尽きたからって宗教論争でスレ盛り上げるのやめたら? みっともないよ
Symbol#=== と Symbol#== ではどっちが速いの? return 100 と、ただ 100 とだけ書いたのではどっちが速いの?
432 :
デフォルトの名無しさん :04/09/27 11:21:15
ネタもコミュニティの勢いも公的資金も尽きたか ただの詐欺集団じゃん
>>431 Symbol#===とSymbol#==の定義はどう違うのかをまず調べようと思って
リファレンスマニュアル見に行ったけどどこに書いてあるのかさっぱり
わからなかった。これが噂の貧弱なマニュアルか...
しかしTabだとファイルサイズが減るってすげえセンスだな。 カルチャーショック受けた。今時分こんなこと聞くなんて。 絶対一緒に仕事はしたくないね。
>>434 そんなあなたに refe 。
% refe Symbol#==
(中略)
% refe Symbol#===
(後略)
>>434 == と === は Symbol 由来のメソッドじゃないので、その上位クラス(Object)の
ページを見ないといけないみたい。
かといって、すべてのクラスの説明に継承しているメソッドもすべて書いていたら
とんでもない量になってかえって読みにくくなるだろうし。やっはり refe のような
プログラムで参照するのが良いんじゃないかなあ。
んで、本題に戻ると、Symbol#== と Symbol#=== は、結局同じもの(と読める)なので
速度差はないんじゃないの?
組み込みクラスは ri に書いてあるんじゃないの? ri は標準装備だろ。
そうだ、思い出した。
FreeBSD ports の refe だと
>>437 のように継承元のメソッドを探してくれないので、
refe を新しいバージョンのにしてもらえないでしょうか?> knu タン
[object.c] (前略) rb_define_method(rb_mKernel, "==", rb_obj_equal, 1); (中略) rb_define_method(rb_cSymbol, "===", rb_obj_equal, 1); (後略) Symbol#=== は定義されてるけど、 Symbol#== は定義されてない(ので Object#== が呼ばれる)。 一段噛ませてある分、==の方がほんの少し遅い? メソッド探索はキャッシュされるんだっけ? それなら速度差は最初の1回だけなんだろうけど。 $ ruby -v ruby 1.8.1 (2003-12-25) [i686-linux] $ time ruby -e '10_000_000.times{:foo===:foo}' real: 7.39s(user: 7.39s, system: 0.00s) $ time ruby -e '10_000_000.times{:foo==:foo}' real: 7.40s(user: 7.40s, system: 0.00s) 有意な差は無さそうだ。
>>439 ri は継承元のメソッドまでは表示してくれないんじゃなかったでしたっけ?
と思って試そうと思ったら、 FreeBSD ports の ruby-ri の方は BROKEN なんですね。
なんでだろ?
>>202 > akr さんと同レベルの人があと2,3人にたら、まつもとさんは過労死しそうな予感。
nobu氏の応援により、なんとかなりそうなふいんき。
ついにMoonwolfが鬱に〜orz
うちではこうしないと ext/ripper/ripper.y でこけちゃうみたい。 % diff ruby/parse.old.y ruby/parse.y 1199c1199 < $$ = $1 --- > $$ = $1;
447 :
デフォルトの名無しさん :04/09/27 18:44:48
>>426 わからんやっちゃ
その区別自体が無意味で有害だっつうの
448 :
デフォルトの名無しさん :04/09/27 19:22:44
>>448 そのコードのどこでオブジェクトのコピーを期待する?
コピーを示すようなコードない。全部参照。名札を付けてるだけ。
似たようなオブジェクトがほしいならCloneを作ればいい。
C/C++知らないと、ポインタとかリファレンスとかの概念がわかんないんでしょ、たぶん。
>>447 インデント幅とタブ幅の区別は無意味か。新しい意見だな。
おれはインデント幅 != タブ幅にしているからこの区別は重要だと思ってるんだが、447はいつも一緒なのか?
よければ、なぜ無意味であるかをもうちょっと語ってくれ。
>>428 Symbol#===とSymbol#==の速度差はこちら↓をどうぞ。以外と差があって驚いた。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39935 でも
>>441 をみると、差はないね。なぜ?
>>436 ファイルサイズは結構へるよ。といっても5〜10パーセントくらいだけど。
仮に1行80文字として、そのうち先頭に8個の空白があってそれをタブ1文字に置き換えたとすると、7文字減る。
80文字のうち7文字減るから 7/80 = 8.75パーセント減ることになる。
特にRubyは
module XXX
class YYY
def ZZZ
if ...
....
のように意外とネストが深くなるから、タブ使うと思ったより減る。
まあインデント幅が2だとあんまり関係ないかもしれんが、おれは4にしているから。
つうか、ファイルサイズが減っても速度は気持ち程度しか変わらん。うまくいってもシステムコールの呼び出しが1回減る程度。それは前に書いたとおり。
また話がそれた。結局、タブ幅をいじってる理由はなんだったの?今まででた理由らしきものは「Outlookが4だから」ということらしいが、ほんとにこれが理由?Outlookが存在する前からタブ幅をいじるやつはいたと思うけど。
ちょっと荒らしっぽくなったけど、本当にその理由が分からなくて聞いてるだけなんで、タブ幅を変えてる人がいたら理由というか利点を教えてください。長年の疑問なんです。
気分悪くした人ごめんなさい。
あのね、タブ幅を変えてるっていう発想がおかしいの。 タブ幅は決まってないの。
>>451 タブ幅を4にしてタブのみでインデントってのは、
オートインデントがなかったDOS時代のエディタからの影響だと思う。
つまり単にそういう「伝統」あるいは「習慣」。
ema糞の激ローカルルールはポータビリティーが低くて迷惑。 ただそれだけの話なんだよ。さっさと理解しとけ。
と、Emacsen をロクに使い熟せなかったアフォが、腹癒せに叫いています。 もしくは、Emacen をロクに使い熟せないアフォが迷惑かけています。 -- 終了 --
俺もEmacsは使いこなせていないけど、 い い 加 減 、 他 所 で や れ
タブは一切使わずスペースキーを叩きまくる派ですが何か?
459 :
448 :04/09/27 23:33:55
>>449 もしかして、オブジェクトっていうのは、「クラス.new」した時にのみ作られるってことでいいですか?
この考え方でいいなら、「名札」って話も理解できました。
整数とか、""でくくってStringオブジェクトをつくれるのは、例外的な書き方ですね。
間違ってたら指摘お願いします。
>>459 基本的にはそうですけど、陽に「クラス.new」とは書かなくても
新しいオブジェクトを返す物は作れます。
def x
Hash.new
end
とか。使用局面ではxだけです。
Hash[]なんかは字面ではnewがありませんが新たにオブジェクト作りますし。
で、メソッドがオブジェクトのコピーするしないとかいうことを考えるんじゃなくて、
そのメソッドは破壊的か否かに気をつけるべきかと。
>整数とか、""でくくってStringオブジェクトをつくれるのは、例外的な書き方ですね。
そうです。他にArrayの[]、Hashの{}、Regexpの//などがあります。
あ、なんか破壊的、非破壊的という話もなんとなくわかりそうです ありがとうございました。
fn = "testtab.rb"; A = 2; B = 50000 symbol = (タブかスペースx8) File.open( fn, "w+b" ) do | f | f << (symbol * A + "t='test'\n") * B end `ruby testtab.rb` #何回か繰り返す starttime = Time.now `ruby testtab.rb` endtime = Time.now p endtime - starttime というテストプログラムを作ってテストしてみました。 A=10, B=100000 tab: 1.062 space: 1.281 A = 2, B = 500000 tab: 7.672 space: 7.843 A=10, B=100000 tab: 0.109 space: 0.125 A = 2, B = 50000 tab: 0.485 space: 0.531 といった感じで、「確かに効くけど、どうよ?」といった結果になりました。 100万個タブ使って0.2秒か……
>451 >結局、タブ幅をいじってる理由はなんだったの? 何だよ、まだ続いていたのか。 >420 >タブ幅8だと深過ぎない?見やすさだとタブ幅2〜4ぐらいがベターだと思う。 >同じ理由でタブ幅4にしているユーザーも結構いると思うけど。 >453 >タブ幅を4にしてタブのみでインデントってのは、 >オートインデントがなかったDOS時代のエディタからの影響だと思う。 >つまり単にそういう「伝統」あるいは「習慣」。 つうことかねぇ。Delphiのエディタもオートインデントなかったしなぁ。 今は普通にオートインデントあるからタブ使ってインデントする必要もないけど、 昔は……と言ってもDOS時代ほど古くは無いと思うけど……タブでインデントしていた 風習からタブ幅2〜4ぐらいが好まれていたと思う。 タブだけでインデントしていれば、別に4でも8でも関係無いしね。
レベルの低いという問題ではない。 タブとスペースが混ざったクソコードは Ruby の標準ライブラリにも大量に存在する。
>>464 > タブとスペースが混ざったクソコードは
> Ruby の標準ライブラリにも大量に存在する。
そこでPythonですよ。(w
ripper 使ってコード整形プログラム書いとけ。
>>453 >つまり単にそういう「伝統」あるいは「習慣」。
そうですか、そんな理由ですか。でも今までで一番説得力のある回答だ。納得しました。
>>452 > あのね、タブ幅を変えてるっていう発想がおかしいの。
> タブ幅は決まってないの。
そうなの?でもいわれてみればそうだよな、タブ幅がANSIとかで規定されてるなんて聞いたことないしな。
タブ幅=8ということ自体が「伝統」あるいは「習慣」といえるのか。
>>462 =368
>100万個タブ使って0.2秒か……
わざわざありがと。「気持ち程度」速くなることが確認できてよかったよ。
>>463 =368
>何だよ、まだ続いていたのか。
ああ続いてたよ、368が論点のずれた回答ばっかくれたからね。
連続投稿おつかれさん。
>>464 標準ライブラリはなにかコーディングスタンダード決めてもいいような気はするね。
関係ないけどREXMLのソースがインデント幅8で驚いた。もちろんタブを使ってた。
>>453 と
>>452 の回答で長年の疑問が解けたと思います。ありがとうございました。
スレ汚してすまんかった。
>468 >「気持ち程度」速くなることが確認できてよかったよ。 なんかなぁ……今回は確認してやったけど、自分で確認しようとは思わなかったの? 「タブ使ったほうが速いんだ」て主張するまえに実際にテストしてみるもんだ。 どの程度速くなるか調べるつもりもなく主張するのって恥ずかしくない? 実行速度を気にしてスペース&タブなんて(一貫性の無い)インデント使うぐらい だったら、インデントを削除した実行用ファイルを用意したら? そっちの方がタブ使うより速くなるよ。
とりあえず、NGワードにタブを設定しよう、うん。そうしよう。
まだやってんのかインデントにはTAB使えよ
ていうかここで368の相手をするのはやめれ。
俺にはタブとかの話題以前に368はまともで、 468はちょっと神経おかしいと思う。 ま、病院行くほどの事はないかもしれないが、 匿名に慣れちゃった人の言動って怖いね。 コテハンが当たり前だったniftyとかの時代ではありえない人間像だ。
> 俺にはタブとかの話題以前に368はまともで、 他所に移動しない(もしくは一方がもう一方を誘導しようともしない) 時点でどっちも相当いかれてる。
だな。 2chなんかで、自分の優越を誇示しようとする人間は全員キチガイ。 Q.E.D. Rubyでのインデント幅は半角スペース2個が推奨 Emacs利用者は、.emacs に以下の設定をしよう (setq-default indent-tabs-mode nil)
>>475 > Emacs利用者は、.emacs に以下の設定をしよう
matz 氏にもよーく言い聞かせておいて下さい。
477 :
デフォルトの名無しさん :04/09/28 16:45:20
>Rubyでのインデント幅は半角スペース2個が推奨 タブ使えよぼけ
479 :
デフォルトの名無しさん :04/09/28 17:53:24
ネタ引っ張り杉。 必要に応じてuntabifyすればいいだけの話。
480 :
デフォルトの名無しさん :04/09/28 20:34:18
>必要に応じてuntabifyすればいいだけの話。 タブ使えよぼけ
天然無能477=480がこのスレに常駐しているようです。
Cのselectにあたる機能を使いたいのですが、 rubyではどういう関数を使うことできますか?教えてくださいませ。 たとえば、一定時間にgetsの処理が終了しなければ、 そのままfunc1(key)を実行したいのですが。 key = "default_key" key = STDIN.gets # ← 一定時間でスキップして func1(key) # ← これを実行したい
るbyのselect使えよ
timeoutってのが使えませんか?
>>475 > Rubyでのインデント幅は半角スペース2個が推奨
> Emacs利用者は、.emacs に以下の設定をしよう
ruby-mode.elはすでにそうなってる。
>>486 ごめん、かなりコメントしにくい。
つーか、もう、引っ張るな。
スマソ。使い方が分かりません。 STDIN.getsを1秒おきにすっとばしてほしいのですが。 IO.select([STDIN],nil, nil, 1) key = STDIN.gets
>>488 こんな感じ?
key = "default_key"
key = STDIN.gets.chomp if IO::select([STDIN], nil, nil, 1)
func1(key)
>>489 うーん。win32で実行しているのですけど、一秒おきに飛ばしてくれません。
while 1
key = "default_key"
key = STDIN.gets.chomp if IO::select([STDIN], nil, nil, 1)
p key
end
で、キー入力なしで延々と"default_key"と表示されつづけるような使い方をしたいのですが。
491 :
デフォルトの名無しさん :04/09/29 08:22:16
>>469 =368
・・・はあ?
だからね、タブ使ったところで「気持ち程度」しか速くならないって言ってるでしょ。
また論点がずれてるんだよ。速さうんぬんを問題にしてたんじゃなくて、タブ幅をいじる理由を問題にしてたの。
もう他の人に教えてもらったからいいけど、いいかげん論点からずれたような「主張するのって恥ずかしくない?」
368は質問に回答しようとしてるわけじゃないよね?相手を叩きたい、自分が勝ちたいっていう気持ちが先にあって、それから叩ける材料を探しているんじゃないか。だから論点を外れたところばかりつついてくる。
議論のポイントになるところでは自分の旗色が悪いまたは反撃できないから、それ以外のところに攻撃材料を求めて相手をなんとか叩こうとしているだけじゃん。どうせなら、452のように口は悪くてもいいから核心をつくようなことをいってくれ。
願わくば、368みたいなのがだれかの上司じゃありませんように。自分の優位性を無理にでも主張するような上司じゃ、部下がかわいそう。
> >「気持ち程度」速くなることが確認できてよかったよ。
> なんかなぁ……今回は確認してやったけど、自分で確認しようとは思わなかったの?
皮肉ってんだよ。わかりにくくてごめんな。
Rubyで大げさなウィンドウではなくtooltipだけを表示したいのですが、方法はないでしょうか? 特にtooltipにこだわるつもりもなく、ウィンドウ枠とかを無くすやり方でもよいのですが。 あるアプリのテキストに対してrubyスクリプトを実行して、 簡易のポップアップ情報を提示するようなプログラムを組みたいのです。 どうかご教授くださいませ。
>>490 win32だとgetsでtimeoutは動かないらしいから、
selectも動かないかも。
>願わくば、368みたいなのがだれかの上司じゃありませんように。 >自分の優位性を無理にでも主張するような上司じゃ、部下がかわいそう。 予想通りリア厨か
環境依存ですが、次のようにやるとcoreをはきます。 ~$ ruby --version ruby 1.8.2 (2004-09-28) [i386-mingw32] ~$ ruby -r iconv -e '' Segmentation fault (core dumped)
>>492 > あるアプリのテキストに対してrubyスクリプトを実行して、
っていう部分をどう実装するつもりなのかが激しく気になる。
マウスカーソルをかざすとか、選択してボタンを押すとか、
とにかくそういったイベントに応じて外部のプログラムを
起動するという機能がその「あるアプリ」に備わっていない
限りどうしようもない訳だが。
>>495 vr/vrubyですが、もし他のツールキットでできるんなら乗り換えますので。
>>499 スマソ。正直、自分ではどうやって実装すればよいのか分かりません。
babylonとかドクターマススとか翻訳系のツールの場合、
結構その手の処理が実現できているんで、もしかしたらできるのかなぁなんて。
501 :
デフォルトの名無しさん :04/09/29 14:27:27
以下を実行すると表示まで時間はかかりますが一応実行できます。 httpsの表示は時間がかかる物なんでしょうか? それから、warning: peer certificate won't be verified in this SSL session.が 表示されますが、なにか足らないのでしょうか?? require 'net/https' http = Net::HTTP.new('xxxxx', 443) http.use_ssl = true http.start { http.request_get('/') {|res| print res.body } }
>>501 そのワーニングでしょ。相手の証明書が確認できてないってこと。たぶんその
ための待ち時間なんじゃないかと思う。
確認するには、
1. 今回実行してみたサーバに対して、普通のブラウザで https経由でアクセ
スしてみる。たぶん何か警告のメッセージが出るはず。
2. 正しく https でアクセスできることがわかってる他のサイトでも試してみる
というあたりかな。
1.で警告が出て、2.でちゃんと遅くないなら、相手のサーバの設定の問題。プ
ログラムは悪くない。
>>501 相手のサーバ証明書が確認できてないというのは
>>503 のとおりですね。
警告を出さないようにするには、
CA の証明書を用意してきちんと確認するようにするか、
サーバ証明書の確認をしないようにすればいいと思います。
前者ならば、PEM 形式の CA 証明書のファイルを用意して、
その path を http.ca_file= か http.ca_path= でセットしたうえで、
http.verify_mode= で OpenSSL::SSL::VERIFY_PEER をセットすればいいようです。
後者ならば、http.verify_mode= で OpenSSL::SSL::VERIFY_NONE を
セットすればいいようです。
>>502 require 'vr/vrtooltip'
class Window_for_ToolTip < VRForm
MAP = [0,0,80,80]
def construct
self.move 0,0,80,80
tt = createTooltip; tt.addToolArea MAP, "てすと"
end
end
VRLocalScreen.start(Window_for_ToolTip)
試しに書いてみたけど、元になるウインドウを自前で用意できない場合には、
どうやってtooltipを表示すればよいか分からん。
>491 >だからね、タブ使ったところで「気持ち程度」しか速くならないって言ってるでしょ。 こういう馬鹿が変なこと言い出せなくさせるために 中間コード形式にもコンパイルするようにしてくれ。>まつもと各位 中間コード形式で配布できるようにな。 それぐらいできんだろ?>まつもと各位
Tabにしないと配布の準備の手間がかかるだろ馬鹿が! 馬鹿どもはだまってTabいれりゃいんだよ!Tabだよ!Tabだ!!Tab!!!
>>500 > 結構その手の処理が実現できているんで、もしかしたらできるのかなぁなんて。
できるとしてもVCでゴリゴリ書かないと無理だろうな〜
510 :
デフォルトの名無しさん :04/09/29 18:00:41
mswin32 版のRubyを使ってるんですが、Dir.glob って日本語フォルダに対応してないんでしょうか? パスに日本語が混じるとマッチしないんですが・・・。
$KCODE = s
え〜っと、'C:\あ'というフォルダがあったとして、 >p Dir.glob('C:/*') は'C:\あ'を含みますが、 >p Dir.glob('C:/あ/*') とすると、'C:\あ'の下にあるファイルは一切表示されません。 ちなみに、 >$KCODE='s' >p Dir.glob('C:/あ/*') でもだめですた。
>>514 ruby 1.8.1 (2003-12-25) [i386-mswin32]だけど、$KCODE無しでも普通に表示されたよ。
>>514 そのスクリプトの文字コードは Shift_JIS なんですよね?
>>515 ruby のバージョンはうちも同じです。
え〜、やってみたら「あ」だったら大丈夫みたいですね^^;
えっと、「府」が入ってるとだめみたいです。
これJISコードが 495C なので、 \ が 5C だからかなぁと
思ったら、卑(485C)はOKなんですよね〜。
なんでだろ。
>>517 Windows XP SP2 です。
ちなみに、ファイルシステムは NTFS です。
>>512 まだ対応してないんじゃなかったっけ?
# [ruby-list:39957] あたりのスレッドを参照。
>>499 ,500
選択されたテキストをクリップボードに持ってくれば
(他の方法でもいいけど)なんとでもなる。
>>521 クリップボード内の文字列が変更されたという
イベントをRubyで拾えるってこと?
>>522 それは出来るだろうけど、そういう意味じゃないと思うよ。
>491 ……もうちょっとRubyにからめて話そうよ。ただでさえスレ違いと怒られているのに…… >いいかげん論点からずれたような「主張するのって恥ずかしくない?」 >368 「プログラムじゃない文章とか読む/書くときに便利」 >420 「タブ幅8だと深過ぎない?」 ->オートインデントの無い/効かないエディタとかでインデント代わりに タブを使うとき見やすい つうことだけど……あと、Winでもエディタはタブ幅8が普通ですな。スマン と、蛇足はここまでにして >469の自己フォロー。インデント無しにした場合も テストしてみました。 タブ数(A) = 2; 行数(B) = 1000000の場合で 18.406(タブ) 19.016(スペース) 18.329(インデント無し) です。200万個で0.08秒……ゴミですな。 ただ、スペースだけのインデントも考慮すればそれなりの効果はあるかな? #これぐらい>491には突っ込んでもらいたいところだけど……
>>525 予想だが
・Rubyを知らない
・TABならわかる
・Rubyを知らないけど粘着したい年頃
もうちょっとましな表現使った方がいいかな。 s/粘着/固執/ に読みかえて。
>526 Ruby使っているね。 ・タブなら解る ・インデントはわからない ・実は、>368 と>491は変人同士気が合う じゃない?
RubyのアーカイブにはXMLの処理系が入っているみたいだけど (lib/ruby/1.8/wsdl/、lib/ruby/1.8/xmlrpc/、lib/ruby/1.8/xsd/あたり?) これのドキュメントってどこかにある?できれば日本語だと嬉しい さっぱり使い方がわからない…(´・ω・`) ドキュメントがないようならお勧めのXML処理系があったら教えて
ソフ板のMeadowスレにまで波及してる悪寒
>>531 あ、やっぱり思った? Rubyを出すと荒れるかなあとおもって静観してた。
それでなくても荒れ気味な感じ。
>>520 対応してないんですか・・・oTL
はじめて ruby に失望を感じちゃったよ。
毎週ネコのタブがネズミのインデントを追いかけ回すという話を思いついてしまった。
Ruby 好きな漏れは XML も Ruby で XML 処理したいのは やまやまなんだが、耐えきれないほど遅い。 極力、xsl 使って、xsl じゃあどうにもならんときだけ、 Ruby 使ってる。 Ruby でつかえる早い XML 処理系あったら教えてくれ。
REXML::StreamParser は?
538 :
デフォルトの名無しさん :04/09/30 01:29:00
ema糞ユーザーは時代遅れの常識知らず
783 名前:名無しさん@お腹いっぱい。[sage] 投稿日:04/09/27 18:34:22 ID:N1fOBDqK
>>782 8以外の奴っているのか?
インターネット上で例があるなら示してくれ。
>>535 よしだむさんの XMLParser (James Clark さんの expat の wrapper) は速いですよ。
>>537 それは見たんだけどね。
VC++ もってなく、cygwin とか BCC とか環境ととのえるの
マンドクさいしので、ビルドすんのやだし。
HEAD 使うのはちょっと不安な感じなのよ。バグとかではまりたくないし。
はやく 1.9 正式版でないかな〜。
さすがに HEAD を常用するのはちょっと怖いなぁ
>>521 > 選択されたテキストをクリップボードに持ってくれば
文字列をスクリプトに渡す部分以外に
クリップボードに持ってきた後、どう画面に(簡易)表示できるか気になっているのですが、
簡単なサンプルを紹介していただけませんか?
>>509 氏のいうとおり、VCでがりがり書かないと無理?
ガイシュツだった。吊ってくる。
最初からDelphi使えよ
幾重にも入れ子になった配列を丸々コピーする手っ取り早い方法って何かあります?
>>550 (´,_ゝ`)プッ
Apolloもロクに知らないうんこ野郎はうんこだけをいじるのがお似合いだ。
>>553 かなり参考になりました。でも、自分ではうまくスクリプトを組めない…
> vrubyではウィンドウハンドルは直接扱えないのな。
> Swin::Window::hWndの付け替えとかしても大丈夫なのか?
ほかのtoolkitでもいいので、この部分どなたか簡単なサンプルを…
557 :
デフォルトの名無しさん :04/09/30 23:40:58
どうもこんちは methodの中のソースコードをそのまま文字列として返す 方法ってありますか?
解としては
>>558 で正しいんだけど、そんなことよりも
>>557 はソースコードで何をやりたいのかが気になってしょうがない。
メソッドオブジェクトのシリアライズとか、JavaScriptのtoSource()とか?
Rubyで実装されているnkf2.03並みの文字コード変換ライブラリってあります? Uconvだと元の文字コードが判別できないので…
>>561 「Rubyで実装されている」というのはPure Rubyでということ?
それから「nkf2.03並み」というのは具体的にはどういうこと?
これらがはっきりしないと回答のしようがないけど。
>>562 すまん
>Pure Ruby
そうです。できればRubyで書かれた物だと嬉しいです
よくよく見てみたらUconvもバイナリのライブラリでしたね…(汗
>nkf2.03並み
具体的にやりたいことは
・SJIS、EUC、UTF-8の判別機能
・SJIS、EUC、UTF-8の相互変換
です。
一応機能的には外部のnkf2.03を呼べばできるんですけどオーバーヘッドが結構馬鹿にならないので…
>>563 [ruby-dev:24277], [ruby-dev:24282] あたりが参考になるかと。
ああごめん。 Pure Ruby か。
Rubyに限らずlegacy charset ⇔ Unicodeの変換をCを使わずに実装してる モジュールってあまりないような希ガス。Jcode.pmのJcode::Unicode::NoXS くらい?
sqlite-ruby-2.1.0 をインストールしようとしたのですが、 taball を展開すると、見慣れた extconf.rb や setup.rb などは無く、 Rakefile, sqlite-ruby.gemspec といった怪しげなファイルがあり、 一体なんじゃこりゃー、な状態になってしまいました。 このあたりのインストールのしきたり (gem って何?) について 説明してあるドキュメントがあれば教えて下さい。 日本語で無ければ英語でも構いません。
つうかREADME見たけどruby install.rbでインストールできないか?
>>568 ありがとうございます。これでなんとかなりそうです。
>>569 すいません、 README が見当たらないのですが・・・
あ、節穴でした。 ./api/files/README.html にありました。 api つうディレクトリにインストール手順が入ってるとは・・・
module Lock def Lock.lock(lockfile) File.open(lockfile, 'w') do |f| f.flock(File::LOCK_EX) yield end end end というようにロックを作ろうと思ったのですが、 使ってみるとErrno::EBUSYというのがまれに発生しました。 これってどういうことでしょうか?
ロックがかかっているときに別プロセスからflockしようとすると、 ロックが解除されるまで待たされるのが普段の動作だと思います。 試してみると、実際にそうなります。 ただ、一度だけEBUSYというのが発生して、何だろうと思ったわけです。
[1,2,3].each{ |i| p i } の "|i|" って省略できないの? たとえば $# はデフォルトイテレータとか決まってれば、 [1,2,3].each{ p $# } とかけるのでラクチンなんですが。 毎回、|i| 書くのがマンドクセ。
>>576 そのうち unicode 対応 nkf が入るでしょ。
>>577 そんなときに goovy
>>577 個人的には、デフォルトのイテレータというのは気持ち悪くて嫌だな。
each_with_index とか File#open はどうなる?とか、イテレータが入れ子に
なったら考えるのもイヤだし……。
確かにちと煩雑だけど(名前考えるのマンドクセ)、引数を使わなければ省略で
きるし、今のままでいいんじゃないかと思うな。
$# を見ただけで反射的にいやな気分になってしまう。
$_とかPerl由来(だっけ?)の省略記法はなくす方向で、という風になってるから 新設はまずないと思うな。残すだろうけど非推奨ってことで。 あとおれも580に同意。気持ち悪いと思う。
583 :
デフォルトの名無しさん :04/10/02 07:41:57
デフォルトイテレータなんかあったらRuby使うのやめる。
>>578 groovy についてぐぐったところ、どうやら
it がデフォルトイテレータっぽいですね。
そういうのが ruby にも欲しいなぁ・・・。($it とかで)
>586 引数が複数の場合はどうするの?
デフォルトイテレータはいらないけどイテレータが何回回ったかのデフォルトカウンタは欲しいかも in用の配列とoutの配列を用意して片っ端から処理していくなんて場合に初期化してからカウンタを 回すのが美しくない。デフォルトカウンタも美しくないと言われるとそれまでだが…
>>588 Enumerableクラスにメソッドを追加するとか、
既存のメソッドを再定義するとかして、
自動的にカウンタを提供できませんかね?
あ、それだと既存のeach_with_indexでいいのか...。
> in用の配列とoutの配列を用意して片っ端から処理 そゆ時はmapでないの?
ちょっと説明不足スマソ。 イテレータの中で参照したい要素が2つ以上あるって事 いろんなパターンが思いつくけど一例としてはこんな感じかな… a = [1, 6, 3,…] b = [134, 579, 946,…] o = Array.new(n) i = 0 o.map!{|v| f1(v, a[f2(i)], b[f3(i)]) i += 3 }
Rubyにシステムの標準の文字コードを取得する方法ってあったっけ?
>>591 1.8なら Enumerable#zip が使えるかも。
a = [1, 6, 3,…]
b = [134, 579, 946,…]
o = a.zip(b).map{|tmp|
f1(v, *tmp)
i += 3
}
漏れなら a.size.times { |i| o[i] = f1(a[f2(i)], b[f3(i)]) } とかかな……。確かに map_with_index は欲しいときはある。 まあ確かに Range と zip を組み合わせばできるんだけど。
>>592 そもそもシステムの標準の文字コードって存在するのかな?
ruby 1.8.1(mswin32) で rexml 使おうとすると、 iconv.dll が見つからないというエラーがでます。 このエラーを回避するためには、 ruby のフォルダに iconv.so ってフォルダがあるんですが、 これをリネームすればいいんでしょうか?
>>595 現在のlocaleで使われているcodesetを取得するという話?
Cならnl_langinfo(CODESET)が使えるが(使えない環境もあるけど)、
Rubyにはそれに相当するものはなかったよなあ。
>>558 どうもありがとう
1.8では今の所動きそうにないので諦めます
Rubyの開発者ってcronとかで毎日CVSからコンパイルしていたりするの?
開発者自身はcronするまでもなくmake叩きまくるだろ。作ったままコンパイルせずにチェックインとかは普通ありえない。
603 :
デフォルトの名無しさん :04/10/02 21:46:12
matz がコンパイル通らないコードを commit したとか リリースしたバージョンが cvs に存在しなかったってのは伝説ですか
Continuous Integration、マジおすすめ
require 'md5' と require 'digest/md5' って両方あるのか…… と思ったら、ただ単に require してるだけだった
>>587 ,
>>598 ありがとう。近場のほうからダウソさせてもらいましたら、
ちゃんと動きました。
これから REXML 勉強します。
607 :
デフォルトの名無しさん :04/10/03 09:20:10
Stringでなく、Symbolを使う利点ってなんですか? いまいち、どういう時にSymbolを使うべきかわかりません。
>>607 使わなくちゃいけないところで使えばいい。
あるいは、あなたが知る/知らないにかかわらず、内部で使われてる。
>>607 C++のenumの感覚で使ってます。
状態遷移を示す定数として:standby→:processing→:doneとか、
曜日に対応する値として:monday〜:sundayとか。
実際の値に興味が無く、名前で区別できれば良い場面で重宝してます。
enum感覚で Symbol 使ってると、スペルミスに気付かずハマることが結構あるなあ。 だから Symbol を直接使うんじゃなくて、定数に代入しといてその定数を使うようにしてる。 include Module.new { [:FOO, :BAR, :BAZ].each {|sym| const_set(sym, sym)} } p FOO #=> :FOO
コピーする必要がないところ使うのがよいかも。 定数の値とかハッシュ引数のキーとか。
比較とかで効率が違うよね。 だいたい数%ぐらい?
テストしますた string = 'test' * A; symbol = string.to_sym h = Hash.new #Hashの中に適当に代入 h.clear starttime = Time.now B.times do h[string] = string end endtime = Time.now p endtime - starttime h.clear starttime = Time.now B.times do h[symbol] = symbol end endtime = Time.now p endtime - starttime A = 100(400文字); B = 1000000 String: 6.625 Symbol: 0.625 A = 10(40文字); B = 10000000 String: 15.938 Symbol: 6.265 長い文字列は効くなぁ
そりゃ整数みたいなもんだからな。
ハッシュのキーにするとき、 文字列 h["test"] よりも、シンボル h[:test] のほうが、 一打少なくてすむので、ちょと楽。
>>616 タイプ量はもっと違うな。ホームポジションからの移動距離はさらに違う。
618 :
デフォルトの名無しさん :04/10/03 17:35:01
2chの掲示板の書き込み内容を取得し,表示したいのですが,
うまくいきません.
例えば,
http://pc5.2ch.net/test/read.cgi/tech/1095004337/ を指定して,標準出力する場合,下記ソースのどの部分が
まずいのでしょうか?
require 'socket'
host, port, path = "localhost", 80, "/"
if %r!
http:// (.*?)(?::(\d+))?(/.*)! =~ ARGV[0]
host = $1
port = $2.to_i if $2
path = $3
end
s = TCPSocket.new(host, port)
s.print "GET #{path} HTTP/1.0\r\n\r\n"
print s.read
s.close
>>619 レスさんくす
open-uri使えば,普通にできました
なにぶん初心者なもので,すんまそん
irb-history って標準添付されませんか?
open-uriがPOSTにも対応してくれたらなあ。
そこでRuby cURLですよ。
MoonWolfさん、たいへんなことになってるな。
Rubyのスレッドがネイティブ化する可能性ってあるんですか?
というか monazilla.org の仕様書嫁
>>628 相変わらず何かをはじめる行動力はすごいな。
持続力の方は(検閲削除)
ここはMLウォッチスレですか?
このスレのレスをMLに自動でポストするスクリプトはどう書けばいいですか?
Rubyでミリ秒取ってくるのどうやるの? C言語で言うclock()か何かあればいいんだけど。
Process.times とか?
Rubyのソースの処理の一部の実行時間取りたいので start = clock(); 〜何かの処理〜 printf("%msrc\n", clock() - start); みたいな差分が取れればいいです。
>>638 ベンチには興味がないので良く知らんが、
>>614 などに良く上がってる方法じゃだめなのか?
1ms単位の値に見えるけど。
Time.nowでいけました。 ありがとうございました。
Pythonスレ荒れてるな。Rubyist騙って何が楽しいんだか。
どうせこのスレに粘着してたアフォの仕業だろ。
Dir.glob なんですが、"{ "をエスケープする方法ってないの? たとえば、「ファイル名が"{"で始まるモノ」ってどうかきゃいいの? Dir.glob("C:/{*") も、Dir.glob("C:/\{*") もダメですた。
Dir.glob("C:/\\{*")
>>621 irb-historyってなんだっけ。
irb/ext/history.rbとは別?
>>646 begin 666 irb-history.rb.bz2
M0EIH.3%!629363W=$:<``,W?@'@P2/?Z%_MOG6J_____0`+UUEA;J[75#4Q3
M1HH]/1,C29J9/4;4QJ830-J&FC30T`&B#*"#R4]1Z-3U#(``:&F@`-&1D#4R
M4]1D&@'J9-&@```````!(E!HFIFF1J38D/*-#(#U`9!H#8H`D#``"D1`S,P2
M&B*TVOBNC'[23Y^:.Y)D7*U^G[:GRXO4\;7?8D*(FE-5+5%=^WD@K062E6;T
ME&L@Y5CB49,WE$"#(T`=T8@',#!C!M4.&VTQL<(BD+S(&1$16J<O&]MMPKLE
M"1OV_?TW7(/*^RBA>`HHVS&Q&,-:7.!MY$SQ8.BBK,DUH91>NM*$]VR(OIL3
MR=@LQ2(HFE9+,P\+4HJIC&LL`!42_MLLX<N1S8!;F46KF".&OAE%H]7#832L
M3Y%PZCSJ9F!)=,E3C4;@YMZ!TOZU`U6@&/#(##C'X*(NKRE@\-JX,;D^-0ES
MM*X9H9U9^?\+X;T+>?F*K'O,E/`D==/+,1]B(B.N(#L,1V4HH=A)[A&GY&\L
M*"3E'BH/,71C+L5PBNA(L4A%EF(H$18\1YQ&V94JXP$3:C);7P-9L+!D`\_C
M0UN!FY.\HNP5K08MAAL>+\W=]@LM<[!#MUHQU=]@#55E(,M.RF/.*AQPIE,Q
MU7T#V@Q].2`,$2&I@YL4KGJ@E`:3M,&-M$"D..&I*@#;,R!&1S4&]%$&P[\2
MH.A:@ZN4#!'F!MLNBB>?5U-%!/"X^FEZD=@L-==P4$]10U7S!B!H9#@*H2V$
M!G*8HRWP(S(G[&=XVE-D2TWT#,A@'96$&2,.6UP6V3WY>8Q"MJ[]X@NG*L>O
M,<U=`0<C.UIXAHC0/KGT6V,8=91GJ%;%([#P,:*KS8`QB6X'6XN-Q`H)W-"1
MJ<B>@=%N/URDI77M3@1[9&@TY@LY-$]9"A):ZX)MET7P%#%IX`T@,W3&<P?O
M-MHY<)1!]0VNC!T.C+MJSWC]Q-2;)0()EJV3SOPX_5TD5'15Q9L*;V2PP2"Y
MR%-$APOL54$2!Y`\I0$+&/V)=!C3`/W&IS"V6?,5F]:Z84R/+6*MA4,"FF
8KC(F*LI=VYS_#Z+;?^+N2*<*$@>[HC3@
`
end
↑これです
648 :
デフォルトの名無しさん :04/10/04 16:08:25
procがどうも今ひとつ分からんのですが、 これはどういうときに使うと嬉しい物なのでしょうか。
メソッドの抽象化。 処理だけあとづけで追加したいときとか。選択したいときとか。 ブロックでもいいけどコールバックとか。
matzの執拗な他言語叩きと 宗教的博愛精神の関係を教えてください。
>>648 ブロックを別の関数に渡したいときとか
class MyArray
def initialize *arr
@arr = arr
end
def each
@arr.each(&proc)
end
end
>>649 抽象化ですか、だからとっつきにくいのかな.
>>651 a = MyArray.new
a = [1, 2, 3, 4]
a.each{|x| print x} #=>1234
などとやってみたのですが、やっぱりよく分かりません。
もう少しサンプルを見せていただけないでしょうか。
ファイルに格納した文字列を読み込むプログラムを作成したのですが、 ある文字列を読み込んだところで、nil になり、正しく読み込めなくなりました。 これは、文字コードの問題なんでしょうか?ちなみに、shift-jis使ってます。
うんだめ
>>654 読み込みはどういう処理にしてるんですか?
スクリプトを公開してみては?
>>656 読み込みは、簡単に書けば以下のようにしてます。
入力ファイルからある部分の文字列を読み込み、出力ファイルへ書き出すようにしています。
それだけの処理なので、文字コード依存の問題かと思ったのですが...
問題のある行を読み込むと、次の文字列からは全てnilになってしまいます。
while text = in_file.gets do
out_file.print text
end
>>658 なるほど。あとは"問題のある行"の内容でしょうね。
EOFコードが入ってて、ファイルの終端とみなしてるとか。
その行の内容(文字コード)は確認済みですか?
実例をここで示せます?
>> 659 問題の行の内容は、 「Q08.編集機能は重視するか?---CMカット程度でいい」で、この部分の文字コードは、 「48 56 46 149 210 143 87 139 64 148 92 130 205 143 100 142 139 130 183 130 233 130 169 129 72 45 45 45 67 77 nil」 となります。 「〜CM」という部分まではうまく読み込めるのですが、その後の文字でnilになっています。
>>660 UNIXとかCygwin使ってるなら、そのファイルの問題の行をodでダンプ
してみたら?
>>660 text = ''; open('foo.txt', 'rb'){|f|text = f.read}
みたいに全部読み込んじゃってからString#で処理するんじゃダメか?
>>661 やってみます。
さっき、DOSプロンプトで実行してみたら、nilになりませんでした。
cygwinだと文字列の取り扱いでよくエラーでる気が..
でも、わけあってcygwinでやらねば。
>>662 読み込みたくない行があるのと、読み込んだ行を加工したいので、
全部読み込むやり方はできないんです。
Ruby 1.8.2・CGI.rbで質問です。 複数のcheckboxを選択して、それらのvalueを Array型でフォームの値を渡すにはどうしたらいいのでしょうか? どうしてもString型で渡ってしまうのです。
スマソ。随分前にした質問
>>482 なのですが、
DOSプロンプトから操作するCUIのrubyスクリプトを組みたいのですが、
別スレッドでキー(標準)入力して本スレッドの挙動を操作することって事実上無理ですか?
過去スレを読んでいると、stdin.getsからは、selectもtimeoutも使えない
>>493 と書いてあるのですが。別の方法や抜け道があれば教えていただけませんか?
>>666 selectとか使えないなら、本スレッドに相当する物は
別のプロセスで動かすのはどうか。
プロセス間通信はdRubyで。
REXMLってexerbでまとめられなのって俺だけ? なんか普通にコンソールから実行するのと挙動が変わって encoding.rbの39行目の load 'rexml/encodings/UTF-8.rb' でLoadErrorになる。上記のファイルを手動でレシピファイルに追加してもダメ。 exerbでREXML使えている人いる?
>>652 まさにそのeachに渡す部分が後づけで変更できるでしょ。
「xをもらってそれをprintする」という処理がproc(この場合はブロック)によって
抽象化されてるから、その恩恵が得られてるわけ。
つまり、eachみたいなもんをつくろーとしたら必要になるってこった。
>>665 CGI#[]を使ってる?
CGI#paramsではどうですか。
>>653 ,671
マーティン読んで、eachみたいなもんに必要
ということで、procをつかめた気がします。
なるほど、抽象化なのですね。
ありがとうございました。
>667 > selectとか使えないなら、本スレッドに相当する物は > 別のプロセスで動かすのはどうか。 > プロセス間通信はdRubyで。 別プロセスを動かそうとしたのですが、 ひょっとしてDOS窓からはfork無理っすか? threadでも試してみたものの、 やっぱりSTDIN.getsしようとすると途端に調子が悪くなります。
STDIN.gets 以外の方法を考える方が早いのかも
>>674 あ、cygwinだとfork動かなかったかも。
なんせwin上でRuby使ってたの何年も前なので許してたもれ。
>635 解っているとは思うけど、分解能はmsオーダー無いヨ
>>638 require "benchmark" して Benchmark.bmbm か Benchmark.measure をつかう。
Process.times を使ってるみたいだから分解能はたぶん処理系依存。
拡張ライブラリで質問です。 Ruby/pcap をコンパイルして実行すると、 pcap.so: warning: do not use Fixnums as Symbols というwarningが出るんです。で、調べたところ Pcap.c の cPcapStat = rb_funcall(rb_cStruct, rb_intern("new"), 4, Qnil, INT2NUM(rb_intern("recv")), INT2NUM(rb_intern("drop")), INT2NUM(rb_intern("ifdrop"))); というところがあやしいとわかったのですが、どう直せば良いでしょう?
>>680 それはRubyだけの問題じゃないというかスレ違い。
Marshalのデータフォーマットってどの位の頻度でバージョンアップされているの?
(・∀・)埋め!
>>680 この場合INT2NUMが返すのはIDの値を持ったFixnumであるわけだから
INT2NUMじゃなくてID2SYMでも使えばいいんじゃないだろうか。
詳しくはrefe -eしてくれ。
文字列に対するIDが欲しいならrb_str_new2()してrb_obj_id()すべきかも
と思ってrefe Struct::newしてみたらやはりID2SYMでいいんじゃないかと思った。
第二引数以降はSymbolか文字列なのでrb_str_new2でもよいが
>>メンバ名に文字列を指定できるのは後方互換性のためだと考えた方が良いでしょう
ということらしいので。
これでわかんなかったらMoonWolfに相談してみろ。
そしてPaypalでお布施しとけ。
ところでnewする場合はrb_class_new_instanceの方が良くないか。
morqってどうなったの?
morzになりますた。なんちゃって。
MoonWolfさんに質問です! ここもサポートの窓口対象らしいですが ここで依頼するときはどうすればいいのでしょうか? 何も気にせず疑問のみ書けばMoonWolfさんがいつの間にか返答してくれるのですか?
class Array def eachn(n) i = 0 while i < self.size yield self[i,i+n] i += n end end end v=[] [1,2,3,4,5,6].eachn(3){ |i,j,k| v << [i,j,k] } p v v=[] [1,2,3,4,5,6].eachn(2){ |i,j| v << [i,j] } p v 実行結果 >>[[1, 2, 3], [4, 5, 6]] >>[[1, 2], [3, 4], [5, 6]] 今日思いつきで、こんなコードを書いてみた。 でも、毎回イテレータ書くのマンドクサイので、標準の機能であったら教えて。
>>688 MoonWolfと名指ししてもらえば、回答します。
名指しされてない場合は、気が向いたら回答します。
汚ねぇソースだなw
>>685 ID2SYMでもrb_str_new2してもうまくいきました。ありがとうです。
で、ID2SYMのほうを使います。
でも ID2SYM って、README.EXTに書いてないじゃん。
>>691 また、お前か。
キレイに書き直せるモンならやってみろ、と。
まぁ、オマエには無理だろが(w
アホな質問なんですが、p/puts と print ってどう違う(使い分ける)んですか?
p デバッグ用 puts 最後に改行文字がつく print 何もつかない
パターンマッチを行うスクリプトで,以下の部分がエラーになってしまいます. "premature end of regular expression"と出るのですが,何が原因なんでしょうか? for i in 0...array.length if /#{array[i]}/ =~ line print line break end end
>>697 array[i] に正規表現のメタ文字が入ってておかしくなってるんじゃない?こうかな?
if Regexp::compile(Regexp::escape(array[i])) =~ line
るびきちさんとMoonwolf さんは兄弟だと聞いたのですが?
700 :
デフォルトの名無しさん :04/10/06 09:56:15
VS.NETで作成できるWindowsインストーラーでサイレントインストール時に インストール先をiniファイルなどやオプションなどに記述して 変更する方法はないものでしょうか。 宜しくお願いいたします。
>700 誤爆ディスカー??
Ruby.NETがまともに動いて VS.NETに組み込まれる可能性なんて 絶対にないからな。
arton氏NETRuby投げちゃってるしね。 つか、.NETは実質C#一人勝ちの世界だから気にしてもしょうがない。 これでM$がとちくるってC#Scriptなんて持ち出してきたら分からんがw
[ruby-dev:24435] って、無限再帰を防げていないのが問題なんじゃなくて、 SystemStackError で止まらずに segmentation fault に突入しちゃってる、 というのが問題なんじゃないの?
>704 なしてそれをMLでなくここで言いますかw
DQN.NET
RDEで学ぶdebugの作法、のような記事があると助かります。 なければ、MoonWolfさん一つお願いできませんか。
>707 >単なるbridge(以下略 ほー、こんなんもあるのね。 ActiveScriptRuby使えばCOM経由で……と思ったりしてたが 試してみますか。
710 :
デフォルトの名無しさん :04/10/06 15:55:06
ライブラリを、moonwolf サーバーに置くのは、やめてください!!! いつ行っても、手に入れられません。 tdiary も良く落ちてるし、「rubyは不安定」と思われているのは、 この2つのサーバーが原因だと思います。
> tdiary も良く落ちてるし、「rubyは不安定」と思われているのは、 > この2つのサーバーが原因だと思います。 それを言ったらZopeなんかものすごいことになってるのだが。
>>711 落ちてるのはmojiタソのところだけです。
HashのキーにSymbolを使うとなかなか(・∀・)イイ!! 順番が関係ない物はArrayよりHashの方が扱いやすいし
>>715 むかーし、HashのキーにSymbol使って、
それをMarshalしてえらい目に遭ったことがあるw
今は大丈夫なのかねえ。
>>716 げっ、構造の丸ごとコピーにMarshal使ってる…
今のところ変な挙動はないようだが…((( ;゚Д゚)))ガクガクブルブル
リファレンスによると、Marshal.loadとrestoreは >以前 Fixnum, Symbol が渡されない不具合があったが、 1.6.7 2002-03-15 ごろに改修済み らしい この辺は関係あるのかな。
Ruby の glob で使えるワイルドカードって、 Ruby 独自のモノなんですか?それとも Unix のでは 標準的なものなんですか?
>>719 ワイルドカード自体、シェルによって方言がある。
だから標準かと言われると、まあまあいい線いってんじゃないのて答になるかな。
>>719 POSIX に glob(3) ってのがあるね。実装的には Ruby のは独自みたいだけど。
Rubyは寄せ集め。 いわば雑種。 今更誰が親かなんてわかんない。
Rubyのglobってzshをベースにしてるんじゃないのかと思ってた。 他のシェルに **/ とかはないと思ったけど。 まあzshはもっとリッチに指定できるけど、煩雑すぎるだろうね。 標準的かというと、標準の機能は備えていて、追加分がいくつかある、という 解答が正しい気がする。
>>723 zshならば*(/)とかも使いたい!!
いやま、別にいらんけどあったら便利かな。
勉強になりました。自作プログラムで Ruby と同じ形式のワイルドカードを 使えるようにしたんですが、ドキュメントに書くのに、なんて書いたら いいかなぁ〜と思い質問しました。とりあえず「Ruby風ワイルドカード」 とでも書いておきます。
>>725 >Ruby風ワイルドカード
わかる人少なそう…w
727 :
デフォルトの名無しさん :04/10/07 03:38:20
ruby を入門するのに一番良い方法を教えてください。 知っている言語は sh と emacs lisp が少々です。 本でも web でもどちらでもかまいません。 よろくおねがいします。
シェルスクリプトが書けるなら、Rubyで書き直してみると良いと思う。 やっぱ、使って慣れるのが一番。 shとlispしか知らないのなら、 オブジェクト指向の感覚が掴み易い本が良いんじゃないかな、最初は。 自分で立ち読みして決めた方が良いと思うぞ、気に入らなかったら買い直せば良いだけだ。 あとは、興味のあるClassについて、 本家サイトのリファレンスマニュアルをぼーっと眺めてみる。
>>728 うげぇええええええ
Python の方が良さげ。
さよなら
否定はしない
Ruby ってデフォでマルチバイト対応ってのがウリなだけだろ? そんなの各言語のUTF8化でお役目御免じゃんw 過去の汚物だな >Ruby
Unicode化についてはPython JPのMLでflame warになってた記憶があるけど。 いまだにSJIS対応Pythonなんてものが配布されてたりするし。 そういえばRubyのm17nってどうなってるの? つうか、具体的には何を取り扱うことになってるの?
mswin版のruby-1.8.1をwindows2000で使っているのですが debug.rbがうまく動いてくれないのは、よくある話ですか? ステップ実行しても先の行に進まずに、何度も同じ行を繰り返すんですが。 1.6.8と1.8.2ではちゃんと動いているのが確認できてます。
>>733 とりあえず鬼車ダウソしてみれ。そこにあるコードはたぶんm17nなRubyでも扱うことになると思ふ。
>>734 くだらんツッコミだけど、まだリリースされてないバージョンを書かないで欲しい。じゃないとプレビューの存在意義から考えても、リリース後ごっちゃになるっていう意味でも、うれしくない。
>>730 いまから勉強を始めるなら、Ruby より Python ですか?
「コード生成」って具体的にはどういうものですか?
puts 'puts "hello, world"'
Ripper って何ぞや、ってのがまとめられてるドキュメントってありますか? できれば日本語で。
>>741 ありがとうございます。かなりわかってきました。面白そうですね。
IRC bot の安全版 eval プラグインみたいのが作れたりするかな?
死ね
一連のアンチカキコはPythonスレで飼われているキチガイですので誤解なきよう
Pythonスレでもアフォが暴れてるよ もうね、アボガド(ry
パワーズ
わかったぞ!Python、Rubyの両スレで暴れていた真犯人はHSP厨、お前だ!
マジレスすると Python の方が Ruby より言語仕様は格上。 Ruby は些細なこと(例えばこの前の言語バトル)で満足感を得るぐらいs
マジで質問ですがどの辺りが格上なんですか?
直観でw いや、Ruby は必死だしw なにかとねw
どうみても一番必死なのはオマエ
日本限定だし・・・正直国産レッテルとか不要だな・・・ 判で押したような考えの日本人だけの愛用者・・・オモロイ奴がいない・・・
外国でも使ってるヤツいるだろ。 rubyの影響受けた言語も新しく産まれてるし。
> rubyの影響受けた言語も新しく産まれてるし。 具体的には何?
JVMで動くGroovy。将来Javaで標準サポート予定。 ちなみにGroobyは意図的にRubyに発音似せたらしいよ。
>>748 発想自体が違うよ。
Ruby と Python を比べるなんて、
C と Pascal を比べるのと同じくらい不毛。
ごめんPythonもRubyも全然知らないで荒らしたいだけだったんだwww
ArrayとHashって使い所が結構難しいな 名札を使いたければHash 順番が大切ならArray indexを使いたいならHash 出し入れの速度ならArray? かな…まだまだありそうだ…
>>758 でかいけど中身が疎ならHash、とか?
a = []; a[0] = 1; a[10000] = 2
b = {0 => 1, 10000 => 2}
とか。Arrayでも問題無し?
自己レス >indexを使いたいならHash 適当にでっち上げたベンチマークだと相当速いんだが、実際に使うと 状況にかなり左右されるなバラツキが激しいというか最悪Arrayより遅くなる …難しい…
ベンチマーク以前に、「データ構造とアルゴリズム」みたいな本で一から勉強した方が良さそうな悪寒
> インデントは2。なぜなら空間効率が高いから。
_ [Ruby]コーディングスタンダード 社内メーリングリストでRubyのコーディングスタンダードの話題が持ち上がる。 個人的には「自分で勝手に決めて」という感じなのだが、まあ、私のスタイルを参考にしたい人もいるだろうということで、まとめてみた。 その転載。 ローカル変数名はすべて小文字。単語の区切りは"_"。 インスタンス変数名は(先頭の"@"以外は)すべて小文字。 クラス名、モジュール名は、先頭は大文字、続 く単語も先頭の文字を大文字に(つまりCamelCaseStyle)。 クラス・モジュール以外の定数は全部大文字。単語の区切りは"_"。 メソッド名は一部の例外を除きすべて小文字。 述語メソッド(真偽値を返すメソッド)には末尾に"?"をつける。 "!"をつけるようなメソッドはなるたけ作らない。 ライブラリファイル名はそのファイルが提供するクラス名・メ ソッド名を小文字化したもの(もしあれば)。そのような「名前」 はできるだけ一単語のものを用いる。 モジュールをネストする時には'foo/bar'のような形にディレ クトリを分ける。 真偽値の判定には"== true"という判定を行わない。なぜなら Rubyではtrueは唯一の真値ではないから。 メソッド名とメソッド引数のまわりの括弧の間に空白を置かな い。なぜなら警告されるから。 演算子の両側に空白をいれる。または両側に空白をいれない。 当たり前。 kind_of?やisa?を使わない。DuckTyping推奨。 ライブラリファイルの末尾には if __FILE__ == $0 で囲んで テストケース(かサンプルプログラム)を書いておくとよい。 他人が使うRubyプログラムにはRDocコメントをつけておく(と 良いと思うが、自分ではなかなかできてない)。 インデントは2。なぜなら空間効率が高いから。 自明なことはコメントしない。なぜなら本当に大切なコメント が埋没してしまうから。 「未来の自分が混乱しそう」と思ったことは躊躇せずコメント する。そうでなければコメントはあまり必要ない。 「本当に必要だ」と感じた時以外はメソッドは20行以内に抑え る(数はどうでもよい、目安に過ぎない)。例外は巨大なcase文 を含むディスパッチコードくらいか。 共通機能部分はモジュールにくくり出す。 お役に立つか、立たないか。ご参考までに。
>メソッド名とメソッド引数のまわりの括弧の間に空白を置かな い。なぜなら警告されるから。 >演算子の両側に空白をいれる。または両側に空白をいれない。 当たり前。 説明する気無いだろw
>ライブラリファイルの末尾には if __FILE__ == $0 で囲んで テストケース(かサンプルプログラム)を書いておくとよい。 これはいいね、久しぶりにmatzの言うことで感心した。
やっぱ、モジュールが一番充実しているのは Perl かな?
>>768 それじゃぁ、そのPerlを目標にライブラリを充実させましょう。
>>770 CPAN内を巡回しれよ…
つぅかフクロウ本に書いてあるね
Python > Ruby
Ruby/Python がある以上、Python 以下という事だけは無いな。
>>771 ん?どこに書いてるっけ?
フクロウ本といえば、第1版の監訳者氏の紹介文が印象的ですね。
> 第1回 Perl Conference Japan のプログラム委員を依頼されるが、
> 基調講演に国産スクリプト言語である Ruby の話題を推薦し、
> Perl ファンからの顰蹙を買う。
.newで生成したクラスを明示的に解放することってできたっけ?
> .newで生成したクラス Class.new で生成したクラスオブジェクト、ってこと? オレの理解は↓なんだけど、間違ってたらアレなんで誰かツッコミ希望 クラスオブジェクトに限らず任意のオブジェクトについて *そのオブジェクトを指定して明示的に解放する手段はない *「どこからも参照されてないのに GC.start しても解放されない」可能性がある。(保守的GCだから)
クラスの初期化時(initializeメソッド実行時)に発生したエラーを 親に伝える方法ってどんなのがありますか?
>>777 具体的には
class A
def initialize(foo)
hoge = f(foo)
if hoge == nil then
※1 エラー検出
end
…
end
end
a = A.new <ここで※1になったかどうかを検出したい
な感じです。
>>779 ありがとうございます
例外使ってみます
>>775 thx
Class.new で生成したクラスオブジェクト、ってこと?
そうです。
やっぱり任意に解放することはできませんか…
どうしても困る事じゃないんですけどね。
782 :
デフォルトの名無しさん :04/10/09 02:35:46
変数宣言が不要 が売りみたいですが、perlの use strict みたいなことできませんか。 ってかそんなんなくてもええからrubyスタイルでバグ少なくする方法教えてくれ。
ライバルはHSPのみ、か
Rubyの=が、名札をつけるってことのいい例を思いついた。(初心者への説明で) a = "old" b = a.chop c = "new" d = c.chop! p a.id => 23214536 p b.id => 23214524 p c.id => 23214512 p d.id => 23214512 これで、破壊的メソッドと、非破壊的メソッドの重要性もわかりそう。
>>785 コメントです。
* (Ruby 1.8以降では)Object#id は推奨されていません。
Object#object_id を使った方が無難でしょう。
* 破壊的メソッドが全て self を返すわけではありません。
* ある破壊的メソッドが self を返すケースがあったとしても、
常に self を返すとは限りません。たとえば "".chop! は
self でなく(変更されなかったことを表わす)nil を返します。
* 名札の話だとすれば
a = "old"
b = a.dup
c = "new"
d = c
を、より分かりにくくした例に思えます。
(String#{chop,chop!} の知識が必要になるで)
* 破壊的/非破壊的の方は、例になっていないように思えます。
(このサンプルだと*破壊*されてるところが見えてないので)
>self でなく(変更されなかったことを表わす)nil を返します。 この仕様って現実的にはどう利用するの?
>*破壊* *band厨ですか?
素人質問スマソ。VRubyのVRStaticでGUIのパネルに表示した文字って 更新できますか?ボタンを押した際、hoge1→ hoge2と更新したいのですが。 def construct $name = "hoge1" addControl(VRStatic, "st1", $name, 0, 0, 100, 30) … end def btn1_clicked $name="hoge2" … end
>>*破壊* >*band厨ですか? いみふめー
*鑑定*
>>782 俺のイメージでは変数の宣言不要というのはちょっと違う。
宣言と代入が同時というイメージ。まあグローバルとかは違うけれど。まあ-wあるし。
この仕組みは結構よく出来てるよね。Pythonとか由来なのかな?
これだと意外に単純なスペルミスにははまらない。
*破壊*の巻物 (Scroll of *Destruction*)
Destruction Baby
Love is destructive
自己レスソマソ。
>>789 @st1.caption = "hoge2"するだけだった…
古代万色ドラゴンはあなたをひっかいた - more - ######################## DDDDDDDDD@DDDD ########################
暗黒の魔法書[Ruby-DBウェブデザイン]を自動破壊します。
Countdown to Extinction
滅茶苦茶凝ったRubyのGUIのスクリーンショットなどあれば紹介していただけませんか? Rubyでどこまで完成度の高い or 洗練されたGUI作れるのか参考にしたいのですが。
>>801 GUIって言語に依存するもんじゃないよ。
TkにSDLの窓を入れられるんだから 他のGUIにもSDLの窓を入れられたらいいのに、と夢想
>>802 あいや、失礼。そもそもは、
(たとえば)Macのアプリのようなwindow装飾って、
どのくらいコードを書けば実現できるんだろなぁと素朴な疑問なわけです。
半透明の効果を使ったりとか、凝ったインターフェースを
Rubyで書く場合のテクニカルな方法をいろいろ参考にしたかったので…
>>804 それはRubyじゃなくてGUIツールキットの実装如何
そのような機能を持ったGUIツールキットなら実現できるかと
それにGUIの半透明処理なんてRubyでやったら遅くて使い物にならない気が…
>804 そこでRubyCocoaですよ。
>804 そこでwxRubyですよ。
ルビ厨はGUIに不自由なので能力的に実現不可能です。
とHSP厨がほざいております。
VC/VC.NETあたりと比較されて言われるならまだ納得がいくが HSP相手には言われたくないなw
>>805 > それにGUIの半透明処理なんてRubyでやったら遅くて使い物にならない気が…
「気が…」ではなくて、実際に凝ったことをRubyでやってみたらどうなるのか、
コードやパフォーマンスを確認したいのが
>>801 さんの主張だと思われ。
GUIツールキット次第
てゆーか、それ、GUIじゃなくてただの画像処理じゃん。
samidareっていまダウンロードできますか?
半透明処理するのに最終的にネイティブメソッド呼ぶなら何使ってもそう変わらんはず。 ウィンドウのプロパティとしてアルファ値が設定できる環境ならなおさら。 設定したらあとは環境任せで言語側の処理はないから。 Win32APIでいうと SetWindowLong(hVimWnd, GWL_EXSTYLE, GetWindowLong(hVimWnd, GWL_EXSTYLE) | WS_EX_LAYERED); pSetLayeredWindowAttributes(hVimWnd, 0, gbAlpha, LWA_ALPHA); UpdateWindow(hVimWnd); したらあとはWindowsが勝手にやってくれる。
そんな事したら移植性のかけらも無いな
そこでWine
幾つか半透明化できるアプリを wine で起動してみたが、半透明にならなかったぞ?
半透明処理ってX11だとR6.8が必要だっけ?
半透明処理をサポートしてるGUIツールキットってある? もう十分標準的な機能だよね?
.NET Framework, VCL
>>807 Mac版のwxRubyってどうよ?
Win版はImageとDC周りに挙動不審なところがあるよ…○| ̄|_
VRuby+WIN32APIでSetLayeredWindowAttributes駆使したプログラム書いても そんなに大変じゃなかったけど。
rubyタイプ数多すぎ
(・∀・)ヨガフレイム
懐かしいなあ……
京女で教えてみたい(謎
>>829 またオナニー書籍が上梓されるのか・・・紙の無駄だよ。
832 :
プログラミング初心者 :04/10/12 06:43:41
ruby/tkで作ったウィンドウの上に、 Excelのコンポーネントをのせる (表現がおかしいいかもしれないですけど、Excelを使いたいってことです) ことってできますか?? できるなら、サンプルちょっと書いてみてもらえませんか?
Pythonにしとけよ
必死だなw
>>832 できるなら、質問する前にもうちょっと調べてもらえませんか?
>>832 できるなら、自力で挑戦してどこまで出来たのか教えてもらえませんか?
そこで、Moonwolfさんの出番ですよ。
Rubyの最大の欠点はこの腐ったコミュニティが原因だよ
840 :
デフォルトの名無しさん :04/10/12 13:04:34
>>839 > この腐ったコミュニティ
なんで?キリスト教系宗教団体じゃなかったの?
名メ本Ruby無職にクリティカル
842 :
プログラミング初心者 :04/10/12 13:49:58
VisualuRubyで、IEならわかりました。 これはActiveXとかいう技術を使ってるようなのですが、 ActiveXってインターネットに対応するための技術(?)のような説明が書いてあって なぜ関係あるのかわかりません。 Excelはまた別なのかな?? OLEっていうのはわかります(つもり)が、どうも、ウィンドウに貼り付けることとは関係なく、貼り付けた後の操作に使うんですよね。 ヒントください。
わざわざGUIの超不得手なRubyでがんばって実装する理由はないんだが。
845 :
デフォルトの名無しさん :04/10/12 14:54:17
>>843 ありがとうございます。
なるほど。でも残念。ruby/tkの本が多いから、できるだけ使いたかったのですが。。
別画面で我慢するか、vrubyを検討してみます。
大量のデータ列(要素の数で数万)から目的のデータを探す方法で Array#index、Hash#indexより速く見つけられるメソッドとかってある?
>>846 データが何なのかによるけれど、データをキーに Hash を作ってやれば
O(1) で検索できる……って、そんな話じゃない?
# データ列
data = ['foo', 'bar', .....]
h = Hash.new(false)
data.each{|element| h[element] = true}
# 'baz' がデータ列に含まれるか?
h['baz'] #=> true/false
>>846 Hashより速い方法というのは知らない。というかないのでは。 O(1) だし。
ただし、いったん Array が出来上がっているのであれば、他の構造に変換し
てから検索するよりも、 Array#index だけの方が良い場合はあるかもしれな
い(同じデータ列に対して1回しか検索しないとか)。
C++のstd::setみたいなのを欲しい時って、
>>847 みたいな感じでHashを使うのが普通だと思うんだけど、
自作したOrderedArrayとか使ってる人っていますか?
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,./<>?;:\'"-_=+[]{}@#$%^&*()' puts Array.new(ARGV[0].to_i > 0 ? ARGV[0].to_i : 10){ chars[rand(chars.size)].chr }.join
>>849 普通は Set を使うんじゃないか? まあ Set は内部的には Hash で実現してるけど……。
Setってあったのね、知らなかった…
標準添付のライブラリでも知られてない物は結構ありそう。
>>847 ,848
Hashのキーとして登録すれば良かったのか!
めっちゃ速くなりました。ありがとう
>データが何なのかによるけれど
画像のカラーデータです。パレットから検索してくるのにindexだとかなり時間かかるんで
これだけ速くなるなら探すためだけにHash作っても速いかも…
require 'vr/vruby' include VRKeyFeasible でGUIの画面から矢印キー↑↓を読み取る方法ってあります? def self_char(keycode, keydata) p keycode end しても、矢印キーだけは無反応なんですけど…
ルビ教信者さんは今月のリナマガのまつもと教祖の駄文コラムにも盲目的に絶賛するの?
?
>>847 配列をハッシュに登録するのって、ループでまわさなくても、やる方法ってなかった?
>>860 ary = %w[ alpha bravo charlie delta ]
hash = ary.inject({}) { |h,k| h[k] = 1; h }
hash['alpha'] # => 1
data = ['foo',true,'bar',true...]; Hash[*data] コンストラクタで渡してやってもできるみたい。
>>856 charイベントでは取れないんじゃない?
俺はmodule VRKeyFeasibleにkeydownイベントを追加してるよ。
require 'vr/vrhandler'
module VRKeyFeasible
def keyfeasibleinit2
addHandler(256,"keydown", MSGTYPE::ARGINTINT,nil)#WM_KEYDOWN
addHandler(260,"syskeydown", MSGTYPE::ARGINTINT,nil)#WM_SYSKEYDOWN
acceptEvents [256,260]
end
def vrinit
super
keyfeasibleinit2
end
end
これでself_keydown(keycode,keydata)が発生するはず。
いまのところ支障はないみたい。
>858 どの記事? 最近雑誌も立ち読みできんからなー。
>>865 なぜに?どの都道府県ならがっくりしなかったんでしょう?
>>863 ありがとうございます。完璧にうまくいきました。
こういうのがあったら嬉しかったりするだろうか? %R/[2004-10-13] (HOGE)/ # => /\[2004-10-13\] \(HOGE\)/
ここ島根から和歌山、奈良、京都、兵庫、三重、滋賀、大阪、果ては沖縄まで We Rock City♪
1.8.2ってなんでまだリリースしてないの? まさか忘れてるとか?
1)アキラさんが頑張りすぎ 2)matzがサボりすぎ
core を吐くと次のようになります。
>>870 Regex.quoteと何が違うのか。
>>876 タイプ量が減るのが(゚д゚)ウマーという話だと思う
オレも Regexp.compile(Regexp.quote(str)) とか
/#{Regexp.quote(str)}/ とか書くのがウザイと思うことがよくある。
ていうか 1.9 になったすぐ後あたりで、
「/#{str}/ で自動的に quote しよう」とかいう話が出てたような気がしたけど、
その後どうなったっけ。
あんまりリテラル増やすのもどうかと思うけど、 たしかにRegexp.quoteの省略記法は欲しいね。
881 :
デフォルトの名無しさん :04/10/14 06:59:14
GUIのプログラムを始めて書いてるんですが、(vruby使ってます)
>>863 に書いてあるような、
keydownやMSGTYPE::ARGINITINTなどという言葉は、どこで調べればいいのでしょうか?
マイクロソフトのプログラミングの本を買ったりしないといけないでしょうか?
>addHandler(256,"keydown", MSGTYPE::ARGINTINT,nil)#WM_KEYDOWN
>>868 けど、Rubyって「日本発」とか「日本国内技術者が作った」ってイメージはあんまりないよな。
思いっきり国産臭ぷんぷんなんですが 嫌窓厨多いし
嫌窓厨はだいたいUN*X使ってるっしょ。 TRONマンセーな香具師ばっかなら国産臭いけどなw
TRONは組み込み系の世界標準を目指しているらしいし
>>885 世界標準を目指しているにしてはさっぱりな気がするが…
このままじゃ増大するコンピューティングパワーとオープンソースOSに押されて
永久に一部で細々の日陰物になりそう
B
I
AkRubyほしい
範囲オブジェクトって連結できないでしょうか? こういうのがやりたいのですが、スマートな方法はあるでしょうか? (1..2 + 4..5).each { |i| p i }
>>890 Range から Array にするとか。
((1..2).to_a + (4..5).to_a).each{|i| p i}
>>890 標準では連結する機能がないのでは?
とりあえずこうすれば実現できますが、スマートではありませんね。
((1..2).to_a + (4..5).to_a).each { |i| p i }
あらら、かぶった。失礼しました。
ありがとうございます。 考えてみたら、Range を連結したものは Range といえるか微妙な気もしてきました。 やっぱり挙げていただいたように Array として開くのがいいかなあ。 範囲がでかくて Array が巨大になりそうだったら素直にこうするしかないか。 [1..2, 4..5].each { |r| r.each { |i| p i } }
範囲と範囲を連結すると、だぶったり穴があいたりするだろ。
それは範囲とは呼べん罠。
>>890 が欲しいものは単なる数列が詰まった配列みたいだし。
配列の内包表記のサポートまだー?
ある範囲とある範囲の集合も立派な範囲だと思うがな。 そんなに違和感ないし。 Rangesクラス作って894の方式でeachするeach作ればいいんでないの。 まあ、基本的には単なる配列なんだけど。 何を親クラスにするか微妙だが。 Rangeか?
RangeとRangeを足したら、 それらの中の最小値と最大値から構成されるRangeを返す、 ってのが自然だと思う。
>>897 試しにArrayのメソッドとして書いてみました。こんな感じ?
class Array
def each_range
self.each do | range |
if range.respond_to?( 'each' )
range.each { | value | yield value }
else
yield range
end
end
end
end
[ 1..2, 4..5 ].each_range { | i | p i }
あ。インデントに失敗...。読みにくくてごめん。
>>897 ,
>>898 私はどちらも不自然な気がしていて、
>>895 さんの指摘が正しいように思います。
確かに RangeSet クラスみたいなのを作るという手もあるかと思いますが、
その場合も親クラスは無いんじゃないでしょうか。
ちなみに、そもそも元々何をやろうと思っていたかというと、
Shift_JIS の文字の表を作ろうと思っていたのでした。
[0x81..0x9F, 0xE0..0xEF].each { |r1|
r1.each { |c1|
[0x40..0x7E, 0x80..0xFC].each { |r2|
r2.each { |c2|
print [c1, c2].pack("c*")
}
}
}
}
>>902 あぁっ。申し訳ない。
もし良かったら、改善すべき点を指摘していただけます?
より一般的に考えるなら、範囲集合に重複があったときにどうするか、とかも 考えた方が良い気がする。たとえば、 [1..5, 3..7] これに対しては each すると、 1..7 としてふるまってくれる方が自然な気が する。一方、抜けに対しては抜けを対処したい。 Array で良いので、 def range_set(*rary) rary.map{ |e| e.to_a }.flatten.uniq.sort end とか。
>>881 ネットとvrubyのソースとにらめっこでも何とかなるとは思うけど
勉強するならwin32api関係じゃないかな。
>881が挙げた例だとkeydownというのはself_keydownみたいに
定義するための名称だからwindowsとは関係なく、
256=WM_KEYDOWNというメッセージが重要。メッセージは
WM_xxxxみたいな名前がついてる。
MSGTYPE::ARGINTINTはvrubyで定義している。これはkeydown
メソッドが2つのINT型の引数を持つことをあらわしているのだけど
なぜこんなトリックが必要かというとメッセージはwparamとlparam
の2つの引数しか取れないから、それをどう展開するかを示す必要が
あるから。
vrubyでキーボード入力からウィンドウの最小化を呼び出したいのですけど、 どの関数が使えますでしょうか? class UserForm < VRForm end 一応self.visible = false とかは試してみたんですけど、うまくいきませんでした。
907 :
881 :04/10/15 01:57:28
>>905 ありがとうございます。
なんか難しいですね(^^;)
GUIプログラムをいきなりvrubyではじめるのは厳しいのかも。
私もvrubyを始めたばかりなんですが、VREditのcharイベント について教えていただけませんか。 visual basicのkeydownプロシージャでは引数keyの内容を 検査して、入力をはじきたい文字だったら key=0 とすればキー入力を捨てることができるんですが、 vrubyではどうすればよいでしょう? 私自身イベントまわりをいろいろ調べてvrubyに直接こういう 処理はないと思いましたので、APIで何とかしようと考えました。 PeekMessageでメッセージを消せるらしいところまでは わかったのですが、これに与えるMsg構造体の中身が コンプリートできません。Swin::Msgにはtimeとpointapiが ないんですorz なんとかいい方法はないものでしょうか?
>>907 難しいつうか…
どっちみちCUIと比べるとGUIはめんどくさいと思う。
あと、GUIプログラミングの知識も必要かと。イベントとかの概念はここから来ているので…
Windowsで使われているイベント名とかならMSのサイトにあるMSDNライブラリで調べられるかと
なぜ Tkinter を使わないのか理解に苦しむ。 GUI実装 は Ruby を捨てて Python を選択するのが自然だろう?
GUIはC++以外全部ダメ。
>>910 なぜTcl/Tkを使わないのか理解に苦しむ。
Tk使うならTclを選択するのが自然だろう?
実例示さないと説得力ゼロだけど。
vruby使う人が増えてきてるようですね。 作ったのをどっかに公開して下さいよ。 やっぱ人が書いたものが参考になるので。
作ったけどソースが美しくないので・・・
919 :
vruby入門 :04/10/15 16:27:26
>>919 COMのコントロールなんだからWin32OLE使えばよいのでは。
>>906 self.show 6
6はSW_MINIMIZE
WindowsAPIのShowWindowで調べてみて。
module VRHookWindowMessages include VRMessageHandler WM_COMMAND= (0x00000111) def self_hook_window_messages(msg) =begin File.open('/cygdrive/c/tmp/hook_window_messages.log', 'a+b') {|f| f.printf("hWnd:%08X, msg:%08X, wP:%08X, lP:%08X, retval:%08X\n", msg.hWnd, msg.msg, msg.wParam, msg.lParam, msg.retval) } =end returnnil end def msghandler(msg) if(!self_hook_window_messages(msg)) super end end end
924 :
vruby入門 :04/10/15 18:37:22
>>923 は
多分、僕の書いたことに対して、vrubyだけでできるということなんだと思うんですが、
表示される、内容の意味が全くわかりません。
だれか解説お願いします。ちょっと教えてもらえれば、あとは自分でしらべるので。お願いします。
printf("hWnd:%08X, msg:%08X, wP:%08X, lP:%08X, retval:%08X\n",
msg.hWnd, msg.msg, msg.wParam, msg.lParam, msg.retval)
>>924 "ウインドウメッセージ"で検索、かな?
C/C++でWindowsアプリ作ったことないとWindowsでGUIやるのは無理だと思う。
926 :
vruby入門 :04/10/15 19:18:13
むずかしすぎる。 _∧∧__ / ̄ ̄ ̄ |( ゚'ω゚)| < 寝る! |\⌒~\ \___ \ |⌒⌒|
>>926 wxRubyならWindowsのこと知らんでもいけるぞ、たぶん。
>>927 でもWindowなアプリを作るために必要な概念くらいはわかっていないと難しいと思うぞ。
あとwxRubyはあちこち挙動不審ぽいのでお勧めしない
Ruby/gtk2 の話は全く出てこないよね。
>>294 だった人である漏れって負け組か orz
vruby系の話ばかりでスマソ。 GUIのボタンを押してしまうと、そのボタンに操作がキャプチャされてしまい、たとえば、 def self_keydown(keycode,keydata) end が効かなくなってしまうのですが、何か良い対処法はないでしょうか?
vrubyでトレイに格納したアイコンをクリックしたときに、 最前面表示にしたいのですが、self.top trueでは無理なのでしょうか? def self_traylbuttonup(iconid) self.show 9 self.top true end
vrubyの話と Win32API の使い方の話がごちゃまぜになっててわかんねー。
RubyからSystem.Windows.Formが呼べたら幸せなのにね。
そこで ActiveRuby ですよ
>933 Win32OLEと.NETのCOMサポートの連携でなんとかなるんかな? どうなんだろ。
>>933 スレの前の方で出ていた.NET bridgeを使う。
>>929 Ruby/gtk2 を調べててここにたどり着いたけど、いきなり
>>929 を読んでしもた。
かなり引けた…が、もう少し調べてみるか…。
>>920 908です。自己解決しました。
PeekMessageを呼んでメッセージを消すことができました。
timeとpointapiは0でも動いたようです。
vrubyにもちょっと改造を加える必要がありました。
といってもmsghandlerで受け取るmsgを自前の
変数にコピーしておくだけですが。
しばらくこれで様子をみてみます。
リファレンスってAND検索できないんだね。RWikiの仕様? かなりトホホだと思うんだけど……
940 :
デフォルトの名無しさん :
04/10/16 03:39:14 >>939 HTMLHelp版を使うってのはどうよ