Rubyについて Part 10
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGRuby Home Page
http://www.ruby-lang.org/ja/
= 前スレ
: Rubyについて Part 9
http://pc5.2ch.net/test/read.cgi/tech/1087999575/
0154デフォルトの名無しさん
NGNG冗長な表記を避けて書かれた既存のコードを読む場合可読性が非常に低く
暗号的という意味ではPerlと大差なかったりするとかしないとか。
0155141
NGNG俺の場合…
・doって制御構造で使われていたような…→for/whileとかであるけど単独の使用例は見つからず→空振り
・んじゃ検索で「do」を…→当然のように大量引っ掛かかる→あきらめ
・なら機能別検索で…→do単独の項目が見つからず→お手上げ
でした。
できればリファレンスマニュアルが項目ごとに全文検索できればいいのですが…
今の構造じゃ難しそうですね。
>>154
大なり小なり言語にはつきまとう問題だと思う。オブジェクト指向な言語ほど顕著かも
C++なんかも他人のコードはかなり読みにくい気がする。
確かにRubyは自由度が高すぎる感はあるよね。あと、"ほぼ"同機能なコードがあったりとか。
0156デフォルトの名無しさん
NGNG>初学者にとってはRubyは同機能異表記な機能が多すぎて混乱する
「他人の書いたコードを読む時」ってことかな。
両方知ってて好きな方を使う分にはいいけど、初学者は
「この例に出てくるcollectって何? mapとは違うの? …(調べる)…って一緒かよ!」
みたいになる、と。
>冗長な表記を避けて書かれた既存のコードを読む場合可読性が非常に低く
こっちはよく分からないので例キボン。
個人的には、Hashでよく使われる「var ||= value」は可読性が低いと思う。
hash['key'] = value unless hash['key']
が冗長なんで
hash['key'] ||= value
なんて書きたくなる気持ちは分かるけど……。
0157デフォルトの名無しさん
NGNGmatzがLarryについて尊敬する点ってのはここなんだろう
0158122
NGNGたいがい亀だが
Firefoxはマイナーってことでせうか。
# Firefox0.9.2(Japanese,Windows)では見れてまつ。
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGa+=1
0161デフォルトの名無しさん
NGNGそういえば結城さんもクリスチャンだよな。
0162デフォルトの名無しさん
NGNGそして「なんで Fixnum#++ がないの?」と話はループ・・・
0163デフォルトの名無しさん
NGNGclass A < CC
@@foo = 'hoge'
class B < DD
def hoge
ここで@@fooを読み書きしたい
end
end
end
の場合どうしたらいい?
0164デフォルトの名無しさん
NGNGclass A で @@foo のアクセスメソッドを定義してやれば?
0165デフォルトの名無しさん
NGNGプロテスタント(結城)とモルモン(まつもと)だもんな。
ヤバイよな。
0166デフォルトの名無しさん
NGNGString#replace(other) を置き換える方が怖くない?
0167デフォルトの名無しさん
NGNGあわわわ、確かに。 (元々の String#replace の存在をすっかり忘れてた・・・)
0168163
NGNGなるほど。できました。
やってみて思ったんだけど変数のようにデータを出し入れできるオブジェクトって作れなかったっけ?
Aの下にそのようなクラスが定義してB::hogeないでオブジェクトを生成すればデータの出し入れが
便利になりそうだと思ったんだけど…
連続で質問すまん
0169デフォルトの名無しさん
NGNGhttp://www.pragmaticprogrammer.com/titles/ruby/index.html
PDF版安いなぁ……
0170デフォルトの名無しさん
NGNGそういえば、知らないうちにメソッドを置きかえてたというのを防止することってできるの?
0171デフォルトの名無しさん
NGNGmoduleで囲って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)
0172デフォルトの名無しさん
NGNGmodule 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)
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG-e:1: warning: method redefined; discarding old replace
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNGグローバル変数的な使い方を良くするよ。
0177デフォルトの名無しさん
NGNG「次のようにすると core を吐きます。」
0178デフォルトの名無しさん
NGNGそんなに大したもんじゃないつーか
泡沫Rubyistの俺でも数回でたことある。
仕事で普通に使ってたら出て支障きたした。
むしろBug出すぎw
ただ頑張って直してパッチ書いて
取り込んでもらった時は嬉しかった。
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNGDir.chdir だとスクリプト内でしかディレクトリ変更が効きません。
% pwd
/home/ruby
% ruby -e'Dir.chdir("/home")'
% pwd
/home/ruby
動作としては、こんな感じにしたいのですが。
% pwd
/home/ruby
% cd.rb /home
% pwd
/home
なにか方法はあるのでしょうか?
0183デフォルトの名無しさん
NGNGそれはRuby云々ではなくUNIX FAQ。
結論だけ言うと「普通は無理」。
まともな方法では親プロセスには影響できない。
0184デフォルトの名無しさん
NGNGカレントディレクトリというのはプロセスごとに持っている情報。
子プロセスが作られるときには親プロセスのを引き継ぐけど、
子プロセスから親プロセスのそれは変更できない。
0185182
NGNGなるほど。ありがとうございました。
じゃあ、 Rubyスクリプトの出力を受け取って
cd を実行するようなシェルスクリプトをつくって
% . hoge.sh
としてカレントシェル内で実行する、って方法か
alias hoge='. hoge.sh'
にしておくとか。
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGruby-listの読書会のはともかく、首藤プラネットは良いと思う。
リンク先見るかどうか、寸評のおかげで決められるし。
0191デフォルトの名無しさん
NGNG日本人にはめずらしく行動力だけはズバ抜けていて、そこはマジで尊敬するけど…
あ れ は P l a n e t と は 言 わ な い よ な 。
むしろ、ruby-talk便りとかそっちの方が正確だろうな。
あるいはRuby Watchとか。
0192デフォルトの名無しさん
NGNG画像の動的な書き換え方がわからなくて…
何かイベントがあったときに表示されている画像を書き換えたいんだけど
Image書き換えてサーフィスに変換してbitbltで転送しても画面が書き換わってくれない。
いったん別のウインドウで隠して再度アクティブにすれば書き換わってくれるのだが…_| ̄|○
0193デフォルトの名無しさん
NGNGソースを読んでドキュメントとチュートリアルとサンプルと
その他雑多な資料を作成してください。
あなたがやらない限り未来永劫ないままです。
0194デフォルトの名無しさん
NGNGwxRubyそのもののドキュメントはあまりない。wxWidgetsのドキュメントも
見た方がいいと思う。わからないことあったら↓で質問すれば。
【GUIライブラリ】wxWindowsでのひょーん
http://pc5.2ch.net/test/read.cgi/tech/1052186697/
>>193
ヤレヤレ厨うざい。
0195デフォルトの名無しさん
NGNGあれを行動力というのか?まあそうかもしれんけど。
Moonwolfの行動力って、るびきちのそれと似てるんだよね。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGttp://dontstopmusic.no-ip.org/diary/20040914.html#c05
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGhttp://blade.nagaokaut.ac.jp/ruby/ruby-dev/24201-24400.shtml#latest
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG> あれを行動力というのか?まあそうかもしれんけど。
> Moonwolfの行動力って、るびきちのそれと似てるんだよね。
うーん、本人には失礼かもしれないけど、同意してしまう。
0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG金光さん
0208192
NGNGwxRuby使うと激しくRubyらしからぬコードになるような気がするのは気のせいか…?(´・ω・`)
0209デフォルトの名無しさん
NGNG>やっぱrubyはまだベータレベルだな(w
だからハックのやり甲斐があるんじゃない?御輿に乗るだけが能じゃないでしょ?
0210デフォルトの名無しさん
NGNGローカルにテキストファイルとして保存するようなプログラムを書きたいのですが,
どのような方法が良いでしょうか?
URLとかスレッドごとに変わってしまうので,その辺がややこしくて...
0211デフォルトの名無しさん
NGNG巡回スレ全てに更新チェックを行い
更新されているスレのデータを差分取得。
1000でスレが止まったら巡回スレからはずす。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG何を考えてるのかわからん。
0214210
NGNG返信ありがとうございます.
巡回してるスレッドが1000に到達したら,新しいスレッドを自動的に巡回
できるようにしたいのですが,その部分はやはり手動でやらなくては
ならないでしょうか?
0215デフォルトの名無しさん
NGNGちょっと考えればわかるだろ
0216デフォルトの名無しさん
NGNG2chには次スレを明示するシステムがないから無理
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1095479831/
とかってパターンを検出して飛ばせばいいけど
そこが正しいとは限らないし。
>>215
お前は失せろ
0217デフォルトの名無しさん
NGNGアホなこと言ってたらゴメソ
0218デフォルトの名無しさん
NGNGただ、設定ファイルを簡潔にして管理しやすくすれば、鯖の移動くらいは設定
ファイルを置換一発で可能というくらいにはできるはず。鯖の移動なんてそん
な頻繁には起きないし、それでいいんでは?
次スレの検出は、自分もラスト30くらいのレスからパターン検出くらいしか思
いつかないな。
0219デフォルトの名無しさん
NGNG2chブラウザはスレ一覧更新すると移転追いかけるから、
板移転時はスレ一覧(subject.txt)を取りにいくと30xと移転先のLocationを返されるんだと思う
Rubyマニュアルのnet/httpのところにリダイレクトへの対応について載ってるよ
0220デフォルトの名無しさん
NGNGttp://www.monazilla.org/
0221デフォルトの名無しさん
NGNGコードが置いてあるディレクトリ以外からスクリプトを実行したときも
コードが置いてあるディレクトリと同じ所にあるファイルをrequireとかしたいんだけど…
0222デフォルトの名無しさん
NGNG一応 __FILE__ つうのもあるけど、起動スクリプトからの相対パスみたいだね。
絶対パスを取るにはどうすりゃいいのかね?
0223sai10sight ◆m7YeytgDFE
NGNGhttp://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%CA%D1%BF%F4
0224デフォルトの名無しさん
NGNGサンクス。__FILE__から取得したパスを加工すれば何とかなりそうです。
mswin32なせいかコードが置いてある場所とは違うところからコードを実行すると
絶対パスが返ってくるようです。
>絶対パスを取るにはどうすりゃいいのかね?
File.expand_path(__FILE__)
はどう?
0225デフォルトの名無しさん
NGNGダメでした @ 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"
#...は省略部分
といった感じ。
0226shige
NGNG0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGパスの途中の予約語の出現禁止とか、
ショートとロングとか、
全体の長さとか、
いろいろまんどくさそだ。
0229デフォルトの名無しさん
NGNG躁期に入っているだけにも見える。
もしそうなら、鬱期に入った途端に全てのプロジェクトが中断してしまうわけで、
うかつに氏のやってることに賛同できない。
せめて複数人でプロジェクトを立ち上げてくれればいいんだが、他人の協力は
拒んでいるようだし。
0230デフォルトの名無しさん
NGNGそのまんま 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)
0231デフォルトの名無しさん
NGNG集約してくれるとすごく欲しい。
0232230
NGNG$ 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"
とかも自動で出て欲しい。
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235230
NGNG基本的なことやけど、var=~/bin を Ruby ではどう書くのかとか。
ワテは、Bash から離れたいとは思いまへん。
Ruby で OO しようとも思いまへん。
ただ、ちーとばかし難儀になりよったとき助けてくれればええのや。
それなのに Ruby ときたら・・・
ワテが楽できなければ、サーバーの Ruby ライブラリ更新するつもりはない。
いちいち、ドキュメント読まなければならへんし。
おっちゃんは忙しいや、調べさせるな。
# Ruby 自体は気に入っとる。
0236デフォルトの名無しさん
NGNGそりゃ単にニーズが無いからでしょ。
0237デフォルトの名無しさん
NGNG文字列処理がマンドクセとこだけ、インラインでRubyスクリプト書いて
``で結果取ったら如何か。
0238デフォルトの名無しさん
NGNGBash と Ruby はターゲットが微妙に違うんだと思うけど。
シェルスクリプトで楽なところは、シェルスクリプトでやればいいし。
面倒なとこ(正規表現とか)だけワンライナーで Ruby に渡せばそれでいいんじゃ
ないかな、と思います。
というのが元の「そのまま Bash で押し通す」って意味? 無理して Ruby に
する必要はないと思う。
書いてあることは、やろうと思えばそんなに難しいことではないでしょう。た
とえば、def _d(v); FileTest.directory?(v); end のようなものを全部自作
しておくとか。一度作っておけば、あとは使い回せるしね。
0239デフォルトの名無しさん
NGNGと、思った。
0240デフォルトの名無しさん
NGNG# もれはこないだWikiにちょっと貢献したぞ
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNGたとえば、Cの関数の第1引数の一覧を抜き出そうとして、/\w+\(([^)]+)[,)]/
と書くと $1 には第1引数が入りますが、
foo((x+y)+z)
と書くと、"(x+y"までしか入りません。
正規表現では無理!racc 使えって言われるような感じもするんですが、
racc だとCの文法全部 .y ファイルに書かないといけないので、
正規表現ですませられないかなぁ・・・と思ってるんです。
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG端的に言うと正規表現「だけ」で書くのは無理。文脈自由文法の世界だから。
ただ、 Perl では正規表現を独自拡張して、こういうのに対応しているね。
とはいえ、 racc/yacc を使えというのはさすがに大仰すぎると思う。
対処法1:
入れ子の数の限度が決まっているなら、その数まで対応するように書くことは
できる。たとえばその例題なら、/\w+\((.*?(\(.*?\))?.*?)\)/ とかね。
対処法2:
関数を自分で書く。開きカッコが来たら自分自身を呼んで、閉じカッコが来た
らそれまでスキャンした内容を返す関数を書くだけだから、簡単だと思う。
StringScanner とかあるし。
どうせ racc とかは、BNF(みたいなやつ)から関数を自動生成するためのプロ
グラムに過ぎないから、たいした手間じゃなきゃ自分で書く方が楽な場合もあ
る。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNGRubyはシェルスクリプトの代替に向いていないです。
Getopt::Stdやファイルテスト演算子もある Perl で良いと思う。
CPANもあるし、perldocもあるので調べる苦労が少ない。
0250デフォルトの名無しさん
NGNGRubyはプログラミングには向いていないです。
0251デフォルトの名無しさん
NGNG>Perl では正規表現を独自拡張して
そうなんですか?おもしろそうですね。調べてみます。
対処法1だと、ちょっと汎用性におとるので、対処法2で
検討してみたいと思います。scan とか遅いんだろうなぁと
思ってましたが、StringScanner なんてのが
あるんですね。勉強になりました。
0252デフォルトの名無しさん
NGNGi = 0xFFFFFFa8 #=>-88
i = 88 #=>88
■ このスレッドは過去ログ倉庫に格納されています