プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは
>>2-8 あたりを見てください。Ruby on Railsの質問はRailsスレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す
http://www.ruby-lang.org/ja/man/ ・FAQを一応読む
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
>>9 それが公知のものであることを証明できれば特許は認められなくなるはず。
ていうか、日本語と思えなくて読む気にならんのだが、これはgettextとは一線
を画すようなものなのか?
もう出勤だが、、、話あってみるわ。 今やってるPJ、工場のロボット制御なんだが、 物理層(ロボットとか)-シーケンサ-C/C++層-RoR層(インターフェース、DB) ユーザー なんだが、海外にも出荷してるから、多言語化の部分全部DBのテーブルにいれてるんだよね
トヨタか、手ごわいな… リスクありそうだから、全部yamlで切り替えするということでおわった。。。 でもファイルにするのやなんだよな。 というか今までリリースしてきたアプリはどうなるんじゃ。
>>9 こんなの、そこら中のWebアプリで使われてないか?
質問。クラスを継承カスタマイズするのとクラスの返り値を解析する新クラス作成とどっちが一般的ですか? ぶっちゃけた話 gem の WWW::Mechanize を使ってます。 ・ Mechanizeオブジェクトがクッキー覚えたopen-uri的な「Webブラウザ」になる ・ ↑のGETの返り値はHpricotでHTML要素が解析され変数に格納されたPageオブジェクト こんなライブラリです。で、特定のサイト、mixiとかはてなとか、ああいうのに対応させようと思います。 A. Mechanizeを継承したクラスを作り、サイトに特化した変数を追加したりメソッドかを書き換えたりする B. サイトアクセス用クラスを作り、オリジナルクラスに渡す引数や返り値を「手元」で色々いじる どっちが好ましいというか普通というか妥当でしょうか?
AがRubyっぽいような気がする たとえばWWW::Mechanizeを継承したMixi::Mechanizeを作るとかそういうのだろ?
質問させてください。ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-cygwin]です。 RDEを使っています。 ruby/sdlを使おうと、require 'sdl'したのですが,sdl.soが読み込めないようです。 require 'sdl'だけのスクリプトを実行すると。 /usr/lib/ruby/site_ruby/1.8/i386-cygwin/sdl.so: No such file or directory - /usr/lib/ruby/site_ruby/1.8/i386-cygwin/sdl.so (LoadError) from /usr/lib/ruby/site_ruby/1.8/sdl.rb:17 from C:/cygwin/bin/rb3EB.tmp:1:in `require' from C:/cygwin/bin/rb3EB.tmp:1 Complete(1) とエラーになってしまいました。 sdl.soはC:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwinにあり、 ここのパスが通っていないのかなと試しに、そのディレクトリに print "test was loaded" だけからなるスクリプト(test.rb)を作成し 別の場所のスクリプトからrequire 'test.rb'を実行したら 問題なく 「test was loaded」と表示されました。 *.soだけが読み込めないようです。 ご教示お願いします。
>>15 Bだろjk。委譲で済むなら委譲でいいだろ。
継承は最後の武器ってmatzが言ってた。
自分でしか使わない使い捨てスクリプトならAでいいけど。
20 :
17 :2008/08/07(木) 20:44:33
>>15 class HogeSite
def initialize
@agent = WWW::Mechanize.new
end
def hoge
end
end
>>21 module Hatena
class Mechanize < WWW::Mechanize
attr_accessor :username, :password
LOGIN_URI = URI.parse('
https://www.hatena.ne.jp/login ')
def login
orig_get(LOGIN_URI).forms[0].set_fields('name' => @username, 'password' => @password)
submit(page.forms[0])
end
alias orig_get get
def get(uri,param=[],ref=nil)
login if cookie_jar.empty?(LOGIN_URI)
_get(uri,param,ref)
end
class ConfigPage < ::WWW::Mechanize::Page
# is for
http://d.hatena.ne.jp/+username+/config def counter
@counter ||= parser.search('div.note').find{|e| /#{'ページビュー'.toeuc}/e =~ e.inner_text}.inner_text.scan(/\d+/).to_s.to_i
end
end
end
とか書けるのって便利っぽくね?
WWW::Mechanizeライブラリがアップデートして中身が大幅工事されたとき涙目だけど
こういうライブラリを継承して改造するのは、 ライブラリの内部インスタンス変数やマニュアルにないプライベートメソッドと被るのが怖い しかも下手すれば作成中全然気づかない可能性があって探すのも面倒なのが怖すぎる うまく動いてるうちは概念的にも明瞭で便利だとは思う 専用ブラウザと専用データページだからね
継承されることを考慮されてないと、すごくかぶりやすいからね
そういうのは継承されることを意識したモジュール作成テクニックを語ってこそ意味があるな
×そういうのは継承されることを意識したモジュール作成テクニックを語ってこそ意味があるな ○継承されることを意識したモジュール作成テクニックを教えて下さい かぶりやすいことに対処するのは、かぶらないような冗長な名前を使います 普通はアンダースコアも使います @__unkoclass_kusomiso__とかね
モジュール名がくっついたインスタンス変数というのは時々使う 例でいうと @hatena_username とか @hatena_counter とか ライブラリを作る側が死ぬほどめんどくさいのが難点 あと継承した人がちょっと中の変数やメソッド使おうかなと思ったときもめんどくさい 継承元にあるメソッドや変数を上書きしてたら表示する継承警告モードとかあるといいのに
WWW::Mechanize には Logger クラスのインスタンスを指定する log というアクセサメソッドがあるんだが これが agent._mechanize_logger_ だったらきっと誰も使わないだろうな
WWW::Mechanizeは継承して使うようなものじゃないでしょ
同じクラスに定義されたメソッドが、インスタンスで共有する変数用のsigilがあればいいのに @.aaa とかとか
>>28 名前をかぶらないようにするというのは、内部で使うインスタンス変数やプライベートメソッドのことです
ていうか、Rubyのライブラリのシステムは他人が継承して使うようにできてない (あるいは、バグっても泣かないというポリシーのもとで開放されてる) 継承は自作のクラスを自作のクラスで継承するとかそういうときに使うもんだ
Rubyで継承を使うのは本当に難しいし、 そのうち仕様が変更される可能性の高い分野でもあるので それも怖い
そんなに難しくはないし怖くもないよ
>>32 の最後の行が全然徹底されてないってだけだ
Rubyスクリプトとしてのソースが見えないArrayを継承してデカいクラス作るとかマゾにも程がある
GUIなんか継承が普通ですよ
ま た セ ー フ レ ベ ル 4 か
>>15 WWW::Mechanizeの使い方が間違っていると思うんだけど
>>22 aliasしても使ってなさそうに見えるし、_getって内部メソッドか?
あらかじめloginするってだけならこれだけでよくね?
def get(*)
login if cookie_jar.empty?(LOGIN_URI)
super
end
AもBも間違ってるというならCを提示すべき てか、Aは確かにライブラリを完全把握したマッチョ向け綱渡りだが、Bってわりと普通じゃね? 時々忘れられてるがここはこれでも一応初心者スレなんで 「自爆して自覚するまで継承の便利さを味わっとけ」 というアドバイスもアリかなと思う 他人から教科書的に言われてもピンと来ないし伸びる余地も無い気がする
>>39 Mechanize には _get は無いね
alias _get get
だったのを書き損じたとかそんなとこじゃ
Mechanizeはagentが大域変数ばりに出張ってるとこがあんまり好きじゃない
delegatorやforwarderの出る幕ではないのか?
mechanizeで商売してるやつ多過ぎw
使い道を思いつかない思考の貧困さを恥じるべきだな
Struct厨に告ぐ 使いこなせると便利っぽい気もするのでハッシュと配列しか使ってない俺を感動させてくださいお願いします
>>46 便利さだけで言えば、Rubyではハッシュと配列(と俺クラスのインスタンス変数)の組み合わせのほうがおおむねわかりやすくて便利です
無理してまで自分から使えなくてもいいんじゃないかなと思う
データ構造がどうなってるかスクリプトを読めればOK
Hashに、キーが有限で順序が欲しいなぁと思ったときとか。 あとずらずらattr_accessorが並ぶだけの殆ど構造体みたいなクラスとかは、 1から書かずにStruct使うとか。コードを書かなければ書かないほどバグは減る。
1.キー名に制約が必要なとき(変なキーを受け付けない) 2.アクセサメソッドだけじゃなくて、添え字(キー、インデクス)でのアクセスがあると便利なとき だいたいこの2つの条件がそろうとStruct使う。 今までに使ったのは2回くらいだが。
50 :
デフォルトの名無しさん :2008/08/09(土) 07:03:40
暗号化ってなーに? エディタで開くと文字化けしてるという意味?
RGSS固有の話題は元のRubyがほとんど関係ないからツクールスレでやってくれると助かるんだが RGSSがわからない人にはRGSSスクリプトそのままで問題ないし RGSSがわかる人にとってはeval系列使って同じ動作させれば何書いてあるかわかるわけだし どのへんの人を対象にしてるのか謎だ
ちゃんと嫁
ん? ツクールと同じことすればいいだけだろ 独自バイナリを読み込めるようなrubyを作って同梱して配布すればいい
Rubyってスクリプトの難読化は苦手なんだよね そういう意味ではゲーム製作にはあまり向かないわ
夜中に作った作成途中のスクリプトの構造が朝起きたらさっぱりわからん # HERE: ここからつくる とか再開用定型句が書いてあるのはいいんだが、場所だけじゃなく何をすればいいのかも書いてほしかった昨日の俺 とりあえずなんでもかんでもget_xxxってメソッドにするのやめようぜわけわからんわ
先にテスト書けとまでは言わないが、コンセプトのメモとか作ってないの?
また継承云々の話なんだけどさ 個々の画像に関するデータを溜め込んだデータ群を作ろうと思うんだ ハッシュで用が足りることがわかってるんだ class Gallery < Hash def xxxx # selfをいじるメソッド色々 end end と class Gallery def initialize @data = Hash.new end attr_accessor :data def xxxx # @dataをいじるメソッド色々 end end って、後者のほうがいいのかなあ いちいち gallery.data でハッシュにアクセスしないといけないのがちょっとヤなんだけど
コレクションが必要な場合に必要なのは、コレクションのクラスではなくコレクションを持つクラスだというのをどこかで見た気がするんだがどこだったかな 確かにdataというような凡庸で他クラスと被りがちなアクセサ名しか思いつかなくてブルーになることはあるが、後者の癖をつけておいたほうがいい あと委譲の人気の無さは異常
後者でも、委譲用のライブラリを使えばだいぶ楽に書けたような
Gallery is a Hashと言えるかどうか。 Hashをつかう任意の場所にGalleryを使えるか。
委譲の解説は「なぜ委譲が好ましいのか(他の方法ではよろしくないのか)」という説明がすっぽり抜けてるものばかりだ あれではどう頑張っても広まらんよ
Rubyだけをやってると委譲はなかなかピンとこない アクセサメソッドの中で他オブジェクトを動的にnewすれば用が足りたりするからな 他の言語やるといいぞ
るびま
http://jp.rubyist.net/magazine/?0012-BundledLibraries の例を使うが、確かに
require 'forwardable'
class MyQueue1
extend Forwardable
def initialize; @q = Array.new; end
def_delegator :@q, :push, :enq
def_delegator :@q, :shift, :deq
def_delegators :@q, :push, :shift, :size
end
class MyQueue2
def initialize; @q = Array.new; end
def push(*e); @q.push(*e); end
def shift(*e); @q.shift(*e); end
def size(*e); @q.size(*e); end
alias :enq :push; alias :deq :shift
end
class MyQueue3 < Array
alias enq push
alias deq shift
end
[MyQueue1.new, MyQueue2.new, MyQueue3.new].each do |q|
q.enq 1, 2, 3, 4, 5
q.push 6
p q.size
end
の3つは、どれも6を表示はするな
MyQueue3 を見て「Arrayのメソッドが全部使えるなんていざというとき便利そうだ」とか思った俺 まあ、1と2で attr_accessor :q してくれてればメリットもなくなるか でもまさか、@q を公開なんてしないよな?
そもそも#shuffle!とかを許すキューってどうなのよw Arrayを継承となると、Arrayが公開する100近くのメソッドについて 責任を持たないといけなくなる。お手上げだ
責任も何も「自由に使ってください。」じゃダメなん?
>>67 確かにごく最初は「マニュアルに書いとけばいいんじゃね?」「たくさん定義されてても使わなければ無問題だろ」だった
でもそれじゃ駄目だということがわかってきたので責任(Responsibility)という概念が生まれたわけで
無理して今から字面を理解しなくても、そういえばなんか煩いこと言われてたな程度に覚えておけばいい
オブジェクト指向プログラミングをやっていれば、ほぼ確実にこれ関連で火傷をする日が来るから
自分の作ったものが火傷したり破綻したりして初めて理解できたといえるシロモノなんで、まああまり考え込まないことだ
require 'delegate' foo = SimpleDelegator.new([]) foo.push(1) foo.push(2) puts foo.size #=> 2 これって foo = [] のほうが便利じゃね?
70 :
デフォルトの名無しさん :2008/08/09(土) 17:43:57
>>52 RGSSでやっていることを一般のゲームでもやりたいという話です。
>>54 いや、まあそういうことなんですが、
元のRubyソースに手を加えて
requireやってるところを置き換えるっつーことでよろしい?
答えてないぞ どこまで隠したいのかはっきりしれ Ruby知ってる人間がirbに読み込んで数行書いたら読めてしまうものでもいいのかどうか
String#% って、Hashをとれないんだっけ? "name: %(name)s, age: %(age)d" % {:name=>'Hoge', :age=>20} みたいな感じでやりたいんだけど。
>>72 ruby-gettext-packageでそんな感じの拡張をしている。
www.yotabanana.com/hiki/ruby-gettext-api.html?ruby-gettext-api#class+String
あ、単なる埋め込みなので、to_sでは間に合わない凝った文字列化が必要なら、 ハッシュの値のほうを '%03d% % age みたく別途フォーマットする必要がある。
75 :
デフォルトの名無しさん :2008/08/09(土) 19:33:17
>>71 できれば、ちょっとしたそのようなクイックハックは避けたいのですが、
その程度ならどのような方法があるものでしょうか?
BASE64でエンコードするとかすればいいんじゃね irb> eval "Y2xhc3MgSG9nZTsgZGVmIHN0cjsnSGVsbG8sV29ybGQhJztlbmQ7ZW5kO3B1\ndHMgSG9nZS5uZXcuc3Ry\n".unpack('m')[0] Hello,World!
ちょっとしたスクリプト作るのにも何日もかかる自分が若干イヤになるな
>>78 なるほど!周りのせいじゃ仕方ないな!
まあ趣味個人とはいえさすがにいまどき putty + Emacs + ruby-mode + RCS だけなのはねーよとは思うんだが
もうちょっと便利で安楽な感じにスクリプト書きたいです
emacs + ruby-mode以外いいのあるんかい?? RadRails(eclipseのやつ)とかいろいろためしてみたが、軽さがたりねー
+ QX9650 すれば快適になるよ
NetBeansのRubyパッケージは結構いいかなと思ったり JRuby、Rake、Gems、RSpec、ruby-debugとか、標準で一揃い統合されてる
ねっこはあれでもまだ重くてなあ まだ重いっていうかこれ以上軽くなる理由もないんだが(w ところで、なんで重いの?
てかWindowsのRubyはあまり使いたくないんだが…
そんなん、ごっついエディタとしてだけ使えばいいじゃん
Linuxでも使えるけど
Emacs使ってる人にIDE勧めても色々な意味で無駄
Emacs/gvimユーザーの半分くらいの人はRubyのあるマシンにターミナル経由でログインして使ってるんじゃないかね
>>79 にPuTTYがあるのが象徴的というか
ruby-electric.el がもうちょっとなあ
Javaするときくらいだな。IDE。それでも外部エディタはemacs IDEつかってるのは、仕事先と同じ環境でつかいたいってだけの理由だが。
あと作業領域の広さかなー。 Emacsつかってる椰子は、メニューなんか全部みせてないだろうし。 トーパルズはviを5ターミナルくらいで開いてかいてるだっけか。
仕事場でもLinux使うがね C#とかじゃないなら足る
>>91 下3行(Emacsバッファ説明・Emacsミニバッファ・GNU screenのバー)以外は全部エディタ領域だからな
IDE使ってみて「ぷろじぇくと」とかいうのが画面の左半分を占拠したときはビビった
みんな画面広いんだな
>>89 rcodetoolsを全開で使うんだ
なんか補完する度にHDDが動いてる気がするが気のせい
ねとびんかわいいよねとびん
emacs-lispのrubyラッパーかいて、Rubyでも設定できるように してくれたらーーー、学生の時みたいに時間あればなー スーパーHaXする椰子がでてきたら はじまるのに。。。
97 :
デフォルトの名無しさん :2008/08/10(日) 06:34:45
>>80 NetBeans使っているけどなかなかいいよ。
RubyGemsは1.2まだ非対応で固まるけどw
>>93 うちはフォント小さくして、狭い画面で書いてますw
98 :
デフォルトの名無しさん :2008/08/10(日) 06:37:32
>>96 - Summary
Ruby製のテキストエディタ
- Features
o scripting in any language
o macro recording and playback
o multi-element clipboard
o multi-level undo
o parsed ("smart") indentation
o customizable multilingual syntax highlighting, with support for embedded languages (e.g. PHP, eRuby, Javascript)
o bookmarking, named and unnamed
o regular expression searching
o a customizable status line
o limited ctags support
o hooks
- Reference
purepistos.net - Diakonos
http://purepistos.net/diakonos/ - via
MOONGIFT - Diakonos
http://oss.moongift.jp/intro/i-2310.html MOONGIFT - Diakonos レビュー
http://oss.moongift.jp/review/i-2319.html
99 :
デフォルトの名無しさん :2008/08/10(日) 06:39:08
emacsユーザーならわかるとおもうが、もどきじゃだめなんだよ。もどきじゃ。
emacsユーザーってemacsしか使えなさそうで不幸だと思う
>>102 それには適当なIDEやエディタの名前を入れても成立するということが歴史的に知られている
OS入れても成立する
>>94 > rcodetools
ほう
検索するたびに2秒くらい止まるんだが日本語解説サイトとかないんかね
ホント俺ってLinux以外使えないんだよね
機能だけでなくバックグランドに流れている”歴史”も引きずってるからなぁ xemacsに一時期ながれていたが、歴史の差でemacs使うようになったな。おれは
Windowsを「使えている」人なんてごくひと握りだ レジストリやcompmgmt.msc、NETコマンドやActiveDirectoryをいったいどれだけの人が理解してるやら 気にするな
Windowsは、まっとうな人なら、使いこなすことに抵抗あるんだよ。
お前らの好きなMacやLinuxが罵倒されたら嫌だろ。 ならWindowsへの皮肉は、ポケットにしまいこんでおくんだ
でも、Windows に愛着を感じてる人って少なくない? 相対数どころか絶対数でもMacに負けてる気がする。
そんな感じはするが、まあ空気みたいなもんだからね あって当然。普通に使う分には縁の下は意識しない MSの最大公約数的な設計もあって、特に面白みというか個性があるわけでもないと
attrの単純なアクセサが15個くらいどさっとある特定目的用クラスがあるんだが なんか微妙に多くて微妙に筋がよくないような気がしてならない うまく減らす方法はあるだろうか
>>114 設計がおかしい可能性はないか?
単純なアクセサだらけのクラス自体、責務を切り分けられていないように思える。
事務職(時給800円)なんで、俺は、会計処理の計算ぱぱっとためしたいとき、Rubyつかうけど、 15のアクセくらいなら、普通にありえるな。 会計DBのテーブルが15以上フィールドもってるっていう設計されてるときとか。
いくつかの機能をまとめて内部クラスを作ってそこのクラス変数にすればよい
118 :
デフォルトの名無しさん :2008/08/11(月) 07:23:42
PHPでファイルに文字列を追加するプログラムを書いていたのですが、 LFSに対応していないようで、2G以上になるとエラーになりました Rubyで扱える最大ファイルサイズはどのくらいですか?
Ruby1.8/1.9自体は2GBより大きなファイルを扱えたはず(Windowsでは無理) ただ、思いっきり意識してスクリプト作らないとメモリに2GB全部読み込むぞ
>>114 扱うのめんどくさいという話だと思うんで、ハッシュにまとめておく
121 :
デフォルトの名無しさん :2008/08/11(月) 17:06:49
携帯電話から入力されたメッセージを、txt形式で鯖に貯めたいです。
一行掲示板なるものを見つけて書いてみたけど、
(
ttp://www.skuare.net/2007/07/ruby_5.html )
書き込まれた内容は文字化けして読めんとです。
au、ソフトバンク、docomoなど各キャリアから書き込みたいなら、
エンコードを何とかしろという話だと思いますが、よくわかりません。
どう書けば文字化けせずにテキストを貯めておけますか?
携帯電話のフォローをするgemは聞いたことがないなあ とりあえず携帯電話の機種ごとのWeb通信および文字エンコードと独自文字領域についての知識が必要 これはRuby全く関係ないので自力でやってくれ
偏見だけど、はてなブックマークで5users以上にすらなってないRuby関連記事はそもそも信用したらあかんよ 自分に合わせてゼロから作ったほうがまだ安心できる
>>123 めちゃくちゃ偏見じゃねーか
まあしかし件の記事は自分専用のスクリプトだしな
他人や他機種のことは全く考えられてない
126 :
デフォルトの名無しさん :2008/08/11(月) 21:31:51
Ruby/Tk について質問です。 ひとつのアプリで複数のウィンドウを開きたいんですが、TkRoot のウィンド ウから別のウィンドウをいくつも開くにはどのクラスを使えばいいでしょうか? 試しに TkToplevel.new でウィンドウを作ってみたら、ウィンドウ自体は開く もののその上に置いたボタンとかのウィジェットがまったく表示されませんで した。
>>125 jpmobileをrails依存な部分とそうでない部分に分けるという動きが
どっかであったのを見た。
>>126 Ruby/Tkのマニュアルくらいは斜め読みするんだ
129 :
126 :2008/08/11(月) 22:39:13
>>128 Ruby/Tk はマニュアルとしてまとまった物がみつからないので、「Ruby アプリ
ケーションプログラミング」を参照しているんですが、よくわからないので困っ
てます。。。
130 :
デフォルトの名無しさん :2008/08/12(火) 00:11:16
githubから入れたgemの依存関係が解決できないです。
gemから見たときに、githubのgemは衝突回避のために username-projectname という形で
gemを提供しているのですが、あるgemで入れたソフトが
username-projectnameでなくて、projectname に依存しているという風に言ってきます。
このおかげで動かしたいgemで入れたソフトがエラーが出て動きません。
具体的には、↓ddollar-remember-the-ruby を入れようと思ったら、
ddollar's remember-the-ruby at master ? GitHub
http://github.com/ddollar/remember-the-ruby/tree/master ↓ddollar-preferences に依存するようなのですが(ソース確認した)、
ddollar's preferences at master ? GitHub
http://github.com/ddollar/preferences/tree/master 実際には、素のpreferencesがインスコされてしまって、そっちが参照されてしまいます。
(gem install時も素のpreferencesの方が入ってしまう・・・)
ddollar-preferences を入れて、素の preferences を uninstall した状態で実行しても、
(ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:578:in `report_activate_error': Could not find RubyGem preferences (>= 0.1.3) (Gem::LoadError)
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:134:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:158:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:157:in `each'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:157:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:49:in `gem'
from (ほげまげ)/ruby/bin/rtr:18
などといわれ、preferencesの方を見に行ってしまいます。
なんとかならないのかなあ・・・
131 :
130 :2008/08/12(火) 01:04:11
ここみたら手動で入れられました。
Hoe dependencies - comp.lang.ruby | Google グループ
http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/9a5d68bafd366677 git clone git://github.com/ddollar/preferences.git preferences
cd preferences
gem install pkg/preferences-0.1.4.gem
一応これで目的のソフトは動きました。
しかしながら、これだと同じライブラリ名があるとバッティングしますね・・・。
それにgithubで他の人が作った同じライブラリが同時に入れられないw
そしてやはりというか、
(ほげまげ)\ruby\gems\1.8\specifications\ddollar-remember-the-ruby-0.3.2.gemspec
の中の
%q<preferences>
を全部
%q<ddollar-preferences>
に置換しても動きます。(当然ですね)
問題はgithub内のそれぞれのユーザーのコードが、他のgithubのコードを
dependencyに追加する時にユーザー名まで入れるの?ということになりますね・・・
>>126 toplevel = TkToplevel.new
button = TkButton.new(toplevel,:text=>'push me').pack
基本はTkHoge.new(親部品、オプション)で親部品は省略するとTk.rootになる
ruby/tkはドキュメントが足りなすぎてtcl/tkを知らないと使い物にならない
今まで見た中では「逆引きRuby/Tk」(ググれ)のページが一番まともに使える
133 :
デフォルトの名無しさん :2008/08/12(火) 08:28:08
gem instal ほげほげ のgemのインストールが高い頻度で固まるのですが私だけでしょうか? コマンドプロンプトでCtrl-Cを押しても止まりません。 タスクマネージャでrubyを殺すしか手段はなくなります。 インストールは、5回に一度くらいしか成功しません orz > gem -v 1.2.0 OS:Windows XP SP2
ASRだとしたら、自分と同じ症状だ。自分は今の最新にしたら治った。 次からはRubyのバージョンとかも書いてくれ。
135 :
133 :2008/08/12(火) 10:00:05
>>134 すまそ。忘れてた
>ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
というかRuby/TKはTclでTkを知ってる人が使ってるもんだとばかり思ってた RubyのGUIってそんなもんだからさ 「○○では××と書くようなことをRuby○○ではどう書くんですか?」という質問を希望
しつもん PStoreありますよね あれって、 PStore.new(path).transaction do |db| とした時点で、db に該当するとこには pstore ファイルのまーしゃるな内容が完全に展開されてるんですよね? data = db['hoge'] としてもメモリ的になんかいいことがあるとか何もないですよね?
>>137 unless read_only
file = File.open(@filename, RDWR_ACCESS)
...
content = file.read()
...
if content != ""
@table = load(content)
...
def load(content) # :nodoc:
Marshal::load(content)
end
...
def [](name)
in_transaction
@table[name]
end
ということで、答は YES
transaction した時点で、Ruby は pstore ファイル全体を Marshal でロードしたデカいオブジェクトをメモリに保持する
db[hoge] というメソッドは既に存在するそのデカいオブジェクトのハッシュへの参照に過ぎない
別名をつけるかどうかは読みやすさだけで決めてよし
時々「でかいpsotreに差分だけ追加」という効率的っぽいプログラミングをしてる人を見かけるが、
あれの本当の動作は「全部引き出してフルサイズ復元してちょっと付け足してまた全体を必死で変換してディスクに書き込む」だ
Rubyってこういうメモリを湯水のように使う処理結構多いよな
Rubyで外部コマンドに頼らなくてはならなくなりました んで、質問です data.each do |param| `command #{param}` end は、dataの数だけ毎回シェルを起動して終了してますか? 複数のデータそれぞれに対してコマンドを使用したい場合は sh = Shell.new data.each do |param| sh.system("command #{param}") end としたほうが、起動するシェルは1個で済んだりしますか?
> によるリダイレクトや | によるフィルタとか使わない限りおおむね YES のようだ 外部コマンド使えば速くて済むもんね、と考えてのことなら前者は無駄が多いかもしれん
% ruby -rshell -e "sh = Shell.new; 5.times do |i| sh.transact do p system('echo -n \$\$') end end" 58045 58046 58047 58048 58049
いやそんな例出されても transactって名前そのまんまだし
Shellって言えば irb> require 'shell' irb> sh = Shell.new irb> sh.verbose = false irb> sh.cd('/') shell: current dir: / って、verbose を偽にしても notify でログが表示されるのはなんでなんだぜ?
>>145 試行錯誤中のirbが途中で終了した
責任は取ってもらうからな
逆 切 れ スレで見たものをirbで何でも試すから…
irbが終了した責任はirbの再起動で取るよ ってことで、sshでログインしてやるから、 IP,ID,PASS晒せや
素朴な疑問なんだけど 破壊的メソッドって自分で定義して追加することは可能?
>>149 追加できないかもしれないと思った理由は?
! がついてるからシステム的に特殊なものだと思ったんじゃないかね ! つきも ? つきも = つきも普通に定義できるぞ
152 :
149 :2008/08/14(木) 08:41:50
たとえばStringで文字列の末尾に"foo"を追加する破壊的メソッドの定義って どう書けば良いのでしょう?
class String def append_foo! self << "foo" end end s = "hoge" s.append_foo! p s
予定表作ろうと思うんだ うん、Webカレンダーアプリケーションみたいなの その日のデータ登録は自分が(コマンドラインまたはCGIで)やるだけなんだけど、結果はHTMLとして公開したい いい感じのデータ構造をもつクラスとHTML書き出しクラスを持つライブラリとか都合よくないかな?
>>154 そんなんライブラリはないけど
rails本に幾らでも例題あるがな
作らんでもカレンダーウェブサービスも沢山あるし
156 :
デフォルトの名無しさん :2008/08/14(木) 16:47:29
ディレクトリ名の最後のデリミッター("/")を削除する、簡単な方法ってないですか? もしくは考慮して、"/"がなかったらつけてくれる関数なんかありませんでしょうか? File.dirname(dir) ってやると "hoge/moge/" が "hoge"になってしまって、 かなり期待と反対の動作なんですが・・・("hoge/moge"がほしい)
各日のイベント自体がパブリックなものなら Google Calender か Yahoo! カレンダーに適当に登録してカレンダーを公開、が妥当な気がする データ型についてはまあ類似例を見て研究するということで
>>156 /foo/bar という文字列があったとして、 bar がファイルなのかディレクトリなのかは
実際に(HDDの)ファイルシステムにアクセスしないとわからないから、ある意味無理
というか、そんな不完全で不安定なディレクトリパスが欲しい理由って何?
そういうのが必要な場合の多くは必ず File.join でディレクトリとファイルを連結するようにすれば用が足りる
ディレクトリの最後にスラッシュがあろうがなかろうが、問答無用でディレクトリとみなして連結してくれる
もし、外部コマンドに渡すディレクトリ文字列を Ruby で作らなきゃいけないんだとかいう場合は
require 'pathname' したあと Pathname#realpath 使え
159 :
デフォルトの名無しさん :2008/08/14(木) 17:16:35
>>158 レスありがとう
実際にはFileTest.directory?などでディレクトリチェックをしています。
そうです。Dir.globとかに渡すときに、適当に渡されたパスに "*.hoge"とか "**/*.moge"とかを
くっつけたかったのです。最初から情報を中田氏にしたことを詫びします。
File.joinを使うのですね。
やってみます。
160 :
156 :2008/08/14(木) 17:18:32
>>158 File.joinで無事にできました!
お騒がせしました。
エスパーありがとうございました。
161 :
デフォルトの名無しさん :2008/08/14(木) 17:47:14
たまに見かける # :nodoc: という記述はなんなんでしょうか? ドキュメント生成ツールか何かようのフラグ?
163 :
デフォルトの名無しさん :2008/08/14(木) 19:15:23
Windowsのファイル名の区切り文字(バックスラッシュ、円記号)は、 Dir.globに渡しても動作しません。 スクリプトなどの引数などから指定された場合、 単純に置換する以外によい簡潔な解決策はないでしょうか?
164 :
163 :2008/08/14(木) 19:27:59
>>158 で出ていた pathname と Pathname#realpath でいけました!
Pathname("hoge\mage\")は、Pathname#realpath で "hoge/mage/"になってくれました。
ありがとうございました。
165 :
デフォルトの名無しさん :2008/08/15(金) 01:14:07
↓なんで? s="#&32;12:34" /[\s(?: )](\d{2}):(\d{2})/=~s p $1,$2 # => 12, 34 Regexp.new("[\s(?: )](\d{2}):(\d{2})")=~s p $1,$2 # => nil, nil
"#&32;12:34" は "#&32:12:34" の間違いだよな? p Regexp.new("[\s(?: )](\d{2}):(\d{2})") p /[\s(?: )](\d{2}):(\d{2})/ これを実行すりゃ分かる。
ruby_1_8 と ruby_1_8_7 とはどう違うんでしょうか? ruby_1_8 は次 (今だと ruby_1_8_8) の候補、みたいな感じ?
それの名前を付けた人のポリシーによる つまり、ソフトウェアパッケージのポリシーとか 一般的には、 1.8 とだけ書かれたものは 1.8 のうち最新版のものへのエイリアスだ 1.8.7 が用意されていれば 1.8.7 、まだ用意されてなくて 1.8.6 だけなら 1.8.6
require 'tk' l = TkLabel.new(:text=>'0').pack b = TkButton.new(:command=>proc{ TkAfter.new( 100, 1, proc{ l.text=l.text.to_i+1 Tk.event_generate(b,'Button-1') Tk.event_generate(b,'ButtonRelease-1')} ).start }).pack Tk.mainloop 一定間隔でラベルの数字が増え続けるようにしたかったのですが、 実際やってみると、途中で不規則に止まってしまいます。 原因と解決策(できればイベント強制発生のループの形は残したままで)を ご教示お願いします。
>>169 Enter->ButtonPress-1->ButtonRelease-1(->Leave)
TCPSocketでサーバからデータを受け取る際 リアルタイムに取得済みバイト数を得る方法はありませんでしょうか? 現在は ・サーバ側: writeでソケットに渡す ・クライアント側: readでソケットから受け取る データ自体は問題なく受け取れています どうやら受け取ったデータはソケットのバッファ?か何かに書いているようで そこをリアルタイムに覗く方法が分かりません 参考になるものやヒントなどがあればよろしくお願いします
>>171 普通覗かない覗けないから、rubyでreadできた分を
取得済みと考えていいんじゃね?
173 :
171 :2008/08/16(土) 01:27:26
>>172 readできた分となると
全て取得した後のサイズしか知ることができないようなのです
ごめんなさい ちょっと紛らわしかったかもしれません
必ずしもバッファを覗く必要はありません
リアルタイムに取得済みバイト数さえ取得できれば方法は問いません
バッファが覗けないとなると別の方法ですね・・・
>>173 readpartialで少し筒読みながら自分でサイズ管理
>>173 よくわからんのは、
取得ってどこまで来たのを取得データと捉えたいんだ?
176 :
171 :2008/08/16(土) 09:21:25
>>174 readpartialですね
試してみます
>>175 どういう答え方が正しいのか分からないのですが
ソケットまで来ていれば取得済と考えています
177 :
171 :2008/08/16(土) 22:02:54
readpartialで解決できました ありがとうございます
ああそうか夏休みか
el4rは動作が怪しい
181 :
デフォルトの名無しさん :2008/08/18(月) 11:56:16
Rubyで使われてるフォントって何?欲しいんだけど
画像じゃない気がするんだが… #code div { display: block; font-family: "Lucida Console", Monaco, monospace; padding-left: 24px; padding-right: 24px; } って書いてあるんで、君のパソコンに入ってるLucida ConsoleかMonacoかmonospace あるいはmonospaceファミリーに設定されてるフォントで勝手に表示されてる
欲しいも何も既に持ってるってパターンだな
irb> say = "I love Ruby" irb> say['love'] = "*love*" irb> puts say.upcase I *LOVE* RUBY なんぞこれ
188 :
デフォルトの名無しさん :2008/08/18(月) 12:36:25
>>184 あ、でもこれ日本語対応してないのか…くぅ、使いたかった
Hpricotって1.9に対応する予定ってあるんですか?
xyzzyとかはASCIIと日本語を別々のフォントに指定できるぞ xyzzy使わざるを得なくなるのが難点か もしWindowsXP以降(2000でもフォントによってはできる)を使ってるならFontLink機能を使う手もある 「どう考えても英字フォントを指定してるだけなのになぜか日本語も表示できる謎機能」を自力で利用する
1.9は
・誰でもgem含めて完全に1.9のライブラリだけを使って動作するようにインストールできるよガイド
があれば対応が増えると思う
現状の1.9は「1.9に乗り換える」という覚悟がないとそもそもインストールしにくい
make install するとgemごとユーザーディレクトリにインストールされるような親切セットが欲しい
>>191 ぐぐってレジストリ書き換えろ
gem開発者はRubyに関してちょっと詳しいだけであって、 その他のことに関しては素人に毛が生えた程度だと思ったほうがいいよな 自分用Rubyと際新安定版RubyとRuby1.9の3つくらいは維持しないといかんわけで それに対するフォローはあっても面白いかもしれん
PerlでいうことろのTemplate ToolkitやFillInFormみたいなモジュールはありますか?
query param 形式ってなんじゃらほい
irb> require 'cgi'
irb> require 'uri'
irb> uri = URI.parse('
http://example.com?aaa=123&bbb=456&ccc=789 ')
irb> p CGI.parse(uri.query)
{"aaa"=>["123"], "bbb"=>["456"], "ccc"=>["789"]}
こんなん?
>>194 あるはずだが、見つからないなあ
フォーム入りHTMLを自動生成して送る
↓
ユーザーがフォームを埋めて送り返してくる
↓
解析したが内容が不足または不当だった
↓
ユーザーの入力内容がフォームに記入された状態のHTMLを再度生成して再送
198 :
195 :2008/08/18(月) 20:48:03
>>196 まさにその通りです
自分も書いた後に「query param形式」って変な表現だと思ってました
ありがとうございます!
JRubyを使ってSwingを叩いていてはまったのでどなたかお助けください。 Javaのクラス(具体的にはjavax.swing.event.MouseInputAdapter)を基底としてRubyのクラスを作りました。 そこで初期値を与えてnewしようとしたところ、 base.rb:24:in `__jcreate!': wrong # of arguments for constructor (NameError) とのエラーが出てしまいます。 初期値を与えなければ正常に動作するため、Javaクラスを基底とするRubyクラスでは 初期化に工夫がいるのかと思い、調べてみたのですが、言及を発見することができませんでした。 どなたか回避方法、或いは他の原因に心当たりの方がいらっしゃいましたら教えてください。
>>199 コンストラクタの先頭でsuper()を呼べばいいんじゃない?
201 :
199 :2008/08/19(火) 00:55:17
>>200 あうあ。どうもありがとうございます。
書き込み前にsuperを試したときにもsuperを括弧無しで呼んだ時には引数が引き継がれる、
というのを知らなかったので、二重にはまっていたみたいです。
明示的にsuper()を呼ばなければ引数引継ぎで自動的にsuperが呼ばれるのかしらん。
色々と調べてみます。どうもありがとうございました。
Railsに関する質問はRailsスレで
204 :
202 :2008/08/20(水) 01:20:53
ありがとうございます
rubyって (2..0).to_a ってしたらなんで[2,1,0]って配列を作ってくれないの? そもそもRubyのRangeクラスって昇順しか認められてないの?
失敬な 降順だろうが昇順だろうがきちんと存在しマニュアル通りに動作するぞ 2.succ は 3 で 0 より大きいから each も即終了する …まあ、Range#first > Range#end なときは Range#each の中で逆方向の配列作ってくれてもいいじゃんという気は 全くしないわけではない
..はsuccを使うので、2.step(0, -1).to_aで我慢してくれ。
それくらいならreverseする
p (2..0).to_a # => [] p (0..2).to_a # => [0, 1, 2] たしかに気分悪いなこれ
>>206 の言う通り以外の何物でもない
> 2.succ は 3 で 0 より大きいから each も即終了
succ を辿る実装を変えるとは思えないから、each を書き換えるしかないな
そういえば1.9のString#succはなかなか変態らしいな。 次の意味のあるバイト列までいかに素早く進むか、みたいな。
akr氏のあれか
これか cvs.m17n.org/~akr/pub/string-succ-rejectkaigi2008.pdf
initialize 内部で望ましくない動作をしている外部クラスがあります。 特定の引数 param2 のハッシュから特定のキー 'danger' に関連するペアを、 param2.delete('danger') のように事前削除すれば問題ありません。 クラスを利用するときの引数でいちいち削除すればいいんですが、 できれば同クラス名のクラス定義をスクリプト開始時にこっそり上書きすることで楽に済ませたいです。 最初 class Hoge alias _initialize initialize def initialize(param1, param2) param2.delete('danger') _initialize end end と書いたんですが、これだと self が書き換わりません。いい方法はありますか?
どこのself
Net::HTTP を利用してるモジュールがあるんですが、中で body = StringIO.new http.request_get(uri.path){|res| res.read_body {|part| size += part.size body.write(part) } } としてる部分がありました(request_getはrequest_postのもあります) どうせ最後には全部メモリに入るわけだし、ふつーに body = request_get(uri.path).body size = body.size でいいと思うんですが、わざわざ細かく読み込んでるのは何か理由があるんでしょうか?
>>216 マルチスレッドのためじゃね?
最後は書いた人に聞かないとわかんないから、この質問はメーリングリストで聞いてみるのがいいだろうね。
書いた人はだれかしらんけど、たぶんメーリングリストは読んでいると思うよ。
Ruby1.8.6 と Ruby1.8.7 をうまく共存させる方法はない? > lib/ruby/1.8/i686-linux/rbconfig.rb:7: ruby lib version (1.8.7) doesn't match executable version (1.8.6) (RuntimeError)
>>216 Net::HTTP の中でも同じような書き方をしてるから、それ自体は net/http.rb の改変コピペだと思う
で、
>>215 の言うように、net/http.rb での採用理由はたぶんマルチスレッドというかマルチタスクというかそんなのの対策だと思われる
たとえば、サーバからのファイルを HDD 上のファイルと同じノリで最初から最後までずーっとひと息に待ってると、
でかいファイルの場合はそれだけでタスクというかジョブがいっぱいになってしまう
一昔前のWindowsのフリーソフト(や現在のピーとかピーとかピーとか)に稀にあった、
ファイルをダウンロード中にビジーになって他に何もできなくなるヘボいフリーソフトのダウンローダーの動作を考えてもらうといい
>>219 の 215 は
>>217 の間違い
ぶっちゃけ net/http にお任せしてればわざわざ自前でそんなとこまで意識して書く必要はないんだけど、
繊細動作させるダウンロードクラスでも作ってるのかな?
>>218 既にあった lib/ruby/1.8/ とかが新しくインストールした 1.8 系列で上書きされてるっぽい
lib/ruby/1.8.7/ って明示的に作れないんだっけ?
どっちにしても両方再インストールだな
>>221 configure --with-ruby-version=full
>>218 漏れは ./configure --prefix=/usr/local/ruby_1_8_6 とかやっとります。
現存するクラスを完全に上書きしたいです require 'uri' URI = nil require 'my-uri' とすると希望どおりの動作にはなりますが、 > warning: already initialized constant URI という真っ当な警告が出てしまいます
質問なんだぜ 1. Array を継承する 2. @data = Array.new してから、@data をいじるArrayと同名のメソッドを完全自作 3. @data = Array.new してから、 @data に対してメソッドを委譲 細かいレベルの一般的実行速度で言えば 1 が一番速くて 3 が一番もったりだよな? 1 は微妙にキケンで 2 はめんどくさいから 3 をやる、という思考の流れでいいんだよね?
>>224 require 'uri'
class Object
remove_const :URI
end
require 'my-uri'
誰だこんな220行の建て増し温泉旅館メソッド書いたの
rubygemsには時々すごい変なソースが転がってる まあインプットとアウトプットが妥当なら使うけどな
かなり間抜け気味の質問なんですが、net::SMTPでのメール送信て、 同一ドメイン内のメアドへの送信のみでしょうか。 メールフォームCGIでそのような動作になっていて、 外部のメアドに送信しようとするときに限りエラーになります。 エラーメッセージもでているのですが、なんとなく上記部分がひっかかったので、 詳細なしで質問させていただきましたm(_ _)m
外部にも送れるよ。
231 :
229 :2008/08/23(土) 01:48:11
>>230 ありがとうございます!すっきりしました。
エラーを見てチェックしなおしてみます。
Keep-Alive と COOKIE が使える Web アクセス用のクラスで何か良いのあるかな? httpclient は何でもかんでも RuntimeError になって不便だった。
gem の WWW::Mechanize が一応両方とも使える gem isntall mechanize で Hpricot と一緒に入るはず
234 :
232 :2008/08/24(日) 11:58:23
>>233 WWW::Mechanize って Keep-Alive 使えたのか…知らなかった。ありがと。
ただ、割と大きいファイルを落とすつもりなので
>>216 みたいにブロックが渡せるようなのが欲しかったんだけど、
WWW::Mechanize はパっと見無理っぽいですね、残念。
どこをどう「探した」のか気になる ブロックなんてただのブロックなのに
いまさらだけど、
>>216 のコードでなんで「全部メモリに入る」んだ?
読み込んだ部分ごとに出力に書き出してるように見えるけど
>>220 の通りで、Net::HTTPを利用している限りはソケットからfragment単位で読むからダウンロード負荷自体は問題にならない
「これまでのresponseをメモリ内で破棄しつつ最新のみIOに出力する」というダウンローダー芸はNet::HTTPではできないと思う
100MBのファイルを取得したら100MBのファイルはresponseの取得履歴としてメモリ内にどーしても一瞬保持されるはず
238 :
232 :2008/08/24(日) 13:36:57
>>237 まぢで?
だとすると、ブロック渡しする意味は進捗状況の確認ができるだけってこと?
ちょっと net/http.rb の中見てみた限りでは、BufferedIO にも、ReadAdapter にも
読み込んだデータを保存しているような挙動は確認できなかった。
保存されるとしたら、どこに保存されてるんだろう。
実際、read_body にブロック渡した場合と渡さない場合で
HTTPResponse#body の挙動が変わるようだ
http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body{} }.body
# >> #<Net::ReadAdapter>
http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body }.body
# >> "<html><head>...."
YAMLの Anchor, Aliase でノードを参照する時に、 別の.ymlファイルのノードを参照するのって どうすれば良いんでしょうか?
>>239 できない。
やるとしたら
s = ''
s << File.read('file1.yml')
s << File.read('file2.yml')
p YAML.load(s)
とするしかない。
>>236 >読み込んだ部分ごとに出力に書き出してるように見えるけど
部分的に書き出しても、書き出し先がStringIOオブジェクトだから
結局は全部メモリに入る。
>>224 >現存するクラスを完全に上書きしたいです
Rubyは既存クラスを自由に書き換え可能だから、「完全に上書き」する必要はないと思うけどなあ。
もしよければ、既存クラスを書き換えるのではなく完全に上書きしたい理由を語ってみてください。
なにか新しい発見があるかも。
module A def self.hoge puts 'Hoge' end end class B include A end これで A.hoge が B.hoge という形に mix-in されないのはどうしようもない? 継承だったらクラスメソッドも継承されるみたいなんだけど
>>243 こゆことがしたい?
module A
def hoge
puts 'Hoge'
end
end
class B
extend A
end
245 :
243 :2008/08/24(日) 23:35:22
>>244 なるほど、そういうのもあるんですね。
ただ、A の中にインスタンスメソッドもたくさんあるんですが、何とかなりませんか?
委譲の考え方の基本がなんとなくわかった気がする
>>245 ええっと、どういう風に書きたいってこと?
248 :
243 :2008/08/25(月) 01:14:50
module A def self.hoge # クラスメソッド puts 'Hoge' end def fuga # インスタンスメソッド self.class.hoge # self がどのクラスのインスタンスかによって変えたい end end class B include A # B は hoge を再定義するかもしれないけど、しなくてもいいようにしたい end b = B.new b.fuga # B で再定義されていれば B.hoge、そうでなければ A.hoge が使われるようにしたい # もしくは、 class C include A hoge # こういうふうにclassのコンテキストで呼び出したり・・・ end だいたいこんな感じになってくれるとうれしいです。
こんちは
はじめてRubyでスクリプト書いてみました
下記コードでうまいこと画像を保存できたのですが、なぜかアニメーションGIFがぶっ壊れてます
RubyでアニメーションGIFを扱うことは不可能なんでしょうか
もし可能であればライブラリや書き方など教えてほしーです
require 'open-uri'
def main
# ニコニコ動画の画像があるパス
url = '
http://www.nicovideo.jp/img/tpl/head/icon/nico/ '
# 画像のパスを全部いれておくための配列
image_url_list = []
# ローカルの保存先のパス
savepath = "D:/Data/IMG/"
# URLの生成
0.upto(10) do |i|
image_url_list << url + "%03d" % i + ".gif"
puts image_url_list
end
# 画像を保存
image_url_list.each do |image_url|
filename = File.basename(image_url)
File.open(savepath + filename, "w"){|output|
open(image_url){|data|
output.write(data.read)
}
puts("#{filename} has saved.")
}
end
end
main
"wb"
うお すげぇ 朝っぱらからありがとうございます バイナリモードっていうのがあったんですね あざーっす!
>>243 こんな話?
irb(main):001:0> module M
irb(main):002:1> def self.included(m)
irb(main):003:2> m.module_eval do
irb(main):004:3* def self.foo; p :foo; end
irb(main):005:3> end
irb(main):006:2> end
irb(main):007:1>
irb(main):008:1* def bar; p :bar; end
irb(main):009:1> end
=> nil
irb(main):010:0> class C
irb(main):011:1> include M
irb(main):012:1> end
=> C
irb(main):013:0> C.foo
:foo
=> nil
irb(main):014:0> C.bar
NoMethodError: undefined method `bar' for C:Class
from (irb):14
from :0
irb(main):015:0> C.new.bar
:bar
=> nil
irb(main):016:0> class C
irb(main):017:1> foo
irb(main):018:1> end
:foo
=> nil
Rubyって日本語のファイル名を開けるの?
254 :
243 :2008/08/25(月) 09:11:30
>>252 おー!include されるごとにメソッドを定義するわけですか。
それでいけそうです。ありがとうございます。
open-uriでurlを開いたら自動的にbodyも読まれてテンポラリファイルができてしまいます headを読んで色々処理してからbodyを読むようにしたいんですけど そういうのってnet/httpとか使って自作しないといけないんでしょうか
def config_file=(path)
h = YAML.load_file(path)
@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
@password ||= h[:pass]||h[:password]||h['pass']||h['password']
end
使うキーくらいマニュアルに書いておけよ俺
>>255 はい
HEAD対応open-uriの改造をスクリプトの初めで上書きするモンキーパッチを誰かが作ってたと思ったが忘れた
とここまで書いてHTTPヘッダのことかいなと思う
まあどっちもたいして変わらんな
open-uriはFile.openが思想のベースなのでファイル読み込みは避けられないよ
「モンキーパッチ」ってそういう意味だったんだね。
>>257 Rubyではね
本来はゲリラパッチで、Rubyのようなシステム的に許されたなあなあのクラス上書きとはちょっと違う
代わりにduck punchingという言葉を使おうと言ってる人が一部にいるけど
本気でRailsの一部の人なので全く広まる気配はない
変数に結果を代入したいんだけど、三項演算子と1行if文ってどっちがいいかな?
s = (cond ? 'yes' : 'no') s = if cond then 'yes' else 'no' end s = if cond then 'yes' else 'no' end if cond then s = 'yes' else s = 'no' end まあ好きにせえ 3番目は微妙に嫌われてるということは知っておくといい 「Rubyのif構造は値を返す!!」とか興奮した初心者が多用するが冷静に読むと面倒だ
>>259 あるJavaの有名人が『三項演算子は難しい機能だからif文を使いなさい』といってた。
だからif文のほうがいいよ。
だって有名人のいうことだからね!
よく以下のような文を見るのですが、何のためにしているのでしょうか? if __FILE__ == $0
>>262 そのif文の中はCで言うmainにあたるってとこかな
そこより上で定義したclassのテスト的なコード書いて
おいて、requireされた場合には実行させないための
おまじない
>>264 >>263 の補足というか、googleで、そのまんま "__FILE__ == $0" で検索して
トップに出てくるページを見ればいいと思うんだ。
初心者スレでググれ!って言うのは無し?
266 :
デフォルトの名無しさん :2008/08/25(月) 23:28:23
if 文の返り値を変数に代入するのは性に会わない 似たような感覚として、 ・do 〜 end ブロック ・map と inject を除く {} ブロック の返り値を利用するのはなんかピンと来ない
rubyで日本語のファイル名使えるかどうか 速く回答しやがれ!
まあ問題が起きてからその状況を質問してもらったほうがええな
実際にやってみて日本語名が使えない、という話なのか? OS環境とか文字コードとか、状況を具体的に説明してごらん。
Perlで日本語のファイル名のファイルをopenできないから rubyだったら開発者がジャップだからネイティブで対応してるかと 思って質問してるんです!!!
dllからデータを読み込むプログラムを書こうとしているのですが、 dl/structモジュールで構造体を入れ子にできないのですかねぇ? そこの部分だけcharの配列で埋めて後で置き換えるしかないのでしょうか・・・
>>272 できる。
でもRubyよりも先に日本語の使い方と質問の仕方を勉強することをおすすめする。
「♥.txt」を開こうとしたら無理だったんだけど
windowsなら、ユニコードのファイル名は無理
277 :
デフォルトの名無しさん :2008/08/26(火) 08:03:16
Rubyをちょこちょこ最近書き始めた初学者です。 Excelの列番号をA1形式からR1C1形式へ変換するプログラムを書こうとしています。 A→1 AA→27 IV→256 てな感じで。 パッと思いついたコードとしては require 'jcode' num = 0 str = "IV" str.each_char{|char| num = num * 26 + char.to_i(36)-"A".to_i(36) + 1} p num #=>256 ですが、スマートじゃない気がしてなりません。 もっとスマートな書き方有りますでしょうか? 実行環境はWinXP、Ruby1.8.6です。
>>276 ユニコードは日本語じゃなとでも言いたいわけ?
inject(0) {|n, char| n * 26 + ... } くらいしか思いつかん。 あとは ('A'..'Z').to_a.index(char) で 0 .. 25 に変換とか。 # ところで require 'jcode' は全角アルファベット対応?
281 :
255 :2008/08/26(火) 08:31:03
>>256 そうっすか残念(・ω・)
net/httpなんて使うなとか言う記事みた後なんでちょっと二の足を踏んでしまいます
困ったことあったらpythonを使え
283 :
デフォルトの名無しさん :2008/08/26(火) 09:11:19
>>279 単にString#each_charがjcodeで拡張されてるメソッドなので入れなきゃ使えないだけで・・・。
injectについてちょっと調べてみます。ありがとございます。
>>277 ('A'..'ZZ').to_a.index('IV') + 1
256
285 :
デフォルトの名無しさん :2008/08/26(火) 10:47:07
>>284 これは目からウロコ。
'A'..'ZZ'がZからAAに繰り上げしてくれるとは知らなかったです。
有難う御座いました。
これってやっぱりあの変態さに定評のあるsuccがバックエンドになってるのかな?
>>281 初心者は自分の手で作ることを嫌がったら駄目だぞ
だいたい、どんなことがなぜ望ましくないかなんて耳で聞いだだけじゃわからんじゃないか
Net::HTTPでgetとheadとpostをするのは基本
ラッパーメソッドを作るのも基本
ヘッダやクッキーの処理にも手を出して、うわ何これめんどくせー、となった時点で既存の外部ライブラリを探す
こうすれば、その外部ライブラリの中の挙動もある程度推測できるし、不足点やバグがあったときに対処もできる
最初から外部ライブラリだけを使ってしまったのではなかなかこうはいかない
ということで、gemで "httpclient" をインストールすれ
HEADリクエストにも対応している
irb> require 'rubygems'
irb> require 'httpclient'
irb> client = HTTPClient.new
irb> res = client.head('
http://www.google.com/ ')
irb> p res.header['Location']
["
http://www.google.co.jp/ "]
>>286 irb> p "Z".succ
"AA"
___l___ /、`二//-‐''"´::l|::l l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
ノ l Jヽ レ/::/ /:イ:\/l:l l::l u !. l / ';:::l ', ';:::::l. ';::::l:::::
ノヌ レ /:l l:::::lヽ|l l:l し !/ ';:l,、-‐、::::l ';::::l::::
/ ヽ、_ /::l l:::::l l\l ヽ-' / ';!-ー 、';::ト、';::::l:::
ム ヒ /::::l/l::::lニ‐-、`` / /;;;;;;;;;;;;;ヽ! i::::l:::
月 ヒ /i::/ l::l;;;;;ヽ \ i;;;;;;;;;;;;;;;;;;;l l::l:::
ノ l ヽヽノ /:::l/:l /;;l:!;;;;;;;;;', ';;;;;;;;;;;;;;;;;ノ l:l::
 ̄ ̄ /::::;ィ::l. l;;;;!;;;;;;;;;;;l `‐--‐'´.....:::::::::!l
__|_ ヽヽ /イ//l::l ヽ、;;;;;;;ノ.... し :::::::::::::::::::::ヽ /!リ l
| ー /::::l';!:::::::::::::::::::: u ', i ノ l
| ヽー /イ';::l ’ し u. i l l
| /';:';:!,.イ し 入 l l U
| /,、-'´/ し / ヽ、 u し ,' ,' l
| /l し _,.ノ `フ" ,' ,' ,ィ::/:
| /::::::ヽ ヽ / し ,' ,' / l::
| /::::::::::::`‐、 し ', / u ,、-'´ l,、-
| ``‐-、._::::::::::` ‐ 、 ',/ , -'´`'´ ,-'´
| _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´ u /
| | | | \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\ u /
| | | |
succ大人気w
'z'.succ が "A" ではなく "aa" なのは変態でいいと思う まあ 9.succ が 0 ではなく 10 なんだから予想の範疇ではあるが '10'.succ が "11" なのも変態認定してよい
それは普通
'99'.succ が "100" になるのは変態 というか Ruby の succ への拘りは異常 succ を便利に使うのってどの言語由来?
perlの ++ -- 由来 rubyが異常なわけではない
特定サイトへの頻繁なWebアクセスのキャッシュ管理をDB的にやってくれるライブラリってないすかね {URL => HTTPヘッダ} というハッシュを1個のpstoreに保存して、スクリプトの最初に完全に読み込んで使ってるんだけど、 もっといいのあるかな
>>294 初心者スレ的にはハッシュとPStoreでサイト用にカスタマイズするのが一番だと思う
マルチスレッドでアクセスされてPStoreが壊れそうならsqlite3とかでデータベース使え
Railsのどこかに何かあるような気もするが、たぶん超ごっついと思われ
alias suck succ
>>294 揮発してもかまわないなら memcached
ruby 1.8.7では [7,6,5].map.with_index{|x, i| x*i} ができないので、かわりに [7,6,5].each_with_index.map{|x, i| x*i} と、やるのを見かけました。 ならば inject.with_index 的な意味で [7,6,5].each_with_index.inject(0){|r, x, i| r+x*i} と、できるのでは!と思ってやったところ、 in `*': no implicit conversion from nil to integer (TypeError) というエラーがでます。 色々試したところ [7,6,5].each_with_index.inject(0){|r, x, i| p x} とやると [7, 0] [6, 1] [5, 2] と出力されました。 injectの第2ブロック引数 には [元配列の要素,インデックス] という配列が 渡されているようです。 (第3ブロック引数は何も渡されない) なーんか、違和感があるんですけど、そんなことないですか?
>>298 [7,6,5].each_with_index.inject(0){|r, (x, i)| r+x*i}
rails2.1の入門教えてください
アバウトだのう Rails初心者スレってないんだよね、そう言えば 需要が微妙だけど…
beginとendが予約語なので、範囲の開始と終了を表す変数名で困ってます Rubyで一般的な開始と終了の変数名のペアってありますか? 文法ミスにならないようにbeginとendを慎重に使うというのは勘弁してください
Rangeクラスではfirst、lastが使われている
beginning-ending opening-close(closing) beg ed
start finish
finishはないわー
a z
仮引数では s と e をよく使う が、文字列の s と 配列要素の e と被るのが難点
start と stop @begin と @end
>>302 >範囲の開始と終了を表す変数名
from と to でいいような気がしてきた
from と to は変換が絡む処理に見える ファイルの移動とか 文字列の変換とか
_beginと_endで
>>311 そんなことないと思うけどなー
変換が絡む処理なら src と dst (source と destination) だよ
ほほう from,toじゃなくてsrc,dstかメモっとこ
srcとdstはC時代の遺物のような気もする いや、フルスペルで書くと長すぎるが
dstは躊躇うけどdestだと受け入れてしまう気がする
ええー
src に「開始地点」以外の意図が多すぎるから、src - dst はピンと来ないなあ dst と書かれていても何のことか悩んでググる自信がある
s(tart) - g(oal) in - out src -dst from - to begin - end ruby - ?
b(egin) e(nd) k(ey) v(alue) - ペア構造のキー値 r(et) e(lement) - reduce の 第一引数、第二引数 読んでもらおうという気が見えないコードが書けます
使えるのが Ruby だけというのもよくないと思うので、PHP5 の勉強も始める うっひょーこの関数全部フラットでこのまま覚えるのクラスによるクラス分けとかないの 配列(ハッシュ)からペア取り除くのに unset($array['key']) って書かないといけないのね ずっと前にちょっとだけ齧った Perl4 を思い出した
関数って普通フラットじゃね? メソッドならレシーバいるけど
パッケージとか、名前空間に入れられることもあると思う
標準(添付・内部)ライブラリがRubyのように全部クラス構造になってて 配列は配列クラスのインスタンスで操作はメソッドを経由して行うとか言うことは確かにないな PHP5はクラスを作れるが、内部は普通にPHP関数での遣り取りだ インターフェースとしてのオブジェクト指向だね
質問です。 #!/usr/local/bin/ruby print "Content-type: text/html\n\n" require "csv" csv = CSV.open('file.csv,'r') csv.each_with_index do |line,n| a[n] = line[0] b[n] = line[1] puts end print"<html><body>#[a]</body></html>" print"<html><body>#[b]</body></html>" csv.close このプログラムをうpしたのですが内部サーバーエラーが出てしまいます。 自分では間違っているところが見つけられませんでした どうすれば正常に作動するでしょうか。 回答お願いします。
~$ ruby -c test.rb test.rb:5: syntax error, unexpected tIDENTIFIER, expecting ')' csv = CSV.open('file.csv,'r') ^ test.rb:5: unterminated string meets end of file
file.csvのところのクォーテーションが足りない aもbも初期化されていないので配列かハッシュを代入すると良い #[a]でなくて#{a} htmlタグは1度以上出力しないほうが良い 試してないけどぱっと見てこのぐらい あといきなりCGIよりも一度コマンドラインで試した方がエラーが見えてわかりやすい
expectationsっていいんですか? 何か場当り的な網羅性の無いテストを推奨するような作りに見えるんですが
>>320 俺は reduce は acc(mulator) e(lement) が好きだな。
あ、もちろんコードにあわせて sumとかにすることもあるけど。
>>328 それは「あんな実行速度の遅いRubyのどこがいいのかわからない」という主張と同質だぞ
332 :
デフォルトの名無しさん :2008/08/29(金) 06:33:27
小林と申します。 メーリングリストの利用自体がはじめてで、安易な行動をとり 皆様に不快な思いをさせてしまいましたこと、心からお詫び申し上げます。 大変申し訳ございませんでした。
I'm sorry . This is Test Mail これはテストメールです。
信者としては こんなバカでも使えるわかりやすいRuby♥ と、 宣伝材料にしたいところだ。
net/httpとWindowsのバージョンに関する質問です。 Ruby1.8.6+exerb最新版で固めたプログラム内でnet/httpを使用しています。 そのプログラムはVistaSP1とXPSP2では正常に動作しますが、XPSP3だと接続時に 「接続済みの呼び出し先が一定の時間を過、、、」と出て接続すらできない状態です。 なにかそのあたりの情報がありましたら、ぜひ教えてください。 宜しくお願いします。
>>335 rubyのせいとかOSのバージョンが違うせいとか考える前に、問題のマシンでちゃんとネットワークに繋がってるのか調べた方がいい。
プロクシなしで普通にブラウザで外が見えるのか、とか。
>>295 sqliteより、RubyレベルでまーしゃるしたHashのほうが速くて便利だと思う
質問です Webブラウザのように実際的な短時間でサムネイル画像を取得したいです 1個ずつサムネ画像URLをアクセスしてると10秒くらいずっとだらだらアクセスしててなんか申し訳ないです (「申し訳ないのでスクリプトで取得すること自体を止める」ということは考えてないですごめんなさい) スレッドをいくつか生成してアクセスすれば同じように所要時間を短縮できますか?
このへんは一意な答がないんだよな 「多くの場合必ずしも好ましくない」というアドバイスが多すぎる 昔からの有名なものに「サーバ負荷考えてファイルアクセスのたびにスリープ入れろ」というのがあるが、 Keep-Alive全盛の今となってはクライアント側でスリープされて数十KBの接続を引き伸ばされるくらいなら 複数接続してもらってとっとと完了してもらって手放してもらえたほうがまだ有難かったりする
>>338 Rubyのスレッドってそういう動作時間縮める用途に使えたっけ?
IO待ちの間は他のスレッドに切り替わる…かもしれない
require 'open-uri'
require 'benchmark'
uris = %w(
http://www.yahoo.co.jp/ http://pc11.2ch.net/tech/ http://www.yahoo.com/ ).map{|e| URI(e)}
Benchmark.bm(2) do |x|
x.report{
uris.each do |uri|
uri.read
end
}
end
sleep 2
Benchmark.bm(2) do |x|
x.report{
threads = Array.new
uris.each do |uri|
threads.push(Thread.new { uri.read })
end
threads.each{|thread| thread.join}
}
end
# 結果
user system total real
1.150000 0.080000 1.230000 ( 2.655373)
user system total real
1.210000 0.060000 1.270000 ( 1.583636)
外部待ちがないぶん、スレッド使ったほうが全体としては速いな
そろそろNet::HTTP.startの中でThread#joinして意味不明の挙動に悩んでる頃なんじゃないかと思う
変数名::メソッド という書き方に違和感を感じるとともに、Rubyらしさも感じます。
?
こういうのじゃね html = uri.read case uri.host when /www.example.com/ then parser = TableParser_www_example_com when /www.example.jp/ then parser = TableParser_www_example_jp end datatable = parser::parse(html) 最初は文字列として連結して eval("#{classname}.#{method}") するしかないよなと思ってたんだが 普通にメソッド呼び出しのドットがくっついたときはさすがに参った
てゆーか実はダラダラしてるほうが行儀正しいって突っ込みは無いのかよ
>>349 あなたの使ってるWebサーバの設定を見直してみることをお勧めする
java使いなんですがrubyに興味あって調べてます。 それで、rubyのホームにあるAPIは読みにくいので、どこかお勧めないでしょうか。 英語のサイトを探してもないみたいなんで・・ rubyはリテラルが多いので、少し使わないとすぐ忘れちゃうんですよね。
354 :
デフォルトの名無しさん :2008/08/30(土) 18:21:25
APIはいつもみるんで、MSDNみたいにリンクが多いよりは、Java docみたいな単純なテキスト(とページ内参照 a.htm#ref)のほうがいいと使いやすいと思います。
1.9のそれも使いやすそうですね。
文章多めで説明長・解説つきなら英語でやった方がいいんじゃないですか。
で、日本語のは短い説明だけで、よくアクセスされる必要な記事・解説は、英語の翻訳で済ますと効率的な設計かなと思います。
もしjavascriptでfile i/oができるなら、rubyじゃなくて、jsつかうんで。なぜなら、言語の機能よりも、文章がまとまってるって事が大事じゃないでしょうか。
ルビリストとかモルモンぽいんじゃなく、まともな人なら、コレが妥当なところでしょうか。
http://www.ruby-doc.org/core-1.8.7/index.html
と、ここで提案してもしょうがないですし JavaScript使いたいならJavaScript使ってくださいとしか
C#とかDとかrubyはリテラル多すぎw 単純な制御とか処理はいちいちAPI探すの面倒だし、イテレーターつかわないんでwhile/forでいいよ。 OOも魅力的だけど、制御とか処理とかと関係ないし、肝心なOOのライブラリがないじゃんw
昔VB5を少しだけやったときウィンドウに表示されてたんですけど rubyは違うんですか? プログラムは全くの初心者です・・・
ウィンドウはプログラム言語がわざわざ出力先として敢えて作っているだけです プログラムの基本は入力(と処理と以下略)と出力であって、 Rubyは入力だけを受け取って出力だけを行います てか何か解説とか入門とか読んで試してるんではないん?
>>358 Rubyの場合は出力先を指定しなければいけないのですか?
メモ帳とか・・・?
>>1 のたのしいRubyをこの前買って 疑問に思ったから書き込みました
増えていく可能性のある配列を再帰的に処理する場合ってどうすればいいですか? 以下のような感じのやつで2を表示させたいですが1で繰り返しが終わります。 #!/usr/bin/ruby -Ku @i=[1] @i.each{|a| p a b=2 @i << b @i.delete(a) if b != nil }
イテレータの中で要素数を増減させるのはあんまりよろしくないよなあ javaだと例外飛んで怒られるくらいだし
再帰的に、というのがわからんが、 単純に、 a = 0 while a < @i.size do ... a += 1 end と書けば?
>299 遠くからすみません。 そんな書き方できるんですね。 ありがとうございました。 でも、何で括弧がいるんだという辺りは よく理解できませんでした。 勉強します。
>>361 書き方へんなのでごめんなさい
回している配列が途中で条件によって増えていって
そうじゃない場合は増えなくなるので最後には
配列がなくなってほしかったんです。
って書いてて意味が分からなく。。
>>362 何となく駄目ってのは分かるのですが
今作ってるやつだと
それ以外思いつかなったので。
>>363 ありがとう
最後にretryつけたらそれでもいけたので
駄目だったらその方法試してみます。
ああ、配列の要素の値を元にした処理の結果で、配列の要素が増えたり減ったりするんだな で、新たに増えた配列の要素も、要素増減の処理に使うんだ …なんかどっか設計が間違ってるような気もするが…
スタックとかキューとか知ったら幸せになれそうなんだが違うのかな
よくよく考えると反復処理とは言えないようなことを、イテレータでやっちゃうもんだから ややこしいんじゃないか
369 :
360 :2008/08/31(日) 01:39:14
>>366 ,367,368
精進します。
とりあえず動くっぽいので動いてから
設計見直してみます。
>>368 なんかそんなかんじするね
arr = [1]
while !arr.empty?
elem = arr.shift
value = somefunc(elem)
unless value.nil?
arr << value
end
end
わかんねーや
設計とか言う言葉を使うレベルじゃないと思うんだけど?
372 :
デフォルトの名無しさん :2008/08/31(日) 07:06:42
#! ruby -Ks s1="あいう" p s1.length ar=s1.split (//) p ar.length 日本語文字数を計算するのはコレしかないんですか? それと、size/lengthは何か違いがあるんですか。 内部の実装で、sizeの方がsizeof (byte) * count lengthの方が自動で str.split(//).size みたいな遅延評価 とかになってないんでしょうか?
>>372 jcodeをrequireしてjsize/jlength
内部の実装は知らんがsize/lengthは同じだろ
ruby-1.8.7-p72/string.c rb_define_method(rb_cString, "length", rb_str_length, 0); rb_define_method(rb_cString, "size", rb_str_length, 0); 再定義しない限り、Cのレベルで実体は同じ処理って事だ。
includeのたびに新しく定義しなおすのはイケてない。 module A module ClassMethods def hoge puts 'Hoge' end end extend ClassMethods def self.included(m) super m.extend(ClassMethods) end end というのが定番。
%w[A Z AA IV].map {|s| s.downcase.succ.tr("a-z", "1-9a-z").to_i(26)} # => [1, 26, 27, 256]
378 :
デフォルトの名無しさん :2008/08/31(日) 21:31:49
初心者なんですが質問です 処理を書くとき、classにした方が素敵ですか? イテレータはeachの繰り返しにしか使ってないのですが 他に便利な使い方はありますか?
> classにした方が素敵ですか? メソッドにしないと非常にかっこ悪い オブジェクト指向におけるクラスの概念はわりと高潔なものだが、 Rubyでは「処理をまとめてnewメソッドでスタートさせるもの」でもいいと思う 特に初心者のうちはクラスの使用条件というものについてうだうだ悩むのは無駄 てきとーにまとめて便利に使いながら自分で考え方見つければいい あと、eachは基本だが、mapとfind_allの使用頻度と便利度は異常なので、 EnumerableやArrayクラスのメソッドはなるべく早く把握して適宜調べて使えるようになるといい
>>378 >処理を書くとき、classにした方が素敵ですか?
基本的にはclassにした方が素敵
どこからどこまでをclassにするかは、プログラムの目的や個人の趣向などによる
慣れないうちは設計が難しいので
分かりやすいデータのまとまりを、class化することから始めるのがオススメ
掲示板の1記事をArticleクラスにするとか
irb> def h(*p) ; p p.class; end irb> h(1) Array irb> h(1=>2,3=>4) Array うわー困るうううっていうかめんどくさいいいい
>>378 繰り返しじゃないから厳密にはイテレータの話じゃなくなるけど
IO#openみたいに後始末を自動でしたいときにも便利
>>382 それ関係ないだろ
単にensure節の効果だ
メソッドもクラスもしくはクラスもメソッドだったらいいのに
たかがメソッド実行するたびに new する言語なんて遅くてやってられねえぞ
>>381 def method(*para) は引数がまず配列になるからな
キーワード引数風ハッシュの処理するのもけっこうめんどくさい
なんかうまいライブラリとかないもんかね
>>381 def h(a, *b) でいいんじゃないの?
>>386 ActiveSupportを使うと、*argsで受けて、options = args.extract_options!
feed-normalizerってどうですか? 検索してもほとんど情報が出てこないんですが
perlおぼえたあと、 PHPとRubyでは、 どっちを学んだら相性いいですか?
>>390 そりゃここじゃなくてperlのスレで聞きなよ
その時は「相性」という言葉を、どういう意味で使ってるのかも添えといた方がいい
perlおぼえたら、perlを使うんじゃないの?まずはプログラムやりたいみたいだし、簡単だからVB.NETやるといいよ。
んなもんなんのためにPerl覚えたかによると思うが。 趣味だってんなら好きにしろ
>>390 WebやりたいならPHP、小物アプリならRuby
本格的アプリならJavaやC#
395 :
デフォルトの名無しさん :2008/09/01(月) 10:32:08
それ、全部VBでいいんでない?
全部common lispでできるよ
398 :
デフォルトの名無しさん :2008/09/01(月) 11:11:56
>>394 ぜんぼ覚えるの大変だなw
C++は習得できなかったからないの?
JRubyがあるから、今のうちにJavaかな。
サーバーサイドC++ってごっつすぎだろ
>>390 結論からいうとPythonを覚ればそれでなんでも出来る。
軽くて速くてソースが美しいPython。文書も豊富でライブラリも充実してるPython。
仕様はかっちり、世界規模で開発されているPython(Google, MS, Yahoo!, etc.)
オープンソース系ならほぼもうPythonが事実上の標準言語になってる。
日本だけで閉じこもってて、遅くてソースが汚くて開発もいい加減なRubyとかやっても
無駄に終わる可能性があるよ
401 :
デフォルトの名無しさん :2008/09/01(月) 21:36:57
ソースが美しい・汚いとは、例えばどういうソースのことだ
読み難い、読み辛いって読み替えればいいんじゃね?
403 :
デフォルトの名無しさん :2008/09/01(月) 21:54:31
どうしても分からないことがあります。 hash = Hash.new([]) array_a = [1, 2, 3] array_b = [:a, :b, :c] array_one.each do |a| array_two.each do |b| hash[b] << a end end hash # => {} でhashに値が入らないのは何故でしょうか? {:a=>[1,2,3], :b=>[1,2,3], :c=>[1,2,3]} となってほしいのですが。一方、下はOKです。 hash = Hash.new(0) array_a = [1, 2, 3] array_b = [:a, :b, :c] array_one.each do |a| array_two.each do |b| hash[b] += 1 end end hash # => {:a=>3, :b=>3, :c=>3}
404 :
デフォルトの名無しさん :2008/09/01(月) 21:57:34
あーしまった。変数書き間違った。訂正します。 hash = Hash.new([]) array_a = [1, 2, 3] array_b = [:a, :b, :c] array_a.each do |a| array_b.each do |b| hash[b] << a end end hash # => {} hash = Hash.new(0) array_a = [1, 2, 3] array_b = [:a, :b, :c] array_a.each do |a| array_b.each do |b| hash[b] += 1 end end hash # => {:a=>3, :b=>3, :c=>3} ???
405 :
デフォルトの名無しさん :2008/09/01(月) 21:59:23
読みやすいかどうかなら、記号が多いよりもJavaやC#のように長いメソッド名のほうが読みやすいんじゃないの? もう、パイソンと関係ないけおd
[:a, :b, :c] は何か意味あるの?
407 :
デフォルトの名無しさん :2008/09/01(月) 22:10:44
>>406 ないです。単にシンボルの方がタイプ数が少ないという理由です。
>>404 カッコ付きのHash.newは、該当キーがなかったときにその引数オブジェクト
自体を返す。つまり、
x = []
hash = Hash.new(x)
each/each
if hash.has_key?(b)
hash[b] << a # ここには絶対来ない
else
x << a
end
end/end
みたいな感じ。
たぶんやりたいことは、ブロック付きのnewで
hash = Hash.new {|h, k| h[k] = [] }
じゃないかな。該当キーがなかったときに、
新しく空の配列を作って hash に代入する。
409 :
403 :2008/09/01(月) 22:29:06
> たぶんやりたいことは、ブロック付きのnewで > hash = Hash.new {|h, k| h[k] = [] } > じゃないかな。該当キーがなかったときに、 > 新しく空の配列を作って hash に代入する。 その通りなんですが、 x = Hash.new([]) x[:a] << 1 x[:b] << 2 x # => [1, 2] これは大丈夫なのに、何でだろうと思って。
410 :
404 :2008/09/01(月) 22:32:02
あーすみません。また書き間違った上に、なんか根本的に誤解してる>自分 出直してきます。
x = Hash.new([]) # だいたい x = Hash.new; x.default = [] に同義 >> x[:a] << 1 => [1] >> x => {} >> x[:b] << 2 => [1, 2] >> x => {} >> x.default => [1, 2]
413 :
403 :2008/09/01(月) 22:50:04
パイトンはやったことないからわからんなぁ。
416 :
デフォルトの名無しさん :2008/09/02(火) 17:09:52
Loggerでログファイルを毎日Rotateさせようと思ったんだけど >> require "logger" => true >> log = Logger.new("foo.log", 'dairy') => #<Logger:0x33fe50 ...以下略> >> log.info "foo" => true >> log.info "foo" Logger::ShiftingError: Shifting failed. 'foo.log.20080902' already exists. >> log.info "foo" Logger::ShiftingError: Shifting failed. 'foo.log.20080902' already exists. ログを出力しようとするたびに ShiftingError が出るんだけどこれって何の冗談? うちの環境は↓ $ ruby -v ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
infoってメソッド名がおかしいんだよ writeに改名しろ
418 :
416 :2008/09/02(火) 17:17:46
logger.rbを見たら 'dairy' じゃなくて 'daily' だった.あー恥ずかしい. しかし引数間違っててもスルーって不親切だよなあ
ruby厨きめえwwwwww これからはpythonの時代だろks うぇwっうぇwwwww
Rubyだけ使ってるとでも思ってるのかね
煽っているようでちゃんとsageているところに 育ちの良さがにじみ出てしまっているな
>>420 そうじゃないと都合悪すぎるだろ
やろうと思えば複数言語の比較検討ができるとか断じてあってはならない
釣れますか?
結局rubyなんてwebProgでしかないし、pythonのほうが将来がある
ルビみたいにメインストリームの横に張り付いているちっぽけな貧乳は今後成長する可能性も2.3%くらいあるが、 醜く大きくなったおっぱいそんは後は垂れるだけ。
だっておwwwwww
どうでもいいけど最近貧乳の良さが分かってきた
俺は最初から貧乳が好き
もともと巨乳好きだが最近貧乳にも興味あり
何つうか、適材適所を知らない奴はPythonあたりでもダメなんだろうな。
Pythonの威を借るDQN
虎ってか蛇か
恋するプログラムを読み始めたんだけど、2−2最初のサンプルからつまづいた・・・ 「ワンツー」と日本語が入力できないんですが、どうしたらいいですか? 半角英数しか使えないよ
コマンドプロンプトならAltを押しながら、半/全キーだったかな
企業や学校の場合はconime対策でそもそも日本語入力機能が無効にされてることも稀にあるので注意だ ちなみにタイトルバーを右クリックすると編集用のショートカットキーコンボがわかるので利用するといい
下手に最初から日本語使って予期せぬエラー増やすよりも 慣れるまでは全部半角英数でやるのが無難
>434 ありがとう。解決しました。 >435 よくわからない。 範囲指定(K)ってあるけどシフト、ctrl、altと組み合わせても発動しないし というかセーブする方法がまだ出てきてなくてこの先生きのこれるか心配です
438 :
デフォルトの名無しさん :2008/09/03(水) 00:20:43
俺たちの先生は、キノコだったのか!!
>>437 えーとだな、コマンドプロンプト(DOSプロンプト)は、Alt+スペース で右クリックメニューの1階層目が開く
で、Eを(単独で)押すと編集メニューがさらに開いて、貼り付けとかが選べる
たとえば、クリップボードにあるURLを貼り付けたい場合は「Alt+スペース、E、P」の順にリズミカルに押せばいい
で、範囲選択だが、これは「Shift+方向キー」でコピー元の範囲選択を矩形で開始できる機能だ
コピーしたい部分を選択し終わったらEnterを押すと、それまでの反転部分が改行つきでクリップボードに入る
ぶっちゃけ使用頻度は高くないし、マウスで範囲を選んでEnterすれば同じことなのでありがたみも薄い
rubyのCPANはどこにあるの?
CPANはPerlの(以下略 Rubyforgeをgemコマンドで利用するのがデファクトスタンダード CPANほどには洗練されていないし、CPANほどには無闇大量に登録されてない(そもそも少ないというかPerlが異常) Windows版Rubyなら、最初からgemコマンドが使えたはず LinuxとかBSDとかの場合はrubygemsのような名前のパッケージがあると思われ
サイトとしては存在してないってこと? ブラウザでみれるようなの。
ああサイトはあるけど 利用の形態はgemコマンドということね。
拡張ライブラリを作ろうと思ったんだけど 解説してるサイトに書いてある「$ make」の意味が分かりません。
>>437 xyzzyでshell起動すると、エディタ画面でコマンドプロンプトが使えるよ。
Alt+x → 'shell' と打ってリターン
まあCとRubyでのプログラミングはできるわけだし、それくらいの推測はできて欲しいよな make は UNIX コマンドだ(語弊あり) UNIXやらLinuxやらにはたいてい入ってるが、Windowsには普通入ってない make だけをどっかからインストールするといいが、 プロンプトが $ であるところから見て、そのサイトはWindows考慮してないんじゃないかとも思う
まぁ、要するに仮想マシンかなんかにLinux(語弊あり)を入れた方がいいってこった
Linux以外でRuby使う奴って馬鹿だろ?
ううん そうでもないよ
FreeBSDで使ってますが何か?
BSDは基本でしょwww
いや、今はMacOSバージョンXでしょ。 実質的にBSDの商用GUIバージョンのヂストリブーションだしwww MacOSXはINTELもあったんじゃなかったか?
つまんねえ
本物のハッカーはソラリスじゃないの?x86あるし無料だし。 FreeBSDの設定とかよりソラリスをHPで紹介してるのとか凄くない?
458 :
デフォルトの名無しさん :2008/09/03(水) 14:30:33
ブリヂストン?
>>456 変なの居ついたよな
当人はスレに参加しているつもりなのだろう
そうやって排他的だとperlみたいにコミュニティーが宗教っぽくになっていくと思わないか?
461 :
デフォルトの名無しさん :2008/09/03(水) 15:01:31
rubyはもともとモルモン教なんだが? あの貧困層の宗教で有名なモルモン教だからrubyの洗脳はperlよりもひどいよ
462 :
デフォルトの名無しさん :2008/09/03(水) 15:02:44
実際のところ、モルモンも創価学会とドッコイだろww
perlと比べれば、rubyは後発だけあって現状の要求をみたしている言語としての出来はいいんだけどな。
>>460 どっちかってえと公平に受け入れよとわめくほうが宗教っぽい
惑星ソラリスは破壊されたんじゃ?
おメーラいい加減にせえよ スレ違いにもほどがあるw
すいまメ〜ン!
SonOS 4.1あたりまでの人にとってはSolarisはまがい物なんじゃなかろうか。
>>900 までこのスレはOSの話!
Rubyは別でどうぞ(違
rubyでExcelを読み込みたいのですが、日本語が化けてしまいます かなり調べてみたんですが、何が悪いのかわからないです。。不適切な箇所を指摘してもらえないでしょうか require 'win32ole' class Excel_test2 def getExcel xl = WIN32OLE.new('Excel.Application') book = xl.Workbooks.Open(ファイルの絶対パス) begin book.Worksheets.each do |sheet| sheet.UsedRange.Rows.each do |row| record = [] row.Columns.each do |cell| record << cell.Value end puts record.join(",") end end ensure book.Close xl.Quit end end Excel_test2.new().getExcel End Rubyのバージョンは1.8.6 WIN32OLEのバージョンは0.7.2と出てました
日本語が化けるだけならwin32oleはたぶん関係ないな
「Excelを読み込む」という表現に危機感を感じる ダブルクリックするとExcelが起動するからExcelだと思ってる人が日本中に10万人くらいいるがその類かもしれん csvファイルやtsvファイルも読めるわけで、端末文字エンコードとあってないファイルの場合は当然化けるぞ
どんな日本語がどう化けたか書きなさいって
>>473 発生日 名称 マグニチュード 死者・不明者 死者の有無
↓
, , } O j ` [ h, ҁE s , ҂̗L
こういう感じです
単に文字エンコードやExcelが扱うファイルの知識がないんだろう Ruby以前の問題だな win23oleはRubyほとんど関係なくて、Windowsプログラミングの知識が大量に要るぞ
なんにも知らないくせにw
煽ったってこれ以上は別に出ないぞ
WIN32OLE.codepageを変えてみるとか
読めてる以上、文字コードだけの問題だしなあ まさか本当にUTF-8のCSVファイルだとかそんなオチだったり
FreeBSD使ってる人は、やっぱりSunOSも知ってる人なんじゃないの? その流れでソラリスに辿り着くか、派手好きはMacOSXかなってことなんだけど。 デビアンはイマイチゴチャゴチャだし、オープンで英語得意なら、やっぱFreeBSDのままかなw そういえば、物理学科のハッカー先生元気かな…
MacやLinuxは女々しい奴か宗教家ぶれの奴しかいないけど、BSDは本物のハッカーしかいない。 別板にある犬小屋スレ見ればわかるだろw windoはエサ待ち状態のサルばかりか?
とりあえず Excel 2007 で直接日本語を入力して xls および xlsx 両方で保存した上で
>>470 をコマンドプロンプトからそれぞれ実行したが、特に文字化けはしなかった。
cell.Value から返るのは Shift_JIS だから、あとは表示環境の問題かと。
>>479 WIN32OLE.codepageをUTF-8にしてみたら正常に出力されました
ありがとうございます
文字コードが正直さっぱりわかってないのでもっと勉強します。。
スクリプトがUTF-8なのかね
おお、勘でアドバイスしたら当たったぜ
エスパー覚醒おめ
>>481 BSDが染みついた人ならソラリス(2以降)にたどり着いたらUターンするだろJK
今の時代x86で十分だし、そうするとwinかbsd/linuxでしょ。 3Dの凄い計算とか気象予測みたいなのが必要なわけでもないし。 ただ、PCを部屋に5台以上おくとクーラーとか空調もやんないといけなくなるし、PC技能とは別問題に遭遇する。
じじいは隔離スレにカエレ
>>490 当人はスレに参加しているつもりなのだろう
rubyはモルモンじゃなくて、エホバじゃなかったか? あの、デザインパターン本のキリスト教の人と同じで。
モルモンです。
結城さんはモルモンなの?
プロテスタントのクリスチャンというのが怪しいよな 日本でカトリック以外なんてエホバか統一教会だし
496 :
デフォルトの名無しさん :2008/09/04(木) 12:21:27
rubyは型の宣言は不要なんですけど、実際はメソッド呼び出した後、何の型が戻るのか分からないと 次の操作が出来ないので、なんだかやりにくくないですか? 特に正規表現で引数とか戻り値がいろいろあるので、結局はOOだと型の明示が必要なのかなと思っちゃいます。エラーでも型の注意が入るし。 とにかく =~ とか $~ の旧世代のレガシーはもうOOじゃないし、廃止して欲しい。
497 :
デフォルトの名無しさん :2008/09/04(木) 12:22:13
と思いませんか?
javaでも使ってろよ
配列に正規表現がマッチするわけないし 数値に正規表現がマッチするのは変だろ result = str.scan(re) でいちいち配列の配列が返ってくるのはなんか違わね? というのは確かに連綿と指摘はあるが まあそれなら re.match(str) で MatchData オブジェクト使えばいいんじゃねという話ではある
その辺りはマニュアルにしつこく書いとくと、日本人ならrubyに流れるんじゃないですか? =~ [] MatchData String Regexp とかどれなのか覚えて整理するのに1日使ったんで。 perlよりはまとまってるみたいですけど、perl awkのしがらみでもあるんでしょうかw 触ってみた感想は、Javaみたく、MatchDataでまとめていいんじゃないかな。
501 :
デフォルトの名無しさん :2008/09/04(木) 12:39:24
というか、連綿とかムズカシイ言葉知ってますねww
502 :
デフォルトの名無しさん :2008/09/04(木) 12:54:31
開発者たちは、数学知ってるんだろうし、多価返却はダメだってことを分かってると思うんですけど。 既存の=~ $~ とか、class Regexpはそのままで、新規にruby regexpと称して戻りは全て1つのクラスで返るようにrubyのAPIとして新しくクラスとメソッド名を設計すればいいんじゃないですか? あれこれクラスにまたがっていて、まったく意味不明でした。 $~はスレッド・ローカルみたいですけど、OO的というかスレッド的に馴染まないというかどうかと…
504 :
498 :2008/09/04(木) 13:05:00
>>502 っ【ソースコード】
っ【直談判】
っ【
>>499 】
なんかスレのターゲットから超えてる気がするw
>>503 ,504
いや、別に初心者じゃないんでw
以上、壮大な釣りでした。
507 :
デフォルトの名無しさん :2008/09/04(木) 13:20:42
あと意味不明だったのは、 p => Object.inspect puts => to_a => to_s print / printf => to_s だったかな。コレもよくオーバーライドしたり参照するんで、マニュアルによろしくですです。 ほとんど for line in file : p line end while line=file.gets : p line.chomp!.strip! end しか使ってませんよ。結局やってることはOOじゃないし、eachとかいちいちAPIみるの面倒でしょw
508 :
デフォルトの名無しさん :2008/09/04(木) 13:34:36
リテラルも多いし、返却値もいくつものクラスにまたがっていて、さらにデバグの出力先もいろいろあって、忙しい言語ですね。 これでも十分複雑なんで、半年も触らないときっと忘れちゃいますよ。 javascriptの方はプロトタイプ言語で少し概念が違うんですけど、ほぼジャバと同じだし半年しても忘れることはないでしょうな。 OOとかクラスについてはjava使えるんで、regexpは、jsでIO使えるならjsでいいかなってのが感想ですw
じゃあJavaScriptスレに行ってください。 このスレは2度と見る必要ないですよね?
本屋で見かけた初めてのRubyが第3刷だった件について
よい本が売れるのは問題ない 店によっては入った週に売り切れたりするのは立ち読みしにくいのでやめてほしい
>>500 >=~�[]�MatchData�String�Regexp�とかどれなのか覚えて整理するのに1日使ったんで。
StringとRegexpをマッチさせたらMatchDataが作成される、というだけで、
何も難しくないと思うんだけど、どのへんがわかりにくかったですか?
>触ってみた感想は、Javaみたく、MatchDataでまとめていいんじゃないかな。
Javaもjava.lang.Stringとjava.util.regex.Patternとjava.util.regex.Matcherを使っているから同じだと思うんですけど、どこが違うと思いますか?
>>502 >既存の=~�$~�とか、class�Regexpはそのままで、新規にruby�regexpと称して戻りは全て1つのクラスで返るようにrubyのAPIとして新しくクラスとメソッド名を設計すればいいんじゃないですか?
これは意味がよくわからないんですけど、どういうクラスとAPIを提案しているのか、もっと詳しく説明してみてください。
もしかしたら、すごくいいクラス設計が提案されているかもしれないので。
よろしくお願いします。
>>507 >あと意味不明だったのは、
>p�=>�Object.inspect
>puts�=>�to_a�=>�to_s
>print�/�printf�=>�to_s
>
>だったかな。コレもよくオーバーライドしたり参照するんで、マニュアルによろしくですです。
この書き込みのほうが意味不明。どれもマニュアルにそのまんま書いてあるんだけど、マニュアルをどうして欲しいの?
514 :
デフォルトの名無しさん :2008/09/05(金) 01:20:25
pack/unpack の指定も記号的で意味不明なんで、一文字で略さないで、ちゃんと定数やエナムにして 意味を含めてくれませんか?パブリックなライブラリなわけで、自分仕様のライブラリじゃないでしょw パールのしがらみをもったままなんでしょうけど、このままだと第2のパールに成り下がるだけじゃないですかね。 regexpは別言語でもできるんですけど、ネイティブへのアクセスは、POSIXの機能が結構使えるルビーが(グルーとしては)一番かなって思うんですけど、この辺りどうでしょうか?
515 :
デフォルトの名無しさん :2008/09/05(金) 01:22:10
それと、クラスの設計はやっつけ仕事じゃなくて、普通は後から変更できないんで、数年かけてちゃんと設計してもらって、パールの猿真似ばかりやってないで、仕様をまとめてもらった方がいいですよ。 ルビーには特異クラスって業もあるんですけど、初めのライブラリを新規に用意するのは、そういうプロトタイプ的な機能に頼って期待する以前の問題じゃないかなと思います。
>>514 お前実際にはスクリプト書いてないだろ
マニュアル逐次読みしながら論う釣りは帰れ
自 分 で 作 れ
>>516-517 コードを書こうとして、packの機能を使おうとしたら「複雑すぎw」てことじゃないの?まあ、サルにはこの気持ちは一生理解できないんだろうけどw
519 :
デフォルトの名無しさん :2008/09/05(金) 01:53:41
pack/unpack は機能が豊富だから独立したクラスにして欲しい。1.9のfutureで頼んます。
packはあれはUNIXそのままが一番わかりやすいしなあ 正規表現が全くオブジェクト指向じゃないとか sprintfやstrftimeのフォーマット文字列が意味不明だと文句言われるのと 割と似ていると思う
>Ruby 1.9.1の仕様は9月25日で凍結されます 急げ
急いでないんで、1.9.8まで待ちますw printfはインタプリタなんで、packの引数による機能指定と、全然関係ないと思うんですけど? APIも仕様も熟読しないような、ナンチャッテさんはその程度ですかw
>>520 るびまで青木さんが、
packの書式なんて誰も覚えてねーよバーカバーカとか書いた上で
自前で簡単なDSLを定義してたようなw
なんか、rubyが旧世代のダメ出しされてるってかんじーww
>printfはインタプリタ 詳しく説明願います
あなたが勉強不足なだけなんでしょうな。
初心者スレで粋がるのがかわいいじゃないか
仕様に対する不満はスレ違いだ。本スレかアンチスレにでも行け。 つーか、メーリングリストで言えよ…
メーリングは、「あーでも、こーでも」いってて皆でモルモンしてるじゃんw
API君の日本語が意味わからなくて、対応に困ります
531 :
デフォルトの名無しさん :2008/09/05(金) 03:05:22
本スレってあそこか。 業界通っぽくしてるサルばかりじゃないの? 所詮下請けにかわりないし、愚痴ってるだけで、BSDじゃないけどサル小屋かなww
日本語でおk
533 :
デフォルトの名無しさん :2008/09/05(金) 03:10:37
ボクちゃんは賢いですねー おりこうさんだからv8でもいじって、遊んでましょーね
>>527 そうやって羨ましがってばかりいないで、少しはプログラミング言語 Ruby に貢献したらどうよ?
どうせおまえみたいな無能は、指くわえてみてるだけじゃないの??
IPAは税金ばっかり使って、結局フォントだけが成果物じゃん。もう国がサポートすることもないし、解散でいいよ
誰が何の話してるかわけわからんぞ
538 :
デフォルトの名無しさん :2008/09/05(金) 03:20:12
はいはい。ここは初心者スレなんで、愚痴は「サル小屋」でやってくださいましww
539 :
デフォルトの名無しさん :2008/09/05(金) 03:43:25
あのー、IPAでいいんで、漢字コンソール(KONのクローン)作ってもらえまんせか? konが今となっては機能不足なので、freebsd入れずにwindows使う羽目になってるんですが。 英語には不自由はしてないんですけど、クライアントの送信とかログとかも含めて開いたファイルの中身が文字化けしたら何のファイルなのかさっぱりなんで、漢字端末よろしくです。
ジャバとかルビーとかパールとかカタカナ表記が流行ってるんですか
542 :
デフォルトの名無しさん :2008/09/05(金) 12:09:44
jfbtermはポーツにあるみたい
konって何年前だよ。ほんと生きた化石みたいなやつだな。
konの表示は当時からしょぼかった・・・やっぱ資本の差かな・・・フォントの次はIPAさん、俺からも頼のんます
おっさんは引き際というものを知らんな
カタカナ表記で書いてる奴は基本的に釣りでしょ。
ルビー
>>514 >pack/unpack�の指定も記号的で意味不明なんで、一文字で略さないで、ちゃんと定数やエナムにして
>意味を含めてくれませんか?
これは無理です。printf()の書式とおなじようなものだと考えてください。
あなたがprintf()の書式にも文句言う人だとどうしようもないですが。。。
>>515 >それと、クラスの設計はやっつけ仕事じゃなくて、普通は後から変更できないんで、数年かけてちゃんと設計してもらって、パールの猿真似ばかりやってないで、仕様をまとめてもらった方がいいですよ。
どうも正規表現あたりのクラス設計に不満があるようですが、どういう設計をお望みでしょうか。
String, Regexp, MatchData の3つがあるのは Javaでも同じですが、どこがわかりにくいですか?またどう変更してほしいのですか?
>ルビーには特異クラスって業もあるんですけど、初めのライブラリを新規に用意するのは、そういうプロトタイプ的な機能に頼って期待する以前の問題じゃないかなと思います。
言っていることが意味不明なので、わかりやすく書き直してください。
549 :
デフォルトの名無しさん :2008/09/06(土) 04:01:49
なんだこいつ?新手の荒らしか?
require/includeでクラスやモジュールを使いたいのですが、 ruby "-I c:\myruby\mylib" source.rb とやってソース内部でrequire/includeとやってもロードされてないようです。 何が足りないんでしょうか?
頭が良いが性格は悪い、というキャラを目指す奴の大半は どっちも悪いキャラに終わるよな。
>>552 どれとどれが「どっちも」ってのなんだ?
これだけで、おまえが低学歴なのがよーく分かるw
目の前の文章の意味すらわからないのに、 目に見えない色んなことは次々と「わかっちゃう」のも 特徴の一つだね。
低学歴は夜間の大学を受験したらどうだ?学歴でバカにされるの嫌だろw
ロジックとかは経験でカバーできます。
>>556 そうすると、経験でカバーできないのはなんでしょうか?
>>550 サーチパスにC:¥myrubyを追加して、そこからmylibをrequireするなら、
ruby -I C:¥myruby -r mylib source.rb
>>550 バックスラッシュは直後の文字をエスケープするから、
"c:\myruby\mylib" は c : \m y r u b y \m y l i b と解釈される
ruby -I "c:/myruby/mylib" source.rb
または
ruby -I "c:\\myruby\\mylib" source.rb
で動作するはずだ
スクリプト開始時の require 前に $LOAD_PATH 配列に "c:/myruby/mylib" という文字列を要素として追加してもよい
なるべく配列の先頭に入れるといいと思う
561 :
デフォルトの名無しさん :2008/09/06(土) 11:22:07
ご親切にありがとうございます。 $: . push ("c:/myruby") ; としてるんですけど、ソース1行目に、 #! ruby -I "c:/myruby" だと無理みたいです。 それと、ruby -help でみると、-Idirectory -rlib -Kcode とかなっていて、空白いるのかいらないのか不明だし、なんかヘルプの方が混乱しているみたいです。 公式レファレンスの説明も1行あるかないかだし、やる気なくなりました。 BSDのインストールと日本語化が困難でやる気なくなって、vine linuxで済ますアレと同じ感覚ですw あと、module Mymo とinclude/require関数とかも日本語だと説明不足で英語サイトだと著者の思想も込みで説明が詳しすぎて、結局モルモン思想はウザくてやる気が起きません。 rubyのコミュニティーは、rubyプラットフォームをツールとして広める気があるんのか疑っちゃいますw
562 :
デフォルトの名無しさん :2008/09/06(土) 11:27:24
関数とカッコの前後に空白どうとか言う警告を削除してもらえませんか? obj . push ( a , b ) じゃ言語としてダメでありサポートしないのか、それともいいのかハッキリしてもらえませんかねー こんなところまでモルモン思想の押し付けをワーニングするのはもう止めませんか?ウザいんですけどw
>>561 スクリプト1行目のShebang行は規則に則った単なる文字列だ
シェルで実行されるわけではない
シェルと同じ動作をすることを期待されても困る
お前らが優しいのは十分わかったから、いい加減かまってちゃんの相手をするのはやめてくれ
ライブラリの設計が悪いんだろw
ここんとこ毎日初心者スレにくるところをみると、どこでも相手にされてないようだな。
というよりも、戻り値の型で p nil==false # false は勘弁して欲しいけど。 このスレのレベルだと、どうしてなのか分からないんだろうと思う。
568 :
デフォルトの名無しさん :2008/09/06(土) 13:17:36
ルビーは犯罪者も使ってるんですよ!刑務所の犯罪者たちにエサを上げないで下さい!!
本スレのITドカタたちよりは技術的な質問が多いな。あのスレはカスばっかりでもうダメだろ…
たしか…
>>566 おまえもスレに張り付いて、いったい何やってんだ?仕事もしてないんだろw
それが罵り言葉になる環境にいるなんて可哀想
土方は蔑称だから使っちゃダメだよ。
571は今日が土日だということを理解できていないらしい
宇宙大王の言い分 このスレ: 低学歴・無能の集まりなので分かってくれない ML: モルモンなので分かってくれない リアル: 大人は分かってくれない アドバイス あなたを分かってあげられるのはあなただけ。自分を大切にしてあげて。
576 :
デフォルトの名無しさん :2008/09/06(土) 13:52:49
はいはい。もう分かったから死ね
577 :
デフォルトの名無しさん :2008/09/06(土) 13:56:57
rubyを使うようなのはwebクーチャーとか言う職業の人たち、つまりITドカタでしょwwww たーまにbsdとかも使ってるシステムの奥の方の人も居るけどwwwww 2chでIPAの愚痴を言うようじゃ、仕事も大したことやってないし、せいぜい雑用係のカス野郎ってことが良く分かるwwwwwwwwカスw
いや、IPAは無駄だろ。除法処理技術者の資格をもっていても、もっていなくても、別に金にならないし。
579 :
デフォルトの名無しさん :2008/09/06(土) 14:14:12
WEB開発とか雑魚だろ。しかも文系でどこにも就職出来なかったような雑魚だしな。 べつにrubyのCソースを追いかけてるわけでもないし、なんか生意気な奴が多いようだけど、雑魚だろw いちど、みっちりCをやって、GCのソースとか見てみたらどうよ?雑魚ちゃんww
そんな雑魚相手に弱いものいじめしなくても…彼らは雑魚なりに一所懸命生きてるんだからさ……
>>340 いやいや、デンターシステマ超極細毛(かため)以外認めんぞw
僕だってれっきとしたWEBクリエーターだ!クリーチャーじゃないぞ!!
583 :
デフォルトの名無しさん :2008/09/06(土) 14:26:09
弱いものいじめ反対! いつか必ず天罰が下るぞ!!
>除法処理技術者 煽りじゃなく「割り算のプロ」っぽくていいな。それ。
586 :
デフォルトの名無しさん :2008/09/06(土) 18:10:54
s="あい"#sjis puts s.dump dump以外に、 ”あい”を文字コードの列(配列)にするのと、 その配列から”あい”(SJIS)に戻す方法はどうやるのでしょうか。
dumpのどのへんが不満? バックスラッシュが邪魔? 配列にならないところ? 数値が8ビット整数じゃないところ?
RUBY_VERSION >= "1.8.7" だったら [*str.each_byte] とかかな
589 :
デフォルトの名無しさん :2008/09/06(土) 20:02:53
あのーバイト列(特にバイト配列)からStringにするにはどうするんでしょうか? packとかは無しですよw
590 :
デフォルトの名無しさん :2008/09/06(土) 20:04:01
dumpは、戻り値がStringなんでArrayじゃないし、たぶん外部用(serialization)じゃないですか? なので、関数内部のローカルで処理する用途とは少し違います。 とくに、str[k]="あ"というかんじに出来るのないでしょうか? 結局ルビーは、パールと同じで日本語(多言語)対応じゃないしなんか使いにくいのでどうせなら、 jcodeでStringにアドオンなんかしないで組み込みクラスをrubyの方が用意したらどうですか? class JapaneseString とかかな。
591 :
デフォルトの名無しさん :2008/09/06(土) 20:06:07
str.setJavaneseCharCodePointAt(index, "あ"); APIはこんなところでしょうか。
不覚にもJavaneseに吹いた でも初心者スレを荒らすのは勘弁してね
javaを語る人はjavanese
594 :
デフォルトの名無しさん :2008/09/06(土) 20:39:48
いやいや、マジで困ってるんですが… serializationは、dumpのStringはrubyだとtaint/untaintの腐ったレベルに影響あると思うんでdumpは外部用だと思います。 それでdumpは使えないので、他にsjis, euc, u16, u8とかの一文字をstrに追加できるセッターないですか?
matz.dump # ダンプ松本
Matzは神ですけど、matz は orz みたく凹んこで反省してるように見えませんか?
[*str.bytes] ↑↓ bytes.map{|b| b.chr }.join だろうか
Javaneseってジャワ語という意味だったな
599 :
デフォルトの名無しさん :2008/09/06(土) 21:54:41
str.concatとarr.push使って自分で実装しました。
というか、スクリプトはテキスト(日本語)処理が主要な用途なんで、これぐらい(ライブラリ作成者側が面倒でも)当然用意しておくべきじゃないですか?
>>597 ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
なんで無理です。あと、よくわかないんですけど、[*str.each_byte]は間接参照か何かですか?
イテレータとか使うといちいちAPIみないといけなくなって面倒なんで、この程度の処理はwhileで実装です。
というか、こういう処理はwhileで十分あって、関数ポインタやデリゲートの用途じゃあるまいし、イテレーターなんてカッコつけて使うもんじゃないですよw
>>589-591 , 594
まず目的として何がやりたいのかを説明しろ
そこがわからないと適切なアドバイスもできん
601 :
600 :2008/09/06(土) 21:58:56
ごめんね、スルーしなかった俺が悪かった
602 :
デフォルトの名無しさん :2008/09/06(土) 22:01:48
イテレーターは自分で作ったclassやライブラリーのデータ構造をイテレートするときのもので、 StringやArrayみたいな組み込みで汎用用途じゃ、あまり向かないじゃないでしょうかね。用意されてはいるが継承用かな。 といっても、Stringには一文字処理のget/set可能なイテレートを当然に用意しておいてもらえませんかね。 とくにbyteとchar用のsetがないじゃん。
1.9使えばいいんじゃね?
そろそろ飽きた
[*"foo".bytes].map(&:chr).join # => "foo" なにコレ?
>>567 nil に対する比較演算は nil を返してほしい口?
つうか、なんで勘弁してほしいわけ?
全てがオブジェクトじゃなくていい派でしょ
>>602 >イテレーターは自分で作ったclassやライブラリーのデータ構造をイテレートするときのもので、
>StringやArrayみたいな組み込みで汎用用途じゃ、あまり向かないじゃないでしょうかね。用意されてはいるが継承用かな。
どこをどう見て、そう判断したんですか。
>といっても、Stringには一文字処理のget/set可能なイテレートを当然に用意しておいてもらえませんかね。
>とくにbyteとchar用のsetがないじゃん。
Ruby1.8では、文字列はただのバイト列なので、Javaのように文字単位での扱いはあまり得意じゃありません。
ただ、文字単位で扱わなくても済む場合がほとんどなので、あなたが「1文字ずつ扱って何をしようとしているか」をまず書いてみてください。
きっとだれかが、1文字ずつではない処理方法を提示してくれると思います。
それから、全般的に日本語に不自由されているようですが、もっと人に伝わるような文章を書いてください。
エスパーするにも限度があります。
>>608 質問者に、質問し返す人いますが、あなたは少ししつこい。
あなたのプログラミングスタイルと全く違う人もたくさんいるんですけど、あなたは一生Webクリーチャーでいいんで、黙っててくれませんか?
一文字の処理を所望なのに、一文字の処理じゃない方法を提示する必要はないでしょ。
あなたに仕事を任せても、全く仕様を読まないでいつも失敗ばかりしてるんだろうと思うんで、あなたはその辺にいるゴミか何かでしょうか?
とにかくVBとかの方が儲かりますよ。
611 :
デフォルトの名無しさん :2008/09/07(日) 04:10:34
>エスパーするにも限度があります。
>>608 を読んでみても、おまえが無能なのがよく分かるな
おまえのエスパーなど誰も期待してないけど?
たぶん
>>608 は低学歴で脳みそ文系ちゃんだから相手しちゃダメ。
いつまでもこのスレに居座っていてみんな迷惑してんだからw
613 :
デフォルトの名無しさん :2008/09/07(日) 05:38:13
>>608 モルモン教に入信したいなら、まずは創価学会を脱退してからですよ。
>字単位で扱わなくても済む場合がほとんどなので split(//)とかで結局文字単位になるんだし、文の前後が矛盾してるじゃん。 こいつは何のことをいってんだ? それと、Javaは文字単位char[]でなくてStringで処理しますが、知らないことに無駄口しない方がいいんじゃないですか? 日本語の文法から勉強なさった方がいいんじゃないですか。
だから文系プログラマーにかまうな。思考盗聴されて頭おかしくされちゃうぞ!
616 :
デフォルトの名無しさん :2008/09/07(日) 06:31:32
思考盗聴か…層化じゃ当然だよな……
617 :
デフォルトの名無しさん :2008/09/07(日) 07:01:15
仕事してんのに一人でも女がいるとホント面倒だよなwww 女は端っこでマンコの手入れでもして、いつでも準備OKにしてればいいんじゃね?
619 :
デフォルトの名無しさん :2008/09/07(日) 09:13:37
さすがにプログラマに女はいないだろw 数学の女、哲学の女、以上にキモイな。 仮に想像したとしても、頭モサモサのフケだらけ、体臭はニンニク臭いなんじゃないの? そんなキモ女はどこで道を間違っちゃったんだろうな…
catch io exception
>>617 俺もそう思う。
まず連中は論理的に説明しても理解しない。「できない」じゃなくて「しない」なんだよ。
生意気にも「いいじゃないですか〜」とか言ってて許されるとか思ってる。
「俺が上司なんだよ!!!なめんなよ首にすんぞ」
とか思っても労働法違反になるので言わないです、ごめんなさい。
ついて行きたいと思わせる男の魅力が足りないのでしょうね、ごめんなさい。
そういえば、大学時代も「いい人」止まりだったなぁ・・・
付き合ったは良いけど卒業後すぐに分かれたなぁ・・・
一回しかえっちしてないよ・・・ちなみに童貞×処女
引数 param で受け取ったものが配列でも「 1個」でも each で同様に回したい、という場合 param.to_a.each do |e| ... と書くのが単純だったと思うんですが、 warning: default `to_a' will be obsolete とか生意気で妥当な警告が出ます。 わりと頻繁に使うメソッド内でのことなんですが、どう対処するのが自然ですか? param = [param] unless param.is_a?(Array) と書くべきですか? 「このメソッドは配列しか受け取らないので 1個だけのときは事前に hoge([para]) にしろ」 とマニュアルレベルで警告するべきですか?
>>623 配列かどうか調べて、配列じゃない場合は配列に入れるという動作が "正しい"
もしくは、マニュアルなどで「配列しか受け付けません」と明記する
[*param].each do |e| とすると文字数減った上に見かけ動作も一緒だが、無駄に穴掘って埋めてる感じが超キモい
これはそもそも
irb> def disp(param); param.to_a.each{|e| puts e }; end
irb> disp('hoge')
hoge
irb> disp(1)
(irb):1: warning: default `to_a' will be obsolete
1
irb> class Integer; def to_a; [self]; end; end
irb> disp(1)
1
ということで、「オブジェクトを to_a する意図が不明瞭なので頼るな」という意図の警告だ
obj.to_a と [obj] が同じとは限らないし、違うことのほうが妥当なこともある
配列の要素にしたいのなら、to_a ではなく明示的に配列作ってそこに入れろという話
irb> Time.now
Sun Sep 07 12:01:10 +0900 2008
irb> Time.now.to_a
[14, 1, 12, 7, 9, 2008, 0, 251, false, "JST"]
irb> [Time.now]
[Sun Sep 07 12:01:18 +0900 2008]
625 :
デフォルトの名無しさん :2008/09/07(日) 12:13:26
PGやSEとか頭脳労働なら、女がいるような職場には行きたくないな。 電話オペとか事務とか誰がやっても同じなら男女雇用機会もわかるけど、 女のセンスとか女のやさしさなど、PGやSEにまったく不要で逆にあると面倒なんじゃないか? 受付や事務で雇うならともかく、女をPGやWEBデザインで雇うようなところは資本もないし 金も技能もないベンチャーはすぐ潰れるのがおちw 今のベンチャーの生き残り方法は、創価学会と手を組むか、堀江豚みたく株屋とつるむぐらいしかないんじゃないの?
[ param ].flatten(1) flattenの引数ってどのバージョンからだったかのう。
おまいらの妄想には飽きたぜ。 いい加減どっか外にいけ
いまでは「Webデザイン」とかかっこ良さそうな臭いがしますが、海外のスクリプト言語 紹介ではJavaScript(とその亜種)の人口は多くPerlなどが続くと紹介されますが、 2008年現在、そのなかにrubyの文字は一度も出てきません。 しょせんrubyは、(にっぽんの)文系 IT ドカタ専用なんです! 犯罪囚人の女も使ってます! コミュニティーはモルモン教です! 負け組みの人たちが都合よく集まったというところでしょうか… ライブラリは冗長が多いけど言語の出来はいいんですけどね……
言語側がto_a, to_i とか用意しといて下位互換を無くすようなこと一度でもすると、もうそういう言語・ライブラリは信用されないんじゃないか? OOや継承をなんだと思ってんだ? >ということで、「オブジェクトを to_a する意図が不明瞭なので頼るな」という意図の警告だ obj.to_a と [obj] が同じとは限らないし、違うことのほうが妥当なこともある これを公式レファレンスに記載すればよろしい
確かにruby使ってる人たちがexcel,word出身のナンチャッテばかりだと、そんなやつらと話があうはずないな。
excel,wordすらまともにry
arr=[11,22,33] puts *arr puts &arr マニュアルみてもないんですが、* & これは演算子ですか?
blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45334 からのスレッド参照
635 :
デフォルトの名無しさん :2008/09/07(日) 12:56:58
怪しいソフトハウスは五万とあるが胡散臭いからすぐ分かる。たいてい、そういうところはDQNしかいないし長くても5年で潰れる。どう考えてみても、文系乙だな
>>634 演算してるわけじゃないしな
展開記号とでも呼べばいいのかしら
637 :
デフォルトの名無しさん :2008/09/07(日) 13:09:04
* & ですけど、関数引数なら演算子とは呼ばないけど、式文中なので演算子ですよ。 リンク先のMATZ本人はその意味で言ってるんですけど、たぶんこのスレレベルだと理解できないんでしょうね。 やっぱ文系用スクリプトを使うお気軽ルビリストには、その程度の理解度でいいんでしょうか?
638 :
デフォルトの名無しさん :2008/09/07(日) 13:12:42
理解できない人はC言語をみっちりやってくださいなw
背伸び with マニュアル のスレはここですか?
いいえ、基礎を積むスレです。
配列の中での*はlispでの準クオート中の式を,@付けて評価→展開するものが元ネタっぽい。 だけど関数定義のときに引数定義の中で使われると、 lispの引数リストで使われる&restとか ...みたいな可変長引数みたいになる、ややこしいな。 &付きでProcを呼び出すものはなんだろう、C++のメンバ関数ポインタ? def foo(*x)のときの*x言うのはrest引数構文 puts *arrの*arrは展開構文 puts &arrの&arrはProc変数渡し構文 Matzも*や&単体では意味が無いって言ってるし、こんなのでいいんじゃない? さらにこういう前後の状況によって決まる類の「なんとか構文」なんてものは、 仕様書のある言語ではよくあるものだし。
Rubyとか超ウケル
puts &arr ってするとエラーが出るんですけど。。。 (ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]) wrong argument type Array (expected Proc) (TypeError)
644 :
デフォルトの名無しさん :2008/09/07(日) 15:40:31
エラーが出ていいんだよ。エラーを読める程度の英語をちゃんと身につけないとねw
645 :
デフォルトの名無しさん :2008/09/07(日) 15:44:12
「文系 Web 2.0」 じゃ、やっぱ話題について来れないんだろうな… java.net(英語)にも妄想オタクな奴が多いけど、サーバ・サイドだから学歴は高い奴多いしくおかしな文章を書いたりしないな。 だけどrubyは無能な文系ばかりしかいないようだ…メーリングをググってもゴミのごたくばかりだろ… Matzはいつも大変だな…
>>644 あっ、エラーでいいんですか。
みなさん、とうとうと解説されているので、てっきり意味のある文だと思いました。
>>641 文法上サポートしている構文というなら別にそれで文句はないですが、マニュアルに書いといてください。
p [*[11,22,33]] が出来るところを見ると、単項式として値を返すので、言語上の分類としては演算子じゃないかなと思います。
649 :
デフォルトの名無しさん :2008/09/07(日) 16:14:26
>>646-647 君たちはprocを理解してないのに偉そうにしてていいの?もっと一所懸命に勉強しないと!
>>648 の笑いどころ
lisp という単語出てきたとたん、腰が引ける。
2ch に来て「マニュアルに書いといてください。 」
理系の高学歴様は、ギャグのセンスもさすがだなw
>>646 そんなことよりおマンコはちゃんと洗っといた方がいいですよ。いつ何があるかわからないし・・・
変数名がかぶっても、ブロックの中だけ有効にするにはどうすればいいのでしょうか? a = 1 1.times do a = 2 end puts a # 1になって欲しい
653 :
デフォルトの名無しさん :2008/09/07(日) 16:52:22
それよりも
>>641 がC++どころかCすらも理解してないのにはビックリした!
654 :
デフォルトの名無しさん :2008/09/07(日) 16:54:20
655 :
デフォルトの名無しさん :2008/09/07(日) 16:58:35
>>652 変数名がかぶってる限りは無理
ちゃんと違う変数名で定義するしかない
>>656 そうなんですか。
Perlのように、局所化するmyとかはないんですね。。。
658 :
656 :2008/09/07(日) 17:21:10
追伸 初心者スレの範疇を外れるけど、現在のruby1.9.0系(開発版)では ブロックローカルな変数を定義する(=名前がかぶっても問題ない)文法がある たぶんruby1.9.1にも入るはず
>>658 今後のRubyには実装される予定なんですね
了解しました。
ローカル変数として同じの使ってるぶんには被るの許容するしかないな まあ不便っちゃ不便
クロージャとかイテレーターって知ってる?
JRubyでYAML使おうとしています。 日本語をdumpすると"\343\203\206\343\202\271\343\203\210"な感じで出力されてしまいます。 RubyのSyckでも日本語をバイナリとして扱ってしまうという、似た感じの問題があり、 パッチやら何やら書かれているようですが、 JRuby(JvYAML?)において日本語文字列のまま出力させる方法はありませんでしょうか?
>>663 Ya2YAML
JRubyで試したことはないが、pure rubyだからたぶん動くんじゃないかな
665 :
663 :2008/09/07(日) 18:18:46
>>664 どうもありがとうございます。
でも、Ya2YAMLはSyck用のバイナリ認識するとこを修正なんだそうです。
JRubyの場合はJvYAML(JvYAMLb)だそうですので、Pure Rubyか否かは関係なさそうです……。
http://gihyo.jp/dev/serial/01/yaml_library/0006 日本語全然使えない、とか書いてあるところもあったりして。
普通に表示したりする分には問題無いのですが、可読性という意味で言うと価値が激減。
dumpすると頭に"---"がつく辺りもRubyの最新版と挙動が違ったりするのですよね。細かいですが。
Javaのライブラリを使っていなければRubyを使うのですけれども……。
>>654 ImageMagickプログラムを使うか、それをRubyから使うRubyMagickを使う
自分のサーバに「Google Chartにデータ渡して結果を受け取りGIFに変換して画像を吐くCGI」として置くしかないな
667 :
654 :2008/09/07(日) 18:36:53
ありがとうございます。 なるほど、直接コンバートできるような手立ては無いということですね。 では、画像吐き専門のcgiを作ることにします。 (PHPでやるかもです)
>>665 楽してないでそれぐらい自分で実装したらどうよ?
669 :
663 :2008/09/07(日) 18:52:47
>>668 すみません。スキルがゴミなもので、解決策が自分だけの力では思い浮かばず、
一週間程悩んだ挙げ句に、こうして初心者スレで質問させていただいている次第です。
実装、というのはYAMLのパーサを実装ということでしょうか?
言語内DSL(もどき)を作って、YAMLを使わない方法に逃げることは一応考えているのですが……。
670 :
デフォルトの名無しさん :2008/09/07(日) 18:56:36
いつも「おっきいチンチン」のこと想像しながらWebしてます!
YAMLをあきらめてJSONを使う。
YAMLで作ったデータをどこに持ってくのかにもよるな
>>665 Ya2YAMLのソースコード読んでみたが、Syckに依存してるらしきところはないよ
だからSyckかJvYAMLかは関係ないはず
674 :
663 :2008/09/07(日) 20:16:56
>>664 >>673 う、すみません。Ya2YAMLをちょっと勘違いしていました。
ちゃんとソース読んできます。どうもありがとうございます。
ゴミなんでしょ?もう来るな。
コテつけろよ
デンターシステマのかためより、やらかめの方がいいですよ。 どうせ堅めを使っても歯ぐきから血が出るだけなんで。
歯ぐき弱すぎじゃね・・・? 個人差は有るだろうけど、 いっぺん歯科で相談してみたほうがいい。
普通は1から10まで足して55になるんですが、逆に10から9,8と足していく文はどうなるんでしょうか。
やっぱり55になります
逆から足して同じ結果にならないなら大発見かもしれん
BEとLEで結果が違います
>>681 多項式級数式ではそういうことがよく起こりますが…もしかして無能?
684 :
デフォルトの名無しさん :2008/09/08(月) 18:46:45
どっちが頭いいかをふっかけてくる奴がいっちゃん無能
無能はすぐage進行にしたがるww
>>679 よくわからんけど、こんなのかな。
i = 10
sum = 0
while i > 0
sum += i
i -= 1
end
i = 0
sum = 0
while (i += 1) <= 10
j = 10 - i
sum += j
end
sum = 0
(1..10).to_a.reverse.each {|i| sum += i }
downto
ruby1.8.7きめぇえええええ [*(1..10)].reverse.inject(0,&:+) # => 55
&:+って何?
みなさん、ありがとうございます。 ちゃんと55になりました。 逆走もあったんですか…
691 :
デフォルトの名無しさん :2008/09/08(月) 19:21:59
>>688 これは可読性以前の数学パズルの世界じゃないの?
rubyのキモさは、Cのポインタをほうふつさせるキモキモだなw
委譲の英訳ってtransferでいいの? 辞書だとそうなってるけどプログラミングでもそうなん?
>>692 オブジェクト指向における委譲はdelegation
サンクス delegateってメソッドポインタの事かと思ってたけど 委譲の意味でも使うのか。
>>694 C#のやつのことなら、delegateをそういう機能に使うキーワードにしたって
だけで、突き詰めた意味は結局委譲。
めそっどぽいんたってなんじゃらほ
(1..10).reverse_each.inject(:+)
>>696 C#を調べろ、としか言いようがない。
要するに関数ポインタのC#版。
>>696 特定のインスタンスの特定のメソッド(GUI部品とか)を呼び出すためのポインタ
特定のクラスのオブジェクトにメソッド実行を依頼すると考えれば根っこは同じ
という説明はどうだろう
わっかりやすいのう
質問です 関数オブジェクトと普通の関数を呼び出すときのコストってどちらも同じですか?
・Rubyには厳密な関数はない ・Rubyには関数オブジェクトもないっていうかまあこのへんは別にいいや てことで、普通のメソッド定義とProc(lambda)オブジェクトの比較と読み替える Procの呼び出しコストの重さは異常 以上 使うと面倒な概念をとても簡潔に表現できるけど、多用すると明らかに遅くなるので注意 便利なのでほいほい作る傾向にあるが、何度も使う部分に組み込む場合は、できれば丁寧に分析してメソッドにしたほうがいい
Rubyってメソッドもオブジェクトなの・・・?
そんなことしたマンコは臭うけどな
javascriptバカにすんな
707 :
デフォルトの名無しさん :2008/09/09(火) 08:32:52
臭いのは勘弁して・・・
javascriptはコンソールから起動して使える実装がないじゃん。ここ、バカ丸出しww
毎日が夏休み
>>703 ブロックつきメソッドの {|x| ...} 部分を「持ち歩ける」と考えてもらうと間違いない
>>708 >javascriptはコンソールから起動して使える実装がないじゃん。ここ、バカ丸出しww
spidermonkeyもrhinoもコンソールから起動できるじゃん。
バカ丸出しはおまえwww
javascriptは組み込み向けの設計ってこと忘れてるおまえは、バカ丸出しww
話題のv8のshellが普通にいい感じですよ
714 :
デフォルトの名無しさん :2008/09/09(火) 11:33:16
個人の著作を売り物にするようなところだしmixiと同じだな。 そのうち違う波が来て潰されるんだろうな…
>>702 そうなんですか。
昨日からruby勉強し始めて、全部関数オブジェクトにしたら一貫性あるかな?
とか思っていたんですが、重いなら仕方ないですね。。
全部ラムダ式にすればいいと言うわけですね
質問です。 配列のmap関数で適用する手続きの代わりに関数オブジェクトを使うことはできませんか?
関数オブジェクトって何ですか? Procオブジェクトですか、ブロックですか?
たとえば、 hoge = lambda{|x| x+1} このhogeという値にバインドした関数オブジェクトをmapで使うことはできませんか?
(1..10).map &hoge
>>720 おお、すばらしいです
では、次の質問ですが、
関数オブジェクト同士で関数合成ってどうやるんですか?
procとlambdaで作ったオブジェクトってイマイチ分からないのですが、簡単に言えば何が違うんですか?
「関数オブジェクト」なんてないということをとりあえず前提として話してくれ。 なんで執拗に「関数オブジェクト」と言い続けるんだ?
func do |x| p x end func { |x| p x } の違いでしたか・・・
質問です ある変数の型が何なのか調べる方法はありますか?
質問です。 hoge = Array.new(10){|i| i}.map{|x| x+1} と hoge = Array.new(10){|i| i}.map!{|x| x+1} ではリソースの使い方に違いがありますか??
731 :
デフォルトの名無しさん :2008/09/09(火) 14:41:59
>>732 では、たとえば配列の要素をすべて足す関数を作って、
整数と文字が入り交じった配列を渡してしまった場合はどうなるんですか?
配列の要素の型に応じて違う処理をさせる方法はありませんか?
735 :
デフォルトの名無しさん :2008/09/09(火) 14:48:49
精子はやっぱり飲んじゃった方がいいかな?
>>732 型が無いというのも誤解を生む表現だと思うのですが、
ではどのオブジェクトのインスタンスなのか調べる方法は無いんでしょうか?
>>730 メモリとかを気にするのに Array.new に引数をつけてる人は久しぶりに見た
nil が 10個生成されて直後に置き換えられるから最初のArray.newが一番無駄なんじゃね
で、map と map! の差だけで、見たままの動作で、見たままのメモリ消費だと思われる
配列要素が 1万個とかバカみたいに多いときは後者のほうが一瞬だけ若干得
ただ、後者のような書き方はあまりしないかな
どのクラスのインスタンスなのか、でした。
>>736 型はない
a = 10 したあとに a = 'str' としても動作する以上、変数に型は無いと言って差し支えない
で、オブジェクトがどのクラスに属しているかはclassメソッドを使うとわかる
>>730 前者は配列が2個作られる。後者は1個だけ。課題か何かか?
>>733 足せないものを足そうとした時にエラー
>>734 kind_of? で仕分ける
Rubyの変数は本気でただのラベルだからな
他の言語では変数はいわゆる箱のようなメタファで説明できて、箱には形が決まってたりするもんだが
>>734 動作一緒だが、kind_of? ではなく is_a? を勧めたほうがよいと思う
742 :
230 :2008/09/09(火) 15:07:39
>>740 課題ではありません。
昨日からruby勉強中なんですよ。
夏休みだけど暇なんで。
このスレの住人は糞ばかりだし、飲んじゃった方がいいよw
744 :
230 :2008/09/09(火) 15:10:45
>>733 要素が順番に問題なく + メソッドに渡される
不適なオブジェクトが + メソッド内(で使ってる他のメソッド)でチェックされているなら、
TypeError か何か決められた例外が発生してそこで処理が止まる
ある意味めんどくさいとも言えるな
だから、「要素に数値だけが入っていることを配列登録時にチェックするArrayクラス」のようなものを作ったりする
746 :
230 :2008/09/09(火) 15:13:53
>>745 なるほど。
静的型付け言語に慣れているせいで、ちょっとその辺はぎこちなくなります。
>>744 「どうせ直後で数値が全要素に代入されるんだから最初に nil 入れるのやめようぜ、
あ、ちょっと待って、map が続いてるからそれもまとめて 1回で処理しよう」
という判断は Ruby はしない
というか無茶言うな
そういうのはスクリプト作成者が事前に考えてくれ
nilの実装はintの0x00だけど?
>>747 遅延評価のHaskellなら朝飯前なんだがな
750 :
デフォルトの名無しさん :2008/09/09(火) 15:20:40
あのー横から失礼しますが、 rubyの有用なサンプル・スクリプトはどこかにないでしょうか?
751 :
730 :2008/09/09(火) 15:22:01
>>737 度々すみません。
たとえば1〜1000が順番に格納されている配列を生成するのに効率的な方法を教えてください
753 :
730 :2008/09/09(火) 15:25:58
>>748 んなこと言ったら文字列は全部ただのバイト列だぞ(1.8限定)
755 :
デフォルトの名無しさん :2008/09/09(火) 15:28:26
>nil が 10個生成されて直後に置き換えられるから最初のArray.newが一番無駄なんじゃね こういうのは、こいつの妄想じゃね?
>rubyの有用なサンプル・スクリプトはどこかにないでしょうか? どういうのを求めてるのかよく分からんが 「逆引き Ruby」でぐぐったら幸せなんじゃないかな
757 :
デフォルトの名無しさん :2008/09/09(火) 15:37:25
そういう逆引きじゃなくて、文字を数えるwc伝統的プログラムが集まったサンプル集です。 "hello world\n"の延長みたいなものなんですが、どこにもないんでしょうか?
>>757 意図はわかった
Rubyコミュニティとしては特にないので、個人で書かれた入門ページでも適当に探すといい
もとろん間違ってる可能性もあるが、初学者ならおそらく同じように間違うわけでそれはそれで意義があるだろう
というか、そういうのがきちんとまとまったページってのは他の言語でも稀なんじゃないかなー
あれば楽しそうな気もするけどね
759 :
デフォルトの名無しさん :2008/09/09(火) 15:44:54
あのー・・・・rubyは初めて触るんですけど、他の言語はバリバリ使いwwなんですが・・・・・・・・・
昔は「○○コマンドのクローンを作ってみよう」というのは教材としてわかりやすかったんだけどね 今はCUIコマンド自体の使用頻度が少なくて 「wcってなんですか?」 「いったいどういうときに使うんですか?」 「コマンドまたはファイル名が違いますって表示されました」 という状態で
>>741 >
>>734 > 動作一緒だが、kind_of? ではなく is_a? を勧めたほうがよいと思う
Rationalきぼんぬ。ピッケル本のどこかに書いてあったっけ?(ふとそんな気がしないでもない)
763 :
デフォルトの名無しさん :2008/09/09(火) 15:57:09
一応K&Cとかさくっと読んじゃったんですけど・・・ないですか。 日本語だと公式サイトの説明も適当だし(文章を書くのが面倒なんでしょうけど)、それなら有用なサンプルがあると理解が深まるんじゃないのかなと…
764 :
デフォルトの名無しさん :2008/09/09(火) 15:58:45
ごっちゃになってたけど、CのK&Rでした。C言語教徒には失礼・・・
K&C・・・ああ、ケンタッキーとチキンのことか。
モルモン教教徒はすぐ我慢汁が出ちゃうのがなんともねぇw
K&Rは難しすぎでさくっとなんか読めないよ。 あの超難しいといわれてる「ポインタ」を当然知ってるって前提だろうが。
ポインタを超難しいと言っている人を久しぶりに見た。 ああ、教鞭を執らなくなって結構経つなぁ・・
>>748 nilの実装はunsigned longの4だが?
環境によってはunsigned longじゃなくてもっと大きい型のこともあるが。
K&Rを難しいと言っているぐらいだからHaskellの遅延評価やモナドなんか常軌を逸するだろうな。
>>766 モルモン教とRubyにどんな関係があるんですか?
前々から気になっていましたが。
大多数の大学生のような集団にとってきちんと理解しようとする場合「超難しいと言われてる」でいいと思う
773 :
デフォルトの名無しさん :2008/09/09(火) 16:22:11
>>770 というか、Cのポインタが難しくてLispに逃げたくせに偉そうにするなww
にわかC使いがLL言語を叩くスレ
775 :
730 :2008/09/09(火) 16:28:05
$ time ruby -e 'test = Array.new(100000){|i| i}' real 0m0.220s user 0m0.120s sys 0m0.100s $ time ruby -e 'test = (0..100000).to_a' real 0m0.130s user 0m0.120s sys 0m0.010s 本当ですね。
>>775 それ、どういう処理なのか理解してないでしょ?笑えるんだけどw
778 :
デフォルトの名無しさん :2008/09/09(火) 16:37:03
まあ、どうあがいたってポインタは難しいからね・・・
779 :
デフォルトの名無しさん :2008/09/09(火) 16:40:38
780 :
730 :2008/09/09(火) 16:40:58
>>776 どういうメソッドが使われたかはプロファイラを使えばわかるみたいですね。
$ ruby -r profile -e 'test = (0..100000).to_a' % cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 0.08 0.08 1 80.00 80.00 Range#each
0.00 0.08 0.00 1 0.00 80.00 Enumerable.to_a
0.00 0.08 0.00 1 0.00 80.00 #toplevel
$ ruby -r profile -e 'test = Array.new(100000){|i| i}' % cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 1.15 1.15 1 1150.00 1150.00 Array#initialize
0.00 1.15 0.00 1 0.00 1150.00 Class#new
0.00 1.15 0.00 1 0.00 1150.00 #toplevel
そういえば、さっきの妄想君は死んだのか?
K&Rのサンプル集とか面白かったんで、これと似たようなサンプル(課題)を是非コミュニティーでやってください!お願いします!
ブロック使う方は毎要素でyieldしてるからその差じゃね?
>>782 Rubyのサンプルに限らず他言語でのサンプルをRubyで書いてみたらいいんじゃね
785 :
730 :2008/09/09(火) 17:09:44
大まかにrubyのことがわかってきたので自己テストのためにリバーシプログラム書いてみますね。
786 :
デフォルトの名無しさん :2008/09/09(火) 17:14:10
str="" str << x str .concat x ま、好きな方を使え。どうせ行き詰まるんだろうけどw
>>750 書籍 「Rubyレシピブック」 お勧め。
788 :
デフォルトの名無しさん :2008/09/09(火) 17:55:56
APIは熟読するぐらいに読まないと。
コード書いてるそばから一発でriやrefe2xでドキュメントを閲覧したり ソースコード上の定義やCによる実装に飛べるようなエディタの支援が無いとキツイな
790 :
730 :2008/09/09(火) 20:43:52
質問です ある変数が取り得る値の範囲をあらかじめ定めることは可能でしょうか? たとえば、代入時に0〜10までの値以外の値が代入されそうになったとき、 例外を発生させるようなメカニズムなど。
まずは初心者向けサイトで勉強したらどうよ?
792 :
デフォルトの名無しさん :2008/09/09(火) 20:56:53
>>790 ある変数て…
Ruby の変数には型がないって、このスレの今日の部分にも書いてあるよね
とりあえず、入門書を読んでみなよ
793 :
730 :2008/09/09(火) 21:04:08
>>792 それは理解しましたが、
私が聞きたいのは型に関することではなく(実質は型のようなものでしょうが)、
ヒューマンエラーで誤って100などの数字を代入しないよう、
安全な代入操作を行いたいだけなんです。
ヒューマンエラーで誤って100などの数字を代入しないために。
レヴェルの低いのがからんどるな
796 :
デフォルトの名無しさん :2008/09/09(火) 21:10:03
たぶんチンコがはえてないんだろw
797 :
730 :2008/09/09(火) 21:10:37
>>794 代入文を書く直前にif文を書かずに済む方法はありますか?
>>790 オブジェクトという言葉を一度も使ってないことが気にかかる
Rubyはすべてのものがオブジェクトだ
変数と呼ばれるものは、該当するクラスをnew(とか)して作ったオブジェクト(インスタンス)に名前を付けたものに過ぎない
変数という入れ物は存在しない
オブジェクトというものについて勉強することを勧めるよ
これを大まかにでも理解しないままRubyの勉強を進めるとか遠回り過ぎて気が遠くなる
で、回答は
「オブジェクトに登録するときのメソッドをフックする、または専用の登録用メソッドを作成する」
というのが一般的だと思われる
799 :
デフォルトの名無しさん :2008/09/09(火) 21:11:35
はよ初心者サイト行け
>>790 class C
def foo=(v)
raise if v < 0 || v > 10
@foo = v
end
def foo
@foo
end
end
o = C.new
o.foo = 11
>>794 if文知ってるとチンコはえてきますか?
802 :
730 :2008/09/09(火) 21:12:55
>>790 ローカル変数やインスタンス変数に入る値(=代入されるオブジェクトの内容)を、自動的に制限する方法は
基本的には存在しない。テストで頑張るのが常道
ただし、アクセサメソッドを上書きすることで
obj.parameter = 100
といった代入の形に限り、何らかの制限を行うことはできる
>>804 確かに、かなりの重症患者だろうな…
ラムダ使いも、度がすぎると全く未知の方法を編み出すんだろう…
>>790 言語レベルで規制はできない。
やりたかったら、不正な値ならraiseするんかな
>>806 そのへんは一応
>>798 ではある、んだが
Rubyにおける「変数のイレモノ」の実体はそれの指すオブジェクトだからな
他の言語における「変数作成時に何かしたい」は「オブジェクト作成・操作時に何かする」だろう
というか、他の言語での変数ってデータのカタマリを指すラベルのようなものじゃないのか?
>>790 の言語経験がわかんないよね。
アセンブリとかCOBOLとかperlとかかね。
案外Pythonとかhaskellとかバリバリ使ってるのに
釣りに来ただけだったりw
「変数には型がない。オブジェクトには型がある。」 といくら説明しても理解できない人にぶちあたると徒労感でいっぱいになる。
810 :
デフォルトの名無しさん :2008/09/10(水) 07:09:54
関数型言語使ってる人とは、これほどパラダイムが違うなんて思ってもみなかったは…
>>809 そりゃその2つの間には関連性は希薄だからな
並べられて説明されるほど混乱するのはあたりまえだと思う
オブジェクトについてのことを変数の文脈の「型」を絡めて説明するのは誤解招いてキケンだと思う…
メタ議論は他所でやれ
814 :
730 :2008/09/10(水) 12:57:05
オブジェクト指向でプログラミングするとバグ取りが大変ですね。 久しぶりにこの感覚味わいました。
Cだといくら難しくても構造体とポインタは避けて通れないからね…
文法レベルで躓く男の人って・・・
Perlだと、呼び出しの後に関数の定義があっても、きちんと認識してくれるのですが、 --------------------------------------------------- func(); sub func { print "in func"; } --------------------------------------------------- 以下、Rubyだとエラーが出ます。 --------------------------------------------------- func #=>undefined local variable or method `func' for main:Object (NameError) def func print "in func" end --------------------------------------------------- エラーを出さないようにするには、関数を呼び出しの前に書くしかないのでしょうか?
>>817 Rubyには関数はない
クラスやオブジェクトに関数があるということもない
メソッドのことを関数だと解説している本やサイトがあるなら晒せ
で、答はYES
クラスやメソッドの定義式の評価は実行時に行われる
実行時ということは1行目から順に実行されてるときということで、
つまり定義前のメソッドが書かれてた場合はエラーだ
まあぶっちゃけた話をするとすぐ慣れる
関数定義みたいに後ろに倉庫的にどっさりあったほうがすっきりするよねと思うことは今もあるが
お、何だ何だ
820 :
デフォルトの名無しさん :2008/09/10(水) 16:50:03
長い説明よりスクリプトの方にしてちょ
メソッドと関数の違いがわかりませんえん
822 :
デフォルトの名無しさん :2008/09/10(水) 17:03:25
>>818 そもそもオブジェクト指向というパラダイム自体不細工。
所詮は商業主義の世迷い事。
いかにも新しいことを考えましたよ、って言いたいがために新しい言葉を作っただけのこと。
本来はメソッドは関数と呼ぶべきだし、クラスも構造体と呼ぶべき。
825 :
デフォルトの名無しさん :2008/09/10(水) 17:52:18
>>823 型理論よりもちゃんとした理論体系が確立されているんですか?
間違いを通そうとして話をそらさないでくださいよ。
オブジェクト指向の次って何があるの?
>>825 そういう事は、それ系のスレかお前さんのブログでやってくれ。
Ruby のスレでオブジェクト指向のパラダイムを受け入れてるのは当たり前だろ。
変数とオブジェクトの違いも曖昧な奴に、オブジェクト指向を語れるのか?
>>827 と同じ意見だけど…
しかしよく釣れるスレだなw
830 :
デフォルトの名無しさん :2008/09/10(水) 18:26:42
>>826 エージェント指向とかアスペクト指向とか
832 :
デフォルトの名無しさん :2008/09/10(水) 18:32:57
なんだ厨房しかいないのかw
>>826 遅延評価、monad、arrow、pi-calculus
>>831 エイジェント指向ってのは一つのプログラムを作るための概念ではないよ。
もっとマクロな協調動作を目指したもの。
クラスタとかグリッドとかそっち方面の技術だよ。
技術ではなくて概念 か。
「能」という漢字を扱おうとすると必ず unterminated string meets end of file というエラーが出ます。どうしてでしょうか?
ほかの漢字のときは大丈夫なんです。 「芸能」がダメで、「芸」はOKなんです。
さあいますぐ 能 能\ それぞれをShift_JISで保存してバイナリエディタで開いてみるんだ
KENT様・・・
何で朝鮮人は嫌われてるんですか?
>>831 アスペクト指向はオブジェクト指向の二番煎じ。
ITバブル時代に新しい言葉を作ってビジネス機会を作ろうと企んだが失敗に終わりそうな概念です。
ほかにもajaxとかWEB2.0とか、いろんな言葉が作られて消えていきましたが、
全部商業主義的な目的から作られた物です。
この業界をかき乱すのもそろそろやめてほしい。
新しくも無いのにわざわざ特別な名前を与えていかにも新しくてすごそうに見えるように宣伝して儲ける手法。 全部誰かが裏で糸を引いているんじゃないかと思うほど手口が似ています。
>>844 あんたが「本物のプログラマ」だという事はよく分かったから、
お菓子好きの集まるこのスレにはこないでくれ。
>>844 ハスケルは学者ばかりですし、そっちではたくさん高級なメタ議論してますよ。
だからさ,スレ違いだしもう触れるな,っての
>>844 > アスペクト指向はオブジェクト指向の二番煎じ。
そうなの? 「MOP の二番煎じ」だとばかり思ってたんだが…
Web2.0が商業用語ってどんだけ 商業にすらなってないわ
>>850 今日のおまんこの締まり具合はどうですか?
852 :
730 :2008/09/11(木) 21:08:49
質問です シンボルを宣言するとき:hogeのように記述しますが、 「:」というのはメソッドなのでしょうか? 「:」のようなメソッドを宣言する方法を教えてください。
>>852 メソッドじゃない。
つーかいい加減マニュアル読めよ
854 :
デフォルトの名無しさん :2008/09/11(木) 21:30:26
RubyスクリプトがOut of memoryで終了してしまうんですが どこでメモリ消費してるのか調べるプロファイリングツールみたいのはありますか?
855 :
730 :2008/09/11(木) 21:33:41
Stringを作るための ' や Array を作るための [ と ] がメソッドじゃないのと同じようなもんだな
>>854 ruby -profile hoge.rb
ただし、これは死ぬほど重いので、rubygem の ruby-prof とかを使う
Out of memory は RubyMagick でよく見たなあ
861 :
730 :2008/09/11(木) 22:02:15
煽るような回答しかしてない人はわからないんですね、わかります。
何を聞きたいのかイマイチ不明。
864 :
730 :2008/09/12(金) 17:39:58
久しぶりにオブジェクト指向で設計とかやってみたんですが、 クラス図書いているとあれもこれも機能をつけたくなって、 後で拡張することを視野に入れながら考えていくときりがないですね。。 その点Haskellのストリームスタイルだと後付でも拡張できるから楽ですね。 まぁ、一長一短かもしれませんが。
日記を書きたいならチラシの裏に。
>>831 BASIC回帰
PC立ち上げるとBASIC
>>864 先に「物」がある「オブジェクト指向で設計」ってのは意味がない
って、信じてる連中も多数要ると思うよ
「カプセル化?」いらねっすよ… 「それよりも、おいらの行き先を…」 by Message
MatzってScalaについてどう思ってるの?
>>868 初心者スレでするべき話題なのかは置いとくとして
MatzにっきをScalaで検索すると少しわかるかもしらん
871 :
デフォルトの名無しさん :2008/09/12(金) 20:55:27
rubyの実装は、JITコンパイルなんですか?
873 :
デフォルトの名無しさん :2008/09/13(土) 00:35:34
キリン本のP158の「図8-4インスタンスとクラス、メタクラスの関係」が判りません。 各クラス=Classクラスのインスタンス、ではないのですか? Classクラスの特異インスタンスなので、細かくいうと、 Classクラスを継承した専用クラスのインスタンスと理解していたのですが、 この図はそれと全然異なっています。 それに、メタクラスの絡む部分では、クラス同士がinstanceofで繋がれています。これはどういう事?
キリン本がわかりません。
「メタクラス」というと理論的に響くけど、基本的には実装上の小細工に過ぎないかと
あんまり深く考えなくても 「各クラス=Classクラスのインスタンス」までの理解でとどめれば、実用上は十分な気がするんだが 何か困ることってあるのか?
そんな理解じゃクラスメソッドの継承が理解できんだろう
これを設計したMATZはもともと言語オタクだしなぁ… 確かに言語設計のセンスあるし実装とかも勉強になるよ。
>>878 ふうん。すごいね(棒)。ネット知識(笑)?
今日のまんこはお休み♪
>>879 でなんか目の前が開けた感じがします。
「クラス」あるいは「メタクラス」とかは概念上のものであって、
ここに書かれているのはすべてメモリに存在する具体的なオブジェクト。
http://d.hatena.ne.jp/m-hiyama/20080109/1199863428 でいうオブジェクトプレーンの図に相当。
というかそれよりさらに実装寄りで、
「継承」は単に「superclassスロットの中身」という程度の意味。
「instanceof」は単に「オブジェクトの型/クラス情報ポインタ」という程度の意味。
yurieからYapooへのinstanceofは普通の(オブジェクトとクラスの)instanceof概念だけど、
実際はyurieもYapooもオブジェクト。yurieの型情報がYapooであるというだけ。
Yapooから(Yapoo)へのinstanceofは、クラスとメタクラスのinstanceof概念。
実際はYapooも(Yapoo)もオブジェクト。Yapooの型情報が(Yapoo)であるというだけ。
YapooからCattleへの継承矢印は普通の(クラス間の)継承概念だけど、
実際はYapooもCattleもオブジェクト。YapooのsuperclassスロットがCattleを指してるというだけ。
(Yapoo)から(Cattle)への継承矢印はメタクラス間の継承概念だけど、
実際は(Yapoo)も(Cattle)もオブジェクト。(Yapoo)のsuperclassスロットが(Cattle)を指してるというだけ。
そう考えると、Classや(Object)あたりも、単にそういうもんかと受け入れられるようになりました。ほかの方もありがとうございます。
こうなってくると、やはりプロトタイプベースはすっきりしてていいなぁ、と思えてきますね。
ニフティが公開した3つのやつソースと機能ためしてたんだけど、 仕事で作成してあのレベルなのかい? と正直おもった。あれってどんくらい時間かけてつくったんだろうな。
>>886 ただの宣伝かと。
ソースを読まずに日経とかしか読まないおっさんたち向けの。
なるほどな。俺も あの『ニフティ』がつかってるRubyを客にだす仕事で使わせてください っていえるようになるかもな。今は、自分でシミュレーション用のプロトタイプつくるときに ちゃちゃっとつくって、動かしてみるくらいで、客の手にわたる段階では、べったりC/C++
>>889 なんか、性能が必要なジャンルの開発くさいが。
さすがにrubyでいいって言ってもらえるのは、
web系くらいじゃね?
>>890 Classと(Class)の使い分けに何かありそうだ、という程度までは把握した
速度よりむしろも堅牢さが必要な分野なんだが、 旧態以前とした、Cがメインの開発なんですよ。 現状では、自分だけRubyでプロト開発して、雰囲気や見えてなかった問題点 理解したあと、C/C++におきかえていってんです。 なんとか社内全体でプロトはRuby、性能要求満たしてくれてたら そのままRubyで仕上げ。どうしてもCっていうときはそれを使う、という雰囲気 になってくれたら、これ以上の幸せはないですよ。
馬鹿丸出しですね
>>893 堅剛性か。
ruby自体の堅剛性と言語としての安定性も問題ですな。
仕様ビシバシ替えてくれるし。
OS変るとrubyのバージョンが変わるから、
時前ソフトの評価のやりなおしが発生。
とか考えるとCのままがいいような気も。
>>895 > OS変るとrubyのバージョンが変わるから、
同じバージョン持ってきてコンパイルすりゃいいんじゃねぇの?
>>896 個人ならそれでいいけど。
その手間(誰がやるの顧客?)と
セキュリティアップデートとか追従考えると
普通は出来ないと思うよ。
>>893 の詳細がわかってないけど
サポートどうするとか色々考えると
Cのままに落ち着くんじゃないかな。
プロトやテスト用にruby使うのは、
使い捨てで構わないからすごい便利だけど。
納品して色々な品質問われるものには、どうなんでしょ?
って気がしてる。
>>896 処理系側に脆弱性が発見された場合、該当ヶ所を含んでいるとどうせ差し換えに…
納品用にrpmあたりのパッケージシステムに適合する物を作って配布すれば問題ない。
うちの会社だと、実際そうやってる客先は結構ある。
php の mb_convert_kana に相当するライブラリ(?)は無いんでしょうか。 (やりたいこと:片仮名⇔平仮名の変換) 自作するとバグが怖いんで、 実績あるものがあるなら使いたいのですが。
同じ要件満たしている Rubyでつくられたプログラムと Cでつくられたプログラム比べたら Cでつくったほうが致命的バグ多そうだけどね。
RubyがCで作られてることを考慮したら、とんでもないことになりそうですね
railsなんかも楽天みたく自社開発用に使うならいいけど 納品するような場合どうすんのかね。 特定の環境用に作って、それ使いつづけて下さい? メンテ契約を別にして運用される限り保守すんの? OSを替えたくなったら、評価と再構築で別契約? 機会ごとに金とれるなら結構いい仕事かもな
マッツは、リーナスみたく雇われ技術者で終わらずに、どこかの米大学に論文書いて学者になって研究者を目指せばいいのにね。
この人ってそういうの性に合わないからw
Matzは低学歴でまともな論文が"書けない"やつなんだよ。
linusも学者とは呼べないと思うな OSDLやtransmetaに雇われたこともあるし 実際には業務はあまりなくてlinuxの開発し続けられてる matzも楽天で同じなんでない? 多分二人は同類
しかしつまらんスレだな
910 :
899 :2008/09/13(土) 19:38:15
>>902 ありがとうございますー
nkf不慣れなんでサンプル助かりました
911 :
730 :2008/09/13(土) 20:11:32
質問です。 ruby-openglのライブラリにバグを見つけたのですが、 どこにどういう手段でパッチを送れば良いんですか?
納品した時点でよっぽど業務に影響のあるバグがないかぎり、 実行環境をかえることなんてないわい。 だから、Railsでもかんけーねぇよ。 CなんかDLLかわったら恐怖だぞ。gcc3に変わったときとか 新人がかってにCLIBバージョン入れ替えてそれはもうひどい目にあった。
>>912 DLLなんて、そん時はrubyもそれ以外も全滅だわ
3年してOSのサポートが切れたらどうすんだ?
リプレースはCならコンパイルしなおして評価して。
rubyは評価して、バージョン変ってるよガーン
作り直しだね。もういっぺん発注
とか簡単に逝くのか
普通OSも含めて納品状態固定なのだが。 新規OSに対応してくれ、っていうのなら、別料金は当然。
そうか、OSサポートが RHELで4年,Ubuntu LTSが5年なので、 客もこの期間だけ使うつもりでいるわけね。 安心した
>>911 ruby-dev MLかredmine.ruby-lang.org
失礼、opensslじゃなくてopenglか、そっちがよさそうね。
よくわからんが、C実装RubyをRubyだとおもっているやつがいるようだ。 RubyはRuby。現状まともなのがC実装しかみあたらないだけ。
でもマッツ(モルモン宗教)もリーナス(共産主義)も独自の思想というか史眼を持っていて かつ技術者としてのセンスもあるから、コミュニティのカリスマとしては大丈夫かな。 ただカリスマってのは一人っきりで大変だなって感じはする。 ゲイツとかジョブスに比べると、技術は上だけど世渡りは下になるのかなw
リーナスが共産主義って初耳だな
Javaでかいたらどこでも動く! バージョンうぷで見事に動かなくなる。 もう5年周期でシステム入れ替えだからなー 1億で20年という時代ではなく、500万x4回の時代。 Railsのじだいじゃまいか。
き弱性発見でVersionUp→システム動作せず→損害賠償→\(^o^)/
そもそも開発者であるのに、変更点のソースもみずにむやみにうぷする椰子らの木が試練 脆弱性のとこだけかえりゃいいのにな〜。 オプソ開発してたら、そりゃー常識。未だにTomCat3とかメンテさせられとるが、付き合い長い からソースの構造が頭にはいっとる。
>>924 upできるか判断して、
自前部分以外もメンテするなんて、
それはかわいそ過ぎ。
>>924 問題はそれでいくら貰えるのかだ。
その話を本当だとして、
お前さんの時間を新規開発に使わない事による損失を
埋めるだけの金を貰えてるのかどうか。
マイナーUPなら、新バージョンといれかえするのに毛がはえた時間+でわかりますよ。
>>927 1週間でやっつけるところを
2ヶ月分工数もらえればおいしい
という考えならありかな。
ちょいちょいとやって、後のテストやらは、
人海戦術担当にまかせて、自分は次のことやればいい
rubyってlispみたいな記法にした方が簡単になると思うんだ def check_state if @state == :DATA if eof? if @next_connection if @requests.empty? @state = :WAIT else @state = :META end end end end end (def check_state (when (and (= (@ state) :DATA) eof? (@ next_connection)) (set! (@ state) (if (@ requests empty?) :WAIT :META))))
ここで質問するかわからないですけど、聞いてみます。 Rubyの開発をしてる人ってどんな開発環境用意して開発してるんでしょう? ソース修正するたびに make make install して確認してるんですかね? それとも修正した箇所だけコンパイルやり直して実行する手段とかあるんですか? C言語の開発やったことないので気になりました。
それmakeの機能w
>>930 rubyに限った書き方ではないが
def check_state
return if @state != :DATA
return unless eof?
return unless @next_connection
@state = ( @requests.empty? ? :WAIT : :META )
end
良く見たらもっと縮むな 一行に納められるけど長すぎても読みづらいし、こんなとこか def check_state return unless @state == :DATA && eof? && @next_connection @state = ( @requests.empty? ? :WAIT : :META ) end
unlessに&&,||書かれると0.5秒くらい混乱するからやめて欲しい
オペランドが?や:を含む式で条件演算子使うと途端に見にくくなるな スペースあっても一瞬??ってなる
>>933 の方が圧倒的に判りやすいし綺麗で安全だろ。
馬鹿みたいに無駄なネストさせんな。
特にリソースの開放とかが必要でない限りは、 930みたいに、わざわざネストさせて書く必要が無い。ってか読みづらい 933か934を推したい
適度に&&で繋いだifが一番読みやすいだろ
>>933 はifとunlessと条件演算子が入り混じってて読みづらい。
>>930 はifの条件式が全て真で判断してて読みやすい。
というか圧倒的?というほど読みやすくなったとも思えない。
そもそも、@state == :DATA を @state != :DATAに書き換えてるけどこれじゃ意図が全然違うでしょ。
unlessと条件演算子を使いたいだけとちゃうんかと。
じゃあなるべく934みたいなものに慣れるわ ちなみに930のコードは昔のhttp-access2の一部ね 今どうなってるかわからんけど(dev.ctor.org落ちてるし^^;;)
つーかlispを目指さず素直に書いてください lispっぽく書きたいならlisp使え
で、結局お前等は if と unless をどう使い分けてるんですか? i) "!" を使うくらいなら unless を使う。 ii) 正常系は if だけ。異常系に飛ばす時は unless。 今まで見た事あるのは、これくらいなんだけど。
っつーか、どこがLispっぽいのかも判らない。
>>945 end
end
end
end
が))))と似てるから適当にパーザ組んでえいやって変換したら
>>930 の上から下のようになった(ここまできれいな形じゃなかったけど)から
もしかしたらもしかするかももしかして、と思って書いてみた次第でございましあt
>>931 ふつーmakeが依存関係をたどって必要なところだけコンパイルしてくれる。
(つか、makeというコマンドはそういうことを実現するために存在する)
あと、動作確認だけならインストールしなくてもmake testだけで事足りることが多い。
何らかの前提条件が成り立たなければreturn
そうでなければ何か計算して返す
という骨子に関しては、わかりやすいのは
>>934 だな。
俺は
>>948 ではないが補足すると
make test で動作確認などの必要なテストが一通り実行されるように、
あらかじめ作っておくことが多い。
unless は修飾子として使う if 〜 end の形で常用するのはちょっと変な感じ ひとつでも ! の否定が混じった場合は unless 禁止
unless使う位なら!使うなあ 人それぞれだろうが
untilも使ってね
unless ( cond0 && cond1 && cond 2) error 'foo!' end ... 例外と相性良さそうやね
unlessはif文の癖で読み間違う事が多くて使わない。
unlessが読みやすいとか言うのはCとかの経験が少ないにわかということですか
956はC脳なので、if(かswitch)で始まっていないと条件文だと認識できないということ?
if !((hoge && foo) || piyo) unless (hoge && foo) || piyo うーん・・・!()を美しくするより ちゃんとpiyo評価してくれる安心感のほうが好きかな じゃあ下もカッコで囲めやって感じだけど
unless が困るのは否定が挟まってるとき unless (!cond || param == '1') then とか即っと読めん
unlessなんて後ろに置く以外使わない
unlessの使用に好みがあるのはわかるんだが 誰もand/or/notを使ってないのはどういうことだ
そんな論理演算の基本をいきなり書いてどうした
unlessも限定的に使いたいとかね 全員C脳ってことだ
>>962 違う、なぜ&&を使ってandを使わないのかってこと
質問です windows xp上にactiverubyの1.8をインストールしてからgemでrailsもインストールしたのですが、ついでにsqlite3-rubyもインストールしようと gem install sqlite3-ruby を実行したのですが、以下のようなエラーがでてインストールに失敗しました。 無事インストールを完了するにはどうすればいいでしょうか? C:\Program Files\Microsoft Visual Studio 9.0\VC>gem install sqlite3-ruby Building native extensions. This could take a while... ERROR: Error installing sqlite3-ruby: ERROR: Failed to build gem native extension. D:/tools/programming/ruby/ruby-1.8/bin/ruby.exe extconf.rb install sqlite3-ruby checking for fdatasync() in rt.lib... no checking for sqlite3.h... no nmake Microsoft(R) Program Maintenance Utility Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. NMAKE : fatal error U1073: 'ruby.h' のビルド方法が指定されていません。 Stop. Gem files will remain installed in D:/tools/programming/ruby/ruby-1.8/lib/ruby/g ems/1.8/gems/sqlite3-ruby-1.2.4 for inspection. Results logged to D:/tools/programming/ruby/ruby-1.8/lib/ruby/gems/1.8/gems/sqli te3-ruby-1.2.4/ext/sqlite3_api/gem_make.out C:\Program Files\Microsoft Visual Studio 9.0\VC>
誰もすべてunlessで書けなんて思ってはいないよな?
>>862 && || と and or の使い分けの話かと。
Perlではこいつらを*分かって*併用することに対して文句言ってる人
見たことないんだけど、Rubyではたまに見かける気がする。
andって、ダサイくね? 予約語って感じがしない 長いし
>>964 yugui本に書いてたけど、&&とandじゃ優先順位が違うんでしょ。
自分は and, or, not 派です。
ソースが読みやすい。
何でandは∧ orは∨じゃないの?
andと||とか混在されたらアウトだな 優先順位とかわからんようになる まあ順位がわからなそうなら()で括くるように心がけてるが
で、初心者はどこいった?
>>958 後ろの式が省略されうるかってのは安心感とか言う問題ではないような…
式を括弧で囲んだからといって短絡評価されることににかわりはないよね。
rubyに限った話じゃないが、if式の方でもpiyoが実行される保証はないぜ。
andと&&の話をしている人が初心者です
>>965 > NMAKE : fatal error U1073: 'ruby.h' のビルド方法が指定されていません。
ActiveScriptRubyはコンパイルに必要なヘッダやライブラリが別パッケージになってたはず。
>>965 試してないけど gem install sqlite3-ruby --version '= 1.2.3'で動くんじゃね?
1.2.4はソースレベルの変更だからバイナリ配布しないってRubyforgeに書いてた。
>>974 できました!
どうもありがとうございます><
>>976 常にバイナリパッケージのみをインストールしたい場合はどのように設定すれば良いのですか?
さっさと字すれ
982 :
デフォルトの名無しさん :2008/09/14(日) 19:12:58
Matz 降臨!
今更ですが質問です なぜ「小飼弾のアルファギークに逢ってきた」にMatzが出てこないんでしょうか? 小飼弾とMatzって仲が悪いの?
リクエストしてみれば? 羽田-松江往復の飛行機代呉れたらやるよ、とか返事されるかも。
>>983 スレ違いだな
子飼いスレでも探して逝ってきな
オファーしたけどMatzが断わったとかいうネタなら
戻って来い
接点がほとんどないんじゃね? 片方はPerlどっぷりで片方はRubyどっぷりでしょ。知らないけど。
string = "ABCDE" len = string.length print "len"; これで「5」ってでてきて ほしいのですが、でてきてくれません。
自己解決しました string = "ABCDE" len = string.length print len; これで、できました。 ””ダブルクオーテーションで囲まなくてもいい、て 最初から言ってくれなきゃ困るじゃないですか。
>>988 多くのプログラミング言語では"len"と書かれると、
「len」としか表示されません。
なぜprintのあとだけセミコロンをつけやがるのか
;=EOF?
end
最初から言ってくれなきゃ困るじゃないですか。
>>993 お前はCOBOLをやってみろ。発狂するぞ。
その発狂する言語が現実にはRubyより需要があったりする ...って、この手の話題はスレ違いだな
out of memoryで落ちるのでメモリ消費してる箇所を調べたいんですがruby-profはプログラムが終了しないと結果を出してくれません なんか良い方法ないすか?
-pdebugでいいんでない?
998 :
デフォルトの名無しさん :2008/09/15(月) 03:07:37
釣り?
( ・ω・)Ruby狂信者がいなけりゃなぁ・・・・ 、_ノっ,wo 三 ( し'= ・`e ゙vv-vv"
1000?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。