Ruby 初心者スレッド Part 31
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/09/17(木) 17:31:07★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2009/09/17(木) 17:31:50Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
・「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2009/09/17(木) 17:32:33・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2009/09/17(木) 17:33:17・Rubyについて Part 37
http://pc12.2ch.net/test/read.cgi/tech/1251029267/
アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
Railsスレ
・【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
0005デフォルトの名無しさん
2009/09/17(木) 17:34:03・Ruby 初心者スレッド Part 30
http://pc12.2ch.net/test/read.cgi/tech/1249687283/
・Ruby 初心者スレッド Part 29
http://pc12.2ch.net/test/read.cgi/tech/1246593305/
0006デフォルトの名無しさん
2009/09/17(木) 17:37:51・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズとのハイブリッドなバージョン、初学者にこそお勧め
1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
0007デフォルトの名無しさん
2009/09/17(木) 17:38:55・Rubygem 0.x
極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
0008デフォルトの名無しさん
2009/09/17(木) 17:48:10>>6
> 1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい
ハッハッハ、こやつめ
0009デフォルトの名無しさん
2009/09/17(木) 18:00:13とりあえずrubyをインストールしてvimというテキストエディタから動かしたいのですが
自分なりにいろいろ調べてみたのですがわかりません・・・
おしえてください
よろしくお願いします
0010デフォルトの名無しさん
2009/09/17(木) 18:05:25素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ
0011デフォルトの名無しさん
2009/09/17(木) 18:07:34よろしくお願いします!
0012デフォルトの名無しさん
2009/09/17(木) 18:12:370013デフォルトの名無しさん
2009/09/17(木) 18:13:46そうだな、まずは使っているOSとインストールしたRubyのバージョンから聞こうか
00149
2009/09/17(木) 18:18:07すいません
使っているOSはWindos XP sp3 32bit?です
rubyはまだインストールしていません
こちらで聞いて教えてもらってやった方が確実だとおもったので
よろしくお願いします
0015デフォルトの名無しさん
2009/09/17(木) 18:23:57素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ
0016デフォルトの名無しさん
2009/09/17(木) 18:26:360017デフォルトの名無しさん
2009/09/17(木) 18:28:30最初はRubyistMagazineのページを見るといいかも。
ttp://jp.rubyist.net/magazine/?FirstStepRuby
以下引用
> Windows Me, 2000, XP, Vista (95, 98, 98SE)
> -------------------------------------
> 以下のサイトから ActiveScriptRuby の最新版をダウンロードしてインストールしてください。一番上からダウンロード出来るものをインストールして下さい。
> Windows 98 以前の Windows をお使いのかたは、あらかじめ Windows Installer 1.1 以上を入手しておく必要があります。
> ttp://www.artonx.org/data/asr/
> ActiveScript というものが何であるかを気にする必要はありません。
>>15
べつにVimでもいいんじゃない?どうもVimを使いたいという強いこだわりがあるようだし。
0018デフォルトの名無しさん
2009/09/17(木) 18:36:311. ActiveScriptRubyをインストールする
2. コマンドプロンプトを開く
3. notepad test01.rb
4. メモ帳が開くので、コードを書いて保存
5. ruby test01.rb
0019デフォルトの名無しさん
2009/09/17(木) 18:37:200020デフォルトの名無しさん
2009/09/17(木) 18:39:56Poderosa とあわせて結構快適だったんだが
vim っていっても gvim のことなんだろうし
0021デフォルトの名無しさん
2009/09/17(木) 18:45:06俺はCygwin入れるくらいなら仮想マシンにLinux入れるわ
00229
2009/09/17(木) 18:45:18ありがとうございます
やってみます
>>18
メモ帳じゃなくてgvimを使いたいので・・・
こだわりです
vimじゃなくてgvimでした
すいません
0023デフォルトの名無しさん
2009/09/17(木) 18:47:33どうでもいいがコードを書くときは全角じゃダメだぞw
00249
2009/09/17(木) 18:49:010025デフォルトの名無しさん
2009/09/17(木) 18:49:41すいません
0026デフォルトの名無しさん
2009/09/17(木) 18:55:32まずはがんばれ。
初心者がどういうところでつまづくかというデータは大変貴重なので、
気が向いたときに「こういうところでつまづいた」というレポートをお願いします。
00279
2009/09/17(木) 18:55:580029デフォルトの名無しさん
2009/09/17(木) 18:57:390030デフォルトの名無しさん
2009/09/17(木) 19:00:10vim自体の操作には慣れてるのか? >>9
って、プログラミング初心者でvimに精通とかないよな
こりゃ無理だと思ったら当初の目的(プログラミング)を思い出して
とりあえずは普通のテキストエディタに戻ってやることを勧めておく
00319
2009/09/17(木) 19:00:33クールな?アイコンないですか?
みなさんが使っているアイコンをおしえてください
真似します
0032デフォルトの名無しさん
2009/09/17(木) 19:02:120033デフォルトの名無しさん
2009/09/17(木) 19:04:17うちの環境では RDE は微妙に不安定なんで。
00349
2009/09/17(木) 19:04:35まったくなれていませんし知識もありません
テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
それだけです
自分はなんでも形から入る傾向があるのもあります
0035デフォルトの名無しさん
2009/09/17(木) 19:06:22gvimのダウンロードからrubyとの関連づけ?の手順をおしえてください
教えてばかりで本当にすいません
よろしくお願いします
0036デフォルトの名無しさん
2009/09/17(木) 19:07:18ttp://jp.rubyist.net/magazine/?FirstStepRuby
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> ttp://jp.rubyist.net/magazine/?0002-FirstProgramming
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。
>>9よ、これやってみない?『プログラミング自体の初心者を対象にしている』そうだから、
これを読んでわからなかったことを報告してもらえたら、
この記事の改善点として誰かがとりあげてくれるかもしれない。
0037デフォルトの名無しさん
2009/09/17(木) 19:07:25RDEはどの環境でもだいたい不安定だよ
0039デフォルトの名無しさん
2009/09/17(木) 19:09:32「Ruby IDE」でぐぐってみよう。
Java製のならVistaでも動くと思う。
0040デフォルトの名無しさん
2009/09/17(木) 19:10:37たぶん、vimがいかに初心者に厳しいかを知らないのだろう。
悪いことは言わん。vimはhello worldができるようになってからにしておけ。
0041デフォルトの名無しさん
2009/09/17(木) 19:12:2500429
2009/09/17(木) 19:12:2900439
2009/09/17(木) 19:13:57真剣にやってます
0044デフォルトの名無しさん
2009/09/17(木) 19:14:21vim Part3
http://pc12.2ch.net/test/read.cgi/software/1224769266/
00459
2009/09/17(木) 19:17:58うまく動いてくれたようです
0046デフォルトの名無しさん
2009/09/17(木) 19:22:21別物。似てるけど。
RubyistMagazineがActiveScriptRubyをお勧めしている以上、そっちをインストールしたほうがよい。
>>34
>テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
>それだけです
そんな理由でgvimを選んだやつはまちがいなく挫折する。
gvimは敷居が高すぎるから初心者はやめておけ。
00479
2009/09/17(木) 19:29:16わかりました
gvimは敷居が高いですか・・・
ttp://skitch.com/soh335/bi14a/quickrun-ruby-vim
こんな感じでやりたかったのです
ただかっこいい
それだけです
0048デフォルトの名無しさん
2009/09/17(木) 19:39:11これはMacのターミナルではないか?
ターミナルは半透明に出来るのでデスクトップピクチャ(壁紙)の猫が
透けて見えている。
0049デフォルトの名無しさん
2009/09/17(木) 19:45:19初心者がWindowsで使うなら、エディタとしては秀丸やxyzzyでいいんじゃないかな。
これなら初心者でも使えるし、習熟するにつれて強力にカスタマイズもできるし。
gvimはほんとのプロフェッショナル向け。プロが作業を極めるための道具であって、初心者が手を出す代物ではない。
00519
2009/09/17(木) 19:48:37xyzzyもいいですね!
これなら初心者も使えるとのことなのでこれでお願いします
インストールから環境設定までおしえてください
よろしくお願いします
0052デフォルトの名無しさん
2009/09/17(木) 19:49:330053デフォルトの名無しさん
2009/09/17(木) 19:51:08xyzzyも自分でなんとかする人じゃないと相当難儀だぞw
0054デフォルトの名無しさん
2009/09/17(木) 19:53:29こちらはいたって真剣なのですが
0056デフォルトの名無しさん
2009/09/17(木) 19:58:39xyzzy駄目だろ
まさかvim使えないような奴に最初からgates.l入れさせる気か
着色と自動インデントさえされればなんでもいいはずだ
0057デフォルトの名無しさん
2009/09/17(木) 20:02:40自分のスレを読み返してごらんよ
Ruby よりエディタへの言及の方が多いよ
0058デフォルトの名無しさん
2009/09/17(木) 20:10:310059デフォルトの名無しさん
2009/09/17(木) 20:11:36ひととおり色設定をいじって遊んでみることだと思う。
0060デフォルトの名無しさん
2009/09/17(木) 20:12:14というか、vimをNGワードにするのが適切だな、こりゃ。
0062デフォルトの名無しさん
2009/09/17(木) 20:45:34エディタを語るにはきみはまだ若い。
00639
2009/09/17(木) 21:00:39わかりました
質問があります
hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・
どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
今まで検索していたのですがnotepad++というエディタがありました
画面の色とか文字の色とか適当にいじって変えてます
gvimやxyzyyはまだまだ先のような気がします
かなり上級者向けのようです
でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・
0064デフォルトの名無しさん
2009/09/17(木) 21:03:13> どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
Ruby関係ないのでコマンドプロンプトの使い方勉強しろ
ディレクトリ移動関連の最低限必要なことは10分もあれば終わる
0065デフォルトの名無しさん
2009/09/17(木) 21:16:20UNIXからMSに移植されたツールは、とても多い。
sed,grep,awkとかね。
今でも、とても役に立ちますね。
MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。
MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。
(このあたりが?の人は考古学者になったつもりで調査すべし)
結局、これは商業的な成功はなかったみたいですね。
INT21のせいだと思うのですが、とても遅かったのですよ、表示が。
ん、眠くなったので、続く
0066デフォルトの名無しさん
2009/09/17(木) 21:21:170067デフォルトの名無しさん
2009/09/17(木) 21:33:14>質問があります
>hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
>いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・
>どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
質問の意味がわからない。どんなエラーがでるの?
0068デフォルトの名無しさん
2009/09/17(木) 21:38:36いやそれはそのまんまだろ
コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ
例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話
つまりはディレクトリの概念と操作の勉強が要る
00699
2009/09/17(木) 21:42:57コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから
はじめることはできませんか?
今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません
>>68
ruby: No such file or directory -- hello.rb (LoadError)
00709
2009/09/17(木) 21:47:06コマンドプロンプトから自作ファイルを実行するときは
ruby ○○○.rb 実行とするだけで動くようにはできませんか?
今の環境でこれをすると
ruby: No such file or directory -- hello.rb (LoadError)
と表示されてしまいます
ruby c:\src\hello.rb 実行とすれば動いてくれるのですが
0071デフォルトの名無しさん
2009/09/17(木) 22:09:11mingw使いはバイナリを上げられんではないか
0072デフォルトの名無しさん
2009/09/17(木) 22:27:100073デフォルトの名無しさん
2009/09/17(木) 22:27:36そういうことはできるのかな。わかんない。
移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。
(1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く
(2) 「コマンドプロンプト」ショートカットをデスクトップにコピー
(3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ
(4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す
(5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる
>>68
おまえかしこいな。おれはさっぱりわからんかった。
0075デフォルトの名無しさん
2009/09/18(金) 04:52:49NetBeansオススメだぜ。
俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、
仕事のプロジェクトはNetBeansと使い分けてる。
>>69
"Command prompt from here"いれろ。ぐぐったらでてくる。
エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。
0076デフォルトの名無しさん
2009/09/18(金) 11:27:41すでに解決しております
ありがとうございます
またお願いします
0078デフォルトの名無しさん
2009/09/18(金) 12:12:53コテつけてくれるのはありがたい。
さ、NGにしよっと。
0079デフォルトの名無しさん
2009/09/18(金) 12:19:14S/Nが低下し過ぎ。
これがつづくと、だれもこのスレをみなくなって
質問しても答えてくれる人がいなくなってしまう。
0080デフォルトの名無しさん
2009/09/18(金) 12:20:16まあ気長に頑張れ
>>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを
買った読んで方がいいぞ
0081見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 12:23:09>>79
気をつけます
すいません
S/Nってなんですか?
>>80
ありがとうございます
入門書は買うつもりです
PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです
0082デフォルトの名無しさん
2009/09/18(金) 12:25:500084デフォルトの名無しさん
2009/09/18(金) 12:38:37どうして存在を認めて名前で呼ぶの
0085デフォルトの名無しさん
2009/09/18(金) 12:55:44むしろ、初心者がどこで躓くのかを俺は知りたい。
0086デフォルトの名無しさん
2009/09/18(金) 13:01:55それを知りたいならこの板全部読め
全部載っている
0087デフォルトの名無しさん
2009/09/18(金) 13:04:19S/Nでぐぐった?
人に聞く前に自分で調べようって話
0089デフォルトの名無しさん
2009/09/18(金) 13:31:000090デフォルトの名無しさん
2009/09/18(金) 13:33:00いい加減なことを言うなよ
検索結果の最上位にずらっと並んでいるだろ……
というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ
0091デフォルトの名無しさん
2009/09/18(金) 13:35:52各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?
0092デフォルトの名無しさん
2009/09/18(金) 13:36:55それは書き方間違ってるだけです
エラーの理由がそのまんまです
[1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで
再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください
0093デフォルトの名無しさん
2009/09/18(金) 13:37:14意図せず nil に対して each を呼んでいる
コードを張れ
0094デフォルトの名無しさん
2009/09/18(金) 13:39:53オブジェクトにeachを持ってるか判断がいるのですか?
ちなみに下記コードで出ました
def treeRecur(activeCell,tree,hier,refCellName)
hier+=1
refCellName[activeCell].each{|activeRefCell|
tree << [activeCell , hier , activeRefCell]
treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end
activeCellはString
treeは配列
hierは数値
refCellNameハッシュになってます。
それで:87:in `treeRecur'となってるのでtreeRecurが再帰できないのかと思ったのですが
0095デフォルトの名無しさん
2009/09/18(金) 13:49:58よくわからないけど停止条件が見当たらないよ
0096デフォルトの名無しさん
2009/09/18(金) 13:50:01再帰したときにrefCellNameがnilになっています
(最初に呼び出された時は正しいデータが入ってました)
再帰したらrefCellNameのデータってnilになるものなんでしょうか?
0097デフォルトの名無しさん
2009/09/18(金) 13:51:29停止はrefCellName[activeCell]の中が空になったときです
0098デフォルトの名無しさん
2009/09/18(金) 13:53:34> 停止はrefCellName[activeCell]の中が空になったとき
refCellName[activeCell] が空になったら再帰から抜ける、という部分の
コードが見当たりませんが?
それと、空になるとはどうことだと理解してますか?
0099デフォルトの名無しさん
2009/09/18(金) 13:54:14あと LCC は氏ね
空のハッシュに特定のキーを指定した場合の返り値は nil だ
とりあえず停止条件は明記しろ
def treeRecur(activeCell,tree,hier,refCellName)
hier+=1
refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|
tree << [activeCell , hier , activeRefCell]
treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end
0100デフォルトの名無しさん
2009/09/18(金) 13:59:21いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass
each のレシーバが nil だっていうエラーだから
refCellName[activeCell] が nil のはず
どうしてそれが nil になるのかはよくわからん
refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって
それと干渉してるんじゃないの?
0101デフォルトの名無しさん
2009/09/18(金) 14:00:19わかりました。
eachはnilはエラーを返すのですか
def treeRecur(activeCell,tree,hier,refCellName)
hier+=1
if refCellName[activeCell] == nil
return
end
refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|
tree << [activeCell , hier , activeRefCell]
treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end
こうしたら動きました。2日前までperl中でして,perlはこれでも動くからできるかと思ってました。
0102デフォルトの名無しさん
2009/09/18(金) 14:04:24停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる
0103デフォルトの名無しさん
2009/09/18(金) 14:05:54「NilClass に each メソッドが定義されていない」と認識するべき
レシーバが nil だからではない
nil.to_s は NilClass#to_s が定義されているからエラーは出ない
空文字列を返す
0104デフォルトの名無しさん
2009/09/18(金) 14:08:36なるほど
納得しました。クラスごとに定義が必要でnilにはなかったと
ありがとうございました
0105デフォルトの名無しさん
2009/09/18(金) 16:25:12>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。
0106デフォルトの名無しさん
2009/09/18(金) 16:30:370107デフォルトの名無しさん
2009/09/18(金) 16:40:08「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る
スレ違いな質問(S/Nとか)はよそに行け
加えて言うと、調べる気がなさそうな人間に対しては
いくらマゾヒストでも親切でも教える気になれんよ
人力検索サイトに行け
0108見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 16:52:14右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが
アクティブ?の状態になっておらず変更できません
どうすればいいですか?
よろしくお願いします
>>106
ちがいますw
0109デフォルトの名無しさん
2009/09/18(金) 17:33:05>加えて言うと、調べる気がなさそうな人間に対しては
>いくらマゾヒストでも親切でも教える気になれんよ
回答したいやつが回答すればいい。
回答したくないやつは黙って無視しとけばいい。 ここはもともとそういう場所。
調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。
その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。
0110デフォルトの名無しさん
2009/09/18(金) 17:33:55Windows関連のスレで聞いたほうがいいかも。
0112デムパゆんゆん
2009/09/18(金) 18:11:390113見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 19:16:05でも作業フォルダにはこれと同じファイルがありません
意味がわからないのですが・・・
どういうことですか?
0114デフォルトの名無しさん
2009/09/18(金) 19:19:55ruby本体だって作業フォルダにないだろ。それと同じだよ
環境変数PATH、コマンドプロンプトとかでググってみたら
0115見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 19:21:22ボクの説明が悪いです
すいませんね
0116デムパゆんゆん
2009/09/18(金) 19:28:290117見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 19:32:360118デフォルトの名無しさん
2009/09/18(金) 19:34:49通じてないと思うのならあやまる前に通じさせる努力をしてくれよw
何がわからなくて何を知りたいのか、回答者が推測しなければならないような
質問はよくない、というかかなり損してるよ
0120見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 20:01:57こんな感じでよろしいでしょうか
OSはwindows xp sp3 32bitです
rubyはActiveScriptRubyの最新版1.8.7をインストールしています
デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません
自分なりにいろいろがんばってみたのですが力不足のようです
もし知っている方がいらっしゃいましたらご教授いただければ幸いです
ご指導の程よろしくお願い致します
0121デフォルトの名無しさん
2009/09/18(金) 20:17:33その話はWindows板で回答待ちじゃないのか?
>>113-114の流れはおかしくないと思うが、直後に>>115,120となる意味が分からん
0122見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 20:22:410123デフォルトの名無しさん
2009/09/18(金) 20:23:53Windows板で回答待ちの質問をこっちに持ってくるなよ
向こうの住人に失礼だぞ
0124見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 20:24:29聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの
0125デフォルトの名無しさん
2009/09/18(金) 20:27:32WIN32APIでも叩けば「可能かもしれない」。
俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。
Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど
スレ違いだから出て行けって言われてる。
0126デフォルトの名無しさん
2009/09/18(金) 20:29:36>スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
>でも作業フォルダにはこれと同じファイルがありません
>意味がわからないのですが・・・
意味が分からないのはキミの質問のほうだな。
Windowsがないから正確なことはわかんないけど、
「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」
の中に「ruby console」というのがある、ということがいいたいのか。
しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。
再提出!
0127見習い ◆YG1xRh8M6Ffb
2009/09/18(金) 20:29:54えらいたいそうなことやね
あきらめますわ
ありがとう
0128デフォルトの名無しさん
2009/09/18(金) 20:39:342. パスを通す
3. 普通にコマンドプロンプトを使う
0129デフォルトの名無しさん
2009/09/18(金) 20:45:02ルビー使いたいなら教祖も使ってるデビアン推奨。
0130デフォルトの名無しさん
2009/09/18(金) 20:45:180131デフォルトの名無しさん
2009/09/18(金) 20:46:540132デフォルトの名無しさん
2009/09/18(金) 20:48:45GRScript18.dllのリソースを書き変えたらいいんかな
真面目な話、アイコンをartonに送るというのが真の解決法だ
0133デフォルトの名無しさん
2009/09/18(金) 21:09:340134デフォルトの名無しさん
2009/09/18(金) 21:29:210135デフォルトの名無しさん
2009/09/18(金) 22:20:56アドバタイズショートカットなめんな
0136デフォルトの名無しさん
2009/09/18(金) 23:19:34日本語がおかしいし、いくら初心者でもこれはないだろ。
あるいはリアルに小学生なのか。
0137デフォルトの名無しさん
2009/09/18(金) 23:25:08↑のように、配列の配列の2番目の要素だけ2倍にしたい
ときはどのように描けば短くかけますか?
0138デフォルトの名無しさん
2009/09/18(金) 23:29:04Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば
いちいち他人に聞かなくても一発で書き下せる
特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ
0139デフォルトの名無しさん
2009/09/18(金) 23:36:38とてもRubyらしく書くとこうなる
L = [ [1,2,3],[4,5,6],[7,8,9] ]
for e in L do e[1] = e[1] * 2 end
0140デフォルトの名無しさん
2009/09/18(金) 23:38:18この 4つのクラスのメソッドの動作が頭に思い浮かべられるようになると、
Ruby スクリプトを書くのにかかる時間が一気に半分以下になる
てか、それこそ each じゃ駄目なん? めっちゃ短いと思うんだけど
arr = [ [1,2,3],[4,5,6],[7,8,9] ]
arr.each{|a| a[1] *=2}
p arr
0141デフォルトの名無しさん
2009/09/18(金) 23:50:05非破壊的にやるとすればどうする?
0142デフォルトの名無しさん
2009/09/19(土) 00:01:54L1 = [ [1,2,3],[4,5,6],[7,8,9] ]
L2 = Marshal.load(Marshal.dump(L1))
for e in L2 do e[1] *= 2 end
>>139ともども本当にごめんなさい
0143デフォルトの名無しさん
2009/09/19(土) 00:01:59言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0144デフォルトの名無しさん
2009/09/19(土) 00:01:590145デフォルトの名無しさん
2009/09/19(土) 00:28:11なるほど。ありがとう。
0146デフォルトの名無しさん
2009/09/19(土) 00:33:02方言わらたw
0147デフォルトの名無しさん
2009/09/19(土) 00:52:29初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。
しかも冗談としてもつまんないし。
0148デフォルトの名無しさん
2009/09/19(土) 06:34:590149デフォルトの名無しさん
2009/09/19(土) 07:11:56君の釣りはつまらない
Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ
0150デフォルトの名無しさん
2009/09/19(土) 07:48:50なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか
0151デフォルトの名無しさん
2009/09/19(土) 08:07:50dup で済むというのは
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr2 = arr.dup
arr2.each{|a| a[1] *=2}
p arr
これが [[1, 2, 3], [4, 5, 6], [7, 8, 9]] を表示するようなことを言う
ネストした配列のような参照だらけのオブジェクトの完全な複製を作る手段は
プリミティブなオブジェクトを見つけるまで深く潜って dup することだが
これをほぼどんなオブジェクトに対しても自動で(結果として)行う一般的な手法が dump して load
事前情報(配列の配列の要素がプリミティブである)を利用して決め打ちで手動で行ったのが>>144
そんだけ
どちらも特段変ではない
初心者向けでないとして突っ込みが入ったのは for と定数のほうだな
0152デフォルトの名無しさん
2009/09/19(土) 08:17:24だったら>>142の段階で簡単な説明をつけましょう。
なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。
ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。
スレの趣旨を理解しましょう。
151が142と別人だったらごめんね。
0153デフォルトの名無しさん
2009/09/19(土) 08:32:23別に「Marshal使ってるオレかっこいい」じゃないだろw
Ruby本でも書かれるような一般的な小技なんだろ
まあ上でも言われてるが初心者にネタを見抜けってのはきついから
ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが
0154デフォルトの名無しさん
2009/09/19(土) 08:37:29知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
ttp://www.ruby-lang.org/ja/man/html/Object.html#footnote-1
知っていることも使用することも問題は特段存在しない
Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ
0155デフォルトの名無しさん
2009/09/19(土) 08:39:34なんで Object には deep copy のためのメソッドがないのかな?
サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか
0156デフォルトの名無しさん
2009/09/19(土) 08:56:27実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる
marshal.のソース流用しようとするとT_DATAであっぴゃーになる
dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ
基本、ディープトラバースして欲しくないらしいぞ
Rubyで提供されてるディープトラバース手段はMarshalだけだ
Marshalできないやつはそもそも複製できんオブジェクトだったということで
0157デフォルトの名無しさん
2009/09/19(土) 09:23:290158デフォルトの名無しさん
2009/09/19(土) 09:30:36>知っていることも使用することも問題は特段存在しない
問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。
0159デフォルトの名無しさん
2009/09/19(土) 09:39:280160デフォルトの名無しさん
2009/09/19(土) 09:40:25説明はされた
0161デフォルトの名無しさん
2009/09/19(土) 09:56:200162デフォルトの名無しさん
2009/09/19(土) 11:16:12あとからな。ここでいっているのは、最初の>>142の時点で何の説明もないことだろ。
0163デフォルトの名無しさん
2009/09/19(土) 11:26:23そこは全く問題ないだろ
forの方を言うならまだわかるが
0164デフォルトの名無しさん
2009/09/19(土) 11:33:22>>147が>>139,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら
その場で「Rubyでforは滅多に使わねえよカスeach使え」
「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」
「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき
0165デフォルトの名無しさん
2009/09/19(土) 11:45:020166デフォルトの名無しさん
2009/09/19(土) 12:02:02160先生の次回作をお楽しみに。
0167デフォルトの名無しさん
2009/09/19(土) 12:05:260168デフォルトの名無しさん
2009/09/19(土) 12:06:17説明がないと思ったなら他の人が説明するもよし
分からなきゃそれを質問するもよし
だろう
0169デフォルトの名無しさん
2009/09/19(土) 13:40:16ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ
0170デフォルトの名無しさん
2009/09/19(土) 13:44:38あやまるならforとか定数とか変に使ったことをあやまってくれよw
まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね
0171デフォルトの名無しさん
2009/09/19(土) 13:58:090172デフォルトの名無しさん
2009/09/19(土) 14:23:19"[hoge]".sub(/\[(.+?)\]/){$1}
なんかじゃなくて、なんかもっとスマートな方法はありませんか?
0173172
2009/09/19(土) 14:26:22"[hoge]".split(//)[1...-1].join
も無しの方向で。
0174デフォルトの名無しさん
2009/09/19(土) 14:28:010175デフォルトの名無しさん
2009/09/19(土) 14:36:42そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ
str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1
開きカッコの対応を取るライブラリは標準では無いので自作してくれ
0176デフォルトの名無しさん
2009/09/19(土) 14:38:04とCマガで大昔に読んだけど、最近の拡張しまくりのだと可能かもなー。
0177デフォルトの名無しさん
2009/09/19(土) 14:48:30てないよな。
0178デフォルトの名無しさん
2009/09/19(土) 14:51:08その手があったか
"[hoge]".chop.reverse.chop.reverse
0179デフォルトの名無しさん
2009/09/19(土) 14:52:59ちょwwwwwプwwwww
0180デフォルトの名無しさん
2009/09/19(土) 14:54:210181デフォルトの名無しさん
2009/09/19(土) 17:26:080182デフォルトの名無しさん
2009/09/19(土) 20:20:22○ほお
0183デフォルトの名無しさん
2009/09/19(土) 20:28:43"[hoge]"[/\[(.+?)\]/, 1]
とも書ける。
>>175
Onigurumaならできるはず。
0184デフォルトの名無しさん
2009/09/19(土) 21:00:130185デフォルトの名無しさん
2009/09/19(土) 21:06:160186デフォルトの名無しさん
2009/09/20(日) 05:42:36けっこう不便なんですけど。
0187デフォルトの名無しさん
2009/09/20(日) 05:58:31リファレンスを見たらわかることではないでしょうか?
0188デフォルトの名無しさん
2009/09/20(日) 06:35:34>>186
require が真偽値を返すメソッドとして作られているから、がいちおうの答
複数受け取ったときは真偽値の配列を返すようにしてもいいんだけど、おおむねキモい
each で回してもいいはずなんだけど、そういう人はなぜか見ないね
0189デフォルトの名無しさん
2009/09/20(日) 06:46:28false が返ってきたほうが便利だということでお流れになったんでなかったかな
0190デフォルトの名無しさん
2009/09/20(日) 07:50:000191デフォルトの名無しさん
2009/09/20(日) 08:22:58FakeWeb 1.2.6 API Documentation
http://fakeweb.rubyforge.org/
FakeWeb使ったらいけるかも…
0192デフォルトの名無しさん
2009/09/20(日) 11:46:120193デフォルトの名無しさん
2009/09/20(日) 11:51:53それはRubyで作った2chブラウザのテストですか?
0194デフォルトの名無しさん
2009/09/20(日) 12:34:04>>188
なるほど!たしかにrequireは戻り値がありますね。でも戻り値を気にする場面っていうのはまれなので、
そういう理由で複数の引数を指定できないのはちょっと勿体ないですね。
Railsとかには require_all というのがあるそうなので、戻り値を気にしなくていいから
引数を複数とれるバージョンのrequireを、requireとは別に用意してほしいなと思いました。
0195デフォルトの名無しさん
2009/09/20(日) 12:34:370196デフォルトの名無しさん
2009/09/20(日) 12:59:39なければ自分で作るという選択肢ももとう
0197デフォルトの名無しさん
2009/09/20(日) 13:01:420198デフォルトの名無しさん
2009/09/20(日) 16:09:37..  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/\(<●>)/\ /\(<●>)/\
/\(<●>)/\ /\(<●>)/\
/\(<●> )/\ \(<●>)/\
/ \\(<●>)/\
/ ,ゝ===く <●>)/\
! γ `ヾ,_ \
│ :く( r,J三;ヾ )> \
l =; {三●;= } ,=ニ l
ヽ ゝ≡三=イ / <>>1ワロタw
ヽ .,,,. /.|
ヽ 'ぐ'''''''' / / ト,
ヽ. ヾ''" / / |ヽ
,./ヽ `´ / ./ \、
-‐ '''"  ̄ / :| \,,,__,,,, / / | `'''‐- 、.._\
0199デフォルトの名無しさん
2009/09/20(日) 16:17:33<form action="syasinhenkou.rhtml" method="post" enctype="multipart/form-data">
<input type="file" name="syasin" size="30" maxlength="100">
<input type="hidden" name="id" value="<%= cgi["id"] %>">
<input type="submit" value="登録">
</form>
ってかんじで、ファイルを登録用のページにおくりたい
sql = "UPDATE rireki SET"
sql += " syasin = '" + cgi["syasin"] + "'"
sql += " WHERE id = '" + cgi["id"] + "'"
sql += ";"
my.query(sql)
受け側はこんな感じで書いてみた。
IDのところに変な文字列が入ってアップデートされないいのだけど
enctype="multipart/form-data"のオプションのせいだよね。
ファイルを送るときは、このオプションがいるみたいだけど
どうしたらいいかな?
DB側のidがキーで文字列、syasinがBLOB型でやってる
これでDBにファイルが送れるのかもよくわからんのだけど
教えてくれるとありがたいです。
0200デフォルトの名無しさん
2009/09/20(日) 17:25:56idの所が変になるんじゃなくて、cgi['syashin']以降が変になってるはず
blobとかのバイナリオブジェクトは文字列の連結でSQLを作れない
プリペアードステートメントとかを使え
0201デフォルトの名無しさん
2009/09/20(日) 17:56:530202デフォルトの名無しさん
2009/09/20(日) 18:41:08空文字列ちゃうん?
>> "a".split(/a/)
=> []
>> "aa".split(/a/)
=> []
>> "ab".split(/a/)
=> ["", "b"]
0203デフォルトの名無しさん
2009/09/20(日) 18:43:58[""]
0204デフォルトの名無しさん
2009/09/20(日) 18:57:36%w(lib0 lib1 lib2).each{|feat| require feat}
でいいじゃん
0205デフォルトの名無しさん
2009/09/20(日) 19:12:10新リファレンスマニュアルから抜粋
> instance method String#split
> split(sep = $/, limit = 0)
> 第 2 引数 limit は以下のいずれかです。
> limit == 0
> 分割個数制限はなしで、配列末尾の空文字列を取り除く
> limit < 0
> 分割個数の制限はなし
「配列末尾の空文字列を」いくつあっても全部「取り除く」ってことなんだろうな多分
それがデフォルトの動作である理由は知らん
0206デフォルトの名無しさん
2009/09/20(日) 19:23:06こんなん知らへんかったがな。おーきに
理由は実装上の都合なんやろなぁ
0207デフォルトの名無しさん
2009/09/20(日) 19:33:54Perlがそうだった理由は知らん。
0208デフォルトの名無しさん
2009/09/20(日) 22:23:37web上では関西弁禁止だよ?知らないな?他の方言ならいいけど
0209デフォルトの名無しさん
2009/09/20(日) 22:53:07syasinじゃなくてphotoとかpictureつかえ
0210デフォルトの名無しさん
2009/09/20(日) 23:01:59ぐぐってみたけど、上級者向けの説明しかなくてさっぱりでした。
例:Fiberはいわゆるコルーチンです。←コルーチンが何かわからないからさっぱり理解できない説明
高校生でもわかるような説明をどなたかお願いできますか。
0211デフォルトの名無しさん
2009/09/20(日) 23:13:30Ruby/MySQLではプリペアードステートメントつかえない?
MySQL/Rubyじゃないとだめ?
0212デフォルトの名無しさん
2009/09/20(日) 23:17:15Threadなくなったわけじゃないし、上級者(地雷踏み?)向けの機能だから忘れていいよ
否定的なこと言われてるし
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31601
0213デフォルトの名無しさん
2009/09/20(日) 23:58:30こんなのもある
http://d.hatena.ne.jp/tmtms/20090729/1249183003
0214デフォルトの名無しさん
2009/09/21(月) 00:21:13出来るみたいだけど使ってないんで確認はしてない
ttp://planet.mysql.com/entry/?id=18088
stmt = my.prepare("select ?,?")
stmt.execute 123, "abc"
stmt.fetch # => [123, "abc"]
0215デフォルトの名無しさん
2009/09/21(月) 00:43:010216デフォルトの名無しさん
2009/09/21(月) 00:58:240217デフォルトの名無しさん
2009/09/21(月) 01:37:34プリペアードステートメントは
MySQL/Rubyをいれて解決した
あとは、ファイルのアップだけど
st = my.prepare("UPDATE rireki SET syasin = ? WHERE id = ?")
st.execute(cgi["syasin"].read,cgi["id"].read)
res = st.fetch
って書いてみたところ、MySQLのほうから
2053
Attempt to read a row while there is no result set associated with the statement
って怒られた・・・・BLOBだとだめなんか?
こんなところで詰まってるようだと、表示にもてまどりそう
っていうか、表示できるのか?
0218デフォルトの名無しさん
2009/09/21(月) 03:42:410219デフォルトの名無しさん
2009/09/21(月) 04:02:16エラーメッセージの意味はわかる?
SQL文を実行したけどresult setが返されなかった、なのに行を読み込もうとしてエラーになっている、という意味。
SQLをみるとupdate文を実行しているよね。だからresult setは返ってこない。なのに st.fetch しようとしているからエラーになっているだけ。
これがselect文だったらfetchできるけど。
0220デフォルトの名無しさん
2009/09/21(月) 11:47:02SERECTしたらはいってた〜〜!!
ありがと〜〜!!!
表示のほうも、相談にのってください
格納したデータを
<img src="data:image/jpg;base64,/9j/4AAQ....中略.....">
って感じには表示できるのですが
これだとIE6では見れない。
エンドユーザにFF入れろとか言えないし
IEでも表示させる方法ありますかね?
0221デフォルトの名無しさん
2009/09/21(月) 12:24:040222デフォルトの名無しさん
2009/09/21(月) 12:41:30動的か静的かは用途次第だけど、素直にURL割り当てろって
0223デフォルトの名無しさん
2009/09/21(月) 12:54:14スレ立てるまでもない質問はここで 100匹目
http://pc12.2ch.net/test/read.cgi/tech/1054813207/
【漏れは】猫でもわかる質問スレ【猫以下です】
0224デフォルトの名無しさん
2009/09/21(月) 13:26:50アホだなぁ。
base64デコードして出力すればいいだろが。
Content-Typeヘッダも適切に吐いてね。
あ、スレチだね。
0225デフォルトの名無しさん
2009/09/21(月) 13:51:04さすがにスレ違いすぎるけど。
src="data:..." は IE6 ではサポートされてない。これはブラウザを変えてもらう以外に方法はない。
だから data: を使わずすなおに画像を別ファイルにしておこう。
あるいは http://example.com/cgi/jpg.cgi?base64=.....(base64文字列)....
が画像ファイルを返すようなCGIを用意して、
src="data:..." をすべて src="http://example.com/cgi/jpg.cgi?base64=...." に変換するとか。
0226デフォルトの名無しさん
2009/09/21(月) 18:26:18>>224-225
URLの?以降の文字列はENV['QUERY_STRING']で受け取れるはず
そいつをデコードして元に戻すって考えて
#!/usr/local/bin/ruby
require 'base64'
file = ENV['QUERY_STRING']
out = decode64(file)
print "Content-Disposition: filename=\"syasin.jpg\"\n"
print "Content-type:image/jpge\n\n"
print out
って言う具合に組んでみた。
700バイトとかの小さいファイルだとうまく行くんだけど、
8kぐらいのファイルになると表示できなくなるな
そもそも、CGI呼べてないっぽい
これもRubyのはなじしゃないよね(涙
0227デフォルトの名無しさん
2009/09/21(月) 18:59:21どうもbase64のコードが長すぎでうまく行かなかったっぽいので
idを指定してDBから画像を引っ張って垂れ流すだけのCGIを作成しました。
idなら長くても50桁とか行かんので、これで解決!!
いろいろ、ご迷惑おかけしました。
ヒント本当に助かりました。ありがとうございます。
0228デフォルトの名無しさん
2009/09/21(月) 19:05:28>700バイトとかの小さいファイルだとうまく行くんだけど、
>8kぐらいのファイルになると表示できなくなるな
ENV['QUERY_STRING'] をそのままつかってるのが問題なんじゃないかな。
(つまりENV['QUERY_STRING']に %2F や %2B が含まれているんだろう。)
URLエンコードされているからデコードしないと。
require 'cgi' qstr = ENV['QUERY_STRING']
out = decode64(CGI.unescape(qstr || ""))
詳しくは
ttp://blog.s21g.com/articles/319
をみてくれ。
0229デフォルトの名無しさん
2009/09/21(月) 20:00:17そんな巨大なデータをクエリ文字列としてURIで渡すなよ、と。
0230デフォルトの名無しさん
2009/09/21(月) 20:02:482083バイトだったかね。
0231デフォルトの名無しさん
2009/09/21(月) 20:04:530232デフォルトの名無しさん
2009/09/21(月) 21:06:050233デフォルトの名無しさん
2009/09/22(火) 14:17:190234デフォルトの名無しさん
2009/09/22(火) 14:23:06またお前か。
もういいから自分の巣に帰れ!
0235デフォルトの名無しさん
2009/09/22(火) 15:31:240236デフォルトの名無しさん
2009/09/22(火) 19:39:02最初から備わってる変数が色々ありますけど、どうしてこんなに表記法に統一性が無いのですか?
0237デフォルトの名無しさん
2009/09/22(火) 20:31:240238デフォルトの名無しさん
2009/09/22(火) 21:03:37Larry Wallに聞いてくれ
0239デフォルトの名無しさん
2009/09/22(火) 21:08:08Perlの文法が言語学的にどう優れているのかの講義が始まるぞ
そしてハッシュの頭になぜ%が付くのかを聞いたらPerl信者になること確実だからやめておけ
0240デフォルトの名無しさん
2009/09/22(火) 21:28:45__FILE__はC
ARGFはARGVの発展系、ARGVはCのmain関数の引数argvが元になっている
どれもこれもunix+Cを知ってれば、なじみの物ばかりだ
0241236
2009/09/22(火) 22:02:34でもARGFはどうして定数なんでしょうか?Cだとargvなんかは変数ですよね。
__FILE__は擬似変数で$0はグローバル変数と全部違うけど、どれもグローバルにアクセスしたいものだから
統一してしまえばいいのに、と思ったのです。
ここら辺の、定数やグローバル変数、擬似変数といった使い分けは実装内部のことが分かるような人じゃないと理解できないのでしょうか。
0242デフォルトの名無しさん
2009/09/22(火) 22:06:29__FILE__は違う
0243デフォルトの名無しさん
2009/09/22(火) 22:08:10ARGFをグローバル変数にするのはおかしな話だが、何でといわれても説明できん
0244デフォルトの名無しさん
2009/09/22(火) 22:23:44他の言語もそれに習ってるからrubyもそれに習っているんだろう
0245デフォルトの名無しさん
2009/09/22(火) 22:27:10どこかでMatzが
「特殊変数周りの仕様はPerlから引きずった。今では後悔している」
的なことを書いてたような
いずれにせよ、一貫性がないという意見には同意
0246デフォルトの名無しさん
2009/09/22(火) 22:41:46ってのがRubyの精神じゃなかったっけ…
0247デフォルトの名無しさん
2009/09/22(火) 22:44:060248デフォルトの名無しさん
2009/09/22(火) 23:22:18リロードするたびにセッションIDが変わってしまいうまく数値を取り出せないです。
どなたか助言をよろしくおねがいします。
def GetSession()
cgi = CGI.new
session_option = {"tmpdir" => "./"}
session = CGI::Session.new(cgi, session_option)
return session
end
0249デフォルトの名無しさん
2009/09/22(火) 23:43:380250デフォルトの名無しさん
2009/09/22(火) 23:48:07リロードするたびに増えていきます。
サーバー側の問題でしょうか?
0251デフォルトの名無しさん
2009/09/22(火) 23:58:52CGIモジュールの仕様はよく知らんが、きっとセッションIDをクッキーに入れて送ってきてくれているはずだぞ!
0252デフォルトの名無しさん
2009/09/23(水) 00:15:520253デフォルトの名無しさん
2009/09/23(水) 00:50:050254デフォルトの名無しさん
2009/09/23(水) 00:58:52【緊急情報カクサンよろしく】
ついに来ました。
大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。
友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。
四川地震より大きいのが来る可能性があります。
http://g★olde★ntam★atama.b★lo★g84.fc2.c★om/
★★★★★危険度MAX★★★★★
★★★★★★★★★★★★★★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★★★★★★★★★★★★★★★★
★★★★★危険度MAX★★★★★
警告!連休中の21、22、23日が危ない!かも2
http://live24.2ch.net/test/read.cgi/eq/1★253494015/
【大気イオン】e-PISCO Part11【また延長】
http://live24.2ch.net/test/read.cgi/eq/1★252991726/
本当に地震が来たら、犯人は特権階級全員だということ2
0255デフォルトの名無しさん
2009/09/23(水) 01:01:28Firefoxのコンソールで確認できるような事を書いてあるサイトを見つけたのですが
うまく確認できませんでした。
0256デフォルトの名無しさん
2009/09/23(水) 01:04:36Firebugでの見方がわからんならLive HTTP Headers入れろ。
0257デフォルトの名無しさん
2009/09/23(水) 01:17:14レスポンスヘッダにCookieと名前のつく項目はなかったです。
0258デフォルトの名無しさん
2009/09/23(水) 01:20:23ってかCGIクラスのインスタンスって何度も生成したらバグるんじゃないの?
関数の中でインスタンス作成して、破棄しているあたりからして使い方が間違ってるんじゃないのかと。
0259デフォルトの名無しさん
2009/09/23(水) 01:26:40rubyは明確なルールが分かりづらくて難しいですね。
ありがとうございました。
0260デフォルトの名無しさん
2009/09/23(水) 01:32:050261デフォルトの名無しさん
2009/09/23(水) 01:46:05たんにHttpヘッダーを送信してないだけかも。
「ruby cgi session」でぐぐったら、こんなページがあった。
ttp://d.hatena.ne.jp/tilfin/20080229/1204360284
参考にしてみて。
0262デフォルトの名無しさん
2009/09/23(水) 02:23:35erb = File.open(path) { |f| ERB.new(f.read) }
print cgi.header + erb.result(binding)
以下のようなtest.rbというのを作成して実験してみたところうまくいきましたが
本番用のソースだとうまくいかないようです><
#!/usr/local/bin/ruby
require 'cgi'
require 'cgi/session'
cgi = CGI.new
session = CGI::Session.new(cgi)
print cgi.header
print "session test'#{session.session_id}'\n"
まだ解決していませんがデバック方法やアドバイスなど、とても勉強になりました。
本当にありがとうございました。
もう少し自分なりにrubyやhtmlの勉強を行ってみます。
0263デフォルトの名無しさん
2009/09/23(水) 07:51:45ソースをまるごと貼り付けて、アドバイスを求めるという手もある
もちろん自力で解決できるならその方がいいけど
0264デフォルトの名無しさん
2009/09/23(水) 08:05:08見るとちゃんとインデントされてる!
それをコピーしたらインデント付きでコピーもできる!
全角スペースや によるインデントを使う必要なし!
0265デフォルトの名無しさん
2009/09/23(水) 11:05:48書き込み時に置換面倒なんだけど、ソースとリンクを毎回書き込むのが面倒なのだが
0266デフォルトの名無しさん
2009/09/23(水) 11:15:02ttp://pastie.org/
とか
ttp://gist.github.com/
とか使うといいんじゃないかな。
詳しくは ttp://journal.mycom.co.jp/news/2009/02/09/014/index.html
0267デフォルトの名無しさん
2009/09/23(水) 11:20:00短い場合はそのまま貼ってくれたほうがいいな
あとインデント類の扱いは2chブラウザごとに全然違うらしいよ
0268デフォルトの名無しさん
2009/09/23(水) 11:32:030269デフォルトの名無しさん
2009/09/23(水) 11:35:060270デフォルトの名無しさん
2009/09/23(水) 11:38:57ソース張ってるんだからrubyが原因って一発で原因わかるだろw
0271デフォルトの名無しさん
2009/09/23(水) 11:52:44http,cgiの前提知識が足りないのかもしれん
0272デフォルトの名無しさん
2009/09/23(水) 19:47:000273デフォルトの名無しさん
2009/09/23(水) 19:56:01GUI 部品を司る他の言語や API を直接呼ぶ
一般論としては、GUI が目的なら Ruby を使う理由は何もない
素直に GUI 部品を提供する他の言語を使え
Windows でウィンドウを表示したけりゃ、そりゃ C# を使えばいいのさ
0274デフォルトの名無しさん
2009/09/23(水) 20:03:270275デフォルトの名無しさん
2009/09/23(水) 20:05:01GUI部品がどういうふうに成り立ってるか理解してないだろ、おまえ。
0276デフォルトの名無しさん
2009/09/23(水) 20:11:42ま た お ま え か !
0277デフォルトの名無しさん
2009/09/23(水) 20:13:410278デフォルトの名無しさん
2009/09/23(水) 20:24:45Windows環境の俺に言わせると
ActiveTclを別に導入しなければならないあたりが原因
Exerbでまとめて配布できるWxRubyと比べて、いろいろ不便だ
0279デフォルトの名無しさん
2009/09/23(水) 20:29:24Tclの文法をわざわざ勉強する必要もない
アリモノ全部で賄える
0280デフォルトの名無しさん
2009/09/23(水) 20:33:10まあPythonでTkinter使ったら幸せになれそうなケース
0281デフォルトの名無しさん
2009/09/23(水) 20:35:560282デフォルトの名無しさん
2009/09/23(水) 20:47:46必要な人だけ適当に別途入れて使って、というスタンスにしておいたら
実行環境持ってない人に配布するという場合のサポートがすっこんと抜けた
そこまでRubyでやらなくてもいいじゃん却って不便だろ、と思うんだけれど
0283デフォルトの名無しさん
2009/09/23(水) 20:48:310284デフォルトの名無しさん
2009/09/23(水) 21:05:570285デフォルトの名無しさん
2009/09/23(水) 21:09:320286デフォルトの名無しさん
2009/09/23(水) 21:18:26シグナルまわりの書き方が好きだ。
0287デフォルトの名無しさん
2009/09/23(水) 21:36:19? どういうこと?
dllファイルを直接呼べばいいってこと?
0288デフォルトの名無しさん
2009/09/23(水) 22:15:390289デフォルトの名無しさん
2009/09/23(水) 22:18:290290デフォルトの名無しさん
2009/09/24(木) 07:36:30UTF8で["ほげ"].to_jsonとかすると["\u307b\u3052"]とかなっちゃうんだけど
0291デフォルトの名無しさん
2009/09/24(木) 08:05:05irb> puts JSON.parse(["ほげ"].to_json)
ほげ
何か問題ある?
0292デフォルトの名無しさん
2009/09/24(木) 08:42:470293デフォルトの名無しさん
2009/09/24(木) 08:45:26JSONの仕様としては変換するのが正しい。
ただ、それが日本人にとって便利かどうかはまた別の話。
ユニコードに変換させないオプションがほしいよね。
0294デフォルトの名無しさん
2009/09/24(木) 08:47:18ごめん、ウソ書いた。「変換するほうが仕様上正しい」というのは間違い。
JSONでは文字列中に日本語をかけるはずだね。
0295デフォルトの名無しさん
2009/09/24(木) 08:49:10仕様上はエスケープしても構わない(may)のでたいていのライブラリは自動エスケープする
そのほうがめんどくさくないからというのが積極的理由
JSON を生で読むなバカという意図が働いてるという気はせんでもない
0296デフォルトの名無しさん
2009/09/24(木) 09:34:48JSONやYAMLに変換したとき、日本語をそのまま出力してくれるライブラリって
AnJSONやYa2YAMLぐらいしか知らないんだけれど
他に同じことができるライブラリってないかな
0297デフォルトの名無しさん
2009/09/24(木) 09:48:05生で読めるのもいいところの一つだと思ってたんだけど
0298デフォルトの名無しさん
2009/09/24(木) 10:45:450299デフォルトの名無しさん
2009/09/24(木) 11:18:240300デフォルトの名無しさん
2009/09/24(木) 11:26:31my ($second, undef, $hour) = localtime;
Rubyではどのように書くものなのでしょうか?
def meth
return 1, 2, 3
end
a, ??, c = meth
0301デフォルトの名無しさん
2009/09/24(木) 11:46:53Rubyでは知らない。
PythonのYAMLライブラリは、オプションでユニコードに変換する・しないが選べるんだけど、
同じようなオプションがRubyにも欲しいよね。
>>300
特に用意はされてないと思うので、いらない変数を指定するしかないんじゃないかな。
a, _, c = meth
とか
a, dummy, meth
とか
0302デフォルトの名無しさん
2009/09/24(木) 12:00:51ダミー変数を使うしかないんですね。
了解しました。
0303デフォルトの名無しさん
2009/09/24(木) 12:31:35古いオンラインマニュアルでは載ってないclass_variable_defined?!古いオンラインマニュアルでは載ってないclass_variable_defined?!じゃないか!
0304デフォルトの名無しさん
2009/09/24(木) 12:34:56これでも一応 1.8.6 対応だったはずなんだが
まいっか
0305デフォルトの名無しさん
2009/09/24(木) 12:36:100306デフォルトの名無しさん
2009/09/24(木) 17:08:05とはいえまだ使ってませんが。普段はC++/Javaを使っています。
Mix-in するモジュールを A、その中で定義されているメソッドを foo
とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを
使うことができるんですよね?
そのクラス C1 をさらに継承して C2 としたらその C2 で定義した
メソッドも呼び出せるんでしょうか?
C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている
ページってありませんか?
0307デフォルトの名無しさん
2009/09/24(木) 17:23:53>>306
irb> module A; def foo; 'foo!'; end; end
irb> class C1; end
irb> p C1.ancestors
[C1, Object, Kernel]
irb> class C2 < C1; end
irb> p C2.ancestors
[C2, C1, Object, Kernel]
irb> class C1; include A; end
irb> p C1.ancestors
[C1, A, Object, Kernel]
irb> p C2.ancestors
[C2, C1, A, Object, Kernel]
irb> p C2.new.foo
"foo!"
こうなる
Ruby のクラスは再オープン可能でそれが日常であることに注意のこと
Ruby は ancestors に含まれている「前のほうのクラスやモジュール」からメソッドなどを探す
C2 は [C2, C1, A, Object, Kernel] になっているが、
これだと C2 を探して C1 を探して A を探して Object を探す
もし C2 に foo が定義されていれば、 順番表の下にある A の foo は呼ばれない
もし C1 に foo が定義されていれば、 順番表の下にある A の foo はやっぱり呼ばれない
Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念
irb> module B; end
irb> class C2; include B; end
irb> p C2.ancestors
[C2, B, C1, A, Object, Kernel]
0308デフォルトの名無しさん
2009/09/24(木) 17:25:10Ruby の場合「頼んで答えられれば答える」ただそれだけです。
0309306
2009/09/24(木) 17:26:45二つのMix-inモジュール A, B をクラス C でMix-inしたとき、
AのメソッドからBのメソッドを呼び出すこともできるのでしょうか?
つまり A のメソッド foo を書くにあたって、foo の中で
呼び出す bar というメソッドを呼び出したいけど、
それはまぁどこかで実装されてるんだろうと思って
書いて構わないですよね?
その bar の実装は A を Mix-in するクラス C に書くべきなのか
ほかの Mix-in で bar の実装を提供することができるのか、
という質問です。
0310306
2009/09/24(木) 17:35:01ありがとうございます。分かってきました(気がします)。
RubyというかMix-inという以前に頭が動的型付けの言語に
慣れていないことが原因だったように思います。
>Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
>継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念
その解説ですっきりしました。
ということは >>309 も当然可能で
複数のモジュールを Mix-in したりさらに継承を続けたりして
メソッドの名前が重複する場合には、要注意、
つまり include の順番も依存するということですね。
0311306
2009/09/24(木) 17:38:28課しているという点以外は Python の多重継承と
良く似ているなぁ・・・
どうしても業務が静的型付け・手続き型言語
べったりなんで、まだこっち方面(どっち?)は
指をくわえて見てるだけしたが、そろそろ。
0312デフォルトの名無しさん
2009/09/24(木) 17:40:180313デフォルトの名無しさん
2009/09/24(木) 17:44:200314デフォルトの名無しさん
2009/09/24(木) 17:47:26多重継承の形してないだけで、実際は多重継承だと思う
・ 自作以外を include すると地獄
・ 自作でも 2つ include するとわけわかめ
・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽
とか一緒
0315デフォルトの名無しさん
2009/09/24(木) 18:12:17実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる
まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・
なんかSchemeの健全なマクロみたいに、
名前の衝突を自動回避できないのかね
0317デフォルトの名無しさん
2009/09/24(木) 20:13:26多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。
そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。
この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。
0318デフォルトの名無しさん
2009/09/24(木) 20:19:22やろうと思えばできるって感じ
慎重に設計した上で組み込む必要があるから、あまり気軽ではない
あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ
0319デフォルトの名無しさん
2009/09/24(木) 20:36:13なんでもかんでも include するんじゃねえ
include は「クラスパス」を短くするために使うもんじゃねえ
irb> require 'rexml/document'
irb> "s".force_encoding('BINARY') if defined?(Encoding)
nil
irb> include REXML
irb> "s".force_encoding('BINARY') if defined?(Encoding)
NoMethodError: undefined method `force_encoding' for "s":String
from (irb):4
from /usr/lib/ruby/1.8/rexml/namespace.rb:37
これ関連で Ruby1.9 の文字列処理の場合分けを defined?(Encoding) でやってる奴も漏れなくうんこ漏れろ
0320デフォルトの名無しさん
2009/09/24(木) 20:41:52defined?(Encoding) は時々見るんだけど、何が目的なのかな
0321デフォルトの名無しさん
2009/09/24(木) 20:51:160322デフォルトの名無しさん
2009/09/24(木) 21:00:52>>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか
Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで
文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、
じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに
0323デフォルトの名無しさん
2009/09/24(木) 21:19:57つーか例えば>>319の場合ならforce_encodingの存在チェックをするほうがよくね?
0324デフォルトの名無しさん
2009/09/24(木) 21:27:530325デフォルトの名無しさん
2009/09/24(木) 21:38:251.9以降の機能と思ってバージョンでチェックしていたら
1.8.8にバックポートされたでござる、という場合を考慮すると
バージョンで全部OKというわけでもないだろうな。
ケースバイケースとしか。
0326デフォルトの名無しさん
2009/09/24(木) 21:43:06Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない
ソース触れる人がアップデートすべきだ
0327デフォルトの名無しさん
2009/09/25(金) 09:01:160328デフォルトの名無しさん
2009/09/25(金) 15:43:22Encodingで被るなら::Encodingとか
String.method_defined?(:encoding)とか
使えよ
0329デフォルトの名無しさん
2009/09/25(金) 16:03:28Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。
かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。
0330デフォルトの名無しさん
2009/09/25(金) 16:45:120331デフォルトの名無しさん
2009/09/25(金) 16:54:420332デフォルトの名無しさん
2009/09/25(金) 17:41:181.9の機能を模倣する外部ライブラリができるかもしれないし
Ruby実装だって今やMRI一択じゃない
それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい
といっても俺自身否定派でもないから好きにすればいいと思うよ
できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い
0333デフォルトの名無しさん
2009/09/25(金) 17:47:570334デフォルトの名無しさん
2009/09/25(金) 18:12:410335デフォルトの名無しさん
2009/09/25(金) 18:16:30=> [{"a"=>0, "b"=>1}]
0336デフォルトの名無しさん
2009/09/25(金) 18:17:59入れ子にすることは普通にできる
[{'key1' => 'val1'}]
以下のようなことはできそうだができない
['key1' => 'val1', 'key2' => 'val2']
以下のような使い方は一見無駄で遅いっぽい上に実際無駄だが、
Ruby ではけっこう普通にやってるのでどんどん使え
arr = [{'key' => 'val1'}, {'key' => 'val2'}, {'key' => 'val3'}]
arr.each do |h|
p h['key']
end
0337デフォルトの名無しさん
2009/09/25(金) 18:27:42それって全部同じ 'key' でも何か意味があるの?
keyは色々なものでってこと?
0338デフォルトの名無しさん
2009/09/25(金) 18:54:141. RUBY_VERSIONで分岐
2. defined?(::Encoding)
3. str.respond_to?(:force_encoding)
あたりが現実的な解か
0339デフォルトの名無しさん
2009/09/25(金) 21:03:11{'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'}
という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま
深く考えずに適当に処理したいというときに時々見る
0340デフォルトの名無しさん
2009/09/25(金) 21:30:241 => {'title' => 'タイトル1', 'author' =>'著者1', 'date' => '日付1'},
2 => {'title' => 'タイトル2', 'author' =>'著者2', 'date' => '日付2'},
3 => {'title' => 'タイトル3', 'author' =>'著者3', 'date' => '日付3'}}
0.upto(data.keys.size).each do |i|
p data[i]['title']
end
イエス超解決
data を作るときにキーのためにわざわざ整数をカウントしないといけないのが不便
0341デフォルトの名無しさん
2009/09/25(金) 21:40:370342デフォルトの名無しさん
2009/09/25(金) 21:42:220343デフォルトの名無しさん
2009/09/25(金) 21:48:45敢えて全部ハッシュにするという例なんじゃないのか
0344デフォルトの名無しさん
2009/09/25(金) 22:25:41つまり1.9なら不要の発想ってことでおk?
0345デフォルトの名無しさん
2009/09/25(金) 22:32:52普通にハッシュを each で回せばいい
個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて
これに依存したスクリプトはあまり作りたくないなあと思ってるんだが
0346デフォルトの名無しさん
2009/09/25(金) 22:39:090347デフォルトの名無しさん
2009/09/25(金) 22:46:43$ irb1.9
irb> h = {2 => 'two', 3 => 'three', 1 => 'one'}
irb> h.each_pair{|k, v| puts "#{k} => #{v}"}
2 => two
3 => three
1 => one
$ irb
irb> h = {2 => 'two', 3 => 'three', 1 => 'one'}
irb> h.each_pair{|k, v| puts "#{k} => #{v}"}
1 => one
2 => two
3 => three
0348デフォルトの名無しさん
2009/09/25(金) 22:51:52順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか
0349デフォルトの名無しさん
2009/09/25(金) 22:57:26順番保持したいなら配列にしろ・・・・・
とこんな話もすでにさんざんしたわけか
0350デフォルトの名無しさん
2009/09/25(金) 23:13:16単なるハッシュとして使う分にはそれでもいいし、
追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう
0351デフォルトの名無しさん
2009/09/26(土) 00:16:02まったく意味ないんじゃないの?
0352デフォルトの名無しさん
2009/09/26(土) 00:16:16Artisticライセンスな windows 版 ruby ってありますか?
0353デフォルトの名無しさん
2009/09/26(土) 00:38:34最悪OrderedHash < Hashになったとしても
互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw
冗談はともかく、現時点であらかじめこうしてから利用するとか
class OrderedHash < Hash; end
順列が必要な連想配列だというのが明確になるし
obsoになったときの対応も比較的容易なはず
まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし
消える心配も今のところしてない
0354デフォルトの名無しさん
2009/09/26(土) 00:42:41別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん
0355デフォルトの名無しさん
2009/09/26(土) 00:49:15・性能落ちるかもしれない不安
・今後消えるかもしれない不安
だと思う
0356デフォルトの名無しさん
2009/09/26(土) 00:52:52それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは
もし前者だとしたら、処理系依存には抵抗がある
ハチドリ本いわく
>Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。
う〜ん・・・・・
0357デフォルトの名無しさん
2009/09/26(土) 01:19:10性能というのが速度のことであれば逆に速くなった。
というか、だからこそ入った。
0358デフォルトの名無しさん
2009/09/26(土) 01:22:270359デフォルトの名無しさん
2009/09/26(土) 02:14:220360デフォルトの名無しさん
2009/09/26(土) 02:16:020361デフォルトの名無しさん
2009/09/26(土) 02:36:060362デフォルトの名無しさん
2009/09/26(土) 04:38:27お前Rails使ってないか、あるいは使い始めたの今月だろ
0363デフォルトの名無しさん
2009/09/26(土) 05:31:140364デフォルトの名無しさん
2009/09/26(土) 07:24:58とかバージョンアップのたびにあったりして笑うw
いや、使っている方としてはどっちだよ!とか思うけど
0365デフォルトの名無しさん
2009/09/26(土) 11:11:13Hashのキー順序については昔ながらの意識でいることにする。
0366デフォルトの名無しさん
2009/09/26(土) 11:28:470367デフォルトの名無しさん
2009/09/26(土) 11:37:01>>328のmethod_defined?も。
>>329
ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。
0368デフォルトの名無しさん
2009/09/26(土) 19:22:53モジュール存在判定に使うもんではないと思う
0369デフォルトの名無しさん
2009/09/26(土) 19:48:38メッセージに応答できるか否かだけを問うべきでは?
0370デフォルトの名無しさん
2009/09/26(土) 19:54:420371デフォルトの名無しさん
2009/09/26(土) 20:01:47ダックタイピングならそんな判定はしない
0372デフォルトの名無しさん
2009/09/26(土) 20:04:48その名前のメソッドを持っていることを期待してるのではなく
「Ruby 1.9 の」 force_encoding であることを期待しているんだろ
じゃあそれの条件をきちんと書けよ
0373デフォルトの名無しさん
2009/09/26(土) 20:08:05期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる
0374デフォルトの名無しさん
2009/09/26(土) 20:26:09str.respond_to?(:encode) && str.respond_to?(:encoding) &&
defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 &&
(_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then
str.force_encoding(::Encoding::ASCII_8BIT)
end
0375デフォルトの名無しさん
2009/09/26(土) 20:35:44どうせ基本雑談なので次の質問の方気後れせずにどうぞ
0376デフォルトの名無しさん
2009/09/27(日) 00:35:12上のページに掲載されているjavascriptを使って、ブラウザ上で文字列にRaw Deflateにかけた上で Base64 encodeしたデータをサーバへ送信し、
サーバ側ではrubyでBase 64 decode、標準のzlibライブラリを用いてRaw Inflateしたいのですが、
「Zlib::DataError: incorrect header check」が発生しうまく圧縮データを伸張できません。
サーバ側のrubyは以下のようなコードです。
#!/usr/bin/ruby
require 'zlib'
data = "(javascriptで生成した圧縮データ)"
p Zlib::Inflate.inflate(data.unpack('m')[0])
ちなみに、perlだと同じように標準的なライブラリを使って以下のようなコードで圧縮データを伸張できましたので、このjavascriptのコードが特殊なことをやっているというわけではないのかな?と思います。
#!/usr/bin/perl
use IO::Uncompress::RawInflate ':all';
use MIME::Base64;
$data = "(javascriptで生成した圧縮データ)";
$decoded = decode_base64($data);
rawinflate(\$decoded => \$inflated);
print $inflated;
このJavascriptライブラリ特有の問題なのか、rubyの問題なのか切り分けができておらず微妙かと思ったのですが、
perlで動いたので一度ruby界隈で聞いてみようと思い書き込みしています。
何か分かりましたらご教授いただけないでしょうか。
0377デフォルトの名無しさん
2009/09/27(日) 00:49:00あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?
0378デフォルトの名無しさん
2009/09/27(日) 01:20:21まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。
考えが及びませんで、ありがとうございました。
RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。
p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])
0379デフォルトの名無しさん
2009/09/27(日) 03:45:29a = [0, {1 >= 5}, 3]
これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが
is_a?(Fixnum)で分岐させようとしたらエラーが出ました
classで調べたらエラーが出ます
どうすればいいんでしょうか?
0380デフォルトの名無しさん
2009/09/27(日) 03:56:08ちょっとコードをはってみろ
0381379
2009/09/27(日) 04:07:10def mastery_open_flag
MASTERY_ARRAY::HASH_DATA[1].each{|i|
open_flag = true
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
MASTERY_ARRAY::HASH_DATA[1][i].each{|index, level|
unless @actor.mastery_level_data[index] >= level
open_flag = false
end
}
if open_flag
@actor.mastery_open_data[i] = true
end
end
}
end
end
エラーはTypeErrorで
cannot convert Hash into Integerと出ます
0382379
2009/09/27(日) 04:08:30HASH_DATA[1] = [
0, 0, {0 => 5, 1 => 3}, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]
end
モジュールの配列です。
0383デフォルトの名無しさん
2009/09/27(日) 04:19:580384379
2009/09/27(日) 04:28:48ここです
配列のインデックス2のハッシュ読もうとしたら出ます
0385デフォルトの名無しさん
2009/09/27(日) 04:35:08きてるからだろう。
i = {0 => 5, 1 => 3}
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
状態で配列のインデックスにハッシュをブチ込んで、
整数に変換できないよエラーになってる。eachの i にインデックスが入ると勘違いしてない?
0386デフォルトの名無しさん
2009/09/27(日) 04:38:30って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに
0387379
2009/09/27(日) 04:40:24インデックス入らないと困るんですが
何かうまい書き方ありますか?
とりあえず考えてみます
あったらお願いします
ありがとうございました
0388デフォルトの名無しさん
2009/09/27(日) 04:47:09each_index {|インデックス| ... }
each_with_index {|要素, インデックス| ...}
0389デフォルトの名無しさん
2009/09/27(日) 04:49:28「要素がハッシュであること」なんじゃなかろうか
MASTERY_ARRAY::HASH_DATA[1].each{|e|
open_flag = true
if e.kind_of?(Hash)
e.each_pair{|index, level|
open_flag = false unless @actor.mastery_level_data[index] >= level
}
end
@actor.mastery_open_data[e] = true if open_flag
end
0390379
2009/09/27(日) 04:58:13each_indexで動きましたありがとうございます
389さんが書いたとおり「要素がハッシュであること」が評価の大筋です
kind_of?(Hash) これは知りませんでした
なんとかいけそうですありがとうございました
0391デフォルトの名無しさん
2009/09/27(日) 05:02:31@actor.mastery_open_data[e] = true の e は each_with_index の i だと思う
要はナントカデータは全部要素数 100の配列なんだろう
マス目みたいに決まっててアクセス手段がインデックスしかないんだ
MASTERY_ARRAY::HASH_DATA[1].each_with_index{|e, i|
open_flag = true
e.each_pair{|index, level|
open_flag = false unless @actor.mastery_level_data[index] >= level
} if e.kind_of?(Hash)
@actor.mastery_open_data[i] = true if open_flag
}
0392デフォルトの名無しさん
2009/09/27(日) 13:24:580393デフォルトの名無しさん
2009/09/27(日) 13:44:360394デフォルトの名無しさん
2009/09/27(日) 18:44:37Winにもcursesってあるのか。
0395デフォルトの名無しさん
2009/09/27(日) 18:53:34普通に導入可能だよー
0396デフォルトの名無しさん
2009/09/27(日) 21:22:24lighttpdをインストールしました。
ところが、設定方法がわからず、htmlは表示出来るのですが
cgiが動きません。涙目状態です。あちこちググりました・・・
途方にくれています・・・
0397デフォルトの名無しさん
2009/09/27(日) 21:25:080398デフォルトの名無しさん
2009/09/27(日) 21:26:57WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ
0399デフォルトの名無しさん
2009/09/27(日) 21:28:09というか環境や参考にしたページをどこまで試してどこで詰まったとか
そういうのも無しに答えられるわけないので
0400デフォルトの名無しさん
2009/09/27(日) 21:30:33つまり、サーバ立てる知識が無い
0401デフォルトの名無しさん
2009/09/27(日) 21:32:26lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと
人の気配が感じられませんでした・・・
0402デフォルトの名無しさん
2009/09/27(日) 21:36:43普通にゼロから勉強したほうが早いんだけどね
0403デフォルトの名無しさん
2009/09/27(日) 21:36:520404デフォルトの名無しさん
2009/09/27(日) 21:40:14まったくだぬ
「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは
CGI関連に限ってはありえん
0405デフォルトの名無しさん
2009/09/27(日) 21:44:58翻訳しながら、lighttpdの本家のページ見てみます。
mongrelも検討してみます。
apacheの設定よりは、ずいぶん楽そうに見えたんですが。。
0406デフォルトの名無しさん
2009/09/27(日) 21:47:26めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い
0407デフォルトの名無しさん
2009/09/27(日) 21:50:400408デフォルトの名無しさん
2009/09/27(日) 21:50:52cgiがどう動かないのさ。スクリプトを貼ったりしろよ。
0409デフォルトの名無しさん
2009/09/27(日) 22:02:070410デフォルトの名無しさん
2009/09/27(日) 22:03:40/var/wwwがドキュメントルートディレクトリで、ここに1.html
/usr/lib/cgi-binがcgiディレクトリに、1.cgi
1.htmlで、action=/usr/lib/cgi-bin/1.cgiと記述。
ブラウザで、localhost/1.htmlを表示。ボタンを押すと
404 not foundとなります。
lighttpd.confでのcgiディレクトリ指定が間違ってるんかなぁと・・
0411デフォルトの名無しさん
2009/09/27(日) 22:13:481.cgiに実行権限がついているかとか1.htmlの読み込み権限とかもチェックしような
0412デフォルトの名無しさん
2009/09/27(日) 22:15:53/usr/lib とか公開するとは考えにくいから action=/cgi-bin/1.cgi とかなんじゃないのか
この調子じゃ権限とかもだめそうだな
0413デフォルトの名無しさん
2009/09/27(日) 22:31:01RubyでCGIの勉強をするなら、lighttpdから始めるのはオススメしない
cgi.rbを使って、WEBrick上 or Apache上で動かしてみるとか
Sinatra使うとかしたほうがいい
0414デフォルトの名無しさん
2009/09/27(日) 22:40:09chmod 755はしてあります。
>>412
あ、cgi-binでいいんですね。フルパスにしちゃいました。
たしかに公開しないですもんね。
0415デフォルトの名無しさん
2009/09/27(日) 22:52:59lighttpdを起動したユーザがownerだよな?
0416デフォルトの名無しさん
2009/09/27(日) 22:55:570417デフォルトの名無しさん
2009/09/27(日) 23:06:09ファイルオーナーが、「root」ですね
lighttpdは、「www-data」が起動してます
sudo cpでファイルを/usr/lib/cgi-binにコピーすると
所有者が、ルートになってしまいます。
ちょっと、apacheや他のを調べてみます。みなさん、スレ違いに付き合って
くださって申し訳ありがとうございまsyた
0418デフォルトの名無しさん
2009/09/27(日) 23:18:45!x || x== 0
'' や [] や {} も偽にしたいならActiveSupport入れてblank? と present?
を使え。
0419デフォルトの名無しさん
2009/09/27(日) 23:23:03それだとnil, false, 0で真になるんだけど。偽がほしいんですが無理なんですか?
0420デフォルトの名無しさん
2009/09/27(日) 23:29:26どんだけ応用力ないのかな…
0421デフォルトの名無しさん
2009/09/27(日) 23:33:290422418
2009/09/27(日) 23:35:350423デフォルトの名無しさん
2009/09/27(日) 23:49:22ファイルの権限を777にして実行してみな。
それで実行できれば権限関係の設定がおかしかったってことだ
linuxの基礎を勉強私的な。
0424デフォルトの名無しさん
2009/09/28(月) 10:48:55convert(Digest::MD5.digest(value)) == Digest::MD5.hexdigest(value)
となるようなconvert()です。
あるいはヒントでもいいのでお願いします。
0425デフォルトの名無しさん
2009/09/28(月) 10:59:18> 与えられた文字列に対するハッシュ値を、ASCIIコードを使って 16進数の列を示す文字列にエンコードして返す。
ということで
irb> p Digest::MD5.digest('12345')
"\202|\313\016\352\212plL4\241h\221\370N{"
irb> p Digest::MD5.hexdigest('12345')
"827ccb0eea8a706c4c34a16891f84e7b"
irb> p Digest::MD5.digest('12345').unpack("H*")[0]
"827ccb0eea8a706c4c34a16891f84e7b"
0426デフォルトの名無しさん
2009/09/28(月) 11:12:25ありがとうございます。
1バイトずつ16進数に変換するということなので、こう理解しました。
irb> Digest::MD5.hexdigest('foo')
=> "acbd18db4cc2f85cedef654fccc4a4d8"
irb> Digest::MD5.digest('foo')
=> "¥254¥275¥030¥333L¥302¥370¥¥¥355¥357eO¥314¥304¥244¥330"
irb> Digest::MD5.digest('foo').unpack('C*') # 1バイトずつに分解
=> [172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216]
irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c } # 16進数に変換
=> ["ac", "bd", "18", "db", "4c", "c2", "f8", "5c", "ed", "ef", "65", "4f", "cc", "c4", "a4", "d8"]
irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c }.join == Digest::MD5.hexdigest('foo')
=> true
なるほどー。
どうもでした。
0427デフォルトの名無しさん
2009/09/28(月) 20:26:36filename.match(/(aaa)(bbb)/}
print $1
}
この状況で、$1や$2の情報を配列に入れるにはどうすればいいですか?
具体的にはこの後、$1の内容について一つ一つ処理をしていきたいんです。
0428デフォルトの名無しさん
2009/09/28(月) 20:39:11Dir.foreach('hoge'){|filename|
filename.match(/(aaa)(bbb)/}
ary << [$1, $2] # もしくは ary << $1 << $2
}
p ary
0429デフォルトの名無しさん
2009/09/28(月) 20:47:130430デフォルトの名無しさん
2009/09/28(月) 20:51:17「<<」ってこういうところで使うんですね。
勉強になりました。ありがとうございました!
0431デフォルトの名無しさん
2009/09/29(火) 00:50:52何かお勧めありますか?
0432デフォルトの名無しさん
2009/09/29(火) 08:15:40@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
@password ||= h[:pass]||h[:password]||h['pass']||h['password']
イライラ
0433デフォルトの名無しさん
2009/09/29(火) 12:52:20エラーがあったらエディタがそれを取り込んでタグジャンプしたい
teeやら別のモジュールをrequireするのはなるべく避けたい
もちろんユーザーはputs/getsを制約なく使いたい
といううまいやり方ってないですか?
ようするにエラーが出たらそれだけをログファイルに書き込んでrubyは終了コード1を返したいです
標準エラーをファイルに書き込むようなファイルをこっそり-rするのが現実的なんですかね
0434デフォルトの名無しさん
2009/09/29(火) 13:06:42Emacs使え
0435デフォルトの名無しさん
2009/09/29(火) 13:10:50M-x ruby-load-file → Enter すれば irb でファイルが実行されるな
エラー行ジャンプはどうしようか
0436デフォルトの名無しさん
2009/09/29(火) 14:56:39>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']
YAML使ってるなら、キーは文字列になるだろうから、Symbolは考えなくていいんじゃないかな。
YAMLでわざわざSymbolをキーに使うとは考えにくい。
@username ||= h['user'] || h['username'] || h['id']
0437デフォルトの名無しさん
2009/09/29(火) 19:21:13バージョンアップしようと計画していますが、どちらがお勧めでしょうか?
TwitterもRubyからScalaへ書き換えたりしていますので...
0438デフォルトの名無しさん
2009/09/29(火) 19:28:020439デフォルトの名無しさん
2009/09/29(火) 19:33:590440デフォルトの名無しさん
2009/09/29(火) 20:17:30開設以来10年で1万PVなのか、毎秒1万PVなのか。
0441デフォルトの名無しさん
2009/09/29(火) 20:21:10特定のエディタの話はしてないんだけど…
0442デフォルトの名無しさん
2009/09/29(火) 20:22:531日1万PVならコンテンツによってはまあ普通
1ヶ月1万PVなら内容によっては閉鎖したほうがエコ
どっちにしてもPHPで動いてるならPHPで増強したほうがきっと楽だ
0443デフォルトの名無しさん
2009/09/29(火) 20:24:12だからEmacs使えって
どうせ使いもしないで脳内で考えてるんだろ
0444デフォルトの名無しさん
2009/09/29(火) 20:28:120445デフォルトの名無しさん
2009/09/29(火) 20:32:33エディタとして動作するものではEmacs以外ではgvimかPeggyくらいしか心当たりがない
どう動作するのが効率いいかの研究もEmacsの動作見れば丸分かりだ
0446デフォルトの名無しさん
2009/09/29(火) 20:35:49どんなエディタでも連携して動く万能スクリプトが欲しいのか
0447デフォルトの名無しさん
2009/09/29(火) 20:38:44たぶんそうだと思う
エディタ内でシェルを起動するのでなければ
emacsclient みたいなシステムがないと無理だと思うんだけどね
というか、できないからこそ数十年かけて Emacs が M-x compile を進化させてきたのではないんかのう
0448デフォルトの名無しさん
2009/09/29(火) 20:43:52コンパイラ等が異常終了コードをシェルに返してエラー行を標準出力などに表示さえしてくれれば用は済む
0449デフォルトの名無しさん
2009/09/29(火) 20:45:040450デフォルトの名無しさん
2009/09/29(火) 20:54:21単純にPVって言ったら普通に日単位だろ
何この馬鹿
0451デフォルトの名無しさん
2009/09/29(火) 23:38:21>1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って
>バージョンアップしようと計画していますが、どちらがお勧めでしょうか?
どういう理由でバージョンアップしようとしているのかがわからないので、答えられる人はいないでしょう。
パフォーマンスが理由ならRoRはイバラの道だし、開発効率が理由ならLiftはイバラの道。
どちらの道を選んでもイバラの道だと思うので、PHPのまま改善することをお勧めします。
あるいはPythonを使ってGoogleAppEngineにするとか。これもイバラだな。
0452デフォルトの名無しさん
2009/09/29(火) 23:47:460453デフォルトの名無しさん
2009/09/29(火) 23:49:40下手するとキャッシュなしでもいけるくらい。
0454デフォルトの名無しさん
2009/09/30(水) 00:35:220455デフォルトの名無しさん
2009/09/30(水) 06:13:470456デフォルトの名無しさん
2009/09/30(水) 08:24:47現時点で言えることは「じゃあPHPでやっとけ」にしかならんという
0457デフォルトの名無しさん
2009/09/30(水) 10:56:300458デフォルトの名無しさん
2009/09/30(水) 11:42:460459デフォルトの名無しさん
2009/09/30(水) 11:46:400460デフォルトの名無しさん
2009/09/30(水) 12:24:240461デフォルトの名無しさん
2009/09/30(水) 12:57:500462デフォルトの名無しさん
2009/09/30(水) 18:46:43変換されないで、元の値が戻ってくる。
何が間違ってるか教えてください。
使う文字コードはUTF-8です。
#全角数字を半角数字に変換するフィルタ
def zen_to_han_int(str)
outstr = str.gsub(/0/,"0")
outstr.gsub!(/1/,"1")
outstr.gsub!(/2/,"2")
outstr.gsub!(/3/,"3")
outstr.gsub!(/4/,"4")
outstr.gsub!(/5/,"5")
outstr.gsub!(/6/,"6")
outstr.gsub!(/7/,"7")
outstr.gsub!(/8/,"8")
outstr.gsub!(/9/,"9")
return outstr
end
0463デフォルトの名無しさん
2009/09/30(水) 18:52:32str とスクリプトファイルの文字コードが合ってない
ごく一般的には str とスクリプトの正規表現リテラルの文字コードは同一にする
…あーつまりスクリプトのファイルが UTF-8 じゃないか str が UTF-8 じゃないか
あるいは ruby -Ku のような実行指定をしてないかどれか
0464デフォルトの名無しさん
2009/09/30(水) 18:53:190465デフォルトの名無しさん
2009/09/30(水) 18:54:43p "yes!" if /0/ =~ str
end
これで 0 を含む文字列渡したときに "yes!" と表示されなければ>>463
0466デフォルトの名無しさん
2009/09/30(水) 20:10:230467デフォルトの名無しさん
2009/09/30(水) 20:12:28表示されるぶんには全角半角の区別がある意味は何もないわけで
つまり区別が必要な人は使ったら駄目よ
0468デフォルトの名無しさん
2009/09/30(水) 20:25:22見直したら、スクリプトがS-JISでかかれてました。
$JCODE = "UTF-8"
ってやってもだめなのね
もうひとつ、お願いします。
#数字に変換できるか
def intrger_string?(str)
begin
Integer(str)
return true
rescue ArgumentError
return false
end
end
Rubyレシピブックのまるぱくりなのですが
3桁の先頭に0を含む文字列を渡すとfalseになる場合があります。
例えば078から099までのあいだとか
これも原因が良くわかりません。
どなたか教えてください。
0469デフォルトの名無しさん
2009/09/30(水) 20:30:258進数
0470デフォルトの名無しさん
2009/09/30(水) 20:30:28ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer
マニュアル読んだ上でここがわからんとかそういう質問してくれ
どうせマニュアル読んで調べてる時間のほうが長いんだから、マニュアルの見方を勉強したほうが結局は得だ
0471デフォルトの名無しさん
2009/09/30(水) 21:18:02$JCODEってなんやねん
0472デフォルトの名無しさん
2009/09/30(水) 21:21:370x1234 とかも渡してみろ。
0473デフォルトの名無しさん
2009/09/30(水) 21:47:46正規表現じゃだめなん?
del integer_string?(str)
return str =~ /¥A¥d+¥z/
end
0474デフォルトの名無しさん
2009/09/30(水) 22:25:26お恥ずかしいです
下記のように書き直しました
def intrger_string?(str)
if str.gsub(/\d/,"").size == 0 then
return true
else
return false
end
end
>>471
$KCODEの間違えです(´Д⊂
0475デフォルトの名無しさん
2009/09/30(水) 22:32:57それだと2/8/16進表記に対応してないから>>468とは別物になるぞ
0476デフォルトの名無しさん
2009/09/30(水) 22:56:18メソッド本体だが、ifの条件式が
成立したら(=false, nil以外を返ったら)true
成立しなかったら(=falseかnilが返ったら)false
を返すだけなので、その条件判定式だけでruby的には十分。
ところで str == '' のときはtrue/falseどっちになって欲しいのだろう?
0477デフォルトの名無しさん
2009/10/01(木) 08:49:38十進だけにしたいんだろ
/\A\d+\z/ =~ str が最善だと思う
0478デフォルトの名無しさん
2009/10/01(木) 11:28:02reader があってから wiriter があるとわかりやすいよね?
0479デフォルトの名無しさん
2009/10/01(木) 14:25:42def hoge=(value)
でやるのが俺の定番
でも両方書くなら書きやすさ的にライタ側から書くかなあ
0480デフォルトの名無しさん
2009/10/01(木) 16:38:52ttp://www.aoky.net/articles/why_poignant_guide_to_ruby/chapter-4.html
wordlist.rb
code_words = {
'スターモンキー' => '新帝国の神経質な閣僚のフィルとピート',
'カタパルト' => 'chuckyゴーゴー', '火炎瓶' => '暖房つきのリビング',
'ナイジェリア' => "Ny and Jerry'sドライクリーニング(ドーナッツ付き)",
'とどめをさす' => 'コンセントをさす'
}
require 'wordlist'
# 邪悪なアイデアを取ってコードワードと入れ替える
print "新しいアイデアを入力してください: "
idea = gets
code_words.each do |real, code|
idea.gsub!( real, code )
end
メソッドdoのブロック引数で、real, codeの二つが出てきます。
これはなんですか?意味がわからないです。。。
コピペで、rbファイルを2つ作って、下のコードをruby hoge.rbとして実行しても
想定通り動きませんし・・・
0481デフォルトの名無しさん
2009/10/01(木) 16:53:16こゆこと
これなんぞと思ったら出力して中身を見れ
code_words.each do |key, value|
puts "#{key} -> #{value}"
end
ナイジェリア -> Ny and Jerry'sドライクリーニング(ドーナッツ付き)
カタパルト -> chuckyゴーゴー
スターモンキー -> 新帝国の神経質な閣僚のフィルとピート
火炎瓶 -> 暖房つきのリビング
とどめをさす -> コンセントをさす
0482デフォルトの名無しさん
2009/10/01(木) 16:54:10マニュアルを一応眺めてから「ここの部分がさっぱりわからんおまえら親切に教えろ」とか言ってくれ
親切かどうかはともかくおおむね解説なりツッコミなりが入るからさ
ttp://www.ruby-lang.org/ja/man/html/Hash.html#each
> key と value を引数としてブロックを評価します。 self を返します。
{:a=>1, :b=>2}.each_pair {|k, v| p [k, v]}
# => [:a, 1]
[:b, 2]
0483デフォルトの名無しさん
2009/10/01(木) 16:54:200484デフォルトの名無しさん
2009/10/01(木) 16:59:00それはマニュアルを読むだけの力があるのに
手抜きして読まない人向けのお言葉
0485デフォルトの名無しさん
2009/10/01(木) 17:00:29do はブロック開始の(予約)文字列
メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈
文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった
0486デフォルトの名無しさん
2009/10/01(木) 17:06:57eachメソッドがハッシュに対して使われたときは、その引数は
|key,value|という形になるわけですね。
>>482
申し訳ないです。
>>483
481の結果からすると、each(すべての要素にたいして)do以下を行えという
ことだと思いますが、メソッドでないならdoはなんだろう。
0487デフォルトの名無しさん
2009/10/01(木) 17:14:30実行してみました。
undefined local variable or method `code_words' for main:Object (NameError)
というエラーが出ました。code_wordsが定義されていない?
0488デフォルトの名無しさん
2009/10/01(木) 17:20:19不適切だったりしますか?
0489デフォルトの名無しさん
2009/10/01(木) 17:44:46こっちのが無難
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
0490デフォルトの名無しさん
2009/10/01(木) 17:56:55だから、doは予約語だってば。
ifがメソッドでないのと同じ。
0491デフォルトの名無しさん
2009/10/01(木) 18:12:37> 481の結果からすると、each(すべての要素にたいして)do以下を行えという
> ことだと思いますが、メソッドでないならdoはなんだろう。
そのeachはなんですか?
すべての要素にたいして、というおまじないか何かですか?
プログラミング言語はそういうふわふわとしたものではないです。
0492デフォルトの名無しさん
2009/10/01(木) 18:21:35初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから
あたたかい目でみてください。
>>486
>メソッドでないならdoはなんだろう。
すでに指摘があるように、doは構文を表す予約語のひとつです。
while i < 10 do
print i
end
では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。
[1, 2, 3].each do |x| puts x end
なら、each や puts はメソッド名、do と end は構文を表す予約語。
0493デフォルトの名無しさん
2009/10/01(木) 18:39:54質問するなら最低限、言語の基礎は身に付けておいて欲しい
これくらいは自力で学習、調査しておくのが質問する側のマナーだろう
0494デフォルトの名無しさん
2009/10/01(木) 18:42:28オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている
ただ、便利なブロックがこのままだとたいそう使いにくいので
[1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること)
といちいちテクニカルにする代わりに
[1,2,3].each do |e|
p e
end
と平易に書くように Ruby を作ったのだ
このへんの動作が気になるなら
my_block = lambda do |e|
p e
end
[1,2,3].each(&my_block)
とでも書いてみるといい
0495デフォルトの名無しさん
2009/10/01(木) 18:58:26思考過程の筋が見えるなら特に問題はないと思われ
まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが
若干のエスパー能力が要るから万人には勧められない
0496デフォルトの名無しさん
2009/10/01(木) 19:29:150497デフォルトの名無しさん
2009/10/01(木) 20:58:03最初の方は、とてもわかりやすかったのです。
読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても
エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。
初心者向けとして適当でないようなので、もうすこし文法を押さえながら
読んでみようと思います。ありがとうございました。
0498デフォルトの名無しさん
2009/10/01(木) 23:29:17>do が何だかわかりませんレベルの人には来て欲しくないな
おまえは>>1を声に出して10回よめ。
この程度が我慢できないやつはこのスレくるな。
0499デフォルトの名無しさん
2009/10/01(木) 23:41:550500デフォルトの名無しさん
2009/10/01(木) 23:45:19そうもいかないんだろうね
0501デフォルトの名無しさん
2009/10/02(金) 00:48:120502デフォルトの名無しさん
2009/10/02(金) 05:22:34抽出元のサンプルは下記の通り
11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69
上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。
抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする)
不要対象:半角英数字、半角記号、空白、"○"、"×"等
現在のコードは下記の通り
while line=gets
if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line
if $1 != " "
print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n"
end
end
end
実行結果↓
日本語抽出:○ × ::この&カ字列を抽盾オたいん
(続きます)
0503デフォルトの名無しさん
2009/10/02(金) 05:25:20if文の条件が大変なことになっているのは
if /(\W+)/ =~ line
としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。
プログラムとして力技で美しくないのは分かっています。
また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、
空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。
抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。
→一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・
問題をまとめると
1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい
2:文字化けしてしまうが原因、対策が分からない
となります。
OSはWindows XP SP3でRubyのバージョンは1.8.6です。
長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。
0504デフォルトの名無しさん
2009/10/02(金) 05:32:32そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。
メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。
0505デフォルトの名無しさん
2009/10/02(金) 05:36:40irb> puts s.split[6]
この、文字列を抽出したいんdesu.
空白で区切られた7フィールド目という意味ならこれでいいのでは
フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが
0506503
2009/10/02(金) 06:02:35レスありがとうございます。
すみません、確かにサンプルに限定すればそれで解決ですね。
ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。
質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、
もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。
(日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)
0507デフォルトの名無しさん
2009/10/02(金) 06:13:510509デフォルトの名無しさん
2009/10/02(金) 06:46:02おそらく、セパレータとフィールドという概念がないんだと思う
だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん
たとえば、俺らは>>502を見たときに
「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」
という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、
>>503にとってはおそらくそうではないのだろう
ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない
空白の数には全く意味がなく、
形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら
split.find_all{|e| <eがShift_JISの日本語文字を含むということ> }
とすればよい
Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え
irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69"
irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e}
この、文字列を抽出したいんdesu.
0510デフォルトの名無しさん
2009/10/02(金) 10:01:18>>509のようにsplitで配列にしてからfind_allでもいいし
文字列に繰り返し正規表現をしたいのならscanてのもある
Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ
へぇこんなのあるんだっていう程度でも使う時に思い出せる
0511デフォルトの名無しさん
2009/10/02(金) 10:02:440512デフォルトの名無しさん
2009/10/02(金) 10:18:29「も」では駄目だろ
英数字記号だけの場合はマッチしてはいけない
irb> /\w/ =~ "あういえ".tosjis
nil
irb> $KCODE = 's'
irb> /\w/ =~ "あういえ".tosjis
0
irb> /\w/ =~ "a"
0
全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、
英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要
0513デフォルトの名無しさん
2009/10/02(金) 10:32:08ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ
0514デフォルトの名無しさん
2009/10/02(金) 11:09:04覚える言語ってことですか?
0515デフォルトの名無しさん
2009/10/02(金) 11:10:330516デフォルトの名無しさん
2009/10/02(金) 11:26:59後は当然ライブラリの使いこなしってことになるだろう。
0517デフォルトの名無しさん
2009/10/02(金) 11:32:04とかそんな話を
別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる
どっちか気に入ったほう選んでくれ
0518デフォルトの名無しさん
2009/10/02(金) 13:13:39知っている人がいたら教えてください。
0519デフォルトの名無しさん
2009/10/02(金) 13:22:500520デフォルトの名無しさん
2009/10/02(金) 13:24:35推奨されてるパッケージでインストールする限りは使えるはず
他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ
0521デフォルトの名無しさん
2009/10/02(金) 13:42:25RSAの仕組みを勉強するのにRubyを使うことにします。
0522デフォルトの名無しさん
2009/10/02(金) 14:40:481という数値や"太陽パクパク"という文字列や、それらを代入した
number,sun_eaterといった変数もオブジェクトということですか?
number = 1
sun_eater = "太陽パクパク"
0523デフォルトの名無しさん
2009/10/02(金) 14:59:20整数とかはさすがに高速処理するように小細工を施してはありますが、
それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です
irb> p 1.class
Integer
irb> p "太陽パクパク".class
String
変数はオブジェクトについたラベルです
ラベル名 → オブジェクトID
というような対応表を Ruby が管理していて、
該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます
変数というハコが入れ物オブジェクトとして存在するわけではありません
irb> p 1.object_id
3
irb> p "太陽パクパク".object_id
-605838888
0524デフォルトの名無しさん
2009/10/02(金) 15:06:21>rubyでは、値がすべてオブジェクトということは
>1という数値や"太陽パクパク"という文字列や、それらを代入した
>number,sun_eaterといった変数もオブジェクトということですか?
数値や文字列もオブジェクト。
ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。
そのへんは他の言語でも同じ。
0525デフォルトの名無しさん
2009/10/02(金) 15:08:38変数はオブジェクトじゃなくラベル。
あやうく、間違った認識で通り過ぎるところでした。
ありがとうございます。
0526デフォルトの名無しさん
2009/10/02(金) 15:10:25他の言語でも同じなんですね。ありがとうございます。
0527デフォルトの名無しさん
2009/10/02(金) 15:50:19と、話をややこしくしてみる
0528デフォルトの名無しさん
2009/10/02(金) 17:55:56沢山あるオブジェクトの中のいくつかに名前を付けるのが変数
1つのオブジェクトに複数の名前があることも珍しくないし
無名のまま役割を終えるオブジェクトも存在する
0529デフォルトの名無しさん
2009/10/02(金) 17:58:090530デフォルトの名無しさん
2009/10/02(金) 18:04:25やろうとしていることは
DATの中身をコピペで入力
↓
下ごしらえの置換
アンカー順に並べ替える
チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため)
↓
ソースを出力
というものです。
ひとまずここまでひとりでつくりました。
http://tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html
やっていることは
簡単な置換とレスに1〜1001までの番号をハッシュとして付ける
ことまでです。
教えて欲しいことは
アンカー順に並べ替える方法
本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入?
チェックしたレスのみ出力する方法
チェックボックスでdivのclassを追加
<div class="res">を<div class="res aka">や<div class="res aka deka">などに置換?
です、見当がつきそうな方はどうかご教授ください。
0531デフォルトの名無しさん
2009/10/02(金) 18:26:40class Gohan
def caree
print "今日のご飯はラーメンだ\n"
end
def natto
print "朝飯は納豆だ\n"
end
end
yuhan = Gohan.new
yuhan.caree
asamesi = Gohan.new
asamesi.natto
この場合、yuhanやasamesiがオブジェクトになるのでしょうか?
0532デフォルトの名無しさん
2009/10/02(金) 18:29:10英字だと
>ruby -e "p ARGV" hon/*
["hon/新規テキスト ドキュメント.txt"]
となってうまくいきますが、漢字だと
>ruby -e "p ARGV" 本/*
["本/*"]
となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。
どうすれば展開できるかご教示ください。
OSはWindows XP SP3です。
>ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]
0533デフォルトの名無しさん
2009/10/02(金) 18:31:30DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが
バックアップするときは、ストリーミングで流せばいいような気がするけど
復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします
たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
また、なにか回避策が有るのでしたら、教えてください。
0534デフォルトの名無しさん
2009/10/02(金) 18:35:45と思ったらWinではやってくれないのか
0535デフォルトの名無しさん
2009/10/02(金) 18:39:19>>523
0536デフォルトの名無しさん
2009/10/02(金) 18:42:14ARGV の処理は環境依存
コマンドプロンプトで
DIR 本/*
とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない
0537532
2009/10/02(金) 18:50:17それはうまくいきます。/の代わりに\ですが。
>dir 本\*
ドライブ D のボリューム ラベルは以下略
>ruby -e "p ARGV" hon\*
["hon/新規テキスト ドキュメント.txt"]
英字は/でも\でもok
>ruby -e "p ARGV" 本\*
["本\\*"]
漢字はどっともだめ
0538532
2009/10/02(金) 18:55:24>ruby -e "p ARGV" */*
["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]
0539デフォルトの名無しさん
2009/10/02(金) 18:56:09#!/usr/local/bin/ruby -Ks
class Ch2Thread
def initialize(file)
@dat = file
parse
end
attr_reader :data, :title, :size
def [](v); @data[v]; end
def parse
@data = Array.new
arr = @dat.to_a
arr.each_with_index do |res, i|
@data << parse_res(res, i)
end
@title, @size = arr[0].split(/<>/)[-1], @data.size
end
def parse_res(res, resno)
e = res.split(/<>/)
d = e[2].split
return {:no => resno + 1, :name => e[0], :mail => e[1],
:date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]}
end
end
sure = Ch2Thread.new(File.open('./sample.dat').read)
puts "Title => #{sure.title}"
sure[0..3].each do |res|
res.each{|k,v| puts "#{k} => #{v}"}
end
0540デフォルトの名無しさん
2009/10/02(金) 18:59:22WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
だけど展開してくれた。なんなんだろうね
0541540
2009/10/02(金) 19:02:24あとコマンドプロンプトから動かしてる?
専用エディタとかから走らせたりしてると挙動が違ってくるかも
0542デフォルトの名無しさん
2009/10/02(金) 19:03:55ren 本 書
ruby -e "p ARGV" 書/*
1.9のglob周りは多バイト文字に関しては腐ってるね。
0543デフォルトの名無しさん
2009/10/02(金) 19:04:15>標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。
らしいからできるはずだと思うけど
うち(Vista コマンドプロンプト)でも
1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど
1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな
0544532
2009/10/02(金) 19:11:36うちも1.8.7はokでした。
1.9.1で通る漢字もありました。
>ruby -e "p ARGV" ホン/*
["ホン/新規テキスト ドキュメント.txt"]
>ruby -e "p ARGV" 川/*
["川/新規テキスト ドキュメント.txt"]
>ruby -e "p ARGV" 山/*
["山/新規テキスト ドキュメント.txt"]
0545デフォルトの名無しさん
2009/10/02(金) 19:14:53http://gihyo.jp/dev/serial/01/ruby/0008
Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった
0546539
2009/10/02(金) 19:16:56たとえばこんなクラスを作る
動作は超適当
変数名も適当
レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ
クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした
0547デフォルトの名無しさん
2009/10/02(金) 19:19:00100年前に廃止してくれてれば今頃こんな苦労することも無かった
0548デフォルトの名無しさん
2009/10/02(金) 19:23:46PC/AT互換機使うのいますぐやめろ
元凶はそれだ
ずっとNECなら日本語処理は完璧だったのだ
0549デフォルトの名無しさん
2009/10/02(金) 19:24:140550デフォルトの名無しさん
2009/10/02(金) 19:25:48日本語は悪くないよ
EUCばんざーい
0551デフォルトの名無しさん
2009/10/02(金) 19:29:400552デフォルトの名無しさん
2009/10/02(金) 19:35:07してください。
0553デフォルトの名無しさん
2009/10/02(金) 19:40:25>たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。
>また、なにか回避策が有るのでしたら、教えてください。
そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。
0554デフォルトの名無しさん
2009/10/02(金) 19:58:150555デフォルトの名無しさん
2009/10/02(金) 20:01:03「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。
というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。
0556デフォルトの名無しさん
2009/10/02(金) 20:04:040557デフォルトの名無しさん
2009/10/02(金) 20:14:38どれだけ差が開くと思う?
つまり日本がこの業界でアメリカに勝てないのは必然だ
0558デフォルトの名無しさん
2009/10/02(金) 20:20:160559デフォルトの名無しさん
2009/10/02(金) 20:24:39引数の文字コードって
どんなふうに判別するものなんだろう?
0560デフォルトの名無しさん
2009/10/02(金) 20:35:100561デフォルトの名無しさん
2009/10/02(金) 23:35:11いまからならOSもメールもウェブもUTFで統一。
0562デフォルトの名無しさん
2009/10/02(金) 23:42:47特に問題が起きたことはない。
0563デフォルトの名無しさん
2009/10/02(金) 23:43:48clにminiprelude.cがないぞゴルァって言われる
あるしちゃんとインクルードパスにも入ってるのに・・・
0564デフォルトの名無しさん
2009/10/03(土) 01:45:15おお、ありがとうございます。
しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。
どういう方向性でいけばいいのでしょうか。
0565デフォルトの名無しさん
2009/10/03(土) 02:06:27わかんねーときは、わかる機能だけで作ってみるといいよ
ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ
0566デフォルトの名無しさん
2009/10/03(土) 05:59:160567デフォルトの名無しさん
2009/10/03(土) 14:37:28この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。
差分を取る方法を教えてください。
0568デフォルトの名無しさん
2009/10/03(土) 14:39:12=> [2, 3]
ファイルリスト程度ならオンメモリで余裕だろう
0569デフォルトの名無しさん
2009/10/03(土) 14:49:580570デフォルトの名無しさん
2009/10/03(土) 15:23:49>>566
なるほど、そういう考えもありますね。
もうちょっとこつこつやるべきでした、ありがとうございます。
0571デフォルトの名無しさん
2009/10/03(土) 19:30:46main.rb
class Main
def initialize
@foo = Array.new
require 'sub.rb'
end
end
main = Main.new
[EOF]
sub.rb
@foo.concat ['hoge']
[EOF]
みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか?
よろしくお願いします
0572デフォルトの名無しさん
2009/10/03(土) 19:40:01中身が何でも気にしないなら eval File.read('sub.rb') とでも。
0573デフォルトの名無しさん
2009/10/03(土) 19:43:37require はトップレベルにファイルを「追加」する
ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)
メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない
それと、Ruby では、単純な行単位の切り取りを行うことはできない
現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う
メソッド単位でしか追加できないので、そこは要領よく機能を分ける
# sub.rb
module Sub
def add_hoge
@foo.concat ['hoge']
end
end
# main.rb
require 'sub.rb'
class Main
include Sub
def initialize
@foo = Array.new
add_hoge
end
end
p Main.new.instance_variable_get('@foo')
0574571
2009/10/03(土) 19:57:00レスありがとうございます。言葉足らずですいません・・・
sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・
sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの
方に持ち帰りたいです(プラグインシステムみたいな感じ)
グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので
もうちょっとすっきりする方法があればと・・・
よろしくお願いします
0575デフォルトの名無しさん
2009/10/03(土) 20:16:58def initialize(plugin_name)
@foo = Array.new
require plugin_name
plugin_mod = Object.const_get(plugin_name.capitalize)
extend plugin_mod
do_something
end
end
Main.new('plugin1')
# plugin1.rb
module Plugin1
def do_something
@foo.concat('hoge')
end
end
0577デフォルトの名無しさん
2009/10/05(月) 18:06:53items.each{ |x| x.destroy }
というようなこう全部の要素にたいしてメソッドを呼ぶのを
もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか?
Ruby 1.8.7です。
0578デフォルトの名無しさん
2009/10/05(月) 18:09:460579デフォルトの名無しさん
2009/10/05(月) 18:11:34それだ!
items.each(&:destroy)
でいけましたありがとうございました。
0580デフォルトの名無しさん
2009/10/05(月) 18:21:210581デフォルトの名無しさん
2009/10/05(月) 21:11:400582デフォルトの名無しさん
2009/10/05(月) 22:36:26なんで?
0583デフォルトの名無しさん
2009/10/05(月) 22:49:020584デフォルトの名無しさん
2009/10/05(月) 23:38:280585デフォルトの名無しさん
2009/10/05(月) 23:39:110586デフォルトの名無しさん
2009/10/05(月) 23:44:01wwwwww
0587デフォルトの名無しさん
2009/10/06(火) 06:33:240588デフォルトの名無しさん
2009/10/06(火) 10:13:130589デフォルトの名無しさん
2009/10/06(火) 12:14:57質問する人へ:
回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。
0590デフォルトの名無しさん
2009/10/07(水) 08:45:570591デフォルトの名無しさん
2009/10/07(水) 17:45:26> require はトップレベルにファイルを「追加」する
> ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)
$ cat s.rb
a=1
def f; 1; end
$ cat c.rb
require './s'
p defined? a
p defined? f
$ ruby c.rb
nil
"method"
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?
0592デフォルトの名無しさん
2009/10/07(水) 18:00:48ローカル変数という概念を保護する制限だと思ってくだされ
require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません
ファイルとモジュールの構造を変えることのほうを強く勧めます
0593デフォルトの名無しさん
2009/10/07(水) 18:09:36その中で一番小さい数のキーの値を取り出したいのですが
単純に書くと以下になるんですが
他に何かこれだという方法はないでしょうか?
h = {2 => "a", 5 => "b", 7 => "c"}
p h[h.keys.sort[0]]
=> "a"
これで問題があるわけではないですが
他に方法がある気がしたので質問させてもらいました
0594デフォルトの名無しさん
2009/10/07(水) 18:12:38print hoge
というとき、print hogeの hogeのところで moge.executeが参照され
実行されて得られた結果が、printされるという理解でいいですか?
0595デフォルトの名無しさん
2009/10/07(水) 18:15:16素直に書くなら
h[h.keys.min]
0596デフォルトの名無しさん
2009/10/07(水) 18:18:42一行目の時点で
>moge.executeが参照され実行されて得られた結果
がhogeに収まる
二行目はすでに収まってるhogeの中身を出力するだけ
>>594の日本語の部分をrubyで書くとこんな感じ?
hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない
print hoge.call # Procを実行する(moge.executeが実行される)
0597デフォルトの名無しさん
2009/10/07(水) 18:22:48VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
printf "%d rows were inserted\n", rows
ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
4 rows were insertedと表示されます。
printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
どういう動きをしているんでしょうか?
0598デフォルトの名無しさん
2009/10/07(水) 18:24:35Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、
既存のものをさがすかということになります。
以下、最近できたものなので、あるよ、という紹介しかできませんが、
depqという優先順位つきキューのgemがあります(あるはずです)。
ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441
0599デフォルトの名無しさん
2009/10/07(水) 18:25:210600デフォルトの名無しさん
2009/10/07(水) 18:25:45考えていたことと逆でした。ありがとうございます。
0601デフォルトの名無しさん
2009/10/07(水) 18:35:10ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf
ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html
個人的には Ruby ではないので嫌い
to_s で問題の起こらない範囲で
puts "#{rows} rows were inserted"
と書くべき
0602デフォルトの名無しさん
2009/10/07(水) 18:40:22String#%は?
0603デフォルトの名無しさん
2009/10/07(水) 18:42:04異端審問される恐れがあるので
人前に晒すスクリプトでは使わないように
0604デフォルトの名無しさん
2009/10/07(水) 18:44:100605デフォルトの名無しさん
2009/10/07(水) 18:57:140606デフォルトの名無しさん
2009/10/07(水) 18:57:21どもです。putsに書き換えて実行したところ同じように出ました。
どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して
4つの要素をDBに登録していますよね。
0607デフォルトの名無しさん
2009/10/07(水) 18:57:53Ruby使うの今すぐやめれ
プログラミングスタイル強制要素が無数に散りばめられてるぞ
0608デフォルトの名無しさん
2009/10/07(水) 18:58:58君にはPythonが向くんじゃないかな?性格的に。
0609デフォルトの名無しさん
2009/10/07(水) 19:02:23sprintf は Ruby のものではないということを知らない?
0610デフォルトの名無しさん
2009/10/07(水) 19:04:06そりゃそういうふうに作られてるからだろ
do のマニュアル読め
わざわざカウントして数値を返してるようなので初心者殺しではある
0611デフォルトの名無しさん
2009/10/07(水) 19:10:25ダラダラと旧来の仕様を引きずってきたんだよな
オタクが他の言語の知識を流用できて便利というただそれだけの理由で
0612デフォルトの名無しさん
2009/10/07(水) 19:14:00あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます
確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど
あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に
0613デフォルトの名無しさん
2009/10/07(水) 19:17:18どもっす。doのマニュアルを探してきます。
0614デフォルトの名無しさん
2009/10/07(水) 19:18:04他の言語と違う動作されたらそれこそ非難の的
0615デフォルトの名無しさん
2009/10/07(水) 19:24:330616デフォルトの名無しさん
2009/10/07(水) 19:25:25sprintfは別言語でそれやられて大迷惑
>>612も言ってるけどいまさら別に覚えるのも嫌だから
今までと同じでいいよ・・・
0617593
2009/10/07(水) 19:27:45minですね
探し切れてませんでした
ありがとうございます
>>598
なるほど、確かに求めてるのはヒープみたいなものでした
参考になりましたありがとうございます
0618デフォルトの名無しさん
2009/10/07(水) 19:32:02Obsoleteでもない限り機能として用意されてるんだから使えばいいし
「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし
0619591
2009/10/07(水) 19:37:20うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。
http://doc.okkez.net/static/187/method/Kernel/m/require.html
http://doc.okkez.net/static/187/method/Kernel/m/load.html
0620デフォルトの名無しさん
2009/10/07(水) 19:56:18メソッドの説明がしてありました。しかし、記述が少ししかなく。
こういう場合、ソースを読むんでしょうか?
とりあえず、今は目的に必要なことだけをやっていこうと思います。
0621デフォルトの名無しさん
2009/10/07(水) 20:06:32>rows = dbh.do("INSERT INTO people (name,height)
>VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
>printf "%d rows were inserted¥n", rows
>
>ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
>4 rows were insertedと表示されます。
>
>printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
>どういう動きをしているんでしょうか?
1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。
それを printf "%d ", rows で出力している。そんだけ。
0622デフォルトの名無しさん
2009/10/07(水) 20:29:41ググったら公式じゃないけどこんなページがあったよ
ttp://www.nslabs.jp/book2-dbi.rhtml
0623デフォルトの名無しさん
2009/10/07(水) 20:31:28選択肢がないという話では
0624デフォルトの名無しさん
2009/10/07(水) 20:35:37>>602-603がそうはとても見えない
0625デフォルトの名無しさん
2009/10/07(水) 20:38:34sprintf 使ったことある?
0626デフォルトの名無しさん
2009/10/07(水) 20:45:18sprintf系まとめて異端だったの?
>>603は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど
0627デフォルトの名無しさん
2009/10/07(水) 20:51:440628デフォルトの名無しさん
2009/10/07(水) 20:57:520629デフォルトの名無しさん
2009/10/07(水) 21:02:210630デフォルトの名無しさん
2009/10/07(水) 21:04:490631デフォルトの名無しさん
2009/10/07(水) 21:27:580632デフォルトの名無しさん
2009/10/07(水) 21:33:550633デフォルトの名無しさん
2009/10/07(水) 21:34:36「わかりにくい」ことは確か
初心忘れると老害と罵られるぞ
0634デフォルトの名無しさん
2009/10/07(水) 21:37:58今より使いやすい(Rubyっぽい)printf構文ってどんなの?
0635デフォルトの名無しさん
2009/10/07(水) 21:39:17「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに
0636デフォルトの名無しさん
2009/10/07(水) 21:40:14packは使ったこともないし使う場面もないから構文すら知らない。
rubyでdef endしちゃうから今後も使うことはないだろう。
0637デフォルトの名無しさん
2009/10/07(水) 21:40:50「Perlといっしょ」で通じなくなってきてるからな…
0638デフォルトの名無しさん
2009/10/07(水) 21:42:04webクリエータはたいてい適当だしそんなもんかw
0639デフォルトの名無しさん
2009/10/07(水) 21:43:00バイナリファイルのヘッダパースとかどうやってやってるの?
0640デフォルトの名無しさん
2009/10/07(水) 21:43:31irb1.8> p "ルビー"
"\343\203\253\343\203\223\343\203\274"
これ日本語に戻してー
0641デフォルトの名無しさん
2009/10/07(水) 21:44:32お前puts使わないだろ
0642デフォルトの名無しさん
2009/10/07(水) 21:47:391.8でUnicodeEscapeSequence文字列が欲しいです先生
0643デフォルトの名無しさん
2009/10/07(水) 21:49:20evalしろ
0644デフォルトの名無しさん
2009/10/07(水) 21:50:35一方、青木氏はpackで壊れた
>まったくpackの意味不明さときたら、
>「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」
>と幼児退行してみたくなるほどです。
0645デフォルトの名無しさん
2009/10/07(水) 21:52:37こういう文字列をevalしろとな
0646デフォルトの名無しさん
2009/10/07(水) 22:09:180647デフォルトの名無しさん
2009/10/07(水) 22:27:52このファイルが開けないのですが、どーすれば良いのでしょうか。
0648デフォルトの名無しさん
2009/10/07(水) 22:31:52中身がタブ区切りのtsvだからです
っていうかファイルの中身確認することくらいしようぜ
0649デフォルトの名無しさん
2009/10/07(水) 22:34:21sjis問題で文字化けはするけど
0650デフォルトの名無しさん
2009/10/07(水) 22:44:340651デフォルトの名無しさん
2009/10/07(水) 22:55:350652デフォルトの名無しさん
2009/10/07(水) 23:28:42ああいうツールは無いんでしょうか?
0653デフォルトの名無しさん
2009/10/07(水) 23:32:42Linuxの知識に乏しいためなかなか手が付けられません。
1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。
一般的にはどのような手段でアップデートするのでしょうか?
0654デフォルトの名無しさん
2009/10/07(水) 23:34:49このスレ的には Debian にしろって言われると思うが。
0655デフォルトの名無しさん
2009/10/07(水) 23:34:51じゃあ無理だ
諦めろ
あとスレ違い
0656デフォルトの名無しさん
2009/10/07(水) 23:39:290657デフォルトの名無しさん
2009/10/07(水) 23:41:38わりと適切だと思うが…
Linux使ったことあるか?
0658デフォルトの名無しさん
2009/10/07(水) 23:43:45それはこのスレの範囲を超える
パッケージがないなら諦めれ
0659デフォルトの名無しさん
2009/10/07(水) 23:44:010660デフォルトの名無しさん
2009/10/07(水) 23:44:150661デフォルトの名無しさん
2009/10/07(水) 23:44:520662デフォルトの名無しさん
2009/10/07(水) 23:48:54aptitude install ruby
0663デフォルトの名無しさん
2009/10/07(水) 23:49:18パッケージ管理システム(aptやyum)を使え、としか
0664デフォルトの名無しさん
2009/10/07(水) 23:54:261.9.1は存在しない(Sid除く)
0665デフォルトの名無しさん
2009/10/07(水) 23:58:140666デフォルトの名無しさん
2009/10/08(木) 00:38:00package application で source または archive の site を追加…
大抵は package gpg key は初期の物が使える筈…
source package で compile install が出来るので在れば source を拾って来て install.
0667デフォルトの名無しさん
2009/10/08(木) 00:50:15python と ruby の関数で違う物は在るのでしょうか?
0668デフォルトの名無しさん
2009/10/08(木) 00:54:470669デフォルトの名無しさん
2009/10/08(木) 00:58:160670デフォルトの名無しさん
2009/10/08(木) 01:05:11全体的に大阪弁と東北弁ぐらいの違い
0671デフォルトの名無しさん
2009/10/08(木) 01:09:16片方が使えるなら、もう片方もさほど苦労しない
0672デフォルトの名無しさん
2009/10/08(木) 01:53:240673デフォルトの名無しさん
2009/10/08(木) 15:57:30数字の1が生まれたら、それは数字クラスに所属していて
数字クラスのメソッドにない動きは出来ないってことですか?
0674デフォルトの名無しさん
2009/10/08(木) 16:10:39特異メソッドという仕組みがあるので、たいていのクラスでは、イン
スタンスごとに振る舞いを変えることができる。
しかしながら、数(Numericおよびサブクラス)にはこれが定義できない
ように制限されている。
なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ
ソッドを追加した場合、既存の数インスタンスでも使える。
0675デフォルトの名無しさん
2009/10/08(木) 16:21:33irb> 1.extend(One)
TypeError: can't define singleton
from (irb):2:in `extend_object'
from (irb):2:in `extend'
from (irb):2
from :0
irb> "1".extend(One).one
"one!"
ああ、わかりやすいエラーだ
0676デフォルトの名無しさん
2009/10/08(木) 16:26:28一般的にはそう
クラスに定義された動作(メソッド)のみが可能
ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる
ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない
ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない
ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい
それと整数クラスは>>674の言うように例示にはちょっと不適
0677デフォルトの名無しさん
2009/10/08(木) 18:34:07数字と数の違いか:-p
0678デフォルトの名無しさん
2009/10/09(金) 11:22:07あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです
文字列として正規表現で比較するしかありませんか?
obj.class.to_s =~ /\AM1::/
0679デフォルトの名無しさん
2009/10/09(金) 11:56:18どんな場合にも動作するのは文字列としての比較
Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない
0680デフォルトの名無しさん
2009/10/09(金) 11:58:02プログラミングは単なる趣味です。
0681デフォルトの名無しさん
2009/10/09(金) 11:58:520682デフォルトの名無しさん
2009/10/09(金) 12:08:490683デフォルトの名無しさん
2009/10/09(金) 14:20:33趣味というなら、マイナー言語でもいいよね。
Rubyとは真逆の、静的な関数言語がいいんじゃないかな。
OCamlかHaskellあたり。どちらも日本語での入門書があるし。
0684デフォルトの名無しさん
2009/10/09(金) 15:10:41必要な知識ってなんですか?
ruby
rails
正規表現
html,xhtml,xml
javascript
mysqlなどRDMS
apacheなどhttpサーバー
こんなもんでしょうか?
0685デフォルトの名無しさん
2009/10/09(金) 15:15:04他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし
なんじゃそりゃって感じだけど、まず間違いない
あとRailsは板違いなので
【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
こっち池
0686デフォルトの名無しさん
2009/10/09(金) 15:15:17サンクス。
OCamlかHaskellあたりがお薦めなんですね。
了解しました。
0687デフォルトの名無しさん
2009/10/09(金) 15:20:43どもっす。半年間精進してダメなら諦めます。
0688デフォルトの名無しさん
2009/10/09(金) 15:40:150689デフォルトの名無しさん
2009/10/09(金) 15:48:15spec -fs -c spec/
0690デフォルトの名無しさん
2009/10/09(金) 15:54:541578 examples, 0 failures
っひょー
0691デフォルトの名無しさん
2009/10/09(金) 16:28:14おまえすごいな
0692デフォルトの名無しさん
2009/10/09(金) 16:32:090693デフォルトの名無しさん
2009/10/09(金) 17:31:040694デフォルトの名無しさん
2009/10/09(金) 17:45:040695デフォルトの名無しさん
2009/10/09(金) 18:08:57どーりで重いわけだと思ったよ
0696デフォルトの名無しさん
2009/10/09(金) 22:44:18class CArray < Array
end
a = CArray.new
b = CArray.new
c = a + b
p c.class #=> Array
CArrayを返してほしい。
class CString < String
end
a = CString.new("aaa")
b = CString.new("bbb")
c = a + b
p c.class #=> String
CStringを返してほしい。
0697デフォルトの名無しさん
2009/10/09(金) 23:17:14class CArray < Array
def +(v); self.class.new(super(v)); end
end
0698デフォルトの名無しさん
2009/10/09(金) 23:58:050699デフォルトの名無しさん
2009/10/10(土) 00:22:00Array.new や String.new がハードコーディングされてるんだろうな
何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう
まあ、バグっちゃバグかもしれん
0700デフォルトの名無しさん
2009/10/10(土) 01:13:02むしろそっちのほうの挙動が不思議
Stringクラスの実装はCStringを知らないはずなのに、
どうしてCStringオブジェクトを返せるんだ?
0701デフォルトの名無しさん
2009/10/10(土) 01:28:370702デフォルトの名無しさん
2009/10/10(土) 02:03:220703デフォルトの名無しさん
2009/10/10(土) 02:10:19組み込みでいえばIOとかNumericあたり
というか、otherと絡むときにわざと基本クラス返してる気がするなぁ
0704デフォルトの名無しさん
2009/10/10(土) 03:07:560705デフォルトの名無しさん
2009/10/10(土) 03:22:090706デフォルトの名無しさん
2009/10/10(土) 07:06:39あらゆるクラスは継承で動作可能「でなければならない」
継承したとたん動作しなくなるライブラリはプギャー
0707デフォルトの名無しさん
2009/10/10(土) 07:26:07>>703の言うようにわざと基本クラスを返すのはありなんじゃないかと思う
0708デフォルトの名無しさん
2009/10/10(土) 07:31:28> foo + bar がどのクラスを返すべきか
変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき
つまり、foo のクラスを返すべき
0709デフォルトの名無しさん
2009/10/10(土) 07:54:09--- a/array.c
+++ b/array.c
@@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
VALUE
rb_ary_plus(VALUE x, VALUE y)
{
+ VALUE klass;
VALUE z;
long len;
y = to_ary(y);
len = RARRAY_LEN(x) + RARRAY_LEN(y);
- z = rb_ary_new2(len);
+ klass = rb_obj_class(x);
+ z = ary_new(klass, len);
MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
0710デフォルトの名無しさん
2009/10/10(土) 08:07:52redmine.ruby-lang.orgにfeature request投げとけば。
個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。
あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。
0711デフォルトの名無しさん
2009/10/10(土) 08:22:54危険というか取り込み不可能
というか別にそんなことを意図したコードでもあるまい
お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ
0712デフォルトの名無しさん
2009/10/10(土) 08:50:19ドカタのストレスを見た。
0713デフォルトの名無しさん
2009/10/10(土) 08:56:260714デフォルトの名無しさん
2009/10/10(土) 14:27:56mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません
undefined method `destroy'
destroyが使えない??
newもfindも使えるのに・・
解決法知ってる方いたら教えてください
0715デフォルトの名無しさん
2009/10/10(土) 14:40:020716デフォルトの名無しさん
2009/10/10(土) 14:45:480717デフォルトの名無しさん
2009/10/10(土) 14:47:120718デフォルトの名無しさん
2009/10/10(土) 14:49:12他当たってみます
0719デフォルトの名無しさん
2009/10/10(土) 14:51:30RailsならRailsと言え。
MVCってのはRails固有の概念ではない。
あと、
【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
0720デフォルトの名無しさん
2009/10/10(土) 16:33:540721デフォルトの名無しさん
2009/10/10(土) 17:12:32この場合はいいえ
0723デフォルトの名無しさん
2009/10/11(日) 01:07:070724デフォルトの名無しさん
2009/10/11(日) 11:59:17a = nil
PStore.new(...).transaction do |c|
a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない)
end
x = a[...][...].XXX[...]
というように PStore.transaction の外で読み込んだデータ
を使っても問題ないものなのでしょうか。
内部的には Marshal.load しているということなので、問題
ないような気もするのですが、ドキュメントの記述を見ると
そういう使い方していないようなかんじなので…。
0725デフォルトの名無しさん
2009/10/11(日) 12:02:250726724
2009/10/11(日) 12:16:24PStore が Marshal 上に実装されているという前提が変わらない限りは
PStore#transaction の外にデータを持ち出しても問題ないわけですか
これまで無駄に transaction の内部にコード入れていたので書き直そう…。
0727デフォルトの名無しさん
2009/10/11(日) 12:20:45PStore#transactionは、
* 同じデータファイルに対する他のPStoreアクセスを禁止している
(読んでる間に書き換えられないように)
* ブロック処理がabortされなければ、変更の再ダンプを行う。
という感じの仕事をしている。
中で読んだデータはそのままメモリにある。ブロックを出たあと、
誰かがデータファイルを書き換えたとき、それとメモリが一致しな
いということを認識した上でなら問題ない。
0728724
2009/10/11(日) 12:43:24データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、
明快な説明どうもありがとうございました >>727 さん
0729デフォルトの名無しさん
2009/10/11(日) 14:19:20トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも
…実装としてありそうな気もするな
トランザクション有効中に明示的に複製してクダサーイというのはアリではある
んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う
データを取得または保存する瞬間にだけ、トランザクションに入る
何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する
なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意
変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない
データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得
0730デフォルトの名無しさん
2009/10/11(日) 14:36:090731デフォルトの名無しさん
2009/10/11(日) 16:56:05a.each do |b|
print "match" if c =~ /hoge/
end
よりも
reg = Regexp.new("/hoge")
a.each do |b|
print "match" if c =~ reg
end
の方がいいでしょうか?
0732デフォルトの名無しさん
2009/10/11(日) 17:05:150733デフォルトの名無しさん
2009/10/11(日) 17:12:351.upto(10000).each do
/h/ =~ "hoge"
end
でも
re = /h/
1.upto(10000).each do
re =~ "hoge"
end
でも、Regexp のインスタンス生成は1回だけ
つまり、処理速度や負荷的には実質どちらでも構わないし、
厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い
0734デフォルトの名無しさん
2009/10/11(日) 17:34:33なるほど、ありがとうございます
0735724
2009/10/11(日) 22:15:19おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で
Marshal.dump/load するより楽なので PStore を使っていたのですが
PStore#transaction でデータ処理全体をブロックする必要があるのかないの
か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強
になりました、どうもありがとうございます >>729 さん
0736デフォルトの名無しさん
2009/10/12(月) 19:03:3110から20の間の数をランダムに発生させたいというばあい
rand(10-20)とか直接与えることは出来ますか?
0737デフォルトの名無しさん
2009/10/12(月) 19:13:370738デフォルトの名無しさん
2009/10/12(月) 19:18:200739デフォルトの名無しさん
2009/10/12(月) 19:21:25class Range
def rand
Kernel.rand(last-first+1)+first
end
end
ってやっといて
(10..20).rand
するとか
標準じゃ無理
0740デフォルトの名無しさん
2009/10/12(月) 19:29:250741デフォルトの名無しさん
2009/10/12(月) 19:39:58(1..2**30).to_a.sort_by{rand}.first
としましたが、結果がかえってこないのであきらめました。
0742デフォルトの名無しさん
2009/10/12(月) 20:07:39そりゃ単に重すぎるだけだ
要素数が2**30の配列を作ってるんだから
そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ
0743デフォルトの名無しさん
2009/10/12(月) 20:08:590744デフォルトの名無しさん
2009/10/12(月) 20:09:560745デフォルトの名無しさん
2009/10/12(月) 20:15:49累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが
0746デフォルトの名無しさん
2009/10/12(月) 20:17:490747デフォルトの名無しさん
2009/10/12(月) 20:23:232chも大差ないだろ
0748デフォルトの名無しさん
2009/10/12(月) 20:24:39斬新な自己紹介ですね
0749デフォルトの名無しさん
2009/10/12(月) 20:40:35!=を使うのは普通ですか?
count = 1
end_count = 10
while count != end_count
puts count
count = count + 1
end
0750デフォルトの名無しさん
2009/10/12(月) 20:44:090751デフォルトの名無しさん
2009/10/12(月) 20:48:03じゃだめなん?
0752デフォルトの名無しさん
2009/10/12(月) 20:50:22loop do
break if count == end_count
...
end
せめて break して欲しい
0753デフォルトの名無しさん
2009/10/12(月) 21:08:18何でbreakの方を推すの? 横から見てもいまいちわからん
普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど
0754デフォルトの名無しさん
2009/10/12(月) 21:15:49気をつけます。ありがとうございます。
0755デフォルトの名無しさん
2009/10/12(月) 21:18:26場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど
0756デフォルトの名無しさん
2009/10/12(月) 21:21:14単に非効率なやり方だろ
他人に教えるようなものじゃない
0757デフォルトの名無しさん
2009/10/12(月) 22:29:550758デフォルトの名無しさん
2009/10/12(月) 22:33:38と思う
0759デフォルトの名無しさん
2009/10/13(火) 09:54:08while not より直接的だと思うんだが。
0760デフォルトの名無しさん
2009/10/13(火) 10:17:070761デフォルトの名無しさん
2009/10/13(火) 11:25:48複雑な条件を書こうとするとぶっちゃけどっちでも良くなるが
0762デフォルトの名無しさん
2009/10/13(火) 11:32:040763デフォルトの名無しさん
2009/10/13(火) 11:48:18いずれ別の方法を覚えようと思います。
質問です
h = []
i = 1
while i != 3
h.push(i)
puts h
i = i + 1
end
の出力結果が
1
1
2
となるのはなぜですか?
1
2
となると思って本人は書いています。
0764デフォルトの名無しさん
2009/10/13(火) 11:52:00配列表示させてるからですね
もうしわけありませんでした・・・
0765デフォルトの名無しさん
2009/10/13(火) 14:38:070766デフォルトの名無しさん
2009/10/13(火) 15:30:16while state != :default
お題がこういうのならuntilだのbreakだのはわかるけど
「ありきたりな(カウントの)ループ」だろ?これでいいじゃん
while count < end_count
for (i = 0; i != l; i++)
とか見かけないし
0767デフォルトの名無しさん
2009/10/13(火) 15:52:240768デフォルトの名無しさん
2009/10/14(水) 19:37:35Excelが1つだけ起動しているときはwin32oleを使って
WIN32OLE.connect('ExcelApplication')
でうまくいくんですが
複数起動しているとどれかひとつしか操作できません。
どうすれば複数のExcelを操作できるでしょうか?
0769デフォルトの名無しさん
2009/10/14(水) 19:45:46Windows版Rubyでできるかどうかは知らん
てかこっち池
ttp://pc12.2ch.net/test/read.cgi/tech/1155031689/
0770デフォルトの名無しさん
2009/10/15(木) 02:25:20そっちに行ってみましたが…過疎ってますね
0771デフォルトの名無しさん
2009/10/15(木) 09:02:13利用中は変動しない配列に対して arr.size を毎回行うのと、
最初に arr_size = arr.size として変数格納値を使うのと
どっちが好ましいもんかね
0772デフォルトの名無しさん
2009/10/15(木) 09:09:19そうだとすれば無視できる程度のコストでしかない
0773デフォルトの名無しさん
2009/10/15(木) 09:12:15されてる
配列の要素数が変動するときにサイズ変数を書き換えてる
Array#size が呼ばれるたびに内部 each でカウントしてるとかそういうことは流石にない
0774デフォルトの名無しさん
2009/10/15(木) 09:19:49配列サイズは、フラグの空き領域に入ってる場合と構造体のフィールド
に入ってる場合がある。どちらを返すか判断したりフラグ領域から取り
出すための演算(ビットANDとかシフトとか)がある。
include/ruby/ruby.h の RARRAY_LEN マクロ。
0775デフォルトの名無しさん
2009/10/15(木) 09:26:110776デフォルトの名無しさん
2009/10/15(木) 09:29:02「生成して返す」とマニュアルに書いてあるものは毎回生成する(と、読み手は判断する)
マニュアルの言葉遣いは慎重にしたほうがええな
0777デフォルトの名無しさん
2009/10/15(木) 12:19:05>配列のサイズとかってキャッシュされてる?
>利用中は変動しない配列に対して arr.size を毎回行うのと、
>最初に arr_size = arr.size として変数格納値を使うのと
>どっちが好ましいもんかね
キャッシュされるというか>>772に書いてある通りだけど、
arr.size の場合はメソッド呼び出しのコストがあるのでローカル変数に代入しておいたほうが速いっちゃあ速い。
ただその違いはわずかなので、全体のスピードに影響を与えるほどではないと思う。
0778デフォルトの名無しさん
2009/10/15(木) 14:44:39> Array#size が呼ばれるたびに内部 each でカウントしてるとかそういうことは流石にない
そうか、そういう可能性もあるのだな
0779デフォルトの名無しさん
2009/10/15(木) 16:35:35普通付いてるものではないかと。
0780デフォルトの名無しさん
2009/10/15(木) 17:54:130781デフォルトの名無しさん
2009/10/15(木) 20:37:42こんな風にfunction定義して使えるようにする方法ない?
0782デフォルトの名無しさん
2009/10/15(木) 20:40:13def dbl
self*2
end
end
p 10.dbl #==> 20
0783デフォルトの名無しさん
2009/10/15(木) 20:48:540784デフォルトの名無しさん
2009/10/15(木) 20:48:57Rubyすげ・・・
ありがとうっ
0785デフォルトの名無しさん
2009/10/16(金) 01:02:48mjd? 今ちょうどWEBrickイジって簡易blogサーバを作ろうとしてるんだが……。。
0786デフォルトの名無しさん
2009/10/16(金) 01:07:40IntegerやStringやArrayと、WEBrickじゃだいぶ事情が違うぞ。
>>783は、たぶん、標準ライブラリというより、組み込みクラスに、
と言いたかったんじゃないだろうか。
0787デフォルトの名無しさん
2009/10/16(金) 01:10:40複数人で開発したり、いずれ引き継ぐんなら慎重であるべきだけど。
0788デフォルトの名無しさん
2009/10/16(金) 01:49:44継承でなんとかならない?
0789デフォルトの名無しさん
2009/10/16(金) 04:04:42mysqlのデータを単純にcontrollerでfindで取り出してviewで表示させようとしています。
しかしブラウザでの表示が文字化けならいざ知れず、「#」になってしまいます。
具体的にページのソースを見てみるとその部分は、
#<Book:0x24319ec>
となっています(Bookテーブルのものを取り出して表示しようとしています)。
途中までは正常に取り出せているようなのですが、表示のところでこうなってしまって大変困っています。
macosxでMAMPを入れ、いざ開発をしようと決めたところでこのエラーです。
railsのバージョンは2.3.4です。
誰か解決策をご存知の方ご教授おねがいします。よろしくお願いします。
0790デフォルトの名無しさん
2009/10/16(金) 04:55:43> Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
0791デフォルトの名無しさん
2009/10/16(金) 05:02:39えーと、コントローラで
@book = Book.find(params[:id])
とかやって、ビューで
<%=h @book%>
とかしてるだけでしょうか。
もしそうなら、そんなん表示されなくて当たり前としか。
どんな入門書を読んでいるのか知らないけど、
<%=h @book.title %>
<%=h @book.author %>
のようにしないといけないのでは?
0792デフォルトの名無しさん
2009/10/16(金) 05:41:07ありがとうございます。
はい、もちろんその通りにはやってはいるんですが、やはり色々試しても
「#」としか表示されません。
ビュー内で<%= p @book.title>としてターミナルで見たところ、
[#<Book id: 1, title: "hoge">]
という風にオブジェクトはわたってはいるような気はするのですが、表示されないのが良く分かりません。
>>790
見落としていました。すいません。そちらで質問し直します。ご指摘ありがとうございました。
0793デフォルトの名無しさん
2009/10/16(金) 06:13:11あるメソッドが 10 を返すからメソッドチェーンのために Integer にメソッドを作るんじゃなく
0794デフォルトの名無しさん
2009/10/16(金) 06:28:03気にせずどんどんクラスとメソッド作りまくれ
そのうち加減がわかるからさ
0795デフォルトの名無しさん
2009/10/16(金) 07:04:13<%= p @book.title> じゃだめだろ。
せめて <%=h @book.title.inspect %>
つうか、
>その通りにはやってはいる
というのは勘違いだろうな。本人はそのつもりかもしれんが。
まずは ビューの該当箇所のソースをさらせ
0796デフォルトの名無しさん
2009/10/16(金) 07:15:27oaisdoi[332] asdlkfjasldkjfaslkdj
aslkdjf[1111] aodsfasdjflaksjd
みたいなファイルから、数字だけを抜き出そうとして、
while line = gets
if /[(\d+)]/ =~ line
p $1
end
end
とやったのですが、nilだけしか表示されませんでした。間違ってるでしょうか?
0797デフォルトの名無しさん
2009/10/16(金) 07:21:34'[' と ']' にもバックスラッシュが必要
while line = gets
p $1 if line =~ /¥[(¥d+)¥]/
end
0798デフォルトの名無しさん
2009/10/16(金) 07:24:09そして都合の悪いことに、その特殊な意味のほうで正規表現に当てはまってしまってる
0799デフォルトの名無しさん
2009/10/16(金) 08:36:13\を¥にわざわざ置き換える人がいるのは何故なんだ
0800デフォルトの名無しさん
2009/10/16(金) 08:45:09¥ではなく¥です
0801デフォルトの名無しさん
2009/10/16(金) 08:50:02人じゃなくてブラウザだかOSだかが勝手に変換してるんじゃなかったか
0802デフォルトの名無しさん
2009/10/16(金) 08:52:12コード変換テーブルの仕業だったと思う。
0803デフォルトの名無しさん
2009/10/16(金) 08:55:000804デフォルトの名無しさん
2009/10/16(金) 10:01:130805デフォルトの名無しさん
2009/10/16(金) 10:03:19いいえ、羊です
0806デフォルトの名無しさん
2009/10/16(金) 10:51:24その際、SSHトンネルを介しての接続を行いたいと思っています。
その際、通常のRuby/MySQLやMySQL/Rubyといったらライブラリでできるでしょうか。
サンプルが載っているサイト等教えていただければと思います。
よろしくお願いします。
0807デフォルトの名無しさん
2009/10/16(金) 11:25:241.htmlから100.htmlまでをまとめて読み込ませるにはどうすればいいですか?
0808デフォルトの名無しさん
2009/10/16(金) 11:26:59connectするだけじゃないの?
0809デフォルトの名無しさん
2009/10/16(金) 11:30:44`zsh -c 'cat <1-100>.html'`
とか
1.upto(100).map {|i| File.read("#{i}.html") }.join
とか出てこない場合は地道にループ組もうぜ。
0810デフォルトの名無しさん
2009/10/16(金) 13:17:341つひとつ読むしかないと思う。
contents = (1..100).collect {|i| File.read("#{i}.html") }
str = contents.join
p str
0811792
2009/10/16(金) 13:19:30該当ソースは、
コントローラ
class SayController < ApplicationController
def hello
@n=Book.find(:all)
end
end
ビュー
<html>
<head></head>
<body>
本の名前は
<% for n in @n%>
<%= n.titile %>
<% end %>
</body>
</html>
テーブル名 はbooksで、
id:1
title:hoge
というごくシンプルなものです。
やはり色々試してもブラウザには「♯」か配列構造のものしかでません。
ちなみに今さっきカラム名を違うものにして該当箇所を変更してみると上手くいきました。
戻すとできないので、まだ原因はわかりません。
解決はしてないから悔しいですが、ひとまず安心です。色々ありがとうございました。
0812デフォルトの名無しさん
2009/10/16(金) 14:20:15><%= n.titile %>
タイプミス。<%= n.title %> にしろ。あと h をつけろ。
それから <%=h n.title.inspect %> の結果はどうなった。
0813デフォルトの名無しさん
2009/10/16(金) 14:21:010814デフォルトの名無しさん
2009/10/16(金) 14:36:47ちょうどJavaのアノテーションみたいな感じが望ましいんですが。
route '/user/:id' # アノテーション
access :public # アノテーション
def show
@user = User.find(params[:id])
end
0815デフォルトの名無しさん
2009/10/16(金) 14:48:03Javaやれ
0816デフォルトの名無しさん
2009/10/16(金) 14:54:440817デフォルトの名無しさん
2009/10/16(金) 15:06:210819デフォルトの名無しさん
2009/10/16(金) 15:10:41いかないようにはできない?
0820デフォルトの名無しさん
2009/10/16(金) 15:16:020821デフォルトの名無しさん
2009/10/16(金) 15:18:100822デフォルトの名無しさん
2009/10/16(金) 17:45:16endを別の文字にできたらいいなぁと
0823デフォルトの名無しさん
2009/10/16(金) 17:55:02原理的には、たとえば
require 'ripper'
print Ripper.tokenize(File.read(src)).map {|tok| tok == 'ZZZ' ? 'end' : tok }.join
で、ZZZ というトークンを end に置き換えたスクリプトを吐く。
ripperが付属するようになるのは1.9系からだったかな?
0824デフォルトの名無しさん
2009/10/16(金) 17:56:01ねっす
おまけに非推奨
私たちにとって end は文字列ではなく、ちょっと横に長い視認性のよい記号
0825デフォルトの名無しさん
2009/10/16(金) 18:42:270826デフォルトの名無しさん
2009/10/16(金) 18:57:370827デフォルトの名無しさん
2009/10/16(金) 18:59:510828デフォルトの名無しさん
2009/10/16(金) 19:02:36いやなんでもない
0829デフォルトの名無しさん
2009/10/16(金) 19:03:37Emacs
それはそうとプログラミングでは畳み込みって意外と不便でござる
0830デフォルトの名無しさん
2009/10/16(金) 19:40:26routeとshowの関係がわからないのでaccessだけ実装してみた
汎用性とかは考えてない
module Annotation
def access(type) ; @access = type ; end
def method_added(name)
if @access
send(@access,name)
@access = nil
end
end
end
class Hoge
extend Annotation
access :public
def show
:
0831デフォルトの名無しさん
2009/10/16(金) 22:13:05何故か大文字のアルファベットの羅列(V C O U P C Q R Wなど)に分解されています。何故こうなってしまうのでしょうか。
また、どうすれば全角数字を一文字ずつに分解することが出来ますか?
pdfの仕様なのか何なのかさっぱり分からなくて困っています。よろしくお願いします。
全角数字を一文字ずつに分解した後半角数字に変換して、数式の中で使えるようにしたいと考このような処理をしました。
0832デフォルトの名無しさん
2009/10/16(金) 22:20:49宇宙の言葉はテレパシーだからですか
テテテテテテテテテレッパシーですか
0833792
2009/10/16(金) 23:42:20inspectしたところ、ブラウザでの表示は以下のようになりました。
本の名前は [#, #] [#, #]
名前についてはわかりました。もっと考えてつけます。
カラム名変えて、これからがんばって勉強していきたいと思います。
いろいろとご指摘、本当にありがとうございました。
0834デフォルトの名無しさん
2009/10/16(金) 23:49:450835デフォルトの名無しさん
2009/10/17(土) 00:25:45なにこれすごい
method_addedとかそんなトリガーがあったのか
ちょーさんくす
0836デフォルトの名無しさん
2009/10/17(土) 06:06:410837sage
2009/10/17(土) 07:06:51a = "4173"
a.to_i
puts a.class ⇒ String
puts "4173".to_i.class ⇒Fixnum
なんで上のコードだとFixnumにならないのでしょうか。教えてくださいm(_ _)m
0838デフォルトの名無しさん
2009/10/17(土) 07:11:51なので
a = "4173"
b = a.to_i
p b.class
0839sage
2009/10/17(土) 07:14:39おお、普通に使っていて気がつきませんでした。有難うございました。
0840デフォルトの名無しさん
2009/10/17(土) 07:17:24・ 変数はオブジェクトにつけたラベルである
・ オブジェクトは内部状態を変更することはできるが、所属クラスを関係のないものに変更することはできない
ので、「aというハコに入れておいたオブジェクトを別のオブジェクトに変換する」という考え方は無理
「あるオブジェクトを別のオブジェクトに変換して、変換後のオブジェクトに新たに(同名の)変数のラベルをつける」
ということしかできない
0841デフォルトの名無しさん
2009/10/17(土) 07:30:50irb(main):003:0> a = "abc\n"
=> "abc\n"
irb(main):004:0> a.chomp!
=> "abc"
irb(main):005:0> a
=> "abc"
0842デフォルトの名無しさん
2009/10/17(土) 07:34:07irb> a = "abc\n"
irb> a.object_id
-605849488
irb> a.chomp!
irb> a.object_id
-605849488
0843デフォルトの名無しさん
2009/10/17(土) 08:47:010844デフォルトの名無しさん
2009/10/17(土) 08:54:49ただし、引数列挙のカンマは、 puts は引数ごとに改行をはさんで表示するので結果的に改行になる
puts('a', 'b', 'c')
a
b
c
説明用のカッコ省略した一般的記法
puts 'a', 'b', 'c'
a
b
c
to_s されることを期待して紛らわしく書くとこうなる
puts 12,345,678
12
345
678
0845デフォルトの名無しさん
2009/10/17(土) 11:19:560846デフォルトの名無しさん
2009/10/17(土) 11:59:18いう書き方が出来るのを思い出したわ。
0847デフォルトの名無しさん
2009/10/17(土) 12:02:010848デフォルトの名無しさん
2009/10/17(土) 13:51:080849デフォルトの名無しさん
2009/10/17(土) 13:52:040850デフォルトの名無しさん
2009/10/17(土) 14:13:590851デフォルトの名無しさん
2009/10/17(土) 18:32:500852デフォルトの名無しさん
2009/10/17(土) 19:03:280853デフォルトの名無しさん
2009/10/17(土) 19:05:430854デフォルトの名無しさん
2009/10/17(土) 19:07:33その本なりサイトなりさくっと晒せ
0855デフォルトの名無しさん
2009/10/17(土) 19:15:00素早い回答ありがとうございます!
0856デフォルトの名無しさん
2009/10/17(土) 20:26:30連続する整数を - でつないで表示じするにはどうしたらよいでしょう?
具体的には 1,3,4,5,7,8 とあったとき
1,3-5,7-8 と表示したいです。
0857デフォルトの名無しさん
2009/10/17(土) 20:32:49そのように記述しろ
そのような奇術はない
0858デフォルトの名無しさん
2009/10/17(土) 20:36:36とりあえず先頭から調べていくしかないねえ
配列からの取得はArray#shiftが使えるかも
次の整数かどうかはInteger#succがたぶん役に立つ
0859デフォルトの名無しさん
2009/10/17(土) 20:53:45res = Array.new
start = nil
while e = arr.shift do
case
when e.succ == arr.first && start.nil? then start = e
when start then res << "#{start}-#{e}"; start = nil
else res << e
end
end
puts res.join(',')
0860デフォルトの名無しさん
2009/10/17(土) 21:43:517行目、thenと&&の位置が反対だよね?
×when e.succ == arr.first && start.nil? then start = e
○when e.succ == arr.first then start.nil? && start = e
0861デフォルトの名無しさん
2009/10/17(土) 21:44:49おちつけ
0862デフォルトの名無しさん
2009/10/17(土) 21:47:21arr1 = arr.reduce([]) {|r, e| r.empty? || e - r[-1][-1] > 1 ? r << [e] : r[-1] << e; r }
#=> [[1], [3,4,5], [7,8]]
# グループごとに、先頭と末尾を-で繋ぐ。
arr2 = arr1.map {|e| e.size == 1 ? e[0] : "#{e[0]}-#{e[-1]}" }
#=> [1, "3-5", "7-8"]
# 最後に,で繋ぐ。
arr2.join(',')
#=> "1,3-5,7-8"
0863デフォルトの名無しさん
2009/10/17(土) 22:26:30どういう意味?
0864デフォルトの名無しさん
2009/10/17(土) 22:45:13arr1=[[arr.first]]
arr.each_cons(2){|n|n[1]==n[0].succ ? arr1.last << n[1] : arr1 << [n[1]]}
#arr1=> [[1], [3,4,5], [7,8]]
少し分かりやすいかも
0865デフォルトの名無しさん
2009/10/17(土) 23:33:21事前にバイトコードに変換できる実装ってExerbとJRubyだけですか?
YARVってAOTコンパイラついてなかったっけか
0866デフォルトの名無しさん
2009/10/18(日) 00:12:38exerbはバイトコードにはしないよ。
0867デフォルトの名無しさん
2009/10/18(日) 00:55:03Rubinius
0868デフォルトの名無しさん
2009/10/18(日) 01:55:08速さを求めるならWEBRickじゃなくてMongrelやThin使えば。
0869デフォルトの名無しさん
2009/10/18(日) 05:40:09もう半分は WEBRick というか pure Ruby の限界なので、素直に C 拡張を頼れ
0870デフォルトの名無しさん
2009/10/18(日) 05:46:53Ruby の AA && BB は 「AA の処理結果が真である場合にのみ BB を実行しその結果を返す」という処理だ
つまり if AA then BB end と全く同じ(結合度が違うが)
よって
when e.succ == arr.first && start.nil? then start = e
when e.succ == arr.first then start.nil? && start = e
どちらも結果的に全く同一に動作する
コードとしての意図がどうであるかのみが問題になるわけで、
「根本条件が真でなおかつフラグが空であるならフラグを入れる」というのは
これはこれで条件をまとめた記述で普通だと思うがどう
0871デフォルトの名無しさん
2009/10/18(日) 07:27:34>>859のコードを実行すると、質問者所望の結果が得られないから、>>860の指摘をしました。
>>860の修正をすると、質問者が意図した結果が得られています。
※Ruby 1.8.6、Windows XPで確認
0872デフォルトの名無しさん
2009/10/18(日) 08:08:121.8.7だと問題無いな。なんでだろ?
0873デフォルトの名無しさん
2009/10/18(日) 08:13:29elseのないif文ならその通りなんだけどcase文だからなあ
if flag1 && flag2
exec
else
exec
end
if flag1
exec if flag2
else
exec
end
この二つの違い
前者は必ずexecされる、後者はflag1 = true; flag2 = false;でexecされない
>>871
「正しい結果が得られる」も大事だけど、なぜそうなるかを説明できなきゃ単なる黒魔術だ
>>872
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]
1,3-4,5,7-8
0874デフォルトの名無しさん
2009/10/18(日) 11:50:22def to_s()
p "test"
end
end
a = A.new
puts a #ここでto_sがよばれてる
こんなコードを見つけたんだけど
これを↓みたいに自分で名前つけて呼ばせる事はできない?
class A
def to_s2()
p "test"
end
end
def puts2(*n)
end
a = A.new
puts2 a #ここでto_s2を呼ばせたい
0875デフォルトの名無しさん
2009/10/18(日) 12:20:57def puts2(*n)
puts n.map {|o| o.to_s2}
end
0876デフォルトの名無しさん
2009/10/18(日) 12:34:120877デフォルトの名無しさん
2009/10/18(日) 13:20:18それだと
to_s2が定義されないときエラーになっちゃうんだ
putsの時はto_sがないときは処理されなくてあったら処理されてるっていう感じで
>>876
ぐぐってみたらよくわからない用語たちがが・・・
少し調べてみます
0878デフォルトの名無しさん
2009/10/18(日) 13:24:51def puts2(*n)
begin
puts n.map {|o| o.to_s2}
rescue NameError
end
end
0879デフォルトの名無しさん
2009/10/18(日) 14:24:56class Object
def to_s2
to_s
end
end
とかしてもいい。
0880デフォルトの名無しさん
2009/10/18(日) 15:59:43かいてみたんだけど動かない
どこがダメなんでしょ?
m = "123456789123".match( /1/ )
p m.length
0881デフォルトの名無しさん
2009/10/18(日) 16:03:180882デフォルトの名無しさん
2009/10/18(日) 16:04:180883デフォルトの名無しさん
2009/10/18(日) 16:07:200884デフォルトの名無しさん
2009/10/18(日) 16:10:12マニュアルくらい一回は読め
読んでもわからん、でもいいから、一回は読め
MatchData の length(size) は
> 部分文字列の数を返します
ということで、 ( ) で括った部分の数を返す
match を使いたいのならこう
m = "123456789123".match( /(1)/ )
0885デフォルトの名無しさん
2009/10/18(日) 16:11:260886880
2009/10/18(日) 16:17:38色々手段があるんだね
ぐぐって調べたところmatchしか見つかんなかった
マニュアル次から読むようにしますね
count使わせてもらいます
てかカッコが必要だったとは・・・ 正規表現よくわからん
0887デフォルトの名無しさん
2009/10/19(月) 14:06:10しますが、
my @arr = qw(a b c d);
my %hash;
@hash{@arr} = 0..$#arr;
Rubyではどのようにするのでしょうか?
arr = %w(a b c d)
hash = ????
p hash #=> {'a'=>0, 'b'=>1, 'c'=>2, 'd'=>3}
0888デフォルトの名無しさん
2009/10/19(月) 14:12:22irb> p Hash[arr.zip((0..arr.size).to_a)]
{"a"=>0, "b"=>1, "c"=>2, "d"=>3}
こんなもん
0889デフォルトの名無しさん
2009/10/19(月) 14:36:47�d
多分、Rubyのバージョンが古いせいだと思いますが、エラーが出ました。
in `[]': odd number of arguments for Hash (ArgumentError)
当方のRubyのバージョンは、以下です。
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
以下の修正で意図した結果が得られました。
hash = Hash[*arr.zip((0..arr.size).to_a).flatten]
0890デフォルトの名無しさん
2009/10/19(月) 14:58:41厄介な修正だのう
0891デフォルトの名無しさん
2009/10/19(月) 15:17:340892デフォルトの名無しさん
2009/10/19(月) 15:32:591.8.7 での記述が 1.8.6 で動作しないというのはそれなりにフツーだろう
0893デフォルトの名無しさん
2009/10/19(月) 16:12:48ruby 1.8.6、1.9.0両方で動かすなら
h = {}
arr.each_index{|i|h[i] = arr[i]}
0894デフォルトの名無しさん
2009/10/19(月) 16:15:34それにキーと値が逆
h = {}
arr.each_with_index{|e, i|h[e] = i}
0895デフォルトの名無しさん
2009/10/19(月) 16:17:160896デフォルトの名無しさん
2009/10/19(月) 16:20:060897デフォルトの名無しさん
2009/10/19(月) 16:41:24p Hash[*arr.enum_for(:each_with_index).to_a.flatten]
# => {"a"=>0, "b"=>1, "c"=>2, "d"=>3}
とか
h = Hash.new{|t, k| t[k] = arr.index(k) }
p [h["a"], h["b"], h["c"], h["d"]]
# => [0, 1, 2, 3]
とか
だがしかしお薦めは>>894
0898デフォルトの名無しさん
2009/10/19(月) 16:45:14配列サイズの Range を to_a して zip するのが一番近い答のような気もちらっとせんでもない
0899デフォルトの名無しさん
2009/10/19(月) 16:52:08p arr.each.with_index.with_object({}){|(e, i), memo| memo[e] = i }
#=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3}
で済むんだけどなぁ
0900デフォルトの名無しさん
2009/10/19(月) 21:09:36Perlではハッシュの複数の要素に対して一度に代入できるのか。すごいけど、どれくらい使用頻度があるのやら。
Rubyには直接該当する機能はないから、>>894をEnumerableに定義するのがいいと思う。
module Enumerable
def indexing
h = {}
self.each_with_index {|x, i| h[x] = i }
h
end
end
p %w(a b c d).indexing #=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3}
0901デフォルトの名無しさん
2009/10/19(月) 21:16:08Hash→Array はありだと思うが、Array→Hash は変だと思う
0902デフォルトの名無しさん
2009/10/19(月) 21:26:54Hash[arr.each_with_index.map{|e,i| [e,i]}]
2行でいいなら>>894だが
0903デフォルトの名無しさん
2009/10/19(月) 21:42:04つまりは逆引きだし、Array#indexを多用するケースには使えそう
h = indexing(arr)
p arr[0] #=> a
p h["a"] #=> 0
Perlの動作は知らないけど、indexingの名前を付けるなら
Array#indexとの対称性を考えて重複時は上書き無しにしとくといいかも
self.each_with_index {|x, i| h[x] ||= i }
0904デフォルトの名無しさん
2009/10/20(火) 01:36:10向こうだと結構使われるのかも知れない
0905デフォルトの名無しさん
2009/10/20(火) 14:33:39requireってちょっと違うような・・・
0906デフォルトの名無しさん
2009/10/20(火) 14:35:090907デフォルトの名無しさん
2009/10/20(火) 14:43:300908デフォルトの名無しさん
2009/10/20(火) 14:51:51どういう動作をさせたいのかが判らんと何とも言えんが
基本的にはrequireで、用途によってはload
Cに例えるなら…
requireはインクルードガード付きの#include、
loadはインクルードガード無しの#includeに近いかな?
0909デフォルトの名無しさん
2009/10/20(火) 14:53:50ただし、ローカル変数は読み込めない
ローカル変数利用部を「切り出した」場合は文字列として eval する
ファイルに信頼できない何が書いてあっても Ruby スクリプトとして実行するのでセキュリティに注意
0910デフォルトの名無しさん
2009/10/20(火) 15:15:36あーやっぱ変数ってダメなんですか・・
やりたいことは、
スクリプトの上のほうに
変数宣言がいっぱい増えてきたから
それを他のファイルにまとめて
load "hensuu"
とかしたかったです
0911デフォルトの名無しさん
2009/10/20(火) 15:17:520912デフォルトの名無しさん
2009/10/20(火) 15:19:43気にするな
慣れろ
というか読みにくくてイライラするからいちいちンなことすんな
スクリプト(またはクラス定義、または def initialize)の上部に変数定義が大量にあるのは Ruby では普通
クラス作ってるなら Hoge::Configure モジュールにして include したりするというような手もなくもないが
0913デフォルトの名無しさん
2009/10/20(火) 15:21:46本当に全部他の場所にあるのなら、それはそれでわかりやすいと思う
なんかかっちょええ解決策とかないもんかね
0914デフォルトの名無しさん
2009/10/20(火) 15:27:29class Hoge
include Hoge::Configure
def initialize(params)
set_init_vars
set_param_to_vars(params)
end
end
class Hoge
module Configure
def set_init_vars
@foo = ...
@bar = ...
end
end
end
というのはやったことがある
めっちゃ自己満足だった
0915デフォルトの名無しさん
2009/10/20(火) 15:31:21グローバル変数の親戚みたいな状態になっていそう
0916デフォルトの名無しさん
2009/10/20(火) 15:36:03そのようなクラスやインスタンスも見当たらないのですが・・・.
0917デフォルトの名無しさん
2009/10/20(火) 15:41:44マウスの座標を取得するクラスとメソッドはあるだろ
毎秒何かをさせるメソッドってのもあるだろ
結果をファイルに書き出すメソッドってのもあるだろ
それ組み合わせればいけんじゃね
0918916
2009/10/20(火) 15:49:33さすがに一行めのメソッドは探していません^^;
3行から5行までのメソッドを探すときにどのように探せばいいでしょうか?
ruby-gnome2のサイトをみていっているのですがわかりません.
0919デフォルトの名無しさん
2009/10/20(火) 15:51:55興味があったら、perlrun(1) で -P オプションの説明を見てくるといい。
0920デフォルトの名無しさん
2009/10/20(火) 16:05:42Obtains the current pointer position and modifier state.
The position is given in coordinates relative to window.
Returns: [window, x, y, mask]
Gtk::Windowから実装に使われているGdk::Windowにアクセス
できるのかどうかは知らん。
0921デフォルトの名無しさん
2009/10/20(火) 17:05:49require 'gtk2'
window = Gtk::Window.new
window.signal_connect("destroy") do
Gtk.main_quit
end
window.signal_connect("motion-notify-event") do |w, e|
puts "#{e.x}, #{e.y}"
end
window.add_events(Gdk::Event::POINTER_MOTION_MASK)
window.show_all
Gtk.main
0922デフォルトの名無しさん
2009/10/20(火) 17:08:410923デフォルトの名無しさん
2009/10/20(火) 17:11:52ぬう、GTKぜんぜんわからん…
0925デフォルトの名無しさん
2009/10/20(火) 17:51:11>やりたいことは、
>スクリプトの上のほうに
>変数宣言がいっぱい増えてきたから
>それを他のファイルにまとめて
>load "hensuu"
>とかしたかったです
なんかPerlやPHPでのやり方だね。
Rubyではローカル変数のスコープはそのファイルに限定されてしまうので、
どうしても他のファイルに分けたかったら、ローカル変数じゃなくて
グローバル変数やインスタンス変数にするしかなさそう。
つうかさ、変数がたくさんあるんだったら、たぶんグループ分けできるから、
それごとにクラスを定義してそこにインスタンス変数をつくったほうがいいんじゃないかな。
0926デフォルトの名無しさん
2009/10/20(火) 18:24:38とりあえず最初は意義とか意味とか考えず形式的にクラス作っていいぞ
0927デフォルトの名無しさん
2009/10/21(水) 01:24:510928デフォルトの名無しさん
2009/10/21(水) 07:09:44というか定数に変数持たせるくらいならクラス定義使え
あまり認識されてない上に説明しづらい事実だが
インスタンス変数はトップレベルでも普通に使える
@foo = 'YES!'
def disp_foo
puts @foo
end
disp_foo
0929デフォルトの名無しさん
2009/10/21(水) 07:52:52定数なんじゃないかと思わなくもない
どっちにしても、情報が少なすぎて何とも言えん
0930デフォルトの名無しさん
2009/10/21(水) 16:54:560931デフォルトの名無しさん
2009/10/21(水) 17:05:34WinInet を呼べばできるはず
普通は Ruby に任せるが
Ruby でできることをわざわざ API でやる理由はないからな
0932デフォルトの名無しさん
2009/10/21(水) 21:29:511.9を入れるにはcheckinstallなどを使ってソースから入れるしか方法は無いのでしょうか?
0933デフォルトの名無しさん
2009/10/21(水) 21:33:500934デフォルトの名無しさん
2009/10/21(水) 21:42:25PHPの講座作ってみました
0935デフォルトの名無しさん
2009/10/21(水) 21:44:27パッケージが無いのならYES
パッケージを自作してもいい
0936デフォルトの名無しさん
2009/10/21(水) 22:17:32/etc/yum.repos.d/CentOS-Base.repo
[extras]
[centosplus]
0937デフォルトの名無しさん
2009/10/21(水) 23:38:290938デフォルトの名無しさん
2009/10/22(木) 00:59:20Java Servletみたいにあらかじめインスタンス化されないの?
CGIみたいに毎回呼び出すんじゃあ、CPU負荷がかかって当然のような……
0939デフォルトの名無しさん
2009/10/22(木) 01:18:01むしろ毎回コード読み直すからより条件が悪い
つーか生成コストが問題になるのは設計の問題じゃねーの
ハンドラは単なるブリッジで十分なんだぞ?
オブジェクト生成そのものはMRI全体の動作速度に直結するから大したコストにならんようできてるだろ
0940932
2009/10/22(木) 02:44:53>>935
>>936
遅くなりましたが、ありがとうございます。
指摘頂いたDebianを調べてみましたが、rubyに限らずパッケージ管理全般が簡単になりそうなので思い切ってDebianに切り替えてみようと思います。
パッケージの自作も勉強になるかな、とも思いましたがCentOSを使い続けてこの先もパッケージ管理に悩まされれるのはやっぱり面倒くさい。。
0941デフォルトの名無しさん
2009/10/22(木) 03:37:210942デフォルトの名無しさん
2009/10/22(木) 03:59:59お前ブラックだな
0943デフォルトの名無しさん
2009/10/22(木) 06:20:01以下のコードを動かしたかったのですが、tweetstreamがないと言われて動かなかったため、
Big Sky :: javascriptで動くtwitter streamクライアントを作るならばmultipart/mixedを使うべき
http://mattn.kaoriya.net/software/lang/javascript/20091013002658.htm
下記をgemでインストールしようとしたのですが、yajl-rubyに依存していたようなのですが、
intridea's tweetstream at master - GitHub
http://github.com/intridea/tweetstream
下記のyajl-rubyがnative extensionでインストールに失敗しました。
brianmario's yajl-ruby at master - GitHub
http://github.com/brianmario/yajl-ruby
nmakeがない、といってコケているのでVC++の環境が認識されていないのだと思います。
この場合、どのバージョンのVC++コンパイラを用意すべきなんでしょうか?
環境は、Windows Vista SP2 32bits、Ruby 1.8.7でうs
0944943
2009/10/22(木) 06:30:45> fatal error C1189: #error : MSC version unmatch
と言われてしまいました。該当箇所のファイル(ruby/lib/ruby/1.8/i386-mswin32/config.h)を見た所
#if _MSC_VER != 1200
#error MSC version unmatch
#endif
が原因だと思うのですが、これってVC6が必要ということでしょうか?
VC6て今でも手に入るのでしょうか・・・VC++Toolkit 2003みたいに配布されていればいいのに・・・
0945デフォルトの名無しさん
2009/10/22(木) 07:13:03安全のためにバージョン固定してるだけだから、そこ書き換えると動く
ftp://ftp.microsoft.com/Softlib/MSLFILES/NMAKE15.EXE
をダウンロードして実行して出てきたNMAKE.EXEとNMAKE.ERRをパスの通るとこに置いても動く
0946デフォルトの名無しさん
2009/10/22(木) 11:58:40>make が必要なだけにも見える
makeが必要なだけなのにCコンパイラがエラーを出すわけないでしょ。
0947デフォルトの名無しさん
2009/10/22(木) 12:57:25ttp://www1.axfc.net/uploader/Sc/so/47986
0948デフォルトの名無しさん
2009/10/22(木) 13:54:05VBAで
ActiveDocument.SaveAs "¥¥foo.htm", FileFormat:=wdFormatHTML
に相当するのをrubyで書きたいのですが、「wdFormatHTML」という部分の指定方法が分からず困っています。
文字列で指定してみましたが、エラーになりました。
試したコードはこちら。
require 'win32ole'
msword = WIN32OLE.new('Word.Application')
msword.visible = true
doc = msword.documents.open('¥¥foo.doc')
msword.activeDocument.saveAs('¥¥foo.htmm', 'wdFormatHTML')
#msword.activeDocument.saveAs('¥¥foo.htmm', 'FileFormat'=>'wdFormatHTML')
実行結果(エラー)はこちら。
foo.rb:5:in `method_missing': saveAs (WIN32OLERuntimeError)
OLE error code:0 in <Unknown>
<No Description>
HRESULT error code:0x80020005
種類が一致しません。
目的のVBAはこちら。
ActiveDocument.SaveAs FileName:="¥¥foo.html", _
FileFormat:=wdFormatHTML, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False
環境はWindowsXP, ActiveScriptRuby 1.8.7, MS-Office 2007
よろしくお願いします。
0949デフォルトの名無しさん
2009/10/22(木) 14:10:02調べ方は・・・wordだとどうするんだったかな、とりあえずぐぐったら8っぽい
あとこの板にrubyのwindowsスレあるからそっちもよろしく
0950デフォルトの名無しさん
2009/10/22(木) 14:17:10WIN32OLE.const_load(msword, Word)
0951デフォルトの名無しさん
2009/10/22(木) 15:20:11http://pc12.2ch.net/test/read.cgi/tech/1155031689/
0952デフォルトの名無しさん
2009/10/22(木) 18:40:35ありがとうございます。
wdFormatHTML = 8
msword.activeDocument.saveAs('¥¥foo.html', wdFormatHTML)
でいけました。
#はじめてwin32ole使ったけど、これはすごい。こんな便利なものがあるなんて知らなかったよ。
0953デフォルトの名無しさん
2009/10/22(木) 18:55:21WIN32OLE.const_load(msword, Word)
p Word::WdFormatHTML
0954デフォルトの名無しさん
2009/10/22(木) 18:58:510955デフォルトの名無しさん
2009/10/22(木) 19:54:40VCで拡張ライブラリをコンパイルしようとすると
バージョンの違いやらなにやらで悲惨なことになる
mingwでのコンパイルオススメ
0956aDMbFWhUezcHArB
2009/10/23(金) 01:54:070958943
2009/10/23(金) 13:43:46ああ、mingwでもいいのか。つか、ActiveScriptRuby の1.8.7にmingwでコンパイルした拡張ライブラリつかっても大丈夫なの?
ちょっと環境整えてみるか
関係ないけど、coLinuxのubuntuで同じgem入れたらなんごとなきに入ったw Linuxだとこの辺楽屋根
0959デフォルトの名無しさん
2009/10/23(金) 14:05:20歴史的経緯
よく言えばこの問題にマジギレした人たちが RubyInstaller を作ってる
ttp://github.com/oneclick/rubyinstaller
0960デフォルトの名無しさん
2009/10/23(金) 14:07:16mingwでもぜんぜんいいです。
>>957
というわけで、mingwとのバイナリ互換性のためです。
0961デフォルトの名無しさん
2009/10/23(金) 14:08:400962デフォルトの名無しさん
2009/10/23(金) 14:19:540963デフォルトの名無しさん
2009/10/23(金) 14:20:11文脈からすると、今更VC6ってことじゃないの?
0964デフォルトの名無しさん
2009/10/23(金) 14:50:41リンク先に問題があるのかと思ったw
0965デフォルトの名無しさん
2009/10/23(金) 16:39:23DLL(iconvとかopensslとかncursesとか)がmsvcrt.dllとリンクされている現状
ではrubyだけVC8とか9にはできない、という理由。
0966デフォルトの名無しさん
2009/10/23(金) 16:44:09ttp://www.infoq.com/jp/news/2009/08/ruby-installer
でもusaビルドは>>960らしい
ttp://www.garbagecollect.jp/~usa/d/200712b.html#id20071212_P1
まあどちらもmsvcrt.dllが問題の根っこ
0967デフォルトの名無しさん
2009/10/23(金) 18:12:00ある状態になったら次の処理をするようなスクリプトにしたいのですが、
以下のようなループを作るしかないですか?
(並行で動いている必要はないのでスレッドにはしていませんが)
until (装置の状態判定)
SNMPで装置状態取得
sleep 1
end
判定式に間違いがあると無限ループになる危険がありますし、
もっと上手い方法があるんじゃないかと思い質問させてもらいました。
よろしくお願いいたします。
0968デフォルトの名無しさん
2009/10/23(金) 18:17:11"1 2@3#4".split(" " , "@" , "#")
こんな事が出来ればなぁと思ったんですがダメみたいで
0969デフォルトの名無しさん
2009/10/23(金) 18:18:36それが普通だと思う
気になるならスレッド使うか条件つき break でも別途入れとけ
>>968
"1 2@3#4".split(/\s|@|#/)
0970デフォルトの名無しさん
2009/10/23(金) 18:24:18splitの区切り文字には正規表現が使えるので
.split(/[ @#]/)
とすれば良い
2文字以上のが使いたいなら角カッコ使わず|で区切れ
0971デフォルトの名無しさん
2009/10/23(金) 18:52:43細かい話だが、取得と判定とが互いに別処理なら、↓の方が安全。
SNMPで装置状態取得
until (装置の状態判定)
SNMPで装置状態取得
sleep 1
end
0972デフォルトの名無しさん
2009/10/23(金) 19:06:12そんな手があったんですね
ありがとうございます
0973デフォルトの名無しさん
2009/10/23(金) 19:42:07File.open("text.txt", "r"){|f|
while line = f.gets
buf << line
end
}
bufの処理(ある文字がある行を除く)
File.open("text.txt", "w"){|f|
buf.each{|line|
f.puts line
}
}
これを1回のFile.openで書きたいのですが
よろしくお願いします。
0974デフォルトの名無しさん
2009/10/23(金) 19:49:03lines = File.open('text.txt').realines
# なんか消す
lines.delete_if{|line| line =~ /re/}
File.open('text.txt','w').print(lines.join)
これでいいじゃん
0975デフォルトの名無しさん
2009/10/23(金) 19:55:18せっかくなので統一
lines = File.open('text.txt'){|f| f.readlines}
# なんか消す
lines.delete_if{|line| line =~ /re/}
File.open('text.txt','w'){|f| f.print(lines.join)}
File オブジェクトは読み書きごとに作ったほうが安心安全
0976デフォルトの名無しさん
2009/10/23(金) 20:01:20ほぼ同時アクセスで
pc1がtextを読む
pc2がtextを読む
pc1がtextを書く
pc2がtextを書く
となると、ファイルの内容が壊れそうなのですが。
(pc1,2で消す行が違うとします。)
0977デフォルトの名無しさん
2009/10/23(金) 20:13:29それは Ruby の知ったこっちゃねー
ある瞬間に書き込む先のファイルが、一瞬前と同一の内容であるかどうかを Ruby は保証しない
読み込んでから書き込むまでの間に自分以外の誰もファイル内容を変更して欲しくないのなら
OS のファイルシステムにファイルロックを頼む
File クラスのインスタンスメソッド lock が使える
0978デフォルトの名無しさん
2009/10/24(土) 03:16:16ソロそろう目。
0979デフォルトの名無しさん
2009/10/24(土) 03:23:05次スレ立つ前に埋めてどうする
0980デフォルトの名無しさん
2009/10/24(土) 06:14:09チェックを終えてから実際に書き込みをはじめるまでのわずかな間に書き換えられてしまうことを防げない
これを「そんなクソ短いタイミングで割り込みなんて起こりっこねえよ」と情緒的解決をするのなら、
そもそも「スクリプト内で一瞬で終わる処理の間に割り込みなんて起こらねえよ」と情緒的決断をすべき
両方を保証するにはファイルに排他処理をかけるしかない
980なので次スレを立てる
0981デフォルトの名無しさん
2009/10/24(土) 07:08:05http://pc12.2ch.net/test/read.cgi/tech/1256332692/
0982デフォルトの名無しさん
2009/10/24(土) 07:17:10> これを1回のFile.openで書きたいのですが
# 読み書き両用でファイルをオープンする
File.open("text.txt", "r+") do |f|
# 排他的ロックをかける
f.flock(File::LOCK_EX)
# ファイルを読み込み
buf = []
f.each do |line|
buf << line if line =~ /^¥w+$/
end
# ファイルポインタを先頭に戻す
f.rewind()
# ファイルサイズをゼロに切り詰める
f.truncate(0)
# ファイルを書き込み
buf.each {|line| f.write(line) } # or f.write(buf.join)
end # ファイルが閉じられるときにロックも自動的に解除される
0983デフォルトの名無しさん
2009/10/24(土) 07:18:34あと
buf = []
f.each do |line|
buf << line if line =~ /^¥w+$/
end
は
buf = f.grep /^¥w+$/
と書ける。
0984デフォルトの名無しさん
2009/10/24(土) 08:22:32GJ
0985デフォルトの名無しさん
2009/10/24(土) 12:28:19ありがとうございます。
分かりやすいコメントもつけていただき、勉強になりました。
動作確認ができましたので、ご報告いたします。
0986デフォルトの名無しさん
2009/10/24(土) 15:31:23class Foo
def initialize
p "aaa"
end
def initialize(str)
self.nitialize
p str
end
end
Foo.new
Foo.new("aaa")
って許可されてないん?
0987デフォルトの名無しさん
2009/10/24(土) 15:42:41class Foo
def initialize(str=nil)
p "aaa"
p str if str
end
end
と書く
0988デフォルトの名無しさん
2009/10/24(土) 15:46:13引数の有無なら>>987のようにしてもいいし、込み入ったものは
メソッドの引数を*args のようにしておき、メソッド内で場合分けをする。
0989デフォルトの名無しさん
2009/10/24(土) 15:48:01def initialize(params = nil)
p "aaa"
setup(params) if params
end
def setup(params)
p params
end
private setup
end
というパターンも見るな
0990デフォルトの名無しさん
2009/10/24(土) 15:50:23ありがと
引数に明示的な種類が無いから種類でのオーバーロードは出来ないのは知ってたけど
引数の数でのオーバーロードも出来ないんだ
>def initialize(str=nil)
のところのstr=nilっていうのは第一引数の指定が無い場合はnilが入っているって解釈でいいのかな?
0991デフォルトの名無しさん
2009/10/24(土) 15:54:29というかこういうデフォルト引数の書き方をしないと
Foo.new
とだけ書いたときに ArgumentError で落ちる
0992デフォルトの名無しさん
2009/10/24(土) 15:56:42なんかモヤモヤするがこれで動作するし気にしないことにする
0993デフォルトの名無しさん
2009/10/24(土) 19:17:03size=FileTest.size?("filename")
if size >= 1048576
s="#{size/1048576}M"
elsif size >= 1024
s="#{size/1024}K"
else
s="#{size}"
end
0994デフォルトの名無しさん
2009/10/24(土) 19:51:14そのへんの変換に関しては特にサポートはないと思う
1048576ってなんじゃらほ、という可能性があるからべき乗で書いておく、くらい?
0995デフォルトの名無しさん
2009/10/24(土) 20:00:50ActiveSupport
0996デフォルトの名無しさん
2009/10/24(土) 21:00:21def mes(params = (default = true; nil))
ということもできる。一応。
0997デフォルトの名無しさん
2009/10/24(土) 22:15:40「なんごとなき」って初めて聞いたわ
0998デフォルトの名無しさん
2009/10/24(土) 23:14:220999デフォルトの名無しさん
2009/10/24(土) 23:16:221000デフォルトの名無しさん
2009/10/24(土) 23:16:49http://pc12.2ch.net/test/read.cgi/tech/1256332692/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。