1 名前:デフォルトの名無しさん [2009/06/28(日) 16:29:28 ] オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。 前スレに変なのが沸いて流れてしまいましたが、まったりと行きましょう。 Ruby Home Page www.ruby-lang.org/ja/ = 前スレ Rubyについて Part 35 pc12.2ch.net/test/read.cgi/tech/1238194350/ 過去スレ・関連スレは >>2-
22 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:49:32 ] 階層化とやらの実装はcaller調べりゃすぐ出来る むしろ最終的に実行した式(1+1=2とか)を表示する部分に工夫が必要
23 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 06:23:05 ] そもそもLISPとか括弧だらけで美しくない レベルの低い話をRubyのスレに持ちこまないで
24 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 06:38:33 ] >>20 今ひとつ掴み切れんが、RSpecの階層化で幸せになれる話? context 'arithmetic' do context 'plus' do specify '1+1' do end specify '1+9' do end end context 'times' do specify '1*1' do end end end 実行した式の表示に関しては、Rubyではまず無理だろう その芸当は「手続きも含めてすべてがデータ(リスト)」のLispだからこそだ
25 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 07:46:46 ] 無理やりやるとしたらこんなか?何か気持ち悪いなあ def check(recv, method, *args) expect = args.pop backtrace = raise rescue $@ result = recv.send(method, *args) うんたらかんたら end check(1, :+, 1, 2)
26 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 09:54:34 ] GitHubで、有名じゃないRubyライブラリのプロジェクトをいじって遊んでる 足りないテストがあるので追加してるんだが、 ユーザー指定のわりとレアな組み合わせによっては期待通り動作しないことがわかった ライブラリ側を直せばいいんだが、これを直すと確実に大改造になるし、 ライブラリを利用してる既存スクリプトの動作も下手すると変わってしまうし、 正しく直せたかどうかがいまいち俺にはわからん分野でもある A 現状追認のテストだけ書いて、不動作関連は記述せず、別途報告 B 現状追認のテストだけ書いて、不動作関連は記述せず、報告もしないで見なかったことに C テストを実行するとテスト失敗になるようにしておいて、不動作は別途報告 D テストを実行するとテスト失敗になるようにしておいて、不動作は無視 E 「BUG:本当はテスト失敗になります」と書いて、失敗結果を出すことを成功とみなしてテストは通す どうしましょ
27 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 10:03:41 ] そういや、GitHubでむちゃくちゃ大量にすっごいアドホックなコード追加して 「みんなの見つけてないバグ見つけたのでなおしときましたー」って言ってくる人はいる そんなコミット怖くてマージできんわー そんな怖いコード書くくらいならひとまず現象の報告だけして改正案募ってくれ 「どうすればいいかわからんがとりあえずやるか」といったときのコードはたいていあとで問題を起こす ということで、A
28 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:09:37 ] >>24 evalでねじ込めば実現できなくもない・・・・・・
29 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 16:11:54 ] びっくり最小にするためにアグレッシブに進化してるな。 codezine.jp/article/detail/4052
30 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:13:36 ] Pythonのことあんま知らんけど、intとlongの互換性ってどんなんだったん? Rubyの場合、FixnumとBignumはほとんどシームレスだけど
31 名前:デフォルトの名無しさん [2009/06/29(月) 19:19:00 ] なんつーか、Rubyやってる奴ってRubyしかできないんだよな だから>>12 みたいに毛色の違う関数型言語の話題が来ても誰もついていけないという…
32 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:41:20 ] それはまあ言語歴、プログラミング歴によるのでー
33 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:41:22 ] LISP やっているやつはこんなのばっか。
34 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 19:54:54 ] C言語やJavaやってる人間がいきなり>>12 見ても理解不能だろ・・・常識的に考えて
35 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:00:20 ] C#から満を持して飛び込んできましたがサッパリです
36 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:07:29 ] SICP読んだ事があるのに分からんかった。
37 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:08:44 ] 解説いらないなら本書く理由も無いからな
38 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:21:26 ] PL/SQLで頼む
39 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:43:42 ] >>31 そうそう。逆にPHP使える奴はPerlもHaskellも楽勝だったりする。
40 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:49:03 ] 誰にも構ってもらえてないのか?
41 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:49:13 ] >>39 ダウト
42 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:51:36 ] >>39 ×PHP ○Python
43 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:52:14 ] Rubyに限らず他言語を一つでも知ってればlispなんて1日で読めるようになるよ。
44 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:53:39 ] >>42 それは単純にPython厨に古い人が多くてRuby厨に新しい人が多いってだけだろw 古い人は経験豊富なんだから他言語習得するも簡単
45 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:56:15 ] PythonはLispのパクリだから親和性が高いのが特徴
46 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:01:19 ] Ruby会議いくやついる? あれって、チケット必要なのね。 とっくに売りきれてたorz.
47 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:02:41 ] RubyにもCommon Lisp成分が入ってると思うが 触ってみると、なるほどご先祖様だと感じられる Matzが参考にしてると言うだけはある
48 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:05:26 ] >>39 それはないだろw
49 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:12:04 ] Ruby も Python も LISP も信者はおかしなのが多い。
50 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:13:46 ] 隔離スレあるんだからいい加減そっち行ったら?
51 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:26:02 ] >>20 実行結果出力例が納得いかないんだが、test-arithmeticの結果、mathの結果、は別途表示されないの? それはともかく、 deftest "test_plus" do check ["1+2", 3], ["1+2+3", 6] end deftest "test_times" do check ["2*2", 4] end deftest "test_arithmetic" do combine_results "test_plus", "test_times" end deftest "math" do test_arithmetic end に対して pass ... (math test_arithmetic test_plus): 1+2 == 3 pass ... (math test_arithmetic test_plus): 1+2+3 == 6 pass ... (math test_arithmetic test_times): 2*2 == 4 と表示させるテストライブラリくらいはあっという間に書けた。
52 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:33:00 ] evalかな そうだとすると、違わないんだけどなんか違うようなやっぱり違わないような なんだこの無形の障壁は
53 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:04:34 ] evalです。 作ってみて思ったんだが、>>52 の気持ちはよくわかる、というか、対象式を表示させるために文字列で渡してevalするという発想自体が捻じ曲がってる気はする。
54 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:26:43 ] 構文木を直接書き下すlispはそこんとこ突き抜けてるからな。
55 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:30:23 ] 1年ほど前からスピードランニングやってます。 貧乏なので生活費辛くなってPart9で中断してますが。。 率直な感想を言えば、内容は悪くないと思う。聞きやすいしバックのクラシック音楽も意外に効果的。 ただ、会話がいかにも教材のために作られたという感じの内容なのでつまらなくてすぐに飽きます。 例えば、日本人と外国人が映画に行って、お互いの文化を説明しあったりとか。 価格は高すぎると思う。ちゃんと机で教科書開いて学習する意思がある人ならNHKラジオの英語教材買った方が遥かにお得だし効果的。 1年ぐらいの間暇を見つけてはCD聴いてたわけですが、現時点で英語の映画とか観ても相変わらずほとんど聞き取れない。 効果が出るかは謎。出るにしても時間はかかるんだろうなぁ
56 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:31:14 ] ↑誤爆した。すまん
57 名前:12 [2009/06/29(月) 22:31:20 ] >>51 まさにそんなかんじ。すげー でも勉強不足なもんでそのdeftestの実装がどうなってるか よくわからん。 checkは文字列を引数としてあとでevalするのか。なるほど
58 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:19:50 ] Proc#to_sあたりでコード片の文字列に戻せたならeval避けられそうなんだけどね 例えばJavaScriptだとユーザー定義の関数は (インデント等の差違はあるけど)Function#toStringでコード片に戻せる rubyの実装だとこういうの難しいんだろうか >>47 Array#cdrあったような気がしてつい探したことがあるw ・・・昔あったんだっけ?
59 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 06:52:46 ] いいかげんウザいよ
60 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 10:25:45 ] お前はなんの話題なら納得するんだ
61 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:11:29 ] まぁ、Array#cdrなんて無くても ary[1..-1]で済むからなぁw
62 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:33:45 ] >>57 実装はこんな感じ。5分ほどで書いたから汚くてごめん。 class Test @@tests = [] def check(*tests) name = caller[0...-2].reverse.map{|str| str.sub(/\A.*`(.*)'\z/){$1}}.find_all{|m| @@tests.include?(m)}.join(' ') #` tests.flatten.each_slice(2) do |expression, expected| result = eval(expression) == expected puts "#{result ? 'pass' : 'failed'} ... (#{name}): #{expression} == #{expected}" end end def combine_results(*cases) result = true cases.each do |c| result = false unless send c end result end def self.run self.new.__send__ @@tests.last end end def deftest(name, &block) Test.class_eval " define_method(name, block) @@tests.push(name) " end END { Test.run }
63 名前:デフォルトの名無しさん [2009/06/30(火) 13:07:24 ] > 5分ほどで書いたから汚くてごめん。 謝るくらいなら5時間できれいなものを書け
64 名前:デフォルトの名無しさん [2009/06/30(火) 13:28:35 ] 2chのレスのために5時間かけるくらいなら、5分で書いてゴメンするほうを選ぶわな。 みんながみんな、2chに張り付いているわけじゃない。63みたいに。
65 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 13:29:48 ] なんで1円にもならんことに5時間もかけにゃならんのだ。
66 名前:デフォルトの名無しさん [2009/06/30(火) 13:36:37 ] >>64-65 だったら一々言い訳つけて女々しいレスすんな
67 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 13:42:14 ] こいつ前スレの>>971 だろ 酷い劣等感だ
68 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 14:12:26 ] Ruby ユーザの脳味噌の中身は PHP みたいですね
69 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 22:19:01 ] >>67 そんなわけないだろ。 ちなみに前スレでやり合ってたのもおれじゃない。 監視する価値を感じなくなったからもう書き込むことはないよ。じゃあ
70 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 22:24:37 ] ここまで我慢してたけど監視する価値でフイタ
71 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 22:32:29 ] watchの機械翻訳かもな 外国のお客さんは大事にするべきかもよ
72 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:41:49 ] るびまきてるね、編集乙 だが松江Ruby会議と仙台Ruby会議は福岡開催じゃNEEEE
73 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:52:16 ] >>72 ワロタwww 広島Ruby会議も栃木で開催されてるよ!
74 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:19:50 ] Ruby会議って面白いですか? 「はじめてのRuby」を一通り読んだ程度の人間が行っても場違いでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 05:30:43 ] 教祖に有って、誤利益の有るツボとか買いたければ参加してみるのも一興。
76 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 06:54:36 ] >>72-73 普段どういうコードを書いてるか目に浮かぶようだ
77 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:11:31 ] Ruby ユーザの質は PHP みたいですね
78 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 11:12:35 ] >>77 仲の悪い奴らを一緒に語ると、変なのが湧いてくるからやめてくれ。
79 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:31:17 ] そもそもperlの再発明だしね。
80 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 15:24:28 ] rubyはperlの…とは良く言われるが、一体rubyのどこがperlな訳? perlオリジナルの機能でrubyが模倣したモノって何よ?
81 名前:デフォルトの名無しさん [2009/07/01(水) 15:25:40 ] >>80 模倣じゃなくて劣化再発明 だからRubyはPerlではないし、Perlの代わりにはならない
82 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 15:40:54 ] やっぱり無いんだ、そもそもperlこそがパクリ言語だもんな そーゆー意味では劣化再発明と言うのは当たってるか
83 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:01:39 ] RubyがBlack PerlをパクってZen of Rubyを隠しコマンドに入れたのは超有名
84 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:51:33 ] コマンドラインオプションとかif/unless修飾子とかredoとかだってグーグル先生が あとperlが出典かわかんないけど、メソッドだと同じ名前のものが腐るほどあるよな
85 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:37:48 ] 他の言語からも取り込みまくってるから、perlと特に似てるって感じではない いろいろな言語のいろいろな特徴・アイデアを取り込んだのがRuby 強いて言えば、主な用途(スクリプティング、文字列処理、Web)がperlと似てるか >>83 詳しく
86 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:57:04 ] perlっぽい使い方を想定してる所は有るね。 松本教祖謹製perlってところか。
87 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:38:09 ] perlパクってるくせに perlからの脱却とか言ってperlの悪口ばかり言ってるのも面白いよね
88 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:47:24 ] >>87 こんなところにまでわざわざご苦労様です
89 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:49:07 ] rubyはawkのパクり。
90 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:54:52 ] とりあえず国産言語だから、という理由で覚えてみてる。 scala見たいな別の言語が出てきたら使いたいなー
91 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:46:08 ] でも国産言語だと世界でメジャーじゃないのがねえ。 主要OSが英語圏で作られてるから、利用環境が充実しない。 plやpyと比べると(ry
92 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:59:57 ] むしろ国産言語じゃ世界的に普及しまっくてる方じゃね?
93 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:03:09 ] >>87 だからperlからパクったものをあげてみろって 今んとこ出てるのはif,unless(while,until)修飾子とredoな # 関数名とメソッド名が似通ってるのはUNIX文化から来てるからperlは関係ない どうせperlもrubyも他の言語もロクに使ったこと無いんだろ?
94 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:10:03 ] >>92 まがりなりにも世界的に利用者のある国産言語と言われても思いつかない KL/1ぐらい?Prologの世界では有名なのかも分からんが、 とてもメジャーとは言いがたいと思う
95 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:18:19 ] お堅い洋書を読んでいてもRubyの名前は当然のように出てくるぞ >>93 pack/unpack, shift/unshiftなんかはPerl起源っぽくない?
96 名前:94 mailto:sage [2009/07/02(木) 01:20:54 ] あああRubyを除いての話
97 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 01:52:35 ] >>94 Lisp 界隈だと KCL (Kyoto Common Lisp) とか ISLISP くらいかねえ まあ、 KCL は言語じゃなくて処理系だし、 ISLISP は ISO 標準のわりにあまり見掛けないけど
98 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 05:02:39 ] >>95 その手の関数はC等で良く使われる手法を、perlでは言語標準にしただけだと思う perlの関数はunix-cやawkの関数がそのまま使われてるし、他の言語もだいたい同じ むしろ同じ機能なのにわざわざ別の名前にされても憶えるのが面倒だし混乱の元だから パクリと言われても同じ名前をつけてくれる方が使う側としてはありがたい
99 名前:デフォルトの名無しさん [2009/07/02(木) 06:00:57 ] Rubyは国産でも日本語対応がいいわけじゃないから何のメリットもないよ > Ruby(ルビー) † > 日本産ではあるが日本語の取り扱いは他の言語と同レベルで、特にRubyとしてのアドバンテージはない。
100 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 06:32:18 ] 標準で日本語の文字コード変換機能を備えてる訳でもないしな。
101 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:12:18 ] >>99-100 ( ゚д゚)ポカーン
102 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:23:08 ] >>100 は皮肉だろ。たぶん
103 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:45:01 ] >>93 コマンドラインオプションは既に出てるでしょ。 あと、特殊変数の類はほぼ全部perl由来だね。 それに絡んで、Kernelの一部のメソッド類が$_を特別扱いするのもperl由来。
104 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:05:42 ] > 日本産ではあるが日本語の取り扱いは他の言語と同レベルで、特にRubyとしてのアドバンテージはない。 どこからの引用だそれ? 1.8 までの文字列は 8 ビットスルーで、どんな文字コードでもトラブらないように 作られてるし、1.9 の i18n は、文字コードフェチの夢実装屋の悪夢の CSI が 実現されてるしで、日本語対応は他のスクリプト言語と比べて特徴的な所 なんだが。 検索したら、プログラミングスレまとめ in VIP、かよ。 訂正してやる気も失せる VIP クオリティだな。
105 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:12:31 ] パクっただのなんだのなんてネタは前世紀で終わらせとけよw
106 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:59:23 ] なぜこんなに多くの人が日本語の扱いに困っているんだろう。 それを考えてみることも必要。
107 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 13:01:13 ] > 多くの人が日本語の扱いに困っている 困ってるのか?
108 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 13:12:38 ] >>106 バカだからだろw
109 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 13:23:37 ] Ruby ユーザの日本語の認識は PHP の mb_* 並ですね
110 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 13:41:08 ] 辞書順ソートが標準でできないとダメとか言いたいのか?
111 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 17:51:07 ] >>87 スリップストリームに使う車体は 追い抜くためにありますので。
112 名前:デフォルトの名無しさん [2009/07/02(木) 23:21:01 ] >>104 > 日本語対応は他のスクリプト言語と比べて特徴的な所 日本語対応…? 対応…?
113 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:06:20 ] JISで統一すれば良かったのに、EUCとかSJISを使い続けるのを許してた。 結局、UTFなんて新しいコードがもう一つ増えたしなあ。 欧米だと、utfとascii/iso8859がちゃんとマップしている。
114 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:10:23 ] 今さら去年のRubyConfでのmatzの基調講演を見たが、 ことさらloveだとか強調されるとキモい
115 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:49:57 ] Ruby愛を語った講演というと、むしろRuby会議2007のDave Thomasを連想する 生で見たことはないが、ニコニコ動画に転がってたと思う ユーモアたっぷりにRubyを語ってるのは面白かったw
116 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:00:56 ] C(++)系のプログラマに pack/unpack を直感的に理解してもらう うまい説明の仕方ってあるだろうか?
117 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:17:19 ] >116 ソースコードを読ませる。
118 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:35:41 ] >>116 Cで構造体なんかをfread/writeするコードと Rubyでpack/unpackするコードを並べて見せればいいじゃまいか
119 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 04:04:30 ] char* <=> struct* のキャストにbase64等の便利機能を加えた物、とか
120 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 08:49:39 ] それCで書けるなら、Cのほうがいいって結論に成る。 おまいらだと、rubyで書ける事をわざわざCで書かないだろ。
121 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 08:51:15 ] むしろC/C++プログラマの方が理解しやすいだろ ネイティブのintとかエンディアンがどうこうとか日常だし
122 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 09:51:45 ] この論点のずれ具合が巨大掲示板の醍醐味。