Ruby 初心者スレッド Part 32
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/10/24(土) 06:18:12★注意★ 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/10/24(土) 06:19:04Q:
いちから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/10/24(土) 06:20:08・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/10/24(土) 06:21:53・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/10/24(土) 06:22:47Ruby 初心者スレッド Part 31
http://pc12.2ch.net/test/read.cgi/tech/1253176267/
Ruby 初心者スレッド Part 30
http://pc12.2ch.net/test/read.cgi/tech/1249687283/
0006デフォルトの名無しさん
2009/10/24(土) 07:04:48・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!? 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/10/24(土) 07:07:22・Rubygem 0.x
極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
Rubygem は 1.0 も 1.1 も 1.2 も肝心なとこにバグ持ちなので極力 1.3 などの最新を使うこと
0008デフォルトの名無しさん
2009/10/24(土) 12:42:590009デフォルトの名無しさん
2009/10/24(土) 13:03:4917 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 18:28:30
>>14
最初は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 というものが何であるかを気にする必要はありません。
36 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 19:07:18
RubyistMagazineのページに、チュートリアルが紹介してあんのな。
ttp://jp.rubyist.net/magazine/?FirstStepRuby
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> ttp://jp.rubyist.net/magazine/?0002-FirstProgramming
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。
0010デフォルトの名無しさん
2009/10/24(土) 13:05:21105 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/18(金) 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。
>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。
0011デフォルトの名無しさん
2009/10/24(土) 17:44:09とりあえず落ちていることを報告。
0012デフォルトの名無しさん
2009/10/24(土) 19:48:01cucumberという受け入れテストツールを動かしてみているのですが、
コマンドプロンプト上だとwin32consoleをインストールすることで色づけがされるのですが、
UTF-8が化けてしまいます。
そこで、cygwinのターミナルck上で動かそうとしたのですが、今度は色づけがされません。
どういったことを疑うべきでしょうか?
cucumber 0.4.2
ruby 1.8.7
Windows Vista SP2
0013デフォルトの名無しさん
2009/10/24(土) 19:54:21コマンドプロンプトというか CMD.EXE 上で UTF-8 文字が表示できないのは当たり前
cygwin のターミナルで着色されないのは環境変数 $TERM あたりが実際のターミナルと合ってないのだろう
0014デフォルトの名無しさん
2009/10/24(土) 20:55:110015デフォルトの名無しさん
2009/10/24(土) 21:26:230016デフォルトの名無しさん
2009/10/24(土) 22:19:070017デフォルトの名無しさん
2009/10/24(土) 23:17:480018デフォルトの名無しさん
2009/10/24(土) 23:20:14それが解決したら文字コードまわりの問題の殆どが解決する稀瓦斯
0019デフォルトの名無しさん
2009/10/24(土) 23:20:55やりたいことは、ブロックの引数の数によって処理を変えることです。
def f()
n = ブロックの引数の数
if n <= 0
...
else
...
end
yield
end
0020デフォルトの名無しさん
2009/10/24(土) 23:31:08def mes(*arg, &block)
if arg.size.zero? then
puts "no arg"
else
arg.each_with_index do |e, i|
puts "#{i}: #{e}"
end
end
yield if block
end
irb> mes('a', 'b')
0: a
1: b
irb> mes
no arg
0021デフォルトの名無しさん
2009/10/25(日) 00:14:09def f
prc = Proc.new
n = prc.arity
p n
end
f{|a,b,c| } #=> 3
詳しくはマニュアルでProcを調べろ
0022デフォルトの名無しさん
2009/10/25(日) 00:39:050023デフォルトの名無しさん
2009/10/25(日) 00:41:42with_index
0024デフォルトの名無しさん
2009/10/25(日) 00:52:23ぐぐってみたんですが使い方がわからないです
こうではないですよね・・
[1,2].map.with_index do |n,i|
puts i
end
0025デフォルトの名無しさん
2009/10/25(日) 00:56:25端末から ruby と入力すると exitで$(bash)に戻れません
どうすれば$(bash)に戻れるのでしょうか?
Googleで調べてみたのですが
あまりに初歩すぎる疑問のようで
回答を見つけることが出来ませんでした
0026デフォルトの名無しさん
2009/10/25(日) 01:11:03自分で定義しろということでしょうか?
0027デフォルトの名無しさん
2009/10/25(日) 01:11:16Control + D
恐らく、やりたいことに最も近いのは ruby でなく irb を使うこと
ruby はエディタで既に書いたコードを実行するために使うと覚えとこう
0028デフォルトの名無しさん
2009/10/25(日) 01:30:11chcp 65001
できるだけって感じだけど
0029デフォルトの名無しさん
2009/10/25(日) 01:32:30ほんとだ、$(bash)に戻ってこれた
けど、rubyの人達って Emacs Emacsって書いてありますけど
やっぱりEmacsなんでしょうか?
0030デフォルトの名無しさん
2009/10/25(日) 02:05:34.with_index の使い方は>>24であってる。(0始まりに注意)
が、バージョンによってはそもそも存在しなかったり、require が必要
だったりするので、バージョンを明示せよ。
0031デフォルトの名無しさん
2009/10/25(日) 02:20:37本気でプログラマ目指すとかならemacsとかviも触っておくに越したことはないけど
普通に勉強するならgedit辺りで良いと思うよ
gedit ファイル名 &
でコード書いて、セーブしたらターミナルに戻って
ruby ファイル名
で実行すれば良いんじゃないかな
ファイルに書き起こすまでもないようなコードはirbで直接書いて実行するのも良い
0032デフォルトの名無しさん
2009/10/25(日) 02:27:131.8.7はeach_with_indexもしくはto_enum.with_index.eachとto_enum.with_index.map
1.8.6だとeach_with_indexと・・・mapはわからん、enumerator.rb呼んでもダメそうだし
0033デフォルトの名無しさん
2009/10/25(日) 02:31:360034デフォルトの名無しさん
2009/10/25(日) 02:32:27&aElig;
0035デフォルトの名無しさん
2009/10/25(日) 02:36:23中身にはイテレータ使わずにループ書いたほうが楽そうだな
0036デフォルトの名無しさん
2009/10/25(日) 02:55:50ありがとうございます
ヴァージョンは1.8.6です
each_with_indexの動作確認できました
0037デフォルトの名無しさん
2009/10/25(日) 03:16:320038デフォルトの名無しさん
2009/10/25(日) 03:38:03PHPみたいにWeb専用言語でもないからじゃないか?
使えるアプリもそれほど多くないと思うし
0039デフォルトの名無しさん
2009/10/25(日) 04:18:53PHPやPerlで用が済むから
0040デフォルトの名無しさん
2009/10/25(日) 04:38:57これで間に合わない場合にのみほかの手段を講じる
0041デフォルトの名無しさん
2009/10/25(日) 07:38:331.8.6だと
require 'enumerator'
p %w(a b).enum_with_index.map{| v,i | [v,i] }
# => [["a", 0], ["b", 1]]
0042デフォルトの名無しさん
2009/10/25(日) 07:44:14test = []
test[0] = "aa"
test[1] = "bb"
test[99] = "cc"
t = Array.new(3)
t[99]= 88
0043デフォルトの名無しさん
2009/10/25(日) 08:06:38test[0] = "aa"
test[1] = "bb"
test[3] = "cc"
t = Array.new(3)
t[6]= 6
p test
p t
#=>
["aa", "bb", nil, "cc"] [nil, nil, nil, nil, nil, nil, 6]
0044デフォルトの名無しさん
2009/10/25(日) 08:12:43仕様上、この構文が許されてるのかどうかを知りたいんです
特に、Array.newなんて関数が用意されてるのに
t = Array.new(3)
t[6]= 6
こんなことできるんじゃArray.newの立場はどこへ?
0045デフォルトの名無しさん
2009/10/25(日) 08:13:18print "Content-type: text/html\n\n"
begin
a=0
if a==0
#end
puts "OK"
rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end
ブラウザで「Internal Server Error」が表示されます。
エラーを捕捉できないのでしょうか?
0046デフォルトの名無しさん
2009/10/25(日) 08:26:23できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら?
ttp://cgi-exception.rubyforge.org/
0047デフォルトの名無しさん
2009/10/25(日) 09:35:13Array.new は関数ではない
揚げ足取りではなく本当に学習的な意味で、それを関数と捉えてはいけない
Array.new は Array クラスの インスタンス(オブジェクト)を生成する
Array オブジェクトの [] メソッドは内部領域にデータを追加する
そんだけ
0048デフォルトの名無しさん
2009/10/25(日) 09:38:59>>45もシンタックスエラー?以外は捕捉できます。
0049デフォルトの名無しさん
2009/10/25(日) 09:55:24検出する処理さえ実行される前だから、当然捕捉できない。
0050デフォルトの名無しさん
2009/10/25(日) 10:22:42ある程度大きな配列で、サイズが事前にわかっているなら
動的にちまちまと拡張するよりは最初にサイズを予約したほうが効率的
なんだけど普通は気にしなくていい
0051デフォルトの名無しさん
2009/10/25(日) 10:32:17なおかつインデックスで要素追加をすること前提
0052デフォルトの名無しさん
2009/10/25(日) 12:41:05Array オブジェクトの []= メソッドはオブジェクトの内部領域にデータを追加する
だと思う
0053デフォルトの名無しさん
2009/10/25(日) 17:57:56newは演算子でしたね
でもスクリプトの場合って
コンパイルするわけじゃないし演算子も関数も違いないような気がしますけど
構文的はOKなんですね
(ちょっと かいたスクリプトが途中で落ちてしまうのでバグの箇所を探しています・・)
>>50
なるほど、やっぱりその程度の使い方なんですね
0054デフォルトの名無しさん
2009/10/25(日) 18:26:28Rubyだとnewは演算子でもなんでもなく、Classクラスから継承したインスタンスメソッド
http://doc.okkez.net/187/view/method/Class/i/new
0055デフォルトの名無しさん
2009/10/25(日) 18:37:40呼び名が用語的に間違っているから正しい呼び方をしろという意味ではない、たぶん
Array.new は Array クラスのインスタンス(オブジェクト)を返す
Array.new(引数つき) は Array オブジェクトを作成し、引数に応じた状態に変更してから返す
Arrayオブジェクト[インデックス]=値 は Arrayオブジェクトの []= メソッドに引数 (インデックス, 値) を渡し、
メソッドに規定された状態変更等を行ってから Array オブジェクトを返す
地の文の [] は Array.new を簡単に書けるようにわざわざ組み込まれたもので、Array.new と同じものを返す
0056デフォルトの名無しさん
2009/10/25(日) 18:41:060057デフォルトの名無しさん
2009/10/25(日) 18:42:44JavaとかC++からの連想だとわからないよね。
0058デフォルトの名無しさん
2009/10/25(日) 18:58:58C で書かれてる Array や Hash の場合は格納されたデータ本体を外部から触れないからなー
どこに格納されてると説明する?
0059デフォルトの名無しさん
2009/10/25(日) 19:07:46まさにそういうCレベルで意識させることに「内部領域」という言葉の怖さを見てとったんだけど
それが目的なら仕方ないとしか
0060デフォルトの名無しさん
2009/10/25(日) 19:09:24>インストールしてみましたが、シンタックスエラー?は表示されませんでした。
require 'cgi'
require 'cgi-exception'
eval <<'END_OF_SCRIPT'
# ...
# ここにコードを書く
# ...
END_OF_SCRIPT
というふうにすれば、シンタックスエラーも表示されたりしないかな。
0061デフォルトの名無しさん
2009/10/25(日) 19:21:13URI は、インスタンス変数に URI データを格納してるじゃん
Net::HTTP も、インスタンス変数にサーバからのデータを格納してるよな
でも Array とか String とか Hash とか Regexp とかは、インスタンス変数があるわけじゃないよな
0062デフォルトの名無しさん
2009/10/25(日) 19:24:24Array.new自体の存在意義を問うてる?
並のユーザーから見たこいつの心髄は、第二引数によるデフォルト値の設定だと思う
> ary = Array.new(3, "hoge")
=> ["hoge", "hoge", "hoge"]
> ary[5]
=> nil
> ary[5] = "fuga"
=> "fuga"
> ary
=> ["hoge", "hoge", "hoge", nil, nil, "fuga"]
まあこれといいHash.newといい、迂闊に触ると火傷するけどね
> ary[0][1] = "a" # ary[0]の二文字目を上書き
> ary
=> ["hage", "hage", "hage", nil, nil, "fuga"]
>>60
スクリプト本体を別ファイルにしてloadなりrequireすれば
問題のスクリプトに触れる前にbeginブロックが実行されるから捕捉できる
begin
load "example.rb"
rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end
0063デフォルトの名無しさん
2009/10/25(日) 19:25:110064デフォルトの名無しさん
2009/10/25(日) 19:25:52Rubyのインスタンス変数は原則プライベートだから
インスタンスがどういう情報の持ち方をしていようが何の興味もないよ
0065デフォルトの名無しさん
2009/10/25(日) 19:51:01もしApacheを使ってるなら
Apacheの設定次第で、エラーの内容をログファイルに出すこともできる
どうしても表示されないなら試してみるのもいいかも
006645
2009/10/25(日) 21:37:48シンタックスエラーが表示されました。
今回はこの方法を使わせていただきたいと思います。
ありがとうございました。
0067デフォルトの名無しさん
2009/10/25(日) 21:40:230068デフォルトの名無しさん
2009/10/25(日) 21:43:030069デフォルトの名無しさん
2009/10/25(日) 22:56:40誰か解決策を教えてください。twitterのライブラリは入れてあるつもりなのですが。。
エラーメッセージは下です。
# ruby ./aaa.rb./aaa.rb:2:in `require': no such file to load -- twitter (LoadError)
from ./aaa.rb:2
環境はこうなっています。
# gem list
*** LOCAL GEMS ***
actionmailer (2.3.4)
actionpack (2.3.4)
activerecord (2.3.4)
activeresource (2.3.4)
activesupport (2.3.4)
crack (0.1.4)
hoe (2.3.3)
httparty (0.4.3)
json_pure (1.1.9)
mash (0.0.3)
oauth (0.3.6)
rack (1.0.1)
rails (2.3.4)
rake (0.8.7)
ruby-hmac (0.3.2)
rubyforge (2.0.3)
twitter (0.6.15)
0070デフォルトの名無しさん
2009/10/25(日) 22:59:13007169
2009/10/25(日) 22:59:32#require 'ruby gems'
require 'twitter'
require 'time'
USERNAME = 'bot'
PASSWORD = '!@#QWE'
client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ))
client.update( Time.now)
0073デフォルトの名無しさん
2009/10/25(日) 23:14:531.9なら不要だし、1.8では、ない場合はどうせエラーにするだけだし、
あるならRUBYOPTにセットしとけ、みたいな感じ。
0074デフォルトの名無しさん
2009/10/25(日) 23:24:43君は使いもしないライブラリを読み込むべきだと考えるのかね
0075デフォルトの名無しさん
2009/10/25(日) 23:30:38他人に強制したり期待したりするものではない
0076デフォルトの名無しさん
2009/10/25(日) 23:43:480077デフォルトの名無しさん
2009/10/25(日) 23:47:280078デフォルトの名無しさん
2009/10/25(日) 23:57:390079デフォルトの名無しさん
2009/10/25(日) 23:58:470080デフォルトの名無しさん
2009/10/26(月) 00:03:540081デフォルトの名無しさん
2009/10/26(月) 00:53:10それはそうなってるから。
0082デフォルトの名無しさん
2009/10/26(月) 02:34:52gemが入ってたので、ssleay32.dllとzlib.dllをbinフォルダにいれて
パスとおして
gem update --system
ってコマンド打ったら
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.5
:0:Warning: Gem::SourceIndex#search support for String patterns is deprecated
Updating RubyGems to 1.3.5
Installing RubyGems 1.3.5
D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-update-1.3.5/lib
/rubygems/config_file.rb:39:in `new': wrong number of arguments (5 for 4) (Argum
entError)
from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:39:in `<class:ConfigFile>'
from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:12:in `<top (required)>'
from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `require'
from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `<top (required)>'
from setup.rb:25:in `require'
from setup.rb:25:in `<main>'
ってかんじで怒られた、どっか間違ったか?
0083デフォルトの名無しさん
2009/10/26(月) 06:20:080084デフォルトの名無しさん
2009/10/26(月) 07:12:57p0
def initialize(dllname, func, import, export = "0")
p243
def initialize(dllname, func, import, export = "0", *rest)
rubygems-update-1.3.5 の記述
if RUBY_VERSION > '1.9' then
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP',
'L', :stdcall
SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
else
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP',
'L'
SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path
0085デフォルトの名無しさん
2009/10/26(月) 08:15:390086デフォルトの名無しさん
2009/10/26(月) 08:20:42「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、
さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」
というラブコール
0087デフォルトの名無しさん
2009/10/26(月) 08:26:30俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに
make test-allがなかなか通らない……
メンテナの方々はどんな作業をやってるんだろう
0088デフォルトの名無しさん
2009/10/26(月) 08:33:12ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない
008912
2009/10/26(月) 10:14:19Thanks
rspecはちゃんとck(cygwin)でも色分けできるんですけどね・・・。
TERMはcygwinでした。export TERM=xtermとかにもしてみたけど駄目ですタ(この辺よく理解してないです)
>>17
ついでにPower Shellも入れてみたんですが、UTF-8対応して中田 orz
nkfでUTF-16にしても化けるし意味わからんちん
0090デフォルトの名無しさん
2009/10/26(月) 12:49:19本当にありがとうございました
0091デフォルトの名無しさん
2009/10/26(月) 12:57:450092デフォルトの名無しさん
2009/10/26(月) 13:07:20リア充は帰れ
ラブレターってのは
「○○って△△さんのこと好きなんだって」
「えーうそー△△ちゃん可哀想〜」
みたいに周りからじっくり攻めていくのが正しい姿
0093デフォルトの名無しさん
2009/10/26(月) 13:10:000094デフォルトの名無しさん
2009/10/26(月) 13:24:46突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事
0095デフォルトの名無しさん
2009/10/26(月) 13:33:47> 「えーうそー△△ちゃん可哀想〜」
やめろ
0096デフォルトの名無しさん
2009/10/26(月) 14:57:090097デフォルトの名無しさん
2009/10/27(火) 04:59:52ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される)
ri GCと打ってもNothing known about GCと出力されるのです。
これはrubyのriドキュメントがインストールされてないということでしょうか?
RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。
0098デフォルトの名無しさん
2009/10/27(火) 05:51:33checkinstallはよくわからないけど、自前でコンパイルするときは
./configure
make
sudo make install
sudo make install-doc # ドキュメントのインストール
が必要だった気がする
0099デフォルトの名無しさん
2009/10/27(火) 05:59:15一度インスタンスをnewしてdumpした後、その後オブジェクトを変更して
追加されたor削除されたクラス変数を検知して初期化したいです
どのようにしたらいいでしょうか 以下のようなソースです
class DataObj
attr_accessor :cnt
def initizalize
@cnt=0
end
end
class SaveData
attr_accessor :data
def initialize(file_name)
load(file_name)
end
def load(file_name)
if File.exist?(file_name)
@data = File.open(file_name, "rb"){|f| Marshal.load(f) }
else
@data= DataObj.new()
end
end
def save
File.open("test.dat", "wb"){|f| Marshal.dump(@data, f) }
end
end
0100デフォルトの名無しさん
2009/10/27(火) 06:35:07復元してからオブジェクトが同一かどうかチェックするしかないな
0101デフォルトの名無しさん
2009/10/27(火) 06:52:34そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね
保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は
どのような処理をすればいいでしょうか、ということみたいです
クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか
イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? }
という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)
0102デフォルトの名無しさん
2009/10/27(火) 07:22:48@ で始まるのはインスタンス変数
初期化の意味がわからない
特定の条件の場合にオブジェクトを同一とみなして欲しいというときは
適宜 == メソッドを再定義して new == old を行う
class C
def initialize(params=nil); @params=params; end
def ==(other)
self.instance_variables.all? do |e|
self.instance_variable_get(e) == other.instance_variable_get(e)
end
end
end
c1 = C.new('a')
c2 = C.new('b')
p c1 == c2 #=> false
c3 = C.new('a')
p c1 == c3 #=> true ('a' == 'a' が true なので)
default = C.new
c4 = C.new
[c1, c2, c3, c4].each do |c|
if c == default then puts 'default!' else puts 'modified' end
end
# => modified, modified, modified, default!
0103デフォルトの名無しさん
2009/10/27(火) 07:29:36>クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか
よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。
バージョン番号が違っていれば初期化、とか。
0104デフォルトの名無しさん
2009/10/27(火) 07:29:490105デフォルトの名無しさん
2009/10/27(火) 07:43:321. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。
RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。
2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、
これはcygwinでも同じでしょうか。
('b'が必要なプラットフォームが何かを知ろうとしています)
0106デフォルトの名無しさん
2009/10/27(火) 07:58:240107デフォルトの名無しさん
2009/10/27(火) 08:04:18・・・恥ずかしながらインスタンス変数とクラス変数を勘違いしていました
>>103氏のいうようなバージョン管理でやろうとすると
class DataObj
attr_accessor :ver,:a,:b,:c
def initialize(obj) #
@ver=0
@a,@b,@c=0,1,2
end
end
class DataObj_1 < DataObj
attr_accessor :d,:e,:f # 変数を追加
def initialize(obj)
super
@ver=1
@a,@b,@c=obj.a,obj.b,obj.c
@d,@e,@f=3,4,5
end
end
current_version=1
a=load("save.dat")
a=Data_Obj_1 if a.ver == current_version # あるいは a === DataObj_1 かな?
ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・
0108デフォルトの名無しさん
2009/10/27(火) 08:08:23if a.ver < current_version の間違いですね
0109デフォルトの名無しさん
2009/10/27(火) 09:13:301. は ttp://jp.rubyist.net/magazine/?0017-CodeReview#l17
0110デフォルトの名無しさん
2009/10/27(火) 09:32:33その記事にある「Win32API.soがrequireできるかどうか」は、
1.9だと全部ダメとか、1.8でもWINE環境でrequireできちゃう
とかあるので注意。
2の方は、いわゆるDOSISHなプラットフォームが該当する。
具体的にはcygwin以外のWindows、DOS(djgpp)、
x68000(human68k)、OS/2(emx)
0111デフォルトの名無しさん
2009/10/27(火) 09:37:09クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう
0112デフォルトの名無しさん
2009/10/27(火) 09:52:380113デフォルトの名無しさん
2009/10/27(火) 09:55:160114デフォルトの名無しさん
2009/10/27(火) 09:55:44それが望ましいっす。
0115デフォルトの名無しさん
2009/10/27(火) 10:32:51Marshalで保存したオブジェクトは自分のクラスを記録してるから
別のクラスのインスタンスとして復元する事は出来ない
Hashを中間データとして使う方法をすすめる
ついでにmarshal_dumpとmarshal_loadについて調べておくといい
0116デフォルトの名無しさん
2009/10/27(火) 10:39:580117デフォルトの名無しさん
2009/10/27(火) 11:09:13ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと
Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを
読み込ませるにはどうしたらいいですか?
0118デフォルトの名無しさん
2009/10/27(火) 11:12:47というようなとこから考えて欲しいと思った
とりあえずいちばん簡単なの
dirs = ['a', 'b', 'c', 'd', 'e', 'f', ...]
dirs.each do |dir|
File.open("#{Data/#{dir}}/1.html"){|f| f.read}
end
0119デフォルトの名無しさん
2009/10/27(火) 11:13:36Dir.glob("Data/*/1.html") do |file| ... end
0120117
2009/10/27(火) 11:24:16とても参考になります!
ちょっくら試してみます。
ありがとうございました!
0121デフォルトの名無しさん
2009/10/27(火) 22:59:08どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね?
loop { /正規表現オブジェクト/ }
この場合 /正規表現オブジェクト/ はループのたびに生成されるの?
0123デフォルトの名無しさん
2009/10/27(火) 23:04:27いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます
ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される
最初の1回だけにしたい場合は //o と o オプションをつける
この理屈で言うと、/re/ がたくさんあるとメモリ食う
0124デフォルトの名無しさん
2009/10/27(火) 23:19:19なるほど、ありがとうございました。
0125デフォルトの名無しさん
2009/10/27(火) 23:23:51cygwin1.5系や素のcmd.exeは未だにCP932だから、UTF-8はそのままだと表示できません。
考えられる方法はだいたい以下の通り。
(1)素のcmd.exeにて、nkfでCP932に変換して表示
(2)cmd.exe にて chcp 65001 によって UTF-8 モードにして UTF-8 を表示 (挙動妖しい)
(3)cygwin 1.5 にて、nkf で CP932 に変換して表示
(4)cygwin 1.7 (デフォルト UTF-8) にて UTF-8 で表示 (開発途上)
まぁ、どれもろくでもないんで、cucumberだったらHTMLにでも書き出して、
ブラウザで見た方がいいんじゃないですかね。
0126デフォルトの名無しさん
2009/10/27(火) 23:31:54コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください
0127デフォルトの名無しさん
2009/10/28(水) 00:05:560128デフォルトの名無しさん
2009/10/28(水) 09:30:420129デフォルトの名無しさん
2009/10/28(水) 09:39:400130デフォルトの名無しさん
2009/10/28(水) 09:56:03マニュアル嫁
文字列だから String のマニュアルを読む
ttp://www.ruby-lang.org/ja/man/html/String.html
013112
2009/10/28(水) 09:59:20http://gs.inside-games.jp/news/196/19696.html
1993年に発行されたGame Playersマガジンのカプコン副社長Joseph Morici氏のインタビューによると、
当時日本で作られたロックマンのローカライズを検討していたMorici氏は、“Rockman”というタイトル名が単純に気に入らなかったそうです。
”あのタイトルは酷すぎました。そこでMega Manという名前を思いついたんです。
するとそのアイデアは気に入られて北米版で使われることになりました。ゲーム内容は日本版と全く同じでしたけどね。”
↓
パッケージ画像
http://gs.inside-games.jp/_files/images/9696.jpg
___
/ ||Mega|| ∧_∧
|.....||Man || ( ) どうしてこんなことに…
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
013212
2009/10/28(水) 10:00:08013312
2009/10/28(水) 12:03:40>>12 の件ですが、結論から言いますと、
--color を引数に明示的に指定することで解決しました。
コマンドプロンプトでは色づけされる、んならすでに指定してたんじゃないんかい!と言われそうなのですが、
実際には指定しておらず、
.featureファイルに以下の記述をして「i18nで日本語を使う」とcucumberに知らせていた場合にだけ、
何故かコマンドプロンプトのみ色付けされるようでした。
# language: ja
--colorの指定は、ルートディレクトリにcucumber.ymlファイルを置いて、
default: features -f pretty --color -l ja
のように記述することで、デフォルトの引数を指定できました。
とりあえず、解決ということでありがとうございました。
013412
2009/10/28(水) 12:04:50>>125
ありがとうございます。
もっとロクでもない方法(?)として、以前はRUBY_PLATFORMがwin32でTERMがnilのときだけ、
$stdout.writeでSJISにnkfで変換する方法も使ってました。
Railsスレあたりに投下した覚えがあるので検索すればでてくるかも。
cygwinはUTF-8化用のDLLを入れてあり、ターミナルソフトのck.exeでUTF-8を表示できるのですが、
cygwin上でwin32のautotest使うと、テストが再実行しようとCtrl+Cを押すと何故かされず、即終了してしまうんですよね。
最近は、coLinuxのUbuntuを入れて、かなり普通にあたりまえに動くしUTF-8も問題ないので、それでもいいか、という気がしています…。
0135デフォルトの名無しさん
2009/10/28(水) 12:19:05それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。
0136デフォルトの名無しさん
2009/10/28(水) 15:05:18今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、
もっといい方法があると思うので、ぜひ教えてください。
0137デフォルトの名無しさん
2009/10/28(水) 15:42:490138デフォルトの名無しさん
2009/10/28(水) 16:56:22node.cって何?
1.8ならenv.h、node.hが普通にあるはず。
1.9なら方法はないので諦めてください。
0139デフォルトの名無しさん
2009/10/28(水) 19:18:40それともextやREADMEと同じ場所においておくもの?
0140デフォルトの名無しさん
2009/10/28(水) 19:21:510141デフォルトの名無しさん
2009/10/28(水) 20:42:02基本的には同じところに置かないといけない。
別のところにも置くことはできるけど、それを聞いてくるということは、説明してもしかたなさそう。
0142デフォルトの名無しさん
2009/10/28(水) 22:54:07何のために?
99%方針が間違ってる。
0143デフォルトの名無しさん
2009/10/29(木) 17:06:54マッチングでマッチした文字列以降を表示させるにはどうすればいいですか?
0144デフォルトの名無しさん
2009/10/29(木) 17:13:22簡単なのは「キーとなる文字列の直後から必要な別のキーの直前まで」をマッチさせること
$1 とか $2 とかの正規表現の勉強をするといい
# <title></title>で囲まれた文字列
/<title.+?>(.+?)<\/title>/i =~ html
puts $1
0145デフォルトの名無しさん
2009/10/29(木) 17:14:47コードを書いて実行すればいいよ
0147デフォルトの名無しさん
2009/10/29(木) 18:17:28Kerberos認証をしたいのですが何か方法はありますでしょうか?
(ApacheのBasic認証にKerberosを利用するのではなく、
Rubyで作成したCGIの任意の箇所で認証処理をしたいです。)
ライブラリ等あればいいのですが…。
Kerberos認証を行うシェルを作成して、
CGIからユーザー名とパスワードを渡して実行させるしかないですかね?
0148デフォルトの名無しさん
2009/10/29(木) 20:26:46$'
0149デフォルトの名無しさん
2009/10/29(木) 21:34:35使ったことないけど、http://rubyforge.org/projects/krb5-auth/ とかかな。
0150デフォルトの名無しさん
2009/10/30(金) 10:12:29Time#to_i の秒数って、時差というかタイムゾーンとかどうなってますか?
0151デフォルトの名無しさん
2009/10/30(金) 11:07:10to_iが返すのはUnixタイム。
0152デフォルトの名無しさん
2009/10/30(金) 11:11:15Ruby で初めて意識したという人にとってはやや不親切だ
0153デフォルトの名無しさん
2009/10/30(金) 11:19:130154デフォルトの名無しさん
2009/10/31(土) 04:36:090155デフォルトの名無しさん
2009/10/31(土) 07:35:31どういう意味?
0156デフォルトの名無しさん
2009/10/31(土) 10:27:39NGにしておいても一向に損をしないことを保証する
0157デフォルトの名無しさん
2009/10/31(土) 16:53:54CPUを100%使い切って計算しようとおもったら、マルチスレッド対応にしないとだめかな?
タスクマネージャーみたら、なんかCPUに余力が有るみたいなんだが・・・
0158デフォルトの名無しさん
2009/10/31(土) 17:05:460159デフォルトの名無しさん
2009/11/01(日) 21:12:16HTは、1コアを2コアに見せかける技術だから、1コアをもし使いきっているなら、
タスクマネージャでどう表示されようが、100パーセント使い切ることになるように思うけど、どうだろう。
ファイルやネットワークの入出力がある場合は100パーセントになりにくいけど、
非同期I/Oを使って頑張れば100になるんじゃないかなー。
最近のCPUは2コアが普通だから、158のように複数プロセス起動しないとだめだろうね。
0160デフォルトの名無しさん
2009/11/01(日) 23:49:32すごいなお前ら
0161デフォルトの名無しさん
2009/11/02(月) 00:06:26のような、中身が繰り返しているような文字列のマッチはどんなふうにするのがいいでしょうか?
/begin ((a|b),)*(a|b) end/
とすればできましたが、2回同じこと(a|b)を書いているのがちょっと気になります
あと、できれば繰り返しの部分を$1,$2,$3・・・のようにあとで取得したいのですが、可能でしょうか?
0162デフォルトの名無しさん
2009/11/02(月) 04:12:38>2回同じこと(a|b)を書いているのがちょっと気になります
正規表現なら我慢して書くしかないように思う。
>繰り返しの部分を$1,$2,$3・・・のようにあとで取得したい
マッチする個数がわからないと難しい。
/begin ((a|b)(,(a|b))*) end/
として、
$1.split(/,/)
とするぐらいか?
あと (a|b) は、もしほんとにaとbを使うだけなら[ab]のほうがいい。
/begin ([ab](,[ab])*) end/
0163デフォルトの名無しさん
2009/11/02(月) 08:00:11(?<名前>任意の表現) と
\g<名前> の組み合わせでできる。
/begin ((?foo<(a|b)>),)*\g<foo> end/
0164デフォルトの名無しさん
2009/11/02(月) 08:06:530165デフォルトの名無しさん
2009/11/02(月) 08:23:440166デフォルトの名無しさん
2009/11/02(月) 10:51:591.9ならOnigurumaが標準だろ
0167デフォルトの名無しさん
2009/11/02(月) 10:55:27それまでは両バージョン用併記か注釈で対応バージョン明記
0168デフォルトの名無しさん
2009/11/02(月) 10:58:371.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
0169デフォルトの名無しさん
2009/11/02(月) 11:04:48正規表現は1.9で書き込むとか、
ここの住人はダブルスタンダードだな、おい
0170デフォルトの名無しさん
2009/11/02(月) 11:24:050171デフォルトの名無しさん
2009/11/02(月) 11:24:40さすがに今1.9を使うなって奴はいないだろ
0172デフォルトの名無しさん
2009/11/02(月) 11:28:12だって君の言う「ここの住人」って、一人しか居ないわけでもなければ、
まったく同じ考え方をする集団ってわけでもないもの。
ダブルスタンダード認定は、前者と後者が同じ人間によって書き込まれたことを
確認してからでないと。
0173デフォルトの名無しさん
2009/11/02(月) 11:32:480174デフォルトの名無しさん
2009/11/02(月) 16:05:250175デフォルトの名無しさん
2009/11/02(月) 16:27:060176デフォルトの名無しさん
2009/11/02(月) 17:33:300177デフォルトの名無しさん
2009/11/02(月) 17:39:55います
0178デフォルトの名無しさん
2009/11/02(月) 21:01:12>1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
だな。1.8.7からの新機能の場合もその旨書いておいてほしいよね。
今度から>>1に追加しといてもらおう。
>>171
>いつの話だよ
>さすがに今1.9を使うなって奴はいないだろ
おまえはまず>>1を声だして100回読め
0179デフォルトの名無しさん
2009/11/02(月) 21:27:12繰り返しの計算処理なんだわ
具体的には、ニューラルネットの実装やってる
はんぱない回数の計算が学習には必要なんだけど
1プロセスだと、スレッド分けしても、複数CPUは使ってくれないってことかな?
だとすると、プロセス間通信とかを眼中にいれて設計しないとダメってことかな?
ってことは、向かうところはdRubyあたり?
0180デフォルトの名無しさん
2009/11/03(火) 01:06:180181デフォルトの名無しさん
2009/11/03(火) 03:07:06実用とか研究とかじゃなくて趣味だけどね。
Rubyでやってもいいんじゃない?ってかんじで
0182デフォルトの名無しさん
2009/11/03(火) 06:53:38puts 'Hello World!'
ですがたまに以下のように書き方も見かけます。
$stdout.puts 'Hello World!'
どっちも正しいと思いますが行儀の良い書き方という意味では後者になるのですか?
0183デフォルトの名無しさん
2009/11/03(火) 07:07:130184デフォルトの名無しさん
2009/11/03(火) 07:16:11fprintf(stdout,"Hello World\n");の違いみたいなもんだぞ
簡略できるようにしてあるのにあえて冗長に書く必要はないと思う
0185デフォルトの名無しさん
2009/11/03(火) 07:48:49が、これに限ってはまず無いだろうな
前者の関数的メソッド puts の出力先を捻じ曲げるためには $stdout をいじるしかないわけだが
それをすると後者の $stdout.puts も捻じ曲がるんで意味がない
Ruby における 関数的メソッド puts と $stdout は不可分だ(C の puts を知ってると引っかかるかも)
もしなんらかの気の迷いで関数的メソッド puts の出力先の $stdout が標準出力以外になってるなら
それは putserr とか putsfile とかなんかメソッドを新たに作るべき
むしろ後者を書かれるとがっかりだ
むしろそのサイトなり解説書なり晒せ
0186デフォルトの名無しさん
2009/11/03(火) 11:15:02REM *******************************************
REM * 作成者:ビル・ゲイツ(マイクロソフト) *
REM *******************************************
のようなファイルをつくりたいのですが、
REM *******************************************
REM * 作成者:<%=PERSON%>(<%=COMPANY>) *
REM *******************************************
と定義して、行の末尾の '*' の位置を変えないことってできますか?
0187デフォルトの名無しさん
2009/11/03(火) 11:17:47$stdout が指してるオブジェクトに puts というインスタンスメソッドが定義されてる可能性はそれほど高くない
0188デフォルトの名無しさん
2009/11/03(火) 11:20:47文字列なんだから String のマニュアルをダメもとで読め
ttp://www.ruby-lang.org/ja/man/html/String.html#ljust
0189デフォルトの名無しさん
2009/11/03(火) 11:30:54それはputsに応答しないオブジェクトを$stdoutに入れたヤツが悪くないか?
STDOUTがIOのインスタンスなんだし、IOやそのサブクラスのインスタンスであるか
相応のduck typingができることを期待するのは当然だと
実際に期待できない例にはどんなのがある?
0190デフォルトの名無しさん
2009/11/03(火) 11:46:20なるべく使わない方がいいんじゃねーの
0191デフォルトの名無しさん
2009/11/03(火) 11:48:21begin
class << (stderr = "")
alias write <<
end
# テスト
$stderr, stderr = stderr, $stderr
ensure
$stderr, stderr = stderr, $stderr
assert_match(/.../, stderr)
end
0192デフォルトの名無しさん
2009/11/03(火) 11:49:05廃止された$defoutと混同してないか?
0193デフォルトの名無しさん
2009/11/03(火) 12:24:410194182
2009/11/03(火) 18:12:54公式も見てみましたが、
単にputsとした場合はKernelモジュールのputsを指し、
そのputsはデフォルトで$stdoutに対して出力をするようですね。
やっぱり冗長なだけなようですね。
>>187
>むしろ後者を書かれるとがっかりだ
>むしろそのサイトなり解説書なり晒せ
具体的には、「JavaプログラマのためのRuby入門」という本の初っ端の例文が
$stdout.puts 'hello world !'.upcase
となっていました。
著者のartonさんはコミッタですよね?
0196デフォルトの名無しさん
2009/11/03(火) 18:16:55それはJavaのSystem.out.printlnになじんだ者が類推しやすいように
そう書いてあるんじゃあないか?
0197182
2009/11/03(火) 18:36:500198デフォルトの名無しさん
2009/11/03(火) 19:36:32後ろの章を読めばわかるのかなとは思うけど
0199デフォルトの名無しさん
2009/11/03(火) 20:34:50perlでいう perldoc -l のような。
0200デフォルトの名無しさん
2009/11/03(火) 20:55:12ri
refe
他にもなんかあったような気がするけど忘れた
0201デフォルトの名無しさん
2009/11/03(火) 21:01:03gem の場合は gem which
$ gem which nokogiri
(checking gem nokogiri-1.3.3 for nokogiri)
/home/me/.gem/ruby/1.8/gems/nokogiri-1.3.3/lib/nokogiri.rb
標準ライブラリの場所を探す方法はあれば知りたい
いちいち「/usr …のどこだっけ」と試行錯誤するのは面倒
0202デフォルトの名無しさん
2009/11/03(火) 21:23:14gem whichはgem以外にも使えたはず
0203デフォルトの名無しさん
2009/11/03(火) 21:44:58いいこときいた
0204デフォルトの名無しさん
2009/11/03(火) 21:54:21/usr/lib/ruby/1.8/uri.rb
ほほう
String とか Regexp とか rb のファイルになってないものは駄目っぽいな
0205デフォルトの名無しさん
2009/11/03(火) 22:11:29あざっす。
0206デフォルトの名無しさん
2009/11/03(火) 22:26:20$ gem which Readline
/usr/local/lib/ruby/1.9.1/x86_64-darwin10.0.0/Readline.bundle
>>204
StringやRegexpでどのファイルに出てきて欲しいんだw
0207デフォルトの名無しさん
2009/11/04(水) 08:30:58>と定義して、行の末尾の '*' の位置を変えないことってできますか?
<%= str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *
とするしかない。
0208デフォルトの名無しさん
2009/11/04(水) 08:31:51<% str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *
0209デフォルトの名無しさん
2009/11/04(水) 09:23:58"hello"と'hello'のように書けますが、皆さんはどちらをメインに使っていますか?
もちろん二つの書き方には違いがあることは理解してますが、
多くのケースではどちらの書き方でも可なので、そういう場合にどちらの書き方をすべきか迷っています。
個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。
ただ入門書やネットに転がってるサンプルなどを見ると大抵ダブルクウォーテーションのようです。
CやJavaなどの習慣でダブルを使う人が多いのでしょうか?あるいは他にメリットがあったりしますか?
0210デフォルトの名無しさん
2009/11/04(水) 10:13:32文字列を数まんことか大量に使用すれば若干違うかもしれんが、たぶん他の部分チューニングしたほうが速い
よって、それ以外が効いてくることになる
で、まあ、" " が人気があるのは
変数展開を入れようとしたときにクオート部分をわざわざ書き換えなくてもいいとか
\n とかがそのまま利用できて面倒がないとか
大部分のフォントで '' の文字見栄え的な安定性が低くて使っててガッカリだからとか
そういう理由だと思う
'hello\nworld' と書いてそのまま \n が表示されて「ん?」となるのは一度や二度ではない
0211デフォルトの名無しさん
2009/11/04(水) 10:27:08別にダブルクォートで統一してもいいとは思うんだけど
最近、なんとなくシングルクォートの方がきれいに見えるようになった
あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
0212209
2009/11/04(水) 10:28:08おおなるほど…分かりやすい説明ありがとうございます。
それだけ例を示されると確かにダブルクウォーテーションのほうが理にかなってますね。
0213デフォルトの名無しさん
2009/11/04(水) 10:29:56ダブルクォートを最終的にシングルクォートに書き換えることはよくある
それはやっぱり意思表示だな
0214209
2009/11/04(水) 10:32:10ありがとうございます。
>あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
これは自分も思っていました。
変数展開が必要になった時にダブルクウォーテーションを使った方が目的がはっきりするというか。
0215209
2009/11/04(水) 10:42:19シングルクォート
flash[:notice] = 'Profile was successfully created.'
<%= link_to 'New profile', new_profile_path %>
ダブルクォート
format.html { render :action => "new" }
どっちも使ってる…。どういう基準で分けてるのかさっぱり分からない。
ただ適当なのか、何かちゃんとした理由があるのかな。
0216デフォルトの名無しさん
2009/11/04(水) 10:49:28ハッシュのキーとか値とか、配列の短い文字列とか
あるいは生成されて埋め込まれた文字列とか
irb> 1.upto(10).to_a.map{|e| e.to_s}
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] ←この部分をコピペ
深い意味は何もない
打ってる途中で
「あーシングルクォートでよかったなーと思ったが修正面倒なのでこのままダブルで閉じる未来の俺訂正よろしく」
とか普通なので気にしてたら禿げるぞ
0217デフォルトの名無しさん
2009/11/04(水) 11:08:33強い動機になるよね。
0218デフォルトの名無しさん
2009/11/04(水) 14:10:01>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
このルールでいいと思う。あとは ¥n をいれるときとか。
0219デフォルトの名無しさん
2009/11/04(水) 18:36:31面倒だし両方の表記が入り乱れることになるだけ
なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
0220デフォルトの名無しさん
2009/11/04(水) 18:48:35その機能を使用しないのなら、そもそも機能が有効になっていないほうが好ましい
めんどいからダブルでいーじゃん、というのでももちろん構わないし
スクリプトに直接リテラルで書くぶんには実際上の問題は何もないが、
慎重にシングルとダブルを使い分けるという姿勢は賞賛されるべき
0221デフォルトの名無しさん
2009/11/04(水) 18:51:52>なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
べつに嫌いとまでだれも言ってないけど。>>213が書いたように、シングルクォートを使うことで、
式展開もなにもありませんという意思表示をしているだけ。
なんでこんな曲解するやつがいるんだろうね。
0222デフォルトの名無しさん
2009/11/04(水) 20:03:43アトリビュートというかシンボルに置き換えられるのようなケースではダブルを使ってる気がする
0223デフォルトの名無しさん
2009/11/04(水) 21:01:01文字としてのバックスラッシュを扱いたい場合は多いな
>>210 とは逆に、バックスラッシュが解釈されるせいで「ん?」と思う場面のが多い
0224デフォルトの名無しさん
2009/11/04(水) 21:19:40ネットで拾うサンプルも大抵ダブルクォートだ。
単純に、ダブルクォートで文字列を表現する言語が多いという理由だけの気がする。
コーディングスタイルにおいて慣習ってのは大きな要素なんじゃないかな。
○○にすべきだ、という100%正しい解釈があったとしてもそれが慣習に反していれば採用するのはやっぱり難しい。
0225デフォルトの名無しさん
2009/11/04(水) 21:30:240226デフォルトの名無しさん
2009/11/04(水) 21:31:390227デフォルトの名無しさん
2009/11/04(水) 21:34:040228デフォルトの名無しさん
2009/11/04(水) 21:34:120229デフォルトの名無しさん
2009/11/04(水) 21:34:350230デフォルトの名無しさん
2009/11/04(水) 22:10:31こないだ '%s' % str したらMatzの写真で踏み絵させられた
わかる人にはわかるらしい
ちなみに初めてのRuby的には
「後述のエスケープ文字や式展開を含まない場合、
一重/二重のどちらの引用符を用いるかは好みの問題です」(p.58)
だって
0231デフォルトの名無しさん
2009/11/04(水) 22:50:02sqlite3-ruby(1.2.5)
dbi(0.4.3)
dbd-sqlite3(1.2.5)
sqlitedll-3_6_19
上記の環境でDBI経由だと
ERROR DBI::InterfaceError: Unable to load driver 'SQLite3' (underlying error: uninitialized constant DBI::DBD::SQLite3)
というエラーが発生します。
ドライバが見つからないと言うようなエラーだと思うんですが、全部最新です。
何が原因でしょうか?
0232デフォルトの名無しさん
2009/11/04(水) 23:50:350233デフォルトの名無しさん
2009/11/05(木) 00:06:05×SQLite3
○sqlite3
db = DBI.connect("DBI:sqlite3:#{filename}")
0234デフォルトの名無しさん
2009/11/05(木) 00:44:56ごめん>>233は間違い
うちは
db = DBI.connect("DBI:SQLite3:test.db")
で接続できた
ドライバはdbd-sqlite3で Unable to load driver だから
sqlite3自体がインストールされてない?
0235デフォルトの名無しさん
2009/11/05(木) 02:13:52>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
>というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。
正解
0236デフォルトの名無しさん
2009/11/05(木) 04:09:190237デフォルトの名無しさん
2009/11/05(木) 06:34:11変数展開したい時だけダブル
これで特に困ったことは無い
空文字が''になるので、他人にソース見せる時に突っ込まれることはあるが。
0238デフォルトの名無しさん
2009/11/05(木) 08:22:340239デフォルトの名無しさん
2009/11/05(木) 08:36:12いちばんわかりやすいのは String.new だが
余談だが俺は配列も Array.new だしハッシュも Hash.new だ
自分から [] や {} を使うことはゼロ
0240231
2009/11/05(木) 08:39:55>>231に書いた以外に必要なドライバがあれば
ドライバ名を教えてください。
>>234
一応 gem search を実行すると全部インストールされているんですが
sqlite3-ruby をインストールするときにリンク先のような状態になったのが
気になりました。
ttp://www.rubylife.jp/railsinstall/other/index1.html
そのほかはバージョンもそろえてるしSQLite3の本体も入ってるし、
もうどうすればいいのか・・・
0241デフォルトの名無しさん
2009/11/05(木) 08:51:14好みの問題くらいでどっちでもいい?
0242デフォルトの名無しさん
2009/11/05(木) 09:12:0510万個くらい Array.new と [] が書いてあったら、後者のほうがパース完了は遅いとは思うが
0243デフォルトの名無しさん
2009/11/05(木) 09:23:13DBI.available_driversで使えるドライバがわかる
そこに"dbi:SQLite3:"が無ければインストールに失敗してる
0244デフォルトの名無しさん
2009/11/05(木) 10:06:41var = Array.new
初期値がある場合は
var = ["hoge", "hogege"]
って感じだな。
特に理由は無いけどこういうパターンで書く人が多い気がする。
0245デフォルトの名無しさん
2009/11/05(木) 10:13:010246デフォルトの名無しさん
2009/11/05(木) 10:36:360247デフォルトの名無しさん
2009/11/05(木) 14:25:200248デフォルトの名無しさん
2009/11/05(木) 15:03:37そうかあ?初期値がなくても [] と {} を使うほうが多いと思うけど。
デフォルトの初期値が必要な場合だけHash.newとかを使うんじゃないか。
0249デフォルトの名無しさん
2009/11/05(木) 16:51:24- とかdeleteだと複数あった時に全部消えちゃう
0250デフォルトの名無しさん
2009/11/05(木) 16:58:300251デフォルトの名無しさん
2009/11/05(木) 17:01:43簡単にはできない
若いの1個だけ消したいと予測
arr = ["a", "b", "c", "b", "a"]
arr.delete_at(arr.index('b'))
p arr
["a", "c", "b", "a"]
0252231
2009/11/05(木) 18:21:11driver = DBI.available_driversしてみました
ArrayEmptyでした orz=3
一度アンインストールしてインストールし直しても同じです
どうやればインストール成功するんでしょうか(´;∀;)
0254231
2009/11/05(木) 19:19:05やっぱりドライバが認識されませんでした
同じコードとドライバでも1.9.1だと動きまする・・・
0255デフォルトの名無しさん
2009/11/05(木) 19:24:010256231
2009/11/05(木) 20:05:44NetBeans6.7.1でデバッグをすると「ドライバがないぞゴルァ」って言われるんですが
コンソールから実行すると何事もなかったように動きます。
どうもお騒がせしました。
0257デフォルトの名無しさん
2009/11/05(木) 21:30:320258デフォルトの名無しさん
2009/11/05(木) 22:32:30が違うんでないかい?
0259231
2009/11/05(木) 22:41:01自分もそう思って確認したんですが
インストールされてるバージョンは1.8.7-p72と1.9.1-p243の二つしかなく
コンソールもねとびーんも1.8.7-p72を使ってました。
ねとびーんのGemマネージャにも、きちんとドライバは登録されていました。
その後も色々試していますが、未だに原因がわかりませんです。
0260デフォルトの名無しさん
2009/11/06(金) 01:03:100261デフォルトの名無しさん
2009/11/06(金) 01:29:25n = 3
"%d %d\n" % [n, n + 1] =~ Regexp.new("%d %d\n" % [n, n + 1]) #=> 0
ところで以下には驚いた。勉強しなおさないとだ
'%d %d\n' % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> nil
"%d %d\n" % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> 0
0262デフォルトの名無しさん
2009/11/06(金) 01:40:43s = '%d %d\n'
p /#{s}/ # /%d %d\n/と等価
文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
似たような話としては、String#gsubで引数に\を渡そうとすると
ダブルクォートの場合はエスケープの都合で\の個数がキモいことになる
0263デフォルトの名無しさん
2009/11/06(金) 02:17:32サンクス。完全に間違って理解してた
> 文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
よく覚えとくよ
で、>>261でなんではまったかと思ったら普段あまり使わないRegexp.new使ってるからだった
'\n' にマッチする正規表現をリテラルで作ろうとしたら /\\n/ って直感的に書けるけど
Regexp.new で作ろうとすると相当キモイことになるね
0264デフォルトの名無しさん
2009/11/06(金) 06:35:26さくらインターネットのスタンダードプランでrubygemをインストールしたのですが,
gemコマンドを打ち込んでも
gem: command not found
と、出てしまいます。
これはインスト失敗しているのか、単に環境設定がうまくいってないのか…。
ご教授願います。
インスト時には
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar zxvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb --prefix $HOME
で、
RubyGems installed the following executables:
/home/hogehoge/bin/gem18
と出ていました。
0265デフォルトの名無しさん
2009/11/06(金) 06:38:370266260
2009/11/06(金) 08:02:12動的でもいいんですがnの値は不明です。
一旦nを求めて式展開するしかないでしょうか?
一回で
line =~ /(\d+) #{\1.to_i + 1}/
みたいには書けない?
0267デフォルトの名無しさん
2009/11/06(金) 08:08:12/re/ =~ str
0268デフォルトの名無しさん
2009/11/06(金) 08:22:50PATHの設定。
0269デフォルトの名無しさん
2009/11/06(金) 08:23:590270デフォルトの名無しさん
2009/11/06(金) 08:29:54Ruby関係ないシリーズの筆頭だ
はいそこさくらが使ってるFreeBSDがUNIX4文字で包括されうるかどうか議論しない
0271デフォルトの名無しさん
2009/11/06(金) 08:32:180272デフォルトの名無しさん
2009/11/06(金) 08:35:10その質問には意味がない
0273デフォルトの名無しさん
2009/11/06(金) 08:43:54その次のバージョンを待つことになる。
0274デフォルトの名無しさん
2009/11/06(金) 10:46:280275デフォルトの名無しさん
2009/11/06(金) 11:09:590276デフォルトの名無しさん
2009/11/06(金) 12:45:25それこそ1.8の出る前からある。
0277デフォルトの名無しさん
2009/11/06(金) 16:43:52Ruby2.0が出たらそのサブセットをどっかで標準化したりするのかね。
0278デフォルトの名無しさん
2009/11/06(金) 18:15:47みたいな解説どっかにある?
0279デフォルトの名無しさん
2009/11/06(金) 19:26:111.9で実現しちゃったもの(YARVとか)もあれば、方針転換があったりしたものが
(たとえば括弧の省略があまりできなくなる方向で動いてたのを、断念しちゃったり)
あったり、全く刷新の気配もないもの(GCとか)とかで、全然参考にならない。
0280231
2009/11/06(金) 19:33:23全く違う別のPCで1.8.7-p72、NetBeans6.7.1という同じ環境を構築して
SQLite3をDBI経由で読んでみましたがコンソールからだと問題無く動くコードが
同じエラーになりました。ドライバが認識出来ないようです。
同じコードでも1.9.1だとNetBeans6.7.1でも問題無く動作するので環境の問題のようです。
もし上の環境でDBI経由でSQLite3が使えてる人がいたらアドバイスください。
0281デフォルトの名無しさん
2009/11/06(金) 19:50:20ってするとオープンされたファイルのストリームは開いたままですか?
0282デフォルトの名無しさん
2009/11/06(金) 20:03:17えーーーーと、
クラスメソッド File.open は File オブジェクトを返すだけ
関数的メソッド open も File オブジェクトを返すだけ
インスタンスメソッド File#read はストリームを閉じない
クラスメソッド File.read は File オブジェクトを開いて File#read して閉じて read 結果を返すユーティリティ的メソッド
File.open(path).read は不完全
open(path).read も不完全
File.read(path) は安全
File.open(path){|f| f.read} は安全
open(path){|f| f.read} も安全
ブロックつきメソッドで書けるメソッドは、ブロック作らないと危険
ブロックつきメソッドで書く意味がなさそうなメソッド(File.read、File.readlines 等クラスメソッド)はブロック作らなくても安全
クラスメソッドは「便利メソッド」として作られてることが多い
0283デフォルトの名無しさん
2009/11/06(金) 20:05:12GCされるかスクリプトが終了するまで開いたまま
ちゃんと閉じるか閉じてくれる書き方をするクセをつけたほうがいい
手っ取り早いのはこれ
txt = File.read('hoge.txt')
本当はIO.read、ただし1.9系じゃないとこの方法でbフラグ付けるのは無理
0284デフォルトの名無しさん
2009/11/06(金) 22:39:330285デフォルトの名無しさん
2009/11/07(土) 01:20:250286デフォルトの名無しさん
2009/11/07(土) 02:19:120287デフォルトの名無しさん
2009/11/07(土) 05:32:37tar.gzで配布されているruby-clusterやruby-gnome(gtk?)を使うことになり、
Emacsでのanythingやauto-complete-rubyでも↑のライブラリを読み出して欲しいと思って調べたのですがわかりませんでしたので質問させてもらいます。
anythingではfri -lやrefe -lの結果から候補を、auto-complete-rubyではrcodetoolsからどうにかして候補を出しているみたいなのですが、
そのソースとなるのはtar.gzがもつドキュメントorコードから生成されたドキュメント(?)を元にしているみたいなのです。
そのようなドキュメントを生成するのはrdocなんでしょうか?そうだとしたらどのように生成すればいいでしょうか?
rdoc --riとやって.rdocの中に色々とできているのですが、そこをLOAD_PATHに加えればいいのでしょうか?
長くなってすいません。
0288デフォルトの名無しさん
2009/11/07(土) 16:37:36変数hogeにデータが入っていてこれを引数としてコマンドを実行したい。
system("command", hoge)
なら安全?
例えば、パイプでつなげられてrm -rfされる心配はないか、とか。
0289デフォルトの名無しさん
2009/11/07(土) 16:50:01sysytem 等の第2引数はシェルを介しません
irb> system('ls', '-la|date')
ls: invalid option -- '|'
詳しくは `ls --help' を実行して下さい.
irb> system('ls -la|date')
2009年 11月 7日 土曜日 16:42:32 JST
ls が | についてのエラーを返していることに注目です
| を含んだ引数を ls コマンドに直接渡している証拠です
ただ、この場合、第1引数は完全に正しい実行可能文字列でなければなりません
オプションとかなんか余計なものを含んでいた場合はエラーです
irb> system('echo ', 'hello!')
false
irb> system('echo', 'hello!')
hello!
「echo 」という末尾に空白を含んだ実行ファイルは存在しないためコマンドが実行されず、system が false を返しています
0290デフォルトの名無しさん
2009/11/07(土) 16:55:35ありがとう。
0291デフォルトの名無しさん
2009/11/08(日) 10:16:43・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)
とありますが、どう事情が変わったのでしょうか?
"1" + 1 とするとエラーが出てしまいます。
エラー内容的には 整数を文字列に出来ないよ。 ということだと思っています。
しかし、 1.to_s を実行すると "1"が返ってきて、1.to_s.classはStringだと言っています。
数値の 1 を文字列に変換することは出来ているのに上記のようなエラーが出る理由が分かりません。
教えてください。
0292デフォルトの名無しさん
2009/11/08(日) 10:23:14"1".to_i + 1 #=> 2がほしいとき
"1" + 1.to_s #=> "11"がほしいとき
0293デフォルトの名無しさん
2009/11/08(日) 10:53:20こういう場面では暗黙の変換をしてもらわないほうが多くの場合は便利
動作と投入値のとり得る全てを事前に完全把握してる場合は暗黙の変換をしてもらったほうが面倒ないけどな
まあそういう時はRubyにこだわらず適当にそういう動作の言語使ってだらっとプログラム書けばええ
とりあえずRubyはその手の変換は行わないようにメソッドが作られてることが多い
困ったことに + 系のメソッド内でクラス比較して変換かけてるパターンもあるけどな
>>291
> どう事情が変わったのでしょうか?
このままだとバージョンナンバーを普通に使い切ってしまい
栄光のバージョン2.0が普通の1.9の上位バージョンになってしまうという危惧
1.9.0を元にした安定版を出す際に、通常のバージョンのつけ方なら
・ 1.9.x … 開発版
・ 2.0.x … 安定版
となるはずだし従来はこの予定だったのだが、2.0の名には値しないと判断されて、無理矢理
・ 1.9.0 … 開発版
・ 1.9.1 … 安定版
とされたということ
0294デフォルトの名無しさん
2009/11/08(日) 15:19:360295デフォルトの名無しさん
2009/11/08(日) 15:23:130296デフォルトの名無しさん
2009/11/08(日) 15:28:41「開発者のモチベーションを引っ張り続けるが到達できないもの」
来世紀くらいには追いつけるかもしれないがユーザーが待つのは馬鹿。
0297デフォルトの名無しさん
2009/11/08(日) 15:46:26少なくとも5年では無理
0298デフォルトの名無しさん
2009/11/08(日) 15:47:490299デフォルトの名無しさん
2009/11/08(日) 16:01:55ようはPerl6と同じことだろ
0300デフォルトの名無しさん
2009/11/08(日) 16:23:16String#squeezeはたぶん正規化じゃないかなぁ
require 'jcode'; $KCODE = "s" # 1.9なら不要
Words = %w(google キター).map {|s| s.squeeze }
def exist?(s); Words.index(s.squeeze); end
p exist?("goooooogle")
p exist?("キターーーー")
0301デフォルトの名無しさん
2009/11/08(日) 16:23:360302デフォルトの名無しさん
2009/11/08(日) 16:48:320303ダーク藤本 ◆ULFoMaooII
2009/11/08(日) 17:12:54ttp://ux.getuploader.com/clonegameup/download/56/SB3.5%E6%94%B9.zip
Rubyは多次元配列の仕様が糞すぎる
まぁ多次元配列なんてWEBプログラマーには不要なもんだがw
0304デフォルトの名無しさん
2009/11/08(日) 17:29:27それなんていうライブラリ?
0305デフォルトの名無しさん
2009/11/08(日) 17:42:01驚かないが、「またユーザーを混乱させるのか・・・」と思う
0306デフォルトの名無しさん
2009/11/08(日) 17:56:091.9.1 以降は全部、1.9 系列の安定版だよ
1.9.2 が出たとしたら、それは1.9系列の最新安定版
1.9.3 が出たとしたら、それは1.9.2より新しい、1.9系列の安定版
開発版は常に 1.9.0
パッチレベルが上がるんだったかなんだったかで区別するとかしないとか
1.8.5やそれ以前のような「とりあえずリリース」はない
tenny(バージョン x.y.z の z)が 0 でないときは必ず安定版リリース
この理屈だと Ruby 2.0.0 は 2.0 系列の開発版ということになるが、まあそういうことなのだろう
情報の古いうっかりさんが「これが Ruby2.0 か」とか勘違いして 2.0.0 をインストールしてシステム壊すとかそういうの希望
まー 1.9.1 の中でもパッチレベルが違うと動作違うけどな(正しくなっただけなのだが)
1.8.6 でもあったが、なかなか酷い
0307デフォルトの名無しさん
2009/11/08(日) 17:57:080308デフォルトの名無しさん
2009/11/08(日) 17:59:44情報の古いうっかりさんこんばんは
0309デフォルトの名無しさん
2009/11/08(日) 18:01:51結城浩は1996年、この原則を人間関係を円滑にすすめるための心得に拡張し、「驚き、最小の法則」として紹介した。
たとえば、プログラムを顧客に納品する際に、判明しているバグがあるのなら、それを伝えておいたほうが顧客に
とっても利用時の戦略を立てやすくなる、といったものである。「『どうしようかな?』と思ったときには、 相手の
『驚き』を最小にするような選択をすべき」であるという[1]。
プログラミング言語 Ruby は、一時期「驚き最小の原則」とともに語られることが多かった。ただし、作者のまつもと
ゆきひろはこの原則を Ruby の設計哲学として採用したことはないと述べている[2]。Ruby については、「さまざまな
バックグラウンドの人々すべてを驚かせないことではなく、Ruby のやり方に十分に慣れた人が持つ常識が一貫して通用
するという意味」[3][4]であるとして、「Matzの驚き最小の原則」という言い方も提案された[3]。現在では Ruby が
「驚き最小の原則」とともに語られることは少なくなっている[5]。
0310デフォルトの名無しさん
2009/11/08(日) 18:04:350311デフォルトの名無しさん
2009/11/08(日) 18:09:19コミュニティ内では「Rubyらしい動作」という言葉で語られる概念だな
Rubyらしい動作をするクラスやメソッドは推測が利いて使いやすい、という程度の意味
0312デフォルトの名無しさん
2009/11/08(日) 18:10:14いろんな言語バックグラウンドを持つ香具師が、想定外の挙動に対して
「これは驚き最小に反している!」
そして「おめーにとってはそうだろうがよ」と総ツッコミ。
0313305
2009/11/08(日) 18:19:50説明ありがとう! 1.9.1からルールが完全に変わったんだな
> ruby 2.0.0 は 2.0 系列の開発版
そうなるのか? ruby 2.0.0 からまた元のルールに戻るとかじゃなくて?
そうなるんだとすると、本当に訳が分からなくなりそうだ
0314デフォルトの名無しさん
2009/11/08(日) 18:23:522.0 系列の開発版は常に 2.0.0
2.0.0 で安定版が作れたと思ったら 2.0.1 としてリリース
2.0.1 がパワーアップしたら 2.0.2 としてリリース
2.0 系列の次のバージョンの開発版を作る場合は 2.1.0 でやる
こんだけ
x.y.z の y だか z だかが奇数のときは開発版で偶数は安定版、みたいな
冷静に考えるとへんてこなルールと実質上は何も変わらない
0315デフォルトの名無しさん
2009/11/08(日) 18:32:54ソース求む。
どこにもそんな話、なかったと思うんだが。
0316デフォルトの名無しさん
2009/11/08(日) 18:46:28驚かないが、「またユーザーを混乱させるのか・・・」と思う
0317デフォルトの名無しさん
2009/11/09(月) 00:40:140318デフォルトの名無しさん
2009/11/09(月) 01:17:130319デフォルトの名無しさん
2009/11/09(月) 02:02:57脳みそを掻き回したらいかんだろ
0320デフォルトの名無しさん
2009/11/09(月) 02:09:56Rubyのことなら、標榜してないよ。
0321デフォルトの名無しさん
2009/11/09(月) 02:13:440322デフォルトの名無しさん
2009/11/09(月) 02:18:430323デフォルトの名無しさん
2009/11/09(月) 08:23:380324デフォルトの名無しさん
2009/11/09(月) 09:33:420325デフォルトの名無しさん
2009/11/09(月) 09:44:200326デフォルトの名無しさん
2009/11/09(月) 11:24:20#include "MyClass.h"
に相当するRubyの命令がわかりません。
手持ちの本にも載っていません。
誰か教えてください。
0327デフォルトの名無しさん
2009/11/09(月) 11:27:400328デフォルトの名無しさん
2009/11/09(月) 18:12:07require "myclass" # myclass.rb を読み込む
0329デフォルトの名無しさん
2009/11/09(月) 19:50:19プログラミングはRubyからです!って人は少なそう。
0330デフォルトの名無しさん
2009/11/09(月) 20:01:19Ruby から始めましたが。
理由は、基本的な構文はどの言語も似ていると思ったので...
0331デフォルトの名無しさん
2009/11/09(月) 20:27:410332デフォルトの名無しさん
2009/11/09(月) 21:14:56学歴ある奴はあり得ん
0334デフォルトの名無しさん
2009/11/09(月) 21:20:44なにその根拠のない自信?ホントにプログラマ?
0335デフォルトの名無しさん
2009/11/09(月) 21:21:53ム板池よITドカタ
0336デフォルトの名無しさん
2009/11/09(月) 21:21:590337デフォルトの名無しさん
2009/11/09(月) 21:56:53いいとこの大学でもC言語を基礎から教えてたりするわけだし、そんな状態から4年間での伸びしろなんてたかが知れてる。
その周りの専門知識は大学じゃないと勉強するのは難しいかもだけど、実務で生かせてる知識がどれほどあるか。、
自分の大学生活が薄っぺらかっただけなのかな?
中卒高卒でも小さい頃から趣味でプログラミングやってた奴らには勝てる気がしないんですよ。
なんというか、雑学というか知識の幅というか、そこら辺が埋めようの無い差を感じる。
0338デフォルトの名無しさん
2009/11/09(月) 22:01:57電気電子系の学科に進学する、という人が増えている。
今はそういう時代。
0339デフォルトの名無しさん
2009/11/09(月) 22:02:52大学出てない奴は少なからず劣等感を持ってると思う
うちの会社に大学中退者が何人かいるんだが彼らのハングリー精神は恐れ入るよ
0340デフォルトの名無しさん
2009/11/09(月) 22:28:33小さい頃からプログラミング続けてる人はベースが完璧にできあがってるし
そういう基礎的な部分で苦労しない分、応用とか開発にリソース使えるんだろうね
0341デフォルトの名無しさん
2009/11/10(火) 01:15:40田舎だとそういう情報もハードも少なくて外で走り回ってるくらいだったよ。
その年頃でマイコンとかやってる奴とかいるかと思うと・・・。
まだ、勉強し続けなきゃならないな
0342デフォルトの名無しさん
2009/11/10(火) 02:17:28親の環境次第で当時、高価なPCを買えたかどうかとか。
0343デフォルトの名無しさん
2009/11/10(火) 03:48:57将来がだいぶ変わるよな
ゲームばっかすんなとか言うけど
そこからプログラムに入れば職業につながる可能性だってあるんだしね
遊びの価値を理解してない人が多い気がする
自分の場合、学校で教わったことなんかより
遊んだ分の知識の方がメシの種になってる
勉強し倒したか、遊び倒したかという極端な人ほど
「使える」人になってる気がする
>>342
今は高価な PCじゃなくても、そこそこの性能で
今の子供はうらやましいよね
0344デフォルトの名無しさん
2009/11/10(火) 05:24:12親がオーバークロックとか日常茶飯事な自作erだなあ
物心ついた時には周りにPCパーツ転がってたし
俺がPCに興味持ったと知るや、いきなりパーツ屋連れてかれたなw
ま、結局それはあんまり肌に合わなくて
PCじゃなく、ソフトウェアを組む方にハマったんだが
0345デフォルトの名無しさん
2009/11/10(火) 05:52:33ネットも無く毎日外で秘密基地とか作って遊んでた自分の小学生時代はこれはこれで良かったと思ってる。
0346デフォルトの名無しさん
2009/11/10(火) 06:23:590347デフォルトの名無しさん
2009/11/10(火) 08:38:29俺の人生はこれからだ
0348デフォルトの名無しさん
2009/11/10(火) 09:22:42ところで、最近は東大の教養課程でruby教えてるそうなので、
rubyでプログラミングを始めた高学歴というのは普通にいるんじゃね?
0349デフォルトの名無しさん
2009/11/10(火) 12:17:41一行目と三行目以下の矛盾がひどいなオイ
0350デフォルトの名無しさん
2009/11/10(火) 12:26:37簡単なwxRubyアプリケーション。起動してから画面が出るまでの時間。
ストップウオッチ法。WindowsXP。3GHzのPentium4。
1.8.7p174 平均 1.7秒
1.9.1p243 平均 5.6秒
1.9はコンパイラを分離したほうがよくね?
0351デフォルトの名無しさん
2009/11/10(火) 12:34:460352デフォルトの名無しさん
2009/11/10(火) 12:35:29○ mswin32版ruby経由のwxRubyの起動時間
0353デフォルトの名無しさん
2009/11/10(火) 13:22:48べき論と現実とは普通に食い違ってるもんじゃないか
0354デフォルトの名無しさん
2009/11/10(火) 13:26:290355デフォルトの名無しさん
2009/11/10(火) 13:32:430356デフォルトの名無しさん
2009/11/10(火) 13:42:12wxRubyはライブラリです。起動などしませんとか文句が出そう
0357デフォルトの名無しさん
2009/11/10(火) 14:01:28こんなん見つけました
ttp://luck.linux.or.jp/esokai/esokai2.html
0358デフォルトの名無しさん
2009/11/10(火) 14:15:48>>348一行目の書き方だと、べき論じゃなく常識を語ってるようにしか読めん
0359デフォルトの名無しさん
2009/11/10(火) 14:22:240360デフォルトの名無しさん
2009/11/10(火) 14:37:260361デフォルトの名無しさん
2009/11/10(火) 14:46:29学歴の話なんて誰もしてねーよ
0362デフォルトの名無しさん
2009/11/10(火) 15:23:21初期値が省略できないと仮定すると、
def inject(init)
accum = init
each do |x|
accum = yield(accum, x)
end
return accum
end
でいいと思うんですけど、「初期値が省略されたときは最初の要素を使う」というのがうまく書けません。
def inject(init=nil)
if init.nil?
flag = false # 初期値がない
else
flag = true # 初期値がある
end
accum = init
each do |x|
if ! flag # もし初期値がないなら
accum = x # 最初の要素を初期値として使う
flag = true
else
accum = yield(accum, x)
end
end
return accum
end
0363デフォルトの名無しさん
2009/11/10(火) 16:13:51*argsで受けてsizeをチェックしたほうがいいんじゃない?
0364デフォルトの名無しさん
2009/11/10(火) 16:29:28accum = args.empty? ? e.next : args.first
begin
loop { accum = yield(accum, e.next) }
rescue StopIteration
end
accum
end
1.8.6とかSymbolとかシラネ
0365デフォルトの名無しさん
2009/11/10(火) 16:31:10e = each
0366デフォルトの名無しさん
2009/11/10(火) 16:44:50ttp://github.com/evanphx/rubinius/blob/master/kernel/common/enumerable.rb
うーん、微妙。
0367デフォルトの名無しさん
2009/11/10(火) 19:00:10子どもの頃におやじが道楽でAppleII買ったんでその内蔵BASICで遊んだなあ
おやじは死んじゃったけどAppleIIはまだ置いてあるや
0368デフォルトの名無しさん
2009/11/10(火) 20:51:01関数呼び出しでかっこつけてますか?
どちらのスタイルで書いた方が良いでしょうか?
0369デフォルトの名無しさん
2009/11/10(火) 20:54:02括弧を外すことはいつでもできるのだから、括弧ありで確実な動作を把握するべき
0370デフォルトの名無しさん
2009/11/10(火) 21:00:32返値を期待するなら括弧を付けろとか
0371デフォルトの名無しさん
2009/11/10(火) 21:08:480372デフォルトの名無しさん
2009/11/10(火) 21:22:39かっこいい、かっこ悪いで関数は呼び出すものじゃないと思います
0373デフォルトの名無しさん
2009/11/10(火) 21:33:270374デフォルトの名無しさん
2009/11/10(火) 21:55:010375デフォルトの名無しさん
2009/11/10(火) 22:13:320376デフォルトの名無しさん
2009/11/10(火) 22:16:10RubyはRailsではないが
0377デフォルトの名無しさん
2009/11/10(火) 22:52:490378デフォルトの名無しさん
2009/11/10(火) 23:01:390379デフォルトの名無しさん
2009/11/10(火) 23:02:530380デフォルトの名無しさん
2009/11/11(水) 09:46:510381デフォルトの名無しさん
2009/11/11(水) 09:57:290382デフォルトの名無しさん
2009/11/11(水) 10:02:27メソッドとプロパティの区別ってどうやって判断するの?
0383デフォルトの名無しさん
2009/11/11(水) 10:17:420384デフォルトの名無しさん
2009/11/11(水) 10:52:31Rubyではそもそもメソッド/プロパティをあまり区別してない
>>383
オブジェクト指向言語で、メソッドを全部::にされるとすごく読みづらいと思う
ほとんどがメソッドの呼び出しだし
0385デフォルトの名無しさん
2009/11/11(水) 11:19:090386デフォルトの名無しさん
2009/11/11(水) 11:41:57アクセサ定義してもプロパティに直接アクセスできるようになるわけじゃないし。
0387デフォルトの名無しさん
2009/11/11(水) 22:42:18メソッドとプロパティを意識する必要はあまりないんじゃないの?
という思想があるような気がしないでもない。
0388デフォルトの名無しさん
2009/11/12(木) 00:01:14亀レスだが、引数を省略したりもするので、括弧はできるだけ付けている。
ただし、pなどは可変引数なのと、デバッグでよく使うので括弧を省略。
def func1(p1,p2,p3=0)
p1+p2+p3
end
p func1 2,3,4
p func1(2,3),4
0389デフォルトの名無しさん
2009/11/12(木) 00:11:51path = "lib/hoge.rb" としたあと、hoge.rbのindexメソッドを呼ぶ感じです。
0390デフォルトの名無しさん
2009/11/12(木) 00:12:540391デフォルトの名無しさん
2009/11/12(木) 00:36:21require File.dirname(__FILE__) + "/lib/hoge.rb"
lib以下に複数ファイルがあって全部読み込みたい場合は、
Dir.globと組み合わせればいいかと。
0392デフォルトの名無しさん
2009/11/12(木) 00:55:05Dir.globを使って任意のパスにある複数のrbをrequireすることはできています。
が、任意のrbの任意のメソッドを呼ぶ方法が分かりません。
#{hoge}.index みたいな感じでしょうか。。
0393デフォルトの名無しさん
2009/11/12(木) 01:14:20そのindexがトップレベルに定義してあるメソッドなら無理
0394デフォルトの名無しさん
2009/11/12(木) 01:19:57うーん。
全部requireした時点でどのファイルか?なんて情報はなくなると思うし、
名前空間で区別すべきじゃないか?
とりあえず、hoge.rbにはこう書いておいて、Hoge.indexで呼び出せばいいんじゃないの?
module Hoge
def self.index
end
end
0395デフォルトの名無しさん
2009/11/12(木) 01:43:50色々ありがとうございます。
自分がしたいことの実現方法が間違ってる気がしてきました。
やりたいのは、rbを複数個用意して、リクエストuriに対応したrbのメソッドを実行したいんです。
/hoge/huga にリクエストされたら、lib/hoge.rbのhugaメソッド、/hoge/にリクエストされたら lib/hoge.rbのindexメソッド、/foo/barにリクエストされたらlib/foo.rbのbarメソッド、という感じです。
ディスパッチャは自分で作ろうとしています。
リクエストはまず全て一つのrb、例えばroot.rbで受けて、root.rbの中で環境変数などからディスパッチしようとしています。
ので上記のようなことを考えたのですが、もっとスマートな方法はありますか?
0396デフォルトの名無しさん
2009/11/12(木) 01:49:080397デフォルトの名無しさん
2009/11/12(木) 01:53:180398デフォルトの名無しさん
2009/11/12(木) 02:07:02引数に関数呼び出しのコードを書くのが間違ってる
0399デフォルトの名無しさん
2009/11/12(木) 02:17:01意味不明。正しい用法なるものがあるんなら、コードの具体例を。
0400デフォルトの名無しさん
2009/11/12(木) 02:18:07require毎にインスタンスを作っておく、じゃNGか?
0401デフォルトの名無しさん
2009/11/12(木) 08:11:03他の言語だとコード簡略化の為によくある手法だが
Rubyは御法度なのか、勉強になった。
0402デフォルトの名無しさん
2009/11/12(木) 08:38:52Rubyは決まってるよな?
0403デフォルトの名無しさん
2009/11/12(木) 08:41:00モジュール定数指定する時に、
Hoge.MAGE じゃだめなんだけど・・・
つか、テンプレに入れとけ・・・
0404デフォルトの名無しさん
2009/11/12(木) 08:43:50Rubyの場合は、実装が仕様です。
>>403
じゃあ、キボンヌ
0405デフォルトの名無しさん
2009/11/12(木) 08:46:55class::method
instance.method
0406デフォルトの名無しさん
2009/11/12(木) 09:03:14398の主張の理由はわからんけど、別にRubyでも御法度ではないよ
むしろ積極的に使われてるぐらいのはず
0407デフォルトの名無しさん
2009/11/12(木) 09:04:55定数やモジュール、クラスを指定するなら Foo::Constant
メソッドを呼び出すなら instance.method
たまに Foo::method という記述も見かけるが、あまり一般的ではない
0408デフォルトの名無しさん
2009/11/12(木) 09:15:57ttp://doc.okkez.net/static/187/doc/spec=2fcall.html
ttp://doc.okkez.net/static/187/doc/spec=2fvariables.html#const
0409デフォルトの名無しさん
2009/11/12(木) 10:04:04a = max 0, a-1
が通りません。
0410デフォルトの名無しさん
2009/11/12(木) 10:31:560411デフォルトの名無しさん
2009/11/12(木) 10:52:00Enumerable#max
>>410
関数ポインタなんて無いから下から好きなの選べ
Object#method
Object#send
Kernel#proc Kernel#lambda Proc
0412デフォルトの名無しさん
2009/11/12(木) 11:05:47Module#instance_methodしておいて後からUnboundMethod#bindというのもあるね
0413デフォルトの名無しさん
2009/11/12(木) 15:13:22411の回答に優しさを感じなかったから回答してみると、
a = [0, a-1].max
0414デフォルトの名無しさん
2009/11/12(木) 18:33:57で終了コードも知りたい場合どうやればいいですか?
0415デフォルトの名無しさん
2009/11/12(木) 18:45:330416デフォルトの名無しさん
2009/11/12(木) 23:57:300417デフォルトの名無しさん
2009/11/13(金) 00:20:280418デフォルトの名無しさん
2009/11/13(金) 00:22:02どおりでいくらググっても情報が得られないわけですね…失礼しました。
0419デフォルトの名無しさん
2009/11/13(金) 00:28:33erb(レイアウト)の中でerbを使う
<%= inner_erb.result %>
0420デフォルトの名無しさん
2009/11/13(金) 01:17:56なるほど!しかし、こうなります。
hoge
<%= inner_erb.result %>
huga
これが
inner_erbのresult
huga
何か、<%= inner_erb.result %>より上の部分が消えます。
0421デフォルトの名無しさん
2009/11/13(金) 01:28:24ttp://www.ruby-lang.org/ja/man/html/erb.html#ERB.2enew
0422デフォルトの名無しさん
2009/11/13(金) 01:32:29変数 _erbout を空文字列で初期化し、
元テキストを地の部分とスクリプト部分に分けたものを、
* 地の文ならconcat
* <% %> ならそれを評価
* <%= %> なら評価結果を to_s してconcat
していく。
デフォルトだと常に _erbout って名前の変数を使ってしまうから、
innerの処理結果が _erbout というローカル変数に代入されてしまい、
それまでの結果が上書きされてしまう。
<%
inner_erb = ERB.new(File.read('inner.erb'), nil, nil, '_inner_out')
%>
hoge
<%= inner_erb.result %>
huga
0423デフォルトの名無しさん
2009/11/13(金) 01:53:08えーと…
>>422
やりたい事ができました、ありがとうございました。
それにしても、絶対必要だと思うんですが、何でlayout機能が標準装備されてないんでしょうかね。
0424デフォルトの名無しさん
2009/11/13(金) 06:36:100425デフォルトの名無しさん
2009/11/13(金) 06:37:12おまえのためだけにRubyがあるんじゃねぇんだょ!
0426デフォルトの名無しさん
2009/11/14(土) 04:13:56rcsは何でプロジェクトのファイル全部を統括的にバージョン管理できないんでしょうかね、と言うようなものかと
svn使え、と。つまり、もっと上のものを使わないと。
この場合だと何らかのフレームワーク使えってことじゃないかな。
てか、RailsのActionViewってActiveRecordみたいに単体でつかえたっけ?
0427デフォルトの名無しさん
2009/11/14(土) 04:53:51そんな言葉が頭に渦巻くよ
0428デフォルトの名無しさん
2009/11/14(土) 05:21:220429デフォルトの名無しさん
2009/11/14(土) 05:45:49=> 104
この仕様が理解できませぬ。いや文字コードが出力されているという事実は理解できるんだけど
hを返さずに104を返すのは何故なのでしょう。
ruby熟練者にとっては、文字コードが返された方が都合いいのですか?
0430デフォルトの名無しさん
2009/11/14(土) 07:12:11[0]ではなく[0,1]を使うようにするのがよいでしょうね
0431429
2009/11/14(土) 09:39:54ありがとうございます。[0,1]でhが取り出せました。
1.9から変わったということはあまり意味の無い仕様だったのかな…早く1.9に乗り換えないとなぁ
0432デフォルトの名無しさん
2009/11/14(土) 10:03:510433デフォルトの名無しさん
2009/11/14(土) 10:05:25誤解は多いけど、意味のない仕様というわけでもない。
批判が多くて1.9で変わった仕様としては
i = 2; 10.times do |i| puts i end;
puts i # => 9
なんてもあるけど、これもCから来てる。
0434デフォルトの名無しさん
2009/11/14(土) 10:13:270435デフォルトの名無しさん
2009/11/14(土) 10:17:07なんでそれで i が変化すんの?
0436デフォルトの名無しさん
2009/11/14(土) 10:17:490437デフォルトの名無しさん
2009/11/14(土) 10:17:53ああ、そういうことか、
stringからcharを取り出す感覚か。
0438デフォルトの名無しさん
2009/11/14(土) 10:19:44あほだな
0439デフォルトの名無しさん
2009/11/14(土) 10:27:01ブロックの引数は、実は引数じゃなくて、左辺値のある式ならなんでもよかった。
で、その左辺値に代入しちゃうわけ。
Cから来てる、という説明はあまり見ない気がするが...
for (int i = 0; ...
みたいなJavaなどではできる記述がCではできないことを言いたいのか?
0440デフォルトの名無しさん
2009/11/14(土) 10:27:360441デフォルトの名無しさん
2009/11/14(土) 10:31:23>for (int i = 0; ...
>みたいなJavaなどではできる記述がCではできないことを言いたいのか?
いやC++ならできるけど
スコープが外とつながってるっつー話で
0442デフォルトの名無しさん
2009/11/14(土) 11:03:46LinuxだけでMS-ACESSのmdb形式のデータベースを利用する方法がありますか?
0443デフォルトの名無しさん
2009/11/14(土) 11:06:45Cの文字列は文字コードの配列だから、当然1文字取り出したら文字コード=整数だよ
0444デフォルトの名無しさん
2009/11/14(土) 11:09:30利用するときに暗黙のキャストでintとみなされたときに始めて整数になる
0445デフォルトの名無しさん
2009/11/14(土) 11:11:17OOo経由すれば
0446デフォルトの名無しさん
2009/11/14(土) 11:41:270447デフォルトの名無しさん
2009/11/14(土) 12:07:07intが64ビットではいけないという話もどこにもない。
0448デフォルトの名無しさん
2009/11/14(土) 12:09:250449デフォルトの名無しさん
2009/11/14(土) 12:27:450450デフォルトの名無しさん
2009/11/14(土) 13:31:110451デフォルトの名無しさん
2009/11/14(土) 13:50:23return INT2FIX(RSTRING(str)->ptr[idx] & 0xff);
だから、マイナスの値にはならない。
0452デフォルトの名無しさん
2009/11/14(土) 16:12:001バイトが何ビットかは実装依存。
ただし、stdintを使えばちゃんと指定できる。
0453デフォルトの名無しさん
2009/11/14(土) 16:35:30どなたか助けてください _o_
# gem install rspec
を実行すると、依存ライブラリのインストールを確認してくるので
全部 y またはそのままリターン で進めていたのですが、
そのうち以下のように、cucumber と rspec の確認を繰り返すだけに
なってしまいました。
Install required dependency cucumber? [Yn]
Install required dependency rspec? [Yn]
Install required dependency cucumber? [Yn]
Install required dependency rspec? [Yn]
Install required dependency cucumber? [Yn]
(以下、何度繰り返しても変化なし)
rubyforge から gemsファイルをダウンロードして内容を調べたところ、
・rspec は cucumber に依存している
・cucumber は rspec に依存している
ことが分かりました。
依存関係がループしているわけですが、
gems ではこういうときにどうすれば良いのでしょうか?
0454デフォルトの名無しさん
2009/11/14(土) 16:41:56# gem install rspec cucumber
するとどうなる?
0456デフォルトの名無しさん
2009/11/14(土) 17:06:240457デフォルトの名無しさん
2009/11/14(土) 17:50:44友達が日本人が開発者だから誇らしいと言ってましたが。
僕もルヴィーやってみたいです。
0458デフォルトの名無しさん
2009/11/14(土) 18:12:30でも開発者が日本人っつーなら、なでしことかひまわりとか(ry
0459デフォルトの名無しさん
2009/11/14(土) 18:15:27-ignore-dependencies やっちまえ
責任もてないけどねw
0460453
2009/11/14(土) 21:25:21--ignore-dependencies とか、rubygems のバージョンが古かったので
バージョンアップとか、いろいろやってみたのですが、
状況がごちゃごちゃになって良く分からなくなってので、全リセットしてみました。
rubygems を完全にアンインストール、これまでインストールした gems も
全て削除してから、rubygems の最新版(1.3.5)をインストールして、
# gem install rspec
と実行したら、rspec だけがインストールされ、依存gemsがインストールされません。
何だか訳の分からない状況になってきたので、一から調べなおしてみます。
お騒がせしました。
0461453
2009/11/15(日) 01:05:32まず、最初に使っていたrubygemsは、Ubuntu8.04のパッケージにあった 0.9.4 でした。
次に使ったのは 1.3.5 でしたが、この間に --development オプションが
追加されたみたいです。
これは、依存関係に runtime/development 属性があり、
通常のinstall/update では runtime 依存のみ追加し、
--development オプションを指定すると development 依存も追加する、
というものみたいです。
rspec → cucumber の依存関係は development で、
cucumber → rspec の依存関係は runtime でした。
また、rspec の依存関係は全て development だったので、
$ gem install rspec
とだけすると依存パッケージはインストールされず、
$ gem install rspec --development
とする必要がありました。しかも、このとき cucumber の依存関係のせいか
rspec のインストールは失敗し、
$ gem install cucumber
としてから、あらためて rspec をインストールしたら今度は成功しました。
example の 〜_spec.rb を試してもOKだったので、これで大丈夫だと思います。
以上、お騒がせしました。
0462デフォルトの名無しさん
2009/11/15(日) 02:46:32ググったらARはrails抜きで使う方法が見つかりましたが、これらは見つかりません。
0463デフォルトの名無しさん
2009/11/15(日) 04:37:36developmentな依存関係は、対象gem自体の開発を行う場合に必要と
されるものだねぇ。
0464デフォルトの名無しさん
2009/11/15(日) 04:56:41years_ago はActiveSupportがあれば使える。
# require 'rubygems'
require 'activesupport'
link_toはコントローラオブジェクト(ActionController::Base)のurl_for
が必要なのでかなり面倒になると思う。
0465デフォルトの名無しさん
2009/11/15(日) 06:59:56ルート規約とかも取り込むってこと?
0466デフォルトの名無しさん
2009/11/15(日) 08:30:120467453
2009/11/15(日) 09:58:50そうなんですか?
rspec は、develop依存ライブラリが無いと普通に実行することすら
できませんでしたが。
rspec のパッケージングがちょっとヘン、てことでしょうか。
0468デフォルトの名無しさん
2009/11/15(日) 13:38:51ビュー内に書いた
<%= time.now.strftime "%y年%m月%d日" %>
が処理されずにそのまま表示されます。なぜですか?
0469デフォルトの名無しさん
2009/11/15(日) 13:59:04再現手順よろ。
0470デフォルトの名無しさん
2009/11/15(日) 14:15:57layoutsの中にindex.html.erb作成、
<%= time.now.strftime "%y年%m月%d日" %>
を記述、webrickサーバを起動してIEで
http://localhost:3000/ex3/indexにアクセスすると
time.now.strftime "%y?N%m??%d??
と表示されます。その後参考書に書いてあるとおり
<% for i in 1..10 %>
<%= i%>
<% end %>
と書くとエラーになります。
0471デフォルトの名無しさん
2009/11/15(日) 14:20:540472デフォルトの名無しさん
2009/11/15(日) 14:32:01time だと、undefined local variable or method `time'
Time だと、09年11月15日
と出るなあ。
文字コード系の問題かと思って index.html.erb を Shift_JIS で保存し
たら化けてるけど日付出てきたし。
なんでだろうね。
0473デフォルトの名無しさん
2009/11/15(日) 15:13:11まず、scaffoldして何も手を加えない状態でちゃんと動くか確認シル
0474デフォルトの名無しさん
2009/11/16(月) 00:17:49ERBで正しくコンパイルできているかを確認してみよう。
erb -x index.html.erb | less
これで <%= time.now.strftime .... %> のところがどうなっているか確かめてみて。
0475デフォルトの名無しさん
2009/11/16(月) 19:01:25「当たり前だけど、こんなのはNG(よく間違うけど)。」
確かに試してみるとだめなんですが、なぜだめなんでしょうか?
どうもブロックスコープ内ではインスタンス変数が見えないようなのですが...
なぜローカルに代入すれば良いのか?
教えてください
0476デフォルトの名無しさん
2009/11/16(月) 19:49:25ブロックの中と外でp selfしてみるとわかるんじゃないかな
0477デフォルトの名無しさん
2009/11/16(月) 21:51:57公式見てもさっぱりで
ttp://www.ruby-lang.org/ja/man/html/Binding.html
他も情報も少なく
エキスパート名皆さんはいったいどこで情報を得るのですか?
0478デフォルトの名無しさん
2009/11/16(月) 21:55:15色々載っていて、どれがよいのかわからんです。one click rubyとかがいいんですかね
0479デフォルトの名無しさん
2009/11/16(月) 23:00:05コンテキストというプログラミング一般の用語について勉強してくれ
理解できる頃にはbindingも自然とわかるようになる
0480デフォルトの名無しさん
2009/11/16(月) 23:03:12自分で理解しながらやりたいか、手っ取り早く全部入れたいかによって違う
0481デフォルトの名無しさん
2009/11/17(火) 00:10:37プログラム自体に対するかかわりは長いから、一般的なコンテキストの
概念は理解しているつもりだけど
selfが何を指しているかは別として、関数スコープの変数にはアクセスできて
インスタンス変数が見えないのは言語の仕様なんだと思うんで、その辺を
説明した資料は無いですか?
0482デフォルトの名無しさん
2009/11/17(火) 00:21:08インスタンス変数は普通に見えてると思うんだが
何をもって「見えない」としているの?
0483デフォルトの名無しさん
2009/11/17(火) 01:14:35attr_accessor :quality
・・・
def save
p @quality #=> 80
image.write(save_path) {
p @quality #=> nil
# self.quality = @quality
}
end
end
となる為です
10.times{|t| p @quality} #=> 80
となるので、この差もよく分からない
0484デフォルトの名無しさん
2009/11/17(火) 01:28:39でももう数がないから1.9.1から安定版 って話みたいだけど
1.10.0とかにはしないものなの?
0485デフォルトの名無しさん
2009/11/17(火) 01:43:13selfというコンテキストが変わってるんだからそれに属するインスタンス変数も別物になる
class C
def initialize(str)
@str = str
end
def bind
binding
end
end
eval("p @str", C.new("foo").bind)
eval("p @str", C.new("bar").bind)
ブロックにbinding与えるのはrubyスクリプトからはできなかったと思うからevalで勘弁して
0486デフォルトの名無しさん
2009/11/17(火) 01:49:40それはかなり特殊なケースだよ
saveの中では、普通は「self = Hogeクラスのオブジェクト」だけど
image.write{〜}の中に限り、「self = image」となってる
writeの中での @quality がnilになってるのはそのため
(なんでselfが変わるの?という点が疑問なら、Object#instance_eval の説明を読んでみて)
しかしこれ、どうやって初心者向けに説明したらいいんだろう……
分かりやすく説明できそうな人誰かお願いします
0487デフォルトの名無しさん
2009/11/17(火) 01:51:45・・・なんでだろうw
0488デフォルトの名無しさん
2009/11/17(火) 11:40:08しないと太古の昔に約束されてしまった。
0489デフォルトの名無しさん
2009/11/17(火) 15:00:39Rubyのプログラミング課題で、内容は初心者用なので比較的優しいと思われます。
拘束期間は12/15迄、課題数は4回で、問題数は一回につき一題。計4題です。
謝礼金は5000円〜 の予定です。
人助けだと思って、どうかよろしくお願いします。
連絡先:white_knight2あっとまーくlivedoor.com
0490デフォルトの名無しさん
2009/11/17(火) 15:04:470491489
2009/11/17(火) 15:09:490492デフォルトの名無しさん
2009/11/17(火) 15:19:150493デフォルトの名無しさん
2009/11/17(火) 15:59:410494デフォルトの名無しさん
2009/11/17(火) 16:02:16漏れもやってみようw
0495デフォルトの名無しさん
2009/11/17(火) 16:36:160496デフォルトの名無しさん
2009/11/17(火) 19:11:45バグを埋め込んだり
答える側も色々大変なんだぞ
0497デフォルトの名無しさん
2009/11/17(火) 23:41:350498デフォルトの名無しさん
2009/11/18(水) 00:10:280499デフォルトの名無しさん
2009/11/18(水) 03:08:21http://blog.livedoor.jp/white_knight2/
ここで公開されますよwwwww
0500デフォルトの名無しさん
2009/11/18(水) 05:21:43hoge02
end
def hoge02
end
これがエラーになって
def hoge02
end
def hoge01
hoge02
end
これなら実行できるのですが、
hoge02のように同じファイル内からアクセスされるメソッドは最初に書かなければならないのですか?
Javaなんかだと同じクラス内でのみ使うprivateメソッドは最後に書くのが普通だと思うのですが。
0501デフォルトの名無しさん
2009/11/18(水) 06:21:35なんてエラー?こっちでは普通に動いた
0502500
2009/11/18(水) 06:30:30エラーになるのは、
hoge02
def hoge01
hoge02
end
このケースでした。
0503デフォルトの名無しさん
2009/11/18(水) 07:34:32メソッド定義内のメソッド呼び出しは、メソッドを呼ぶという情報を与えるだけだからその時点で未定義でもいいのだろう。
0504デフォルトの名無しさん
2009/11/18(水) 07:35:350505デフォルトの名無しさん
2009/11/18(水) 07:42:000506デフォルトの名無しさん
2009/11/18(水) 07:45:200507デフォルトの名無しさん
2009/11/18(水) 08:20:03静的言語のコンパイルだね
Ruby はスクリプト実行中にdef を自分で書いて定義することもできるから、
def は書かれた順番に順に定義される
処理行1
処理行2
関数定義A…
関数定義B…
関数定義C…
という書き方ができない「頭でっかち」なのが一番最初はキモかったことを覚えている
0508デフォルトの名無しさん
2009/11/18(水) 08:41:400509デフォルトの名無しさん
2009/11/18(水) 09:07:510510デフォルトの名無しさん
2009/11/18(水) 09:13:57&doit;
sub doit { print "hello¥n"; }
0511デフォルトの名無しさん
2009/11/18(水) 09:21:40Rubyでやりたいならdef main〜endに処理入れてコード末尾でmain呼び出せば
0512デフォルトの名無しさん
2009/11/18(水) 09:26:24本当の実行時に未定義があればどんな言語でもエラーだろう
RubyでだってNameErrorとか出る
で、まあ、ソース読み込み時に定義が読めなくても
実行時に解決可能ならOKという言語は多いと思うぞ
0513デフォルトの名無しさん
2009/11/18(水) 09:31:23YARVとやらが使えるようになったらrubyでもできるようになるのかな
0514デフォルトの名無しさん
2009/11/18(水) 09:57:47そうかここは初心者スレだった
0515デフォルトの名無しさん
2009/11/18(水) 10:20:32開発者が日本人だから誇らしいって友達がいってました。
0516デフォルトの名無しさん
2009/11/18(水) 10:33:05最初に関数定義群があるとキモチ悪いのはあれなんでだろうね
0517デフォルトの名無しさん
2009/11/18(水) 11:42:060518デフォルトの名無しさん
2009/11/18(水) 11:47:340519デフォルトの名無しさん
2009/11/18(水) 12:03:210520デフォルトの名無しさん
2009/11/18(水) 12:11:220521デフォルトの名無しさん
2009/11/18(水) 12:12:330522デフォルトの名無しさん
2009/11/18(水) 12:17:27Rubyが残ります
RailsがなくてもベターPerlでグルー言語でプログラマの友でOOP初心者向け言語として普通に活躍していくでしょう
仕事として年俸1千万とか欲しいなら、そりゃJavaをやればいいのさ
0523デフォルトの名無しさん
2009/11/18(水) 12:19:060524517
2009/11/18(水) 12:22:09普通 self つけるでしょ???
0525デフォルトの名無しさん
2009/11/18(水) 12:25:200526デフォルトの名無しさん
2009/11/18(水) 12:44:29素の Ruby を知らないひとが出てきてるね
本気で Rails を Ruby だと思っていそう
0527デフォルトの名無しさん
2009/11/18(水) 12:45:45ここはRubyスレです
Pythonスレにお帰り下さい
0528デフォルトの名無しさん
2009/11/18(水) 12:49:27でもself付けるとprivateメソッド呼べないから、スタイルを統一するのは無理。
class MyClass
def meth1
self.meth2
end
private
def meth2
puts 'hello'
end
end
myclass = MyClass.new
myclass.meth1
これがエラーになる不思議。
0529デフォルトの名無しさん
2009/11/18(水) 12:51:12レシーバつきで呼んだらエラー出してねと宣言しておきながらレシーバつきで呼ぶとは何事か
0530517
2009/11/18(水) 12:55:46なんかつけるなと言う意見の方が多いのでつけないことにします。
俺は少数派だったのか
0531デフォルトの名無しさん
2009/11/18(水) 12:58:08それはprivateの意義よりRubyの仕様が先にありきの考え方。
privateのそもそもの意味を考えれば上のコードでエラーを出すのはおかしいでしょ。
だってselfを付けても省いても意味は変わらないんだもの。
実際上のコードのselfを消せばエラーにならないわけだが、内部ではmeth2を呼ぶために結局selfを付けてる。
0532デフォルトの名無しさん
2009/11/18(水) 13:00:02どうして他の言語の動作を持ち込むの?
0533デフォルトの名無しさん
2009/11/18(水) 13:02:51それはおまえさんの理想や狭い常識のprivateありきの考え方だな
0534デフォルトの名無しさん
2009/11/18(水) 13:03:541.9でちょいちょい変えようとしてたんだけど、1.9の方針が変わってしまい、なかったことに
0535デフォルトの名無しさん
2009/11/18(水) 13:07:040536デフォルトの名無しさん
2009/11/18(水) 13:14:21そうだったのか。知らなかった
0537デフォルトの名無しさん
2009/11/18(水) 13:16:480538デフォルトの名無しさん
2009/11/18(水) 13:16:500539デフォルトの名無しさん
2009/11/18(水) 13:21:190540デフォルトの名無しさん
2009/11/18(水) 13:25:190541デフォルトの名無しさん
2009/11/18(水) 13:27:590542デフォルトの名無しさん
2009/11/18(水) 13:33:150543デフォルトの名無しさん
2009/11/18(水) 13:34:300544デフォルトの名無しさん
2009/11/18(水) 13:35:24ですよね。呼んではいけない関数を呼ぶプログラマーが悪い。
0545デフォルトの名無しさん
2009/11/18(水) 13:37:13たいていは舌打ちして強制的に呼ぶ
0546デフォルトの名無しさん
2009/11/18(水) 13:38:19第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社
ttp://gihyo.jp/dev/serial/01/modern-perl/0020?page=1
この Email::Sender は日本語大丈夫なのかな。
メールの解説記事って添付や From: の日本語のことを書かないよね。
0547546
2009/11/18(水) 13:39:000548デフォルトの名無しさん
2009/11/18(水) 22:26:12かわいい
0549デフォルトの名無しさん
2009/11/19(木) 14:06:09かきくけこ
さしすせそ
さしすせそ
たちつてと
といった感じの文章を表示させるときに、
"さしすせそ"の文を1行消して表示させるにはどうすればいいですか?
よろしくお願いします。
0550デフォルトの名無しさん
2009/11/19(木) 14:27:03初心者ぽいと言えば初心者ぽいのだが
並び替えの機能が作られているまたは標準のArray#sortで望み通りだという場合には、
(行ごとに区切って配列にして)Array#uniq する
str = "あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと"
arr = str.split(/\n/) # または str.split(/\r\n/)
puts arr.uniq.sort
あいうえおが例示であって、「1行」ごとに配列にしてsortしても思い通りの表示にならんという場合は
sort のブロック自力で書かんといかんな
0551デフォルトの名無しさん
2009/11/19(木) 15:50:130552デフォルトの名無しさん
2009/11/19(木) 16:09:01完全に初心者だとどういう情報を出したら良いのか分からないんじゃないの。
だから質問力が低いってなるんだろうけど、ここは初心者スレだよー
0553デフォルトの名無しさん
2009/11/19(木) 21:13:30class Hoge
def echo_hoge
puts "hoge"
end
end
h = Hoge.new
str = "echo_hoge"
h."#{str}" # エラー
0554デフォルトの名無しさん
2009/11/19(木) 21:24:41どーしても必要だという場合
h.__send__(str)
でオブジェクト h の str という名前のメソッドが引数なしで呼ばれる
h.__send__(str, param)
でいわゆる h.str(param) になる
0555デフォルトの名無しさん
2009/11/19(木) 21:26:28h.send(str)
でどうかな?
0556デフォルトの名無しさん
2009/11/19(木) 21:53:46ありがとうございました。出来ました。
使う状況ですが、例えばHumanクラスがname age sexのアクセサを持っていたとして、そのうちどれかの値を欲しいとします。
そんなときはどのアクセサが欲しいかが動的に決まると思うのですが、そんなときに human.__send__(str) で取得しようとしました。
これはおかしな考えでしょうか?
0557デフォルトの名無しさん
2009/11/19(木) 21:58:410558デフォルトの名無しさん
2009/11/19(木) 21:59:49どうしてもそうなったら自分ならHash使う
0559デフォルトの名無しさん
2009/11/19(木) 22:07:30def get_value_from(who, key)
case key
when 'name' then who.name
when 'age' then who.age
when 'sex' then who.sex
else raise ArgumentError, "Unknown parameter: #{key.inspect}"
end
end
human = Human.new
register_data(human)
puts "名前は #{get_value_from(human, 'name')} です"
0560デフォルトの名無しさん
2009/11/19(木) 22:17:52なるほど、受け取った文字列をメソッド名に使うんじゃなくて、そうやって分岐すればいいんですね。
勉強になりました、ありがとうございます。
でも、アクセサが増えるたびにwhenに追記するのは面倒じゃないですか?
0561デフォルトの名無しさん
2009/11/19(木) 22:20:23メソッドがくっついてるなら>>559みたいにやったほうがいい
もしくは対応テーブル作るかなぁ
table = { "name" => :name }
human.__send__(table[str])
変なことすれば自分が困るだけみたいな手抜きスクリプトなら
そのまま__send__しちゃうこともあるけどねw
0562デフォルトの名無しさん
2009/11/19(木) 22:20:50で持っておけば済むところだね。
0563デフォルトの名無しさん
2009/11/19(木) 23:51:20ありがとうございました。
0564デフォルトの名無しさん
2009/11/20(金) 00:06:44class FOO < String
def get
self
end
def put(arg)
self = arg
end
end
foo = FOO.new
foo.put("aaa")
p foo
>ruby test.rb
test.rb:6: Can't change the value of self
self = arg
^
となってしまってselfを変更しようとすると怒られてしまうのですが
どうしたら変更できますか?
0565デフォルトの名無しさん
2009/11/20(金) 00:11:30String#replace
0567デフォルトの名無しさん
2009/11/20(金) 00:54:370568デフォルトの名無しさん
2009/11/20(金) 01:04:560569デフォルトの名無しさん
2009/11/20(金) 01:33:44HP-UXでPostgreSQLとの連携のためにライブラリを入れたいのですが
どうしてもエラーしてしまいます。
OS : HP-UX 11iv2
Ruby : 1.8.7
PostgreSQL : 8.3
ライブラリ : pg-0.8.0
gemにてpg-0.8.0.gemをinstallすると下記のエラーが表示され
インストールできません。
mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)
ライブラリのパスがうまく認識していない?ようなのですが、
gemの起動時に--with-pg-lib, --with-pg-includeは指定しています。
何か原因として考えられるものがあればご教授ください。
よろしくお願いします。
0570デフォルトの名無しさん
2009/11/20(金) 07:44:43>mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)
このエラーでぐぐると、まさにHP-UXでエラーが発生したというレポートがある。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322136
で、すでに修正されたとあるんだけど。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322143
2008年の時点で修正されたはずだから、もし再現するなら、本家メーリングリストで聞いたほうがいいと思う。
0571デフォルトの名無しさん
2009/11/20(金) 07:47:02>Ruby : 1.8.7
詳しいバージョン番号は?最新版は1.8.7-p174だから、もし古いのを使っているなら新しいのを使ってみるといいかもね。
0572デフォルトの名無しさん
2009/11/20(金) 09:42:03代入自体はメソッドではない。
が、メソッド呼び出しになる代入(のように見える操作)はある。
0573デフォルトの名無しさん
2009/11/20(金) 10:21:27が正解
hoge.foo=123 は代入ではなくただの「末尾に=記号がついたメソッド」
hoge.bar(123) であるのと同様に
hoge.foo=(123) であるだけ
ただし Ruby は末尾に等号を含むメソッドの解釈を便利に特殊扱いして
hoge.foo = 123 とメソッド名が空白で分断されているようになってても敢えて Hoge#foo= を呼ぶ
なにか = 値 というふうに書かれていた場合、「なにか」がその場所で変数であるかどうかで挙動が違う
変数であったら、本当に変数代入が行われる
変数ではなかったら、「なにか=」 という末尾等号メソッドへのアクセスが可能かどうかチェックされる
どれでもなかったら単にエラー
0574デフォルトの名無しさん
2009/11/20(金) 22:44:51Rubyの変数って具体的にどんな物?
0575デフォルトの名無しさん
2009/11/21(土) 00:39:46とりあえず具体的にも何も、変数は変数でしか無いのだが
0576デフォルトの名無しさん
2009/11/21(土) 01:08:26それ以外はポインターを渡す。
と思ってたのだが
0577デフォルトの名無しさん
2009/11/21(土) 01:11:560578デフォルトの名無しさん
2009/11/21(土) 02:18:33ある名前(変数)に右辺のオブジェクトIDを割り当てるってことでしょ
でどれでもない場合エラーなんてあるの?無ければ新しくその名前の変数が用意されるんじゃないのか
0579デフォルトの名無しさん
2009/11/21(土) 02:29:19左辺にリテラルとか。
0580デフォルトの名無しさん
2009/11/21(土) 03:09:510581デフォルトの名無しさん
2009/11/21(土) 05:22:000582デフォルトの名無しさん
2009/11/21(土) 07:00:11出来ない。
なお``はメソッドでありリテラルではない。
0583デフォルトの名無しさん
2009/11/21(土) 07:06:57それを許される言語はほとんどないと思う
似てるのはC++0x(ユーザー定義リテラル)とLisp(リードマクロ)か?
0584デフォルトの名無しさん
2009/11/21(土) 09:35:04右辺を解決して辿り着いたオブジェクトのIDに左辺を関連付ける
「動かされる」のは常に、変数名である左辺
何度も言われているが、ひとつのオブジェクトに付箋のようにぺたぺた貼り付ける変数名、というのが極めて感覚的に近い
0585デフォルトの名無しさん
2009/11/21(土) 09:39:53レスあるがとうございます。
そのページは私もググって見つけました。
直ってると思われるのにエラーするのでおかしいかなと。
とりあえず該当箇所のmkmf.rbを無理やり変更したらコンパイルは通りましたが
思ったとおりうまく動きません。(TT)
>>571
レスありがとうございます。
rubyのバージョンは1.8.7-p173です。
HPが配布しているバイナリファイルにてインストールしているのが
もしかしたらいけないのでしょうか。
0586デフォルトの名無しさん
2009/11/21(土) 09:59:56シンボル
オブジェクトID
0587デフォルトの名無しさん
2009/11/21(土) 10:20:29よく分からないんだけど、gem install でインストールしているわけじゃない?
「gemにてpg-0.8.0.gemをinstall」って言葉もよく分からない
gemを使ってインストールするときは
gem install pg-0.8.0
等とするのが普通なんだけどね。
1. .gem っていう拡張子まで書いている理由がよく分からないな
2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が
解決しやすいと思う。
3. あと、該当箇所のパッチもしくは変更後の行のコピペ
4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
HPからダウンロードしたの?
5. ruby -v の出力結果も書いてね。
5個の質問に答えてくれたら解決するまで付きやってやる
0588デフォルトの名無しさん
2009/11/21(土) 18:43:03継承されていない状態では動かないようです
class A
def foo(arg)
p arg
end
end
class A
def foo(arg)
arg.concat "\n"
super(*arg) #ここで元のA#fooを呼び出したい
end
end
この状態でオーバーライド元のメソッドをオーバーライドしたメソッドから呼ぶ事って可能ですか?
0589デフォルトの名無しさん
2009/11/21(土) 18:46:590590デフォルトの名無しさん
2009/11/21(土) 19:10:11いやそのりくつはおかしい
0591デフォルトの名無しさん
2009/11/21(土) 19:10:480592デフォルトの名無しさん
2009/11/21(土) 19:12:12def foo(arg)
arg.concat "\n"
super.foo(*arg) #ここで元のA#fooを呼び出したい
end
end
0593デフォルトの名無しさん
2009/11/21(土) 19:22:480595569
2009/11/21(土) 23:20:27>1. .gem っていう拡張子まで書いている理由がよく分からないな
.gemファイルをローカルへDLしてからインストールしました。
>2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が解決しやすいと思う。
gem install /tmp/pg-0.8.0.gem
でインストールしようとしたのですが、間違ってたでしょうか?
>3. あと、該当箇所のパッチもしくは変更後の行のコピペ
単純にエラーした部分を削ってしまった
def libpathflag の中の
LIBPATHFLAG+RPATHFLAG
を
LIBPATHFLAG
だけに変更。
それが正しいのかはよく分かりませんがコンパイルは通りました。
>4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
>HPからダウンロードしたの?
HPのウェブサイトにて、HP-UXの各種ツールがDLできますのでそちらから。
ttp://h50146.www5.hp.com/products/software/oe/hpux/component/network/ix/
ruby本体とrubygemはこれでインストールしています。
>5. ruby -v の出力結果も書いてね。
すいません、週明けまで環境を見ることができません。 来週確認して書き込みますね。
0596チンパンジー愛ちゃん
2009/11/22(日) 00:17:53>>595で紹介しているサイトでは
6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
v2, v3どっちを使おうとしているの?
また、コンポーネントがどっちでもrubyのバージョンは
web1 A.13.00の項目で
Ruby A.13.00-1.8.7-p160.001 A.13.00-1.8.7-p160.001
とあるので、バージョンは1.8.7-p160ではないかと思っているんだけど、
>>585で
> rubyのバージョンは1.8.7-p173です。
7. と言っている。このp173のrubyはどこから出てきた?
>>569では
> PostgreSQL : 8.3
> ライブラリ : pg-0.8.0
と言っている。
>>595のサイトを見ると
web1 A.13.00
PostgreSQL* A.13.00-8.3.7.001 A.13.00-8.3.7.001
とあって、PostgreSQLはいいんだけど、ライブラリpg-0.8.0ってのが分からないな
gemで配布されているのはpostgres-0.7.9で、最終更新日は2008年1月18日だったりする。
0.8.0というバージョンで探すと
一応、pgってのがあるんだけど、ChangeLogの最終更新日は2004年だ。
これはもう使われていないアダプタなので、マシンをネットにつなげれるのなら
gem install postgres
などとしてこちらのアダプタを使用するのが吉
8. pg-0.8.0を使わないといけない理由は、一緒に配布されていたから使おうとしています。
だったりしない?
それだけの理由かつ、サーバをネットにつなげれるのなら、postgres-0.7.9を使った方がよい。
ネットにつなげれなくてもpostgres-0.7.9.gemをダウンロードしてインストすればよろし。
0597チンパンジー愛ちゃん
2009/11/22(日) 00:33:32http://rubyforge.org/projects/ruby-pg
を見るとpgの方が更新日新しいみたい
pgを使う方が更新日的には正しそう
それと、インストール方法は
gem install /tmp/pg-0.8.0.gem
であってるよ
0598デフォルトの名無しさん
2009/11/22(日) 01:03:06先ず、ttp://mono.kmc.gr.jp/proj/rubysdl/?GyakubikiRubySDL#l11 の
「BGMを鳴らしたい」がありましたので、この sample.ogg を Test.mp3
に変えました。
次に、SDLをインストールするため、ttp://rubyforge.org/frs/?group_id=1006
からDLし展開しました。
ところが展開したディレクトリにコマンドプロンプトのcdで移動し、ここで
ruby install_rubysdl.rb をしたところ、
ruby: No such file or directory -- install_rubysdl.rb (LoadError)
となりました。どうしたら良いでしょうか? ( >install_rubysdl.rb としても駄目でした)
目的はMP3の再生なので特にSDLには拘りません。
0599デフォルトの名無しさん
2009/11/22(日) 01:14:11module M
def M::func(x)
p x
end
end
M::func(123)
include M
func(123)
みたいにincludeしてもしなくても呼べるメソッドを定義することって出来ますか?
M::funcとfuncを2つ定義すれば出来ますがもうちょっとスッキリする方があれが良いなと・・・
0600デフォルトの名無しさん
2009/11/22(日) 01:15:36その場所にinstall_rubysdl.rbがないんじゃね?
dirって打ってあるかどうか確認して
0601デフォルトの名無しさん
2009/11/22(日) 01:22:17関数的メソッド形式として利用したいユーザーが、意図的にモジュールを include する
それ以外はやっちゃだめだしトップレベルで include されてると期待してもだめ
0602598
2009/11/22(日) 01:53:40早速のレスさんきゅうです。
install_rubysdl.rbは、やはりありません。
上で書いた通り、SDLによるMP3に拘りませんので
どなたかご教授願います。
(手元の本やGoogleでもSDLの方法しか見つかりません)
0603デフォルトの名無しさん
2009/11/22(日) 02:16:35本当に再生さえ出来ればいいのならこんな方法もある
コマンドラインから再生できるプログラムを用意(以下の例ではmplayerを使用)して
mp3_filename = 'hoge.mp3'
system("mplayer #{mp3_filename}")
ffplayでも出来ると思うけどうちでは再生が安定しなかった・・・
あとlibmplayer.dllを使っても再生できそうだけどDLLのリファレンスが見あたらないな・・・(汗
0604デフォルトの名無しさん
2009/11/22(日) 02:31:29OLEを使う方法もあるな
ttp://www.google.co.jp/search?hl=ja&q=VBA+mp3+%8D%C4%90%B6
ただWIN32OLEは実装が微妙なところがあるので1.8.xだとひょっとしたらダメな可能性はある・・・
0605デフォルトの名無しさん
2009/11/22(日) 05:44:580606デフォルトの名無しさん
2009/11/22(日) 07:46:56WIN32OLE、完成度高いと思って使ってた。。。
どのへんの実装が微妙なのか教えていただけませんか?
0607デフォルトの名無しさん
2009/11/22(日) 07:50:25module_function
0608デフォルトの名無しさん
2009/11/22(日) 08:14:24すまん。詳細は忘れたorz
以前に1.8.xのWIN32OLEが実装不十分で正常に実行できないのがあった
その時ググっていたら1.9.xのいくつかで改善されたらしいとどこかに書いてあったのだが・・・
0609デフォルトの名無しさん
2009/11/22(日) 08:25:511.8で使ってるが問題起こったことは無い
他人の意見を鵜呑みにするなという良い例
0610デフォルトの名無しさん
2009/11/22(日) 08:34:47�dです。
自分で問題にぶつかるまであまり気にしないことにします。
0611デフォルトの名無しさん
2009/11/22(日) 08:49:06ttp://www.google.co.jp/search?hl=ja&q=InvokeVerb+win32ole
文法的な誤りではないので原因の特定までにかなり手こずった記憶がある
>>604の方法と関係があるかは確認していないけど、何らかの罠が有る可能性は
頭の隅に置いておいた方が良いかも
0612デフォルトの名無しさん
2009/11/22(日) 10:33:440613569
2009/11/22(日) 10:45:35>6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
>v2, v3どっちを使おうとしているの?
>7. と言っている。このp173のrubyはどこから出てきた?
すいません、先に貼ったURLだとp160だったのですが、実際のDLページだと
p173になっており、実際にDLされたものもp173でした。
ちなみにUP-UXは11.23なので11iv2でDLしています。
ttps://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPUXIEXP1123
0614デフォルトの名無しさん
2009/11/22(日) 10:47:26出所を思い出せないから、本当かどうかは怪しいが
「もう出ないからRubyInstaller使ってね」って話がどこかにあったような
0615デフォルトの名無しさん
2009/11/22(日) 10:59:09コマンド起動してもいいなら、mplayer.exe だな。autotestで音鳴らすのに、これ使ってる。
0616デフォルトの名無しさん
2009/11/22(日) 11:08:39Ruby/Tkでエントリーを表示すると
その中身は文字列になりますよね?
その文字列を数値にして、もしできなかったら(文字でできていたら)
エラーを返すにはどうすればいいですか?
計算機みたいなのをつくりたいんです。
初心者ですいません。
0617デフォルトの名無しさん
2009/11/22(日) 11:18:17if /[1234567890]+/ =~ str then
puts '全部数字です'
else
puts '数字以外のものが入っています!'
end
0618デフォルトの名無しさん
2009/11/22(日) 11:22:530619デフォルトの名無しさん
2009/11/22(日) 11:48:23小数点入れたいというときに少し困る
それに、Integer() も Float() も例外をキャッチしないといけない
例外をキャッチできるような人はそもそもマニュアル読んで自力でできるはず
>>616の質問の書き方からしてまだそれは無理
だからわざわざ /[0-9]+/ ではなく /[1234567890]+/ と書いた
0620デフォルトの名無しさん
2009/11/22(日) 11:48:58どうもです。そうですか、1.91は出ないですか。そう言えば1.87も出てませんね。
自力でコンパイルなんてできないのでOne-Click Installerは本当にありがたかったのですが。
正規表現の戻り読みを使いたかったのですが。
0621チンパンジー愛ちゃん
2009/11/22(日) 11:50:29のだと、マイナスや小数点、指数表記などが扱えないので、
str.to_f
が賢いと思う 文字列で出来ているときは
0.0
が返ってくるので、この時は本当は0が入っているか
再度文字列チェックすればよい
0622デフォルトの名無しさん
2009/11/22(日) 11:56:52String#to_f で変換されるものと変換されないものの区別を自分でつけることはできる?
というか既にその処理「バグって」るだろ
最後の処理がとても非本質的
今の自分に必要なものだけ正規表現で通したほうがいい
小数が入って欲しくないかもしれないし、負の数が入って欲しくないかもしれない
0623デフォルトの名無しさん
2009/11/22(日) 12:09:18ActiveScriptRubyじゃダメ?
0624デフォルトの名無しさん
2009/11/22(日) 12:29:23irb> p "1_2_3".to_f
123.0
irb> p Integer("1_2_3")
123
0625デフォルトの名無しさん
2009/11/22(日) 12:36:33すみません、「ActiveScriptRuby」と「One-Click Installer」ってどう違うのでしょうか?
ちなみに今の1.86は One-Click Installerで入れました。
0626デフォルトの名無しさん
2009/11/22(日) 12:53:220627デフォルトの名無しさん
2009/11/22(日) 13:19:37有難うございます。
解決しました。
0628デフォルトの名無しさん
2009/11/22(日) 13:24:32ホームページを見ると、Ruby-1.9.1-p243 Microsoft Installter Package(2009/7/20)
っていうのがあるけど、どうなんだろう?
ActiveScriptRuby and Other packages
http://www.artonx.org/data/asr/
ここのはどうなん?
Rumix - Ruby Starter Package with Installer
http://ruby.morphball.net/rumix/
0629デフォルトの名無しさん
2009/11/22(日) 15:23:40自分もよく知らないです。
どれ入れても大丈夫のような気はするけど。。。
Ruby/インストール - いなた屋 - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/inataya/d/Ruby/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
0630デフォルトの名無しさん
2009/11/22(日) 19:37:32One-Click Installerはまだ1.8.6しかなかったような気がする。
0631デフォルトの名無しさん
2009/11/22(日) 22:02:48Windowsは窓から投げ捨てろ(窓だけに)
0632デフォルトの名無しさん
2009/11/22(日) 22:06:380633デフォルトの名無しさん
2009/11/22(日) 22:08:000634デフォルトの名無しさん
2009/11/22(日) 22:24:00き、決まったお (`・ω・´)シャキーン
(;´・ω・) あ、あれ・・・
(´;ω;`) ブハッ
0635デフォルトの名無しさん
2009/11/22(日) 22:30:170636デフォルトの名無しさん
2009/11/22(日) 22:38:450637デフォルトの名無しさん
2009/11/22(日) 23:16:200638デフォルトの名無しさん
2009/11/22(日) 23:22:48レンタルサーバでも使えるように極力別のライブラリをインストールしなくてもいいようなものが良いです
0639デフォルトの名無しさん
2009/11/22(日) 23:25:15サムネイル作成が可能なプログラムをレンタルサーバにインストールして
sysytem メソッド等から直接呼んでください
たぶん一番早いし速いです
0640デフォルトの名無しさん
2009/11/22(日) 23:30:28このあたりは使う前提じゃないと見つからないんじゃないだろうか。
0641デフォルトの名無しさん
2009/11/23(月) 00:04:39難しいだろうな
PNGならRuby/PureImageで拡大縮小できるが・・・
0642デフォルトの名無しさん
2009/11/23(月) 00:06:250643デフォルトの名無しさん
2009/11/23(月) 00:19:23実際的な速度で動作するとかまずないし
0644デフォルトの名無しさん
2009/11/23(月) 00:28:50下記コードで指数の値(val0)を出力したところ、
同じ値(1.0)のまま動きません。原因は何でしょうか?
count = 0
while
count+=1
break if count > 100 # 100回で終了
sleep 1
val0 = Math.exp(count/10)
puts "1sec #{count} #{val0}"
end
0645デフォルトの名無しさん
2009/11/23(月) 00:31:240646デフォルトの名無しさん
2009/11/23(月) 00:31:38Math.exp(count/10) の代わりに count/10 を表示してみればわかるかも
0647デフォルトの名無しさん
2009/11/23(月) 00:49:58さんきゅう
>>646
作法上ダメなんですか?
0648638
2009/11/23(月) 00:50:21ありがとうございました
0649デフォルトの名無しさん
2009/11/23(月) 01:20:55>空 while
ダメって事はないけど
>>644みたいな例だと
(0...100).each{|count|p count}
とか
Range.new(0,100,true).each{|count|p count}
とか書くのが一般的じゃないかな
でも、自分の好きな方法で良いと思うよ
0650デフォルトの名無しさん
2009/11/23(月) 01:41:51条件とか中の処理を間違えると無限ループしてしまう可能性がある
初心者は誤って無限ループを作ってしまうし、慣れた人でも結構気を使う
でも、(0...100).each は
中で余程おかしな処理を書かない限りまず無限ループにならない
回数が決まっているループなら、eachを積極的に使ったほうが良いと思うよ
0651デフォルトの名無しさん
2009/11/23(月) 01:44:05(0...100).eachってのは何の影響?
0652デフォルトの名無しさん
2009/11/23(月) 01:52:09カウンタにこだわらず「なんでもいいから100回」ならそれでいいけど
今回は厳密に「1から100まで」と数字に意味があるからね
ただ書き換えるなら1..100だと思うし、Range.newが一般的というのは同意できない
0653デフォルトの名無しさん
2009/11/23(月) 04:58:150654デフォルトの名無しさん
2009/11/23(月) 05:15:53自分が困ったらよりよい方法を探せば良いだけでしょ
#メソッド+ブロックによるループは他言語ではあまり見ない気がするので
#Ruby初心者は理解しにくいかもね
0655デフォルトの名無しさん
2009/11/23(月) 06:33:54それ101回
わざわざバグらせてくれてありがとう
0656デフォルトの名無しさん
2009/11/23(月) 06:37:120657デフォルトの名無しさん
2009/11/23(月) 06:51:34Range#each も結果的動作は同じだけれど、開始位置と終了位置の2要素が必要
>>644が悪手なのは while だからなのではなく
・ 無限 while
・ break で自力で抜ける
・ カウンタを初期化する、初期値は0
・ カウンタのインクリメントはループの初めに書く
・ メインの処理回数は100回で終了する
・ ただしカウンタは100はOKで、100を超えたときにbreakする
というように構成要素がやたら多いから
100.times{|i| … } のほうが間違わなくていいだろ
0658デフォルトの名無しさん
2009/11/23(月) 07:22:50100回だ。Rangeリテラルの説明を読め
0659デフォルトの名無しさん
2009/11/23(月) 07:42:36ただの罠だが
特に2ch
0660デフォルトの名無しさん
2009/11/23(月) 07:43:42.
0661デフォルトの名無しさん
2009/11/23(月) 08:23:260662デフォルトの名無しさん
2009/11/23(月) 08:36:10フォントの関係が違いがわからん・・・
0663デフォルトの名無しさん
2009/11/23(月) 08:49:23ぱっと見で意味が分かりにくいし
0664デフォルトの名無しさん
2009/11/23(月) 09:10:490 ^..^ 100
0665デフォルトの名無しさん
2009/11/23(月) 09:16:190 (::) 100
0666デフォルトの名無しさん
2009/11/23(月) 09:22:300667デフォルトの名無しさん
2009/11/23(月) 09:23:26ttp://slashdot.jp/~YamaKenZ/journal/312265
[3,7] → 3..7
(3,7] → 3!..7
[3,7) → 3..!7
(3,7) → 3!..!7
0668デフォルトの名無しさん
2009/11/23(月) 09:34:48これいいね。rubyでも採用してほしい
0669デフォルトの名無しさん
2009/11/23(月) 11:13:16先生!配列の [3, 7] と 閉区間の [3, 7] の区別がよくわかりません!
0670デフォルトの名無しさん
2009/11/23(月) 11:15:100671デフォルトの名無しさん
2009/11/23(月) 11:19:40というかフツーは数字のほうをいじって2ドットで書けるように使うと思う
3ドットはあまり見ない
0672デフォルトの名無しさん
2009/11/23(月) 11:19:410673デフォルトの名無しさん
2009/11/23(月) 11:24:530674デフォルトの名無しさん
2009/11/23(月) 11:59:33とか
===
とか
使ってるのはPHPだっけ?
0675デフォルトの名無しさん
2009/11/23(月) 12:02:47ほんとは記号のほうをいじるべきなんだけどね
さすがに紛らわしい
0676デフォルトの名無しさん
2009/11/23(月) 12:24:280677デフォルトの名無しさん
2009/11/23(月) 13:33:22=!=じゃなくて!==な
暗黙の型変換をしないで厳密に比較する演算子
0678デフォルトの名無しさん
2009/11/23(月) 13:36:54後で取り出すプログラムを書いています。
取得時にはダックタイピングで区別なく保存データを作成していますが、
別のタイミングで復元しようとすると、CGIからの入力に関してCGIモジュールの依存が残っていて(?)
"CGIモジュールがない"とエラーになってしまいます。
保存時にto_sなどを加えてみたのですが、変わりません。
純粋に文字列だけを取り出し、CGIオブジェクトの依存を切るにはどうしたらいいのでしょうか?
Ruby1.8.7です。
0679デフォルトの名無しさん
2009/11/23(月) 14:16:02・ Marshal.load する前に、復元後のオブジェクトが存在するために必要なクラスを含む全モジュールを require しておく
・ 必要なデータだけを適当なキーの Hash オブジェクトにでもまとめ、その Hash だけをまーしゃるする
後者推奨
0680デフォルトの名無しさん
2009/11/23(月) 14:27:44まず第一に、今あえて古い cgi.rb を使うのはおすすめしない
webrick/cgi や Rack に切り替えた方がいいと思う
で、純粋な文字列を取り出す方法としては、次の手がある
pure_str = String.new(cgi['key1'])
>>679
それだと結局、CGIの依存は切れないんじゃ?
0681678
2009/11/23(月) 15:13:19ありがとうございます。
実は>>679で挙げていただいた後者の方法をとっていました。
>>680に挙げていただいたStringを新たに生成する方法で解決できました。
webrick/cgi、Rackともノーチェックでしたので、これから確認してみようと思います。
ありがとうございました!
0682デフォルトの名無しさん
2009/11/23(月) 19:05:33二日間何回か試してるのですがインストールできません
403エラーではないのでしょうか・・・
C:\Documents and Settings\Owner>gem install test-spec
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 403
0683デフォルトの名無しさん
2009/11/23(月) 19:11:130684デフォルトの名無しさん
2009/11/23(月) 19:15:230685デフォルトの名無しさん
2009/11/23(月) 19:17:500686デフォルトの名無しさん
2009/11/23(月) 19:32:04--verboseつけたら解決するかも! とか初心者に分かるわけねーだろ
0687デフォルトの名無しさん
2009/11/23(月) 19:38:330688デフォルトの名無しさん
2009/11/23(月) 19:42:19違う
0689デフォルトの名無しさん
2009/11/23(月) 19:47:43やってみますのレスはいらないってことでしょ
0690デフォルトの名無しさん
2009/11/23(月) 19:50:34回答者は不安に思うかもしれないから多少の合理性はある
だいいちたった一行のレスにそんなに目くじらたてることでもないでしょ
0691デフォルトの名無しさん
2009/11/23(月) 19:52:35どんだけ秒速の世界に生きてんだよ
0692デフォルトの名無しさん
2009/11/23(月) 20:10:020693デフォルトの名無しさん
2009/11/23(月) 20:11:470694デフォルトの名無しさん
2009/11/23(月) 20:56:490695デフォルトの名無しさん
2009/11/23(月) 23:51:59ruby script/serverを実行した際に
C:\rails\hello>ruby script/server
=> Booting Mongrel
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
でコマンドプロンプトが停止したまま動かなくなります
Ctrl-Cをしてもサーバーは停止できません
一度だけこの状態で長時間放置したときに
500 Internal Server Error
unknown error
という表示がされました
解決方法がさっぱりわかりません
どなたか知っている方がいれば教えていただけるとありがたいです
0696デフォルトの名無しさん
2009/11/23(月) 23:58:13それって要するに書いても書かなくても同じくらい不快を与えかねないってことだから、
最適化する意味で、やっぱり書かないのがベターだな。
0697デフォルトの名無しさん
2009/11/24(火) 00:09:53Railsはスレ違い
あとコマンドプロンプトが「何も入力できない」状態になるのはそりゃ当たり前なんじゃね
0698デフォルトの名無しさん
2009/11/24(火) 00:43:480699デフォルトの名無しさん
2009/11/24(火) 06:11:490700デフォルトの名無しさん
2009/11/24(火) 14:58:060701デフォルトの名無しさん
2009/11/24(火) 15:01:13引数がある場合にどう書けばいいのか分かりません。
できればリファレンスなども教えてください。
よろしくおねがいします。
#######################
def f(x)
puts x
end
class Foo
def initialize(h)
@h=h
end
def bar(x)
@h(x)
end
end
foo = Foo.new(f)
foo.bar(7)
0702デフォルトの名無しさん
2009/11/24(火) 15:01:26要するに正常位
0703デフォルトの名無しさん
2009/11/24(火) 15:11:07それなんて Proc ?
def f(x)
puts x
end
foo = Proc.new {|arg| f(arg) }
# 百年後
foo.call('Hello!')
0704デフォルトの名無しさん
2009/11/24(火) 15:31:52もうちょっと込み入ったことがやりたかったようなので、
やっぱりクラスは定義したいのですが・・・。
数学で言うと、f(x)を元手にして
nにかんする関数の族
{lambda {|x| n*f(x)}_n
を作りたいわけです。
##############################
def f(x)
x
end
class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g(x)}
end
end
foo = Foo.new(f).bar(2)
foo.call(7)
=begin
# It Works!
foo = lambda {|x| 2*f(x)}
p foo.call(7)
=end
0705デフォルトの名無しさん
2009/11/24(火) 15:36:36def f
Proc.new{|x|x}
end
class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end
foo = Foo.new(f).bar(2)
foo.call(7)
こういう事ではなくて?
0706デフォルトの名無しさん
2009/11/24(火) 15:48:47すばやい回答ありがとうございます。
>>705
これでほとんどできてますが、
f(x)の中身がややこしいので、そこはそのままいきたい。
def f(x) p x end
のままで、Foo.new(f.to_proc).bar(2)
で渡そうとしたのですが、引数の数が違うと怒られます。
う〜む・・・。
0707デフォルトの名無しさん
2009/11/24(火) 15:49:47def initialize(&block_arg)
@g = block_arg
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end
def f(x)
x
end
foo = Foo.new(&method(:f)).bar(2)
foo.call(7)
foo = Foo.new{|x| x }.bar(2)
foo.call(7)
0708デフォルトの名無しさん
2009/11/24(火) 15:50:37簡単に書けないのかなぁ・・・。
0709デフォルトの名無しさん
2009/11/24(火) 15:51:46foo = Foo.new{|x| f(x) }.bar(2)
0710デフォルトの名無しさん
2009/11/24(火) 15:52:070711デフォルトの名無しさん
2009/11/24(火) 15:59:59視認で変更したら通らないので、コピペしたら
methodにわたすfの前にコロンがついていました。
アンドとコロンの意味は不勉強につき分かっていませんが、
これで完全に解決です。
ありがとうございました。
0712デフォルトの名無しさん
2009/11/24(火) 16:03:45おぉっ!
綺麗にかけますね。
ちなみに私はC++のヘビーユーザーですが、
Rubyの簡潔さに浮気しています。
0713デフォルトの名無しさん
2009/11/24(火) 16:26:36methodの引数にはSymbolを渡せばいいらしい。
ttp://tinyurl.com/y8avpyg
アンド記号とかアスタリスク記号の説明は
マニュアルの「メソッド定義」のところにある。
ttp://tinyurl.com/ylzu859
みなさん、ありがとうございました。
0714デフォルトの名無しさん
2009/11/24(火) 18:12:52僕は開発者が日本人なのが誇らしくて使っていますが、
皆さんはどうでしょうか。
0715デフォルトの名無しさん
2009/11/24(火) 18:13:30バイナリとして配布しようとするとだいぶ冗長になってしまう・・・
標準クラスライブラリがもうちょっと細分化されたビルドって無いですかね?
プラットフォームはWin32です
0716デフォルトの名無しさん
2009/11/24(火) 18:24:190717デフォルトの名無しさん
2009/11/24(火) 18:40:09YARVをマルチコア対応に書き換えるよりは手間もかからんし
パフォーマンスも向上すると思うが。
0718デフォルトの名無しさん
2009/11/24(火) 20:20:13やりたいことはLispみたいに
クロージャに状態を持たせるようにしたい
0719デフォルトの名無しさん
2009/11/24(火) 20:47:41exerb
0720デフォルトの名無しさん
2009/11/24(火) 20:53:46例えばcallって感じで、それぞれ同じ名前の特異メソッドを定義
後は呼ぶ時にはcallを呼べば良い
class MyState
attr_accessor :state
def initialize(init_state)
@state = init_state
end
end
hoge = MyState.new(0)
def hoge.call
@state += 1
return @state
end
fuga = MyState.new('hello')
def fuga.call
if @state == 'hello'
then @state = 'world'
else @state = 'hello'
end
return @state
end
ary = [hoge, fuga]
10.times do
ary.each do |state_proc|
p state_proc.call
end
end
0721デフォルトの名無しさん
2009/11/24(火) 21:05:29Lisp みたいにクロージャを使えばいいじゃない。
lambda とか proc とかつい最近でも言ってるじゃない。
0722デフォルトの名無しさん
2009/11/24(火) 21:07:50irb(main):008:1> counter = 0
irb(main):009:1> lambda {counter += 1}
irb(main):010:1> end
=> nil
irb(main):011:0> c = make_counter
=> #<Proc:0x7ff86090@(irb):9>
irb(main):012:0> c.call
=> 1
irb(main):013:0> c.call
=> 2
irb(main):014:0> c.call
=> 3
0723デフォルトの名無しさん
2009/11/24(火) 21:11:520724デフォルトの名無しさん
2009/11/24(火) 21:41:08ほ〜そんなことができるのか
あんま理解してないけどlambdaおもしろそうだな
0725デフォルトの名無しさん
2009/11/24(火) 21:49:22MRIやYARVは対応していません
他の実装は知らん
0726デフォルトの名無しさん
2009/11/24(火) 22:27:44やりたかったのはそれです・・!
rubyすげ・・
0727デフォルトの名無しさん
2009/11/24(火) 23:49:12アンチエイリアスをかけていないので線がギザギザなんです
def draw_chart_line(start_x, start_y, end_x, end_y, color)
distance = (start_x - end_x).abs + (start_y - end_y).abs
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
#set_pixelはその座標に指定した色をつけます
set_pixel(x, y, color)
end
end
これで一応線は引けるのですがアンチエイリアスをrubyで記述するのは難しいでしょうか?
もっといいやりかたがあればそれも参考にしたいです
よろしくお願いします
0728デフォルトの名無しさん
2009/11/24(火) 23:54:41それはRubyの質問ではなくて画像処理プログラミングの質問ではないのか?
〜のようなアルゴリズムをRubyで記述したいとからなともかく
#Ruby(インタプリタ全般に言えることだが)で画像処理は遅いぞー
0729デフォルトの名無しさん
2009/11/25(水) 00:02:21他スレ行くにしてもこれ読んでからいったら?
ttp://www2.starcat.ne.jp/~fussy/algo/algo1-1.htm
0730デフォルトの名無しさん
2009/11/25(水) 00:24:440731デフォルトの名無しさん
2009/11/25(水) 01:45:09実行させるにはどうしたらいいでしょうか?
タスクを実行するまえに,clean したい...
0732デフォルトの名無しさん
2009/11/25(水) 05:43:510733デフォルトの名無しさん
2009/11/25(水) 06:01:07たくさんプログラムを書けばそのうちわかってきます
0734デフォルトの名無しさん
2009/11/25(水) 07:59:31依存関係のないタスクは呼び出されないのが当たり前。だって依存関係がないんだから。
呼び出したかったら、自分で明示的に呼び出すしかない。
>>726
>やりたかったのはそれです・・!
>rubyすげ・・
このくらい、ほかの多くの言語でも出来る。さほどRubyの強みというわけでもない。
0735デフォルトの名無しさん
2009/11/25(水) 08:28:440736デフォルトの名無しさん
2009/11/25(水) 09:25:120737731
2009/11/25(水) 11:47:46教えていただけないでしょうか?
0738デフォルトの名無しさん
2009/11/25(水) 12:15:170739デフォルトの名無しさん
2009/11/25(水) 13:58:08http://www.yomiuri.co.jp/national/news/20091125-OYT1T00541.htm
0740デフォルトの名無しさん
2009/11/25(水) 18:32:12>発表では、増村容疑者は昨年10月17日頃、デジタル録画画像のコピー制限を解除
>し、無制限にダビングできるソフトを、松山市内の大学生(19)に650円で、茨
>城県内の男性会社員(28)には850円でそれぞれインターネットを通して販売
>し、著作権を侵害した疑い。
もし、無制限にダビングできるソフトを無料配布していた場合は、どうなったのだろうか?
てゆーか、今後は、無料配布されるようになるでしょ。
0741デフォルトの名無しさん
2009/11/25(水) 18:55:22スレ違い
0743デフォルトの名無しさん
2009/11/25(水) 20:41:34require 'dl/import'
module Win32
extend DL::Importable
dlload 'user32.dll'
typealias('HWND', 'void *')
typealias('LPCTSTR', 'unsigned char *')
typealias('UINT', 'unsigned int')
extern 'int MessageBox(HWND, LPCTSTR, LPCTSTR, UINT)'
end
include Win32
messageBox(nil, "text", "title", 0)
=>
(eval):2:in `messageBox': undefined method `[]' for nil:NilClass (NoMethodError)
from test.rb:11
defによる定義ならincludeすれば呼べたと思うのですが
どうすればincludeして呼べるようになりますか?
0744デフォルトの名無しさん
2009/11/25(水) 22:12:26C++で valarray を使うと、
完全シャッフル(注:ランダムシャッフルではない)が次のように書けますが、
Ruby の slice は stride (添字の読み飛ばし)が設定できません。
第三引数として標準化してほしいと思いませんか?
・・・あるいは可読性の高い簡潔な実装をご存知でしたら教えてください。
###############################################
#include <iostream>
#include <valarray>
using namespace std;
int main()
{
int N=1<<6;
valarray<int> foo(N);
for (int i=0; i!=N; ++i) foo[i]=i;
slice evn(0,N/2,2),odd(1,N/2,2); // 第三引数に注目!
valarray<int> ef=foo[evn],of=foo[odd];
foo[slice(0,N/2,1)] = ef;
foo[slice(N/2,N/2,1)] = of;
/*
efとofはスワップに使ってるだけなので、
Rubyならこう書きたい
foo[slice(0,N/2)],foo[slice(N/2,N/2)]
= foo[slice(0,N/2,2)],foo[slice(1,N/2,2)]
*/
copy(&foo[0],&foo[0]+N,ostream_iterator<int>(cout," ")); cout << endl;
return 0;
}
0745デフォルトの名無しさん
2009/11/25(水) 23:05:55C++の関数がよくわからないんで読み間違ってるかもしれないけど
Enumerable#partitionかなあ
0746デフォルトの名無しさん
2009/11/25(水) 23:29:10お返事ありがとうございます。
partition もそうなのですが、
ブロックの引数って item になってるんですよね。
つまり上の例では partition でやっても同じなので分かりにくいですが、
a = ["R", "U", "B", "Y"]
を
a = ["R","B","U","Y"]
にしたいときには index を知りたいわけです。
現行のRubyで素直な方法は
evn = Array.new(a.size/2) {|i| 2*i}
odd = Array.new(a.size/2) {|i| 2*i+1}
をあらかじめ作っておいて
a = a.values_at(*evn) + a.values_at(*odd)
っていう感じですけど、とにかくslice が使えないのが不満なのです。
0747デフォルトの名無しさん
2009/11/25(水) 23:37:060748デフォルトの名無しさん
2009/11/25(水) 23:50:23俺ならこう聞く
「配列のindex番目の要素からlength個の要素を間隔strideで抽出する slice(index, length, stride) はありますか?
たとえば %w(a b c d e f).slice(0,3,2) は ["a", "c", "e"] を返し、 %w(a b c d e f).slice(3,2,1) は ["d", "e"] を返します」
0749デフォルトの名無しさん
2009/11/25(水) 23:57:390750デフォルトの名無しさん
2009/11/26(木) 00:00:15今作ってみたら基本的には(例外とか抜きで)これだけなんですけど。
newでコストかかってると思うので、参照にできないでしょうか?
初心者なので、お助け願います。
##################################
class Array
def slice(start,size,stride)
Array.new(size) {|i| self[start+i*stride]}
end
end
a = ["R", "U", "B", "Y"]
puts a
a = a.slice(0,a.size/2,2) + a.slice(1,a.size/2,2)
puts a
0751デフォルトの名無しさん
2009/11/26(木) 00:13:44というか、やりたいのはもしかしてsliceじゃなくてsortなんじゃない?
0752デフォルトの名無しさん
2009/11/26(木) 00:19:34まあそんなとこだろうな
処理全部自前だからめんどくさいが
class Array
def slice2(index, length, stride)
res = Array.new
self.each_with_index do |e, i|
res << e if ((index <= i) && (res.size < length) && ((i - index) % stride).zero?)
end
res
end
end
p ["a", "b", "c", "d", "e", "f"].slice2(0,3,2) #=> ["a", "c", "e"]
p ["a", "b", "c", "d", "e", "f"].slice2(3,2,1) #=> ["d", "e"]
ていうかそもそもこれでいいのか? なんか需要違わね?
0753デフォルトの名無しさん
2009/11/26(木) 00:21:53たしかにRubyのスレなのにC++の生コードを投下したのは申し訳なかったです。
>>749
うわっ
1.9でEnumeratorとArrayの行き来がはげしくなっている。
こんなんか。
a.each.with_index {|x,i| p x if i%2==1}
えぇっと、ブロックの中身から配列作るのってできますか?
>>751
あっそうか。コストはいいことにしよう。
偶indexを前にもってくる、というsortもできそうですけど、
順序の指定が面倒くさそうなので試してません。
0754デフォルトの名無しさん
2009/11/26(木) 00:24:21は
>>749
を反映していません。
>>753
も
>>752
を反映していません。
0755デフォルトの名無しさん
2009/11/26(木) 00:26:22汎用性とか知ったことか
0756デフォルトの名無しさん
2009/11/26(木) 00:29:28ありがとうございます。
> ていうかそもそもこれでいいのか? なんか需要違わね?
そもそもの課題はというと、indexに関する条件を簡単にブロックで渡して部分配列が戻ってくればいいんです。
問題がsortっぽいから紛らわしいですけど。
0757デフォルトの名無しさん
2009/11/26(木) 00:34:01[], []=, each などを与えられたブロックを使って定義するような
Arrayのサブクラスを定義して、Array#mysliceでそれを返せば
いいのかなー。
0758デフォルトの名無しさん
2009/11/26(木) 00:36:06うぉっ!
おそるおそるゼロを消してみたり・・・。
ブロックがなんで後回しにできるのか理解できていません。
マニュアル読んでみます。
0759デフォルトの名無しさん
2009/11/26(木) 00:38:10仕様っぽい、
のがスラスラ出てくるのが
プロっぽい。
0760デフォルトの名無しさん
2009/11/26(木) 01:04:15>>756
>>757
が欲しいものだった気がします。
引数を増やすというのは発想がC的ですよね。
ブロック指定のほうが柔軟性があってRubyっぽいと思います。
0761744
2009/11/26(木) 01:38:08a = a.select.with_index {|_,i| i%2==0} + a.select.with_index {|_,i| i%2==1}
0762744
2009/11/26(木) 01:50:56# test.rb
a = Array.new(1<<12) {|x| x}
a = a.select.with_index {|_,i| i%2==0} + a.select.with_index {|_,i| i%2==1}
# test2.rb
a = Array.new(1<<12) {|x| x}
a = a.sort_by.with_index {|o, i| i % 2 * a.size + i}
----------------------
$ time ruby1.9 test.rb
real 0m0.022s
user 0m0.015s
sys 0m0.006s
$ time ruby1.9 test2.rb
real 0m0.027s
user 0m0.020s
sys 0m0.006s
######################
というわけで、若干ソートの方が遅いようです。
オーダーはどうなってるのか知りません。
0763744
2009/11/26(木) 02:11:05たぶんこれがベストと思います。
ここにきて745に戻ってめでたしめでたし。
$ cat test3.rb
a = Array.new(1<<12) {|x| x}
a.partition.with_index {|_,i| i%2==0}.flatten
$ time ruby1.9 test.rb
real 0m0.022s
user 0m0.015s
sys 0m0.007s
$ time ruby1.9 test2.rb
real 0m0.027s
user 0m0.020s
sys 0m0.007s
$ time ruby1.9 test3.rb
real 0m0.021s
user 0m0.015s
sys 0m0.006s
0764744
2009/11/26(木) 02:14:53「slice 使えね〜」
っていう・・・orz
self[] との差が見いだせないんですけど・・・
0765744
2009/11/26(木) 02:25:45みなさまのアドバイスをすべて消化した結果です。
本当にありがとうございました。
このイディオムは部分配列、部分行列にかんしては威力を発揮すると思います。
0766デフォルトの名無しさん
2009/11/26(木) 02:48:16words = %w(apple banana orange mango)
sorted_words = words.sort_by{|a| ??? }
p sorted_words #=> ["orange", "mango", "banana", "apple"]
0767デフォルトの名無しさん
2009/11/26(木) 03:08:56というかこの例ならこれでいい
sorted_words = words.sort{|a, b| b <=> a}
0768デフォルトの名無しさん
2009/11/26(木) 03:17:30�d
0769デフォルトの名無しさん
2009/11/26(木) 11:07:43http://www.slideshare.net/arrrrcamp/ruby-19-and-rails-30
0770デフォルトの名無しさん
2009/11/26(木) 11:17:570771デフォルトの名無しさん
2009/11/26(木) 11:23:290772デフォルトの名無しさん
2009/11/26(木) 12:18:250773デフォルトの名無しさん
2009/11/26(木) 12:31:070774デフォルトの名無しさん
2009/11/26(木) 12:36:35適当なRSSチェッカーのソース読めばいいのではなかろうか
0775デフォルトの名無しさん
2009/11/26(木) 12:45:130776デフォルトの名無しさん
2009/11/26(木) 20:07:10激しく遅レスだが、空 while なんて文法は Ruby にはない。
0777デフォルトの名無しさん
2009/11/26(木) 20:25:17?
0778デフォルトの名無しさん
2009/11/26(木) 20:32:59その都度ファイルを指定してプログラムを動かすことはできるのですが、
あるディレクトリ内のtxtファイルを一度に処理し、それぞれのファイルごとの
結果を表示させるようにするにはどうすればいいですか?
自分で作ってみたのがこれです
#! ruby -Ks
count = Hash.new(0)
mojishu_count = Hash.new(0)
sum = 0
while line = gets
words = line.split(//)
sum += words.length
words.each{|moji|
count[moji] += 1
case moji
when /[a-z]/ || /[A-Z]/ || /\d/
mojishu_count['4.英数字'] += 1
when /[ぁ-ん]/
mojishu_count['1.ひらがな'] += 1
when /[ァ-ン]/
mojishu_count['2.カタカナ'] += 1
when /[亜-腕]/
mojishu_count['3.漢字'] += 1
else
mojishu_count['5.その他'] += 1
end}end
mojishu_count.sort{|a,b|
a[0] <=> b[0]
}.each{|key, value|
print "#{key}: #{value}\/",sum,"…(",value*100/sum,"%)\n"}
0779デフォルトの名無しさん
2009/11/26(木) 20:38:39??
0780デフォルトの名無しさん
2009/11/26(木) 20:42:45http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0781デフォルトの名無しさん
2009/11/26(木) 20:52:47あまりに汚くて読んでないけど
ぱっとみエロい
0782デフォルトの名無しさん
2009/11/26(木) 21:00:490783デフォルトの名無しさん
2009/11/26(木) 21:14:18宿題スレ向き
0784デフォルトの名無しさん
2009/11/26(木) 21:41:59>>782分かってワロタ
0785デフォルトの名無しさん
2009/11/26(木) 22:25:54p Dir::entries("c:\hoge") でファイル名の配列を取得して、ファイルopenでOK?
0786デフォルトの名無しさん
2009/11/27(金) 06:32:32亀な上に便乗。自分は>>564じゃないけど
クラスを継承して作ったインスタンスが自身のメソッドで自身を書き換えるってヤバイの?
0787デフォルトの名無しさん
2009/11/27(金) 08:54:07self を別のオブジェクトに書き換えるのは変だし、そんなメソッドはそもそも Ruby にはない
通常そういう用途で望まれる動作は
「aaa という変数名に = を使って目的の状態のオブジェクトを再代入する」
であるはず
ある変数が指し示しているオブジェクトが、再代入操作なしに別のオブジェクトに切り替わってたら大騒ぎ
0788デフォルトの名無しさん
2009/11/27(金) 12:55:32まあ、どっちにしてもかなり例外的な事例だけど。
0789デフォルトの名無しさん
2009/11/27(金) 13:14:400790デフォルトの名無しさん
2009/11/27(金) 13:15:550791デフォルトの名無しさん
2009/11/27(金) 17:01:02rails2.3.5
0792786
2009/11/27(金) 18:41:22レスありがとう
でも、標準クラスに自身を変更している(ように見える)メソッドがありますよね?
後ろに!が付くメソッドとかArray#clearとかってどういうどうなっているのかなと思いました
0793デフォルトの名無しさん
2009/11/27(金) 18:49:45あれはselfに別の何かを代入しているわけじゃないから。
0794デフォルトの名無しさん
2009/11/27(金) 19:02:370795デフォルトの名無しさん
2009/11/27(金) 19:10:23#! ruby -Ks
def count_by_char_and_kind(io)
count_by_char = Hash.new(0)
count_by_kind = Hash.new(0)
sum = 0
io.each_line do |line|
chars = line.split(//)
sum += chars.length
chars.each do |char|
count_by_char[char] += 1
case char
when /[a-z]/ || /[A-Z]/ || /¥d/ ; kind = '4.英数字'
when /[ぁ-ん]/ ; kind = '1.ひらがな'
when /[ァ-ン]/ ; kind = '2.カタカナ'
when /[亜-腕]/ ; kind = '3.漢字'
else ; kind = '5.その他'
end
count_by_kind[kind] += 1
end
end
return count_by_char, count_by_kind
end
後半へつづく
0796デフォルトの名無しさん
2009/11/27(金) 19:12:30def print_by_kind(count_by_kind)
count_by_kind.sort_by {|k,v| k[0] }.each {|key, value|
puts "#{key}: #{value}¥/",sum,"…(",value*100/sum,"%)"
}
end
if __FILE__ == $0
if ARGV.empty?
count_by_char, count_by_kind = count_by_char_and_kind($stdin)
print_by_kidn(count_by_kind)
else
dir = ARGV[0]
Dir.glob("#{dir}/*.txt").each do |filename|
File.open(filename) do |f|
count_by_char, count_by_kind = count_by_char_and_kind(f)
print_by_kidn(count_by_kind)
end
end
end
end
0797デフォルトの名無しさん
2009/11/27(金) 19:12:49http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0798デフォルトの名無しさん
2009/11/27(金) 19:15:32a = [:a]
b = a
p a, b, a.object_id, b.object_id
a.clear
p a, b, a.object_id, b.object_id
a << :a
p a, b, a.object_id, b.object_id
a = []
p a, b, a.object_id, b.object_id
変数の(再)代入とオブジェクトの状態の変化には大きな違いがあることに
この例で気づいてもらえるかもしれない
ちなみに単純化した配列もどき(一個しか値を持てない)でclearとかを書いてみるとこんな感じ
破壊的メソッドがやってることなんて特別でも何でもなくこの程度
class ArrayModoki
def [](k)
@data
end
def <<(x)
@data = x
end
def clear
@data = nil
end
end
0799デフォルトの名無しさん
2009/11/27(金) 19:21:16class CountChars
def initialize
@count_by_char = Hash.new(0)
@count_by_kind = Hash.new(0)
end
def count(io)
# カウントして @count_by_char と @count_by_kind を設定
return self
end
def print
# @count_by_kind の値を出力
return self
end
end
if __FILE__ == $0
dir = ARGV[0]
Dir.glob("#{dir}/*.txt").each do |filename|
File.open(filename) do |f|
CountChars.new.count(f).print
end
end
end
0800デフォルトの名無しさん
2009/11/27(金) 19:52:47http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0801デフォルトの名無しさん
2009/11/27(金) 20:51:510802デフォルトの名無しさん
2009/11/27(金) 22:43:48ttp://twitter.com/shyouhei/status/6044003590
0803デフォルトの名無しさん
2009/11/27(金) 22:49:23> You cannot use the Twitter website without having JavaScript enabled on your web browser.
> Please re-enable JavaScript and refresh this page.
0804デフォルトの名無しさん
2009/11/27(金) 23:05:41w3mでも見られるよ。
0805デフォルトの名無しさん
2009/11/28(土) 10:42:50i = 0
i++
じゃなくて↓を使う:
i += 1
0806デフォルトの名無しさん
2009/11/28(土) 10:54:55見かけ同じで動作がちょっと似てるが細かい挙動はぜんぜん違う、みたいなのだったらないほうがましだし
0807デフォルトの名無しさん
2009/11/28(土) 10:59:54ML見てきたけど、実装が困難というのは技術的な問題じゃなくて、
変数がオブジェクトではないRubyで、どのようにして一貫性を持たせるか
という問題で実装されていない、と。
0808デフォルトの名無しさん
2009/11/28(土) 11:01:28名前同じである側面では他言語のと同じ動作だが実際の挙動は全然違って、
他言語のと同じつもりで使った人から非難轟々
0809デフォルトの名無しさん
2009/11/28(土) 11:15:090810デフォルトの名無しさん
2009/11/28(土) 11:15:220811デフォルトの名無しさん
2009/11/28(土) 11:18:30ググレカスでもいいのでキーワードだけでも教えてください。
0812デフォルトの名無しさん
2009/11/28(土) 11:25:080813デフォルトの名無しさん
2009/11/28(土) 11:38:44*++i と *i++ なら違うけど
0814デフォルトの名無しさん
2009/11/28(土) 11:41:480815デフォルトの名無しさん
2009/11/28(土) 11:52:43結果的に?その結果…もとい、戻り値が違うだろ
0816デフォルトの名無しさん
2009/11/28(土) 12:40:020817デフォルトの名無しさん
2009/11/28(土) 12:51:030818デフォルトの名無しさん
2009/11/28(土) 12:58:52そもそも「単項演算子」という概念が無い時点で
i++ と ++i は同じものと考えてしまう人が多いように思う。
「えっ、1+3 も 3+1 も同じだよね?」
0819デフォルトの名無しさん
2009/11/28(土) 13:08:10使用例というか、実際的な問題でどのように使われるかという例示がないものが多いのが原因かな。
初心者だと
「え、何で二つあるの。どういう時に使うの。わかんねーから適当でいいや。」
でスルーしちゃう人が多いのよ。
0820デフォルトの名無しさん
2009/11/28(土) 13:23:58「××言語の○○の機能が欲しいです」という意見があった場合、
その人が××言語の、最低限○○機能自体はよく理解してるというのは絶対的条件だと思うが
なんで「その人」に××言語の○○の機能の説明をこっちがしないといかんのよ
0821デフォルトの名無しさん
2009/11/28(土) 14:07:51全治と河内があるのなら+i+があってもいいよね。
0822デフォルトの名無しさん
2009/11/28(土) 17:04:390823デフォルトの名無しさん
2009/11/28(土) 17:09:400824デフォルトの名無しさん
2009/11/28(土) 17:22:43次の質問の方どうぞ
0825デフォルトの名無しさん
2009/11/28(土) 18:01:11+ j +
0826デフォルトの名無しさん
2009/11/28(土) 18:02:160827デフォルトの名無しさん
2009/11/28(土) 18:24:39web apisを書かれてあるURLへDLしに行ったんですがそのページはありませんでした。
今はもうweb apisは無くなってるんですか?
0828デフォルトの名無しさん
2009/11/28(土) 18:38:55Ajax APIで置き換えられたっぽい
0829デフォルトの名無しさん
2009/11/28(土) 19:45:43j
0830デフォルトの名無しさん
2009/11/29(日) 00:27:09わが国のITはユーザに使用法を十分説明する時間がありません。
このため、初心者がベテランに疑問についてたずねる光景を目にすることがあります。
しかし本来は事故(情報漏えいなど)が発生した場合の責任は、
接続業者、サーバ運営者、システムを開発したエンジニアにあります。
メーカあるいは購入店にたずねるべきです。
利用者の仕事は自治(掲示板の秩序を守ること)です。助言を行ってはなりません。
素人が専門技術に言及するのは「親切」ではありません。「無責任」です。
海外のプロフェッショナルは、「私の仕事ではない」と答えるはずです。
0831デフォルトの名無しさん
2009/11/29(日) 00:32:330832デフォルトの名無しさん
2009/11/29(日) 15:12:23ary[:last] = 4
こういうのないですか?(。・ω・)
0833デフォルトの名無しさん
2009/11/29(日) 15:13:540834デフォルトの名無しさん
2009/11/29(日) 15:14:45ary[-1] = 4
じゃダメなの?
0835デフォルトの名無しさん
2009/11/29(日) 15:31:54ary[0,1,2]の意図が不明なので説明しる
0836デフォルトの名無しさん
2009/11/29(日) 15:40:11=> ary[0][1][2]
B: aryの0番目、1番目、2番目の3要素からなるArray
=> ary[0..2] (引数はRange)
C: aryの、0番から数えて3つの要素からなるArray
=> ary[0, 3] (引数は整数2つ)
D: その他
0837デフォルトの名無しさん
2009/11/29(日) 15:51:56そういえば [0, 2, 4, 8, 6] や [3, 6, 9, 12, 15] みたいな配列を作りたい場合どうするんだっけ
0838デフォルトの名無しさん
2009/11/29(日) 16:02:15どうするっても色々あるが、とりあえず後者はこんなとこで
前者はなかなかの難問だな
0839デフォルトの名無しさん
2009/11/29(日) 16:02:29どうにもなんね
irb> p Range.new(0, 4).to_a.map{|e| e*2}
[0, 2, 4, 6, 8]
irb> p Range.new(0, 9).to_a.find_all{|e| e%2 == 0}
[0, 2, 4, 6, 8]
こんな感じ
0840デフォルトの名無しさん
2009/11/29(日) 16:12:01サンクス
もしかしたら Array.new(start, stop, step) みたいに一発で書けるのがあるのかなーと思って
0841デフォルトの名無しさん
2009/11/29(日) 16:16:22これのことかなー
ary.push 4
0842デフォルトの名無しさん
2009/11/29(日) 16:18:46(0..8).step(2).to_a
1.8.6だとRange#stepにブロック必須だからきれいに書けなさそう
0843デフォルトの名無しさん
2009/11/29(日) 16:20:51irb> 0.step(8, 2).to_a
[0, 2, 4, 6, 8]
これも 1.8.6 では動作しないはず
0844デフォルトの名無しさん
2009/11/29(日) 16:34:43=ぬけてました。。
>>833-834
こんなことできたんですね!
ありがとうございます
0845デフォルトの名無しさん
2009/11/29(日) 16:37:020847デフォルトの名無しさん
2009/11/29(日) 20:26:11(中略)
end
こういう式を、書籍で見たのですが、
Dir.foreach(".") do |file|
(中略)
end
なのは見慣れているのですが
dir =
ってどういう意味なんでしょうか。
単にdir変数に現フォルダのフォルダ名を
入れて、逐一file変数に放り込んでるだけですか?
意味が無いような。。
0848デフォルトの名無しさん
2009/11/29(日) 20:29:53あまり意味ないね。
0849デフォルトの名無しさん
2009/11/29(日) 20:35:260850デフォルトの名無しさん
2009/11/29(日) 20:43:490851デフォルトの名無しさん
2009/11/29(日) 20:57:01と思ったのに
即答、ありがとうございます。
感謝
0852デフォルトの名無しさん
2009/11/30(月) 03:58:59小数の16進表示はRubyでは不可なのでしょうか?
valA=3.14
valB=valA.to_s(16)
とすると、ArgumentErrorになりました。
0853デフォルトの名無しさん
2009/11/30(月) 06:05:110854デフォルトの名無しさん
2009/11/30(月) 10:52:47Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14
浮動小数点数のビット列の16進表現=小数の16進表記 という
0855854
2009/11/30(月) 10:55:07Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14 はどう表記される?
浮動小数点数のビット列を16進で表示したもの=小数の16進表記 ということではないよね?
0856デフォルトの名無しさん
2009/11/30(月) 11:15:03浮動小数点の定数の16進表記はC99ではできるね。
3.23d... になると思うけど。
0857デフォルトの名無しさん
2009/11/30(月) 12:10:140858デフォルトの名無しさん
2009/11/30(月) 12:19:15x = 3.14
a = x.to_i.to_s(16)+'.'
b = x.abs-x.abs.to_i
c = 1.0/16
while c > Float::EPSILON
p = (b/c).to_i
a << p.to_s(16)
b = b-c*p
c = c/16
end
puts a
0859デフォルトの名無しさん
2009/11/30(月) 12:31:16多分そういうことじゃないんだろうな
0860デフォルトの名無しさん
2009/11/30(月) 12:51:50たとえば
0.75(10)
=> 0.5(10) + 0.25(10)
=> 0.8(16) + 0.4(16)
=> 0.C(16)
のようなのは正確に変換できるけど。
0861デフォルトの名無しさん
2009/11/30(月) 12:59:09しょーがない。
0862852
2009/11/30(月) 16:57:52レスどうも。
私がやりたいのは、ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113551061
のように小数を16進表示することです。
アルゴリズムでは>>858さんのようになると思いますが、てっきり
valA.to_s(16) のように1行で済むと思っていました。
0863デフォルトの名無しさん
2009/11/30(月) 17:55:380864デフォルトの名無しさん
2009/11/30(月) 17:57:06掛け算を増やしたほうが効率いいかな?
x = 3.14
a = x.to_i.to_s(16)+'.'
b = x.abs-x.abs.to_i
c = 16.0
while b > Float::EPSILON
break if b == 0
p = (b*c).to_i
a << p.to_s(16)
b = b-p/c
c *= 16
end
puts a
0865デフォルトの名無しさん
2009/11/30(月) 18:06:42プログラムがうまくできるようになる
0866デフォルトの名無しさん
2009/11/30(月) 21:47:00>>864
Float演算だと誤差が蓄積するので、分数演算にしてみた
require "Rational"
class Float
def to_base( base, precision = 10 )
base_float = self.to_i.to_s(16) + '.'
fractional = self.abs - self.abs.to_i
shift_to_int = 10**(fractional.to_s.length - 2)
remainder = Rational( (fractional*shift_to_int).to_i, shift_to_int )
base_power = base
precision.times do
break if remainder == 0
carried_remainder = remainder * base_power
carry = carried_remainder.to_i
base_float << carry.to_s(base)
remainder -= Rational(carry, base_power)
base_power *= base
end
base_float
end
end
puts 3.14.to_base(16, 12)
0867デフォルトの名無しさん
2009/11/30(月) 22:19:180868デフォルトの名無しさん
2009/11/30(月) 23:48:580869デフォルトの名無しさん
2009/11/30(月) 23:56:043.2(3d70a)... という表現にした。
http://codepad.org/se0KjmXu
0870デフォルトの名無しさん
2009/11/30(月) 23:56:351.0/0
irb> p 1.0 / 0
Infinity
irb> p -1.0 / 0
-Infinity
irb> p 0.0 / 0
NaN
定数的に利用することはできない(Float::INFINITY とかがあるわけではない)
実際に適当な計算をして返り値を利用する
0871デフォルトの名無しさん
2009/12/01(火) 00:25:26何に使われるんだろう?
0872デフォルトの名無しさん
2009/12/01(火) 00:28:030873デフォルトの名無しさん
2009/12/01(火) 00:29:54これが必要になる分野なんて限られてるはず
が、自力で導き出せるのが好ましい
0874デフォルトの名無しさん
2009/12/01(火) 00:30:5810進数 1.0、0.9、0.8、0.7、0.6、0.5、0.4、0.3、0.2、0.1……
16進数 1.0、0.F、0.E、0.D、0.C、0.B、0.A、0.9、0.8、0.7……
0875デフォルトの名無しさん
2009/12/01(火) 00:37:51そうだよ
10進数との対応をとろうとさえしなければそれほど難しいものではない
そういや情報処理で問題があったなと思ってぐぐった
16進小数 2A.4C と等しいものはどれか。
ア 2^5 + 2^3 + 2^1 + 2^(-2) + 2^(-5) + 2^(-6)
イ 2^5 + 2^3 + 2^1 + 2^(-1) + 2^(-4) + 2^(-5)
ウ 2^6 + 2^4 + 2^2 + 2^(-2) + 2^(-5) + 2^(-6)
エ 2^6 + 2^4 + 2^2 + 2^(-1) + 2^(-4) + 2^(-5)
0876デフォルトの名無しさん
2009/12/01(火) 00:51:040.01はそれぞれ、16^(-2)、2^(-2)と……
小数点以下なんて考えたこともなかったぜ
0877デフォルトの名無しさん
2009/12/01(火) 01:13:38というか、ふつうの10進数の小数部自体、0.abc… = 10^(-1)*a + 10^(-2)*b + 10^(-3)*c + … だからな
2進数なら底(「xのn乗」のxの値、テイ、基数)が10ではなく2になって、16進数なら底が16になる
そんだけ
たったそんだけ
>>875は
(16^1)*2 + (16^0)*A + (16^-1)*4 + (16^-2)*C =
((2^4)^1)*2 + ((2^4)^0)*(2*2*2+2) + ((2^4)^(-1))*(2*2) + ((2^4)^(-2))*(2*2*2+2*2)
(2^4)*2 + 1*(2^3+2^1) + (2^(-4))*(2^2) + (2^(-8))*(2^3 + 2^2)
2^5 + 2^3 + 2^1 + 2^(-2) + 2^(-5) + 2^(-6)
よって ア
0878デフォルトの名無しさん
2009/12/01(火) 01:17:180879デフォルトの名無しさん
2009/12/01(火) 01:43:22w=3.14
kisu=16
keta=12
sprintf("%d.%s",w,(w % 1 * kisu ** keta).to_i.to_s(kisu))
0880デフォルトの名無しさん
2009/12/01(火) 08:28:12X sprintf("%d.%s",w,(w % 1 * kisu ** keta).to_i.to_s(kisu))
○ sprintf("%s.%s",w.to_i.to_s(kisu),(w % 1 * kisu ** keta).to_i.to_s(kisu))
0881デフォルトの名無しさん
2009/12/01(火) 10:54:42s = "hoge"
p s.is_a?(String)
の結果がtrueになることが、納得できないのですが。
StringクラスのオブジェクトはStringクラスとis-aの関係なんでしょうか?
0882デフォルトの名無しさん
2009/12/01(火) 10:57:310883デフォルトの名無しさん
2009/12/01(火) 11:05:24"hoge".kind_of?(String) が true だったら納得してもらえる?
0884デフォルトの名無しさん
2009/12/01(火) 11:15:15class MyString < String ; end
MyString.is_a?(String)
がtrueになるべきとかが言いたいんだと思う
0885デフォルトの名無しさん
2009/12/01(火) 11:22:330886デフォルトの名無しさん
2009/12/01(火) 12:29:01uri = if param.kind_of?(URI) then param else URI.parse(param) end
は動作せずに
uri = if param.class.kind_of?(URI) then param else URI.parse(param) end
か
uri = if param.instance_of?(URI) then param else URI.parse(param) end
とのみ、書けるべきではある
is_a? ではなく kind_of? が主流になりつつある理由もこのへんが結構あるんではないかとか邪推
0887デフォルトの名無しさん
2009/12/01(火) 12:33:520888デフォルトの名無しさん
2009/12/01(火) 12:57:55何かおかしなところある?
0889デフォルトの名無しさん
2009/12/01(火) 13:02:10オブジェクト指向でクラスとクラスの継承関係を表すもの
Rubyではそうじゃないから違和感があるのはわかる
0890デフォルトの名無しさん
2009/12/01(火) 13:03:210891デフォルトの名無しさん
2009/12/01(火) 15:31:35πの計算
0892デフォルトの名無しさん
2009/12/01(火) 15:37:28Rubyでもそうじゃないの?
3.14.is_a?(Float), (Numeric), (Object) ぜんぶtrueになるけど。
0893デフォルトの名無しさん
2009/12/01(火) 16:25:02Nobita is a Strudent. はいいけど Student is a Person. はおかしいもん。
「is a関係」がインスタンス-クラス間の関係を表すように定義してほしかった。
0894デフォルトの名無しさん
2009/12/01(火) 17:07:26ただし、継承がis-aでなければならないという意味ではない
0895デフォルトの名無しさん
2009/12/01(火) 17:27:01一般的なオブジェクト指向の概説上は、インスタンスの存在はわりとどーでもいいんで…
0896デフォルトの名無しさん
2009/12/01(火) 17:28:030897デフォルトの名無しさん
2009/12/02(水) 02:17:00foo = Array.new
FOO = Array.new
でインスタンスfoo及びFOOの挙動に違いはないという認識であっていますか?
どちらもArrayの中身を自由に書き換えられるようですが・・・
0898デフォルトの名無しさん
2009/12/02(水) 02:41:54中身は自由に書き換えることができる。
参照先を変えることができないのが定数。
例えば、その後にもう一度FOO = Array.newとかしようとすると怒られる。
0899デフォルトの名無しさん
2009/12/02(水) 07:09:07再代入によってオブジェクトIDを切り替えると警告される
それだけ
0900デフォルトの名無しさん
2009/12/02(水) 10:55:23irb> CONST = a
irb> CONST = a
(irb):3: warning: already initialized constant CONST
うそつきいいいい
0901デフォルトの名無しさん
2009/12/02(水) 11:33:57誰に対して言っているんだ、それは?
ちゃんと警告は出てるぞ。だから問題無いじゃないか。
0902デフォルトの名無しさん
2009/12/02(水) 11:39:52代入されようとしているオブジェクトのID云々は関係ない
0903デフォルトの名無しさん
2009/12/02(水) 12:55:090904デフォルトの名無しさん
2009/12/02(水) 12:57:170905デフォルトの名無しさん
2009/12/02(水) 12:59:480906デフォルトの名無しさん
2009/12/02(水) 13:04:222chのレスは基本、直前へのリアクションだ
それを踏まえると>>900は
「同一オブジェクトを再代入したけど警告出るじゃん
オブジェクトIDを切り替えるのが警告の条件のひとつだなんて>>899うそつきいいいい」
となる
0907デフォルトの名無しさん
2009/12/02(水) 13:19:12irb> CONST = Array.new
でなかった理由に思い至るかどうかとかそんな話
0908デフォルトの名無しさん
2009/12/02(水) 19:54:240909デフォルトの名無しさん
2009/12/02(水) 19:58:210910デフォルトの名無しさん
2009/12/02(水) 20:24:590911デフォルトの名無しさん
2009/12/02(水) 22:02:300912デフォルトの名無しさん
2009/12/02(水) 23:12:29(インスタンスメソッドの)
def create
if self.id.nil? && connection.prefetch_primary_key?(self.class.table_name)
self.id = connection.next_sequence_value(self.class.sequence_name)
end
:
だから作った時点でidは貰えていると思う。
0913デフォルトの名無しさん
2009/12/03(木) 00:00:58ありがとうございました
0914デフォルトの名無しさん
2009/12/03(木) 00:09:32トップレベルじゃなく、特定の名前空間や関数の中でrequireしたような場合でも
スコープが限定されないようなので、
あるいは限定的なスコープに読み込むような手法でもよいのですが・・・
module Foo
require 'bar'
end
b = Bar.new #=>ここで使用できないように限定したい
0915デフォルトの名無しさん
2009/12/03(木) 00:15:51できません
というかその使い方は変だ
0917デフォルトの名無しさん
2009/12/03(木) 00:45:37ライブラリというかrequire等で定義されたクラスを削除する事は
remove_constで出来るけど、求めてるものとは違うんだろうな
0918デフォルトの名無しさん
2009/12/03(木) 01:10:44そういうのは別のファイルでmoduleで定義して、
使用するクラスでincludeするというモデルが素直なモデルだけどね
0920デフォルトの名無しさん
2009/12/03(木) 03:28:100921デフォルトの名無しさん
2009/12/03(木) 08:03:550922デフォルトの名無しさん
2009/12/03(木) 08:37:320923デフォルトの名無しさん
2009/12/03(木) 08:48:14module で囲まれてる外と中で同じ表記の Bar.new をしたいが、Bar が指すクラスは別にしたいってことだろ、これ
0924デフォルトの名無しさん
2009/12/03(木) 08:57:13バグがあってもプログラムを停止させずにクラスを作り直せる
0925デフォルトの名無しさん
2009/12/03(木) 09:01:260927デフォルトの名無しさん
2009/12/03(木) 11:08:50でしょうか?
(function(n) { return n <=1 ? n : n*arguments.callee(n-1) })(3) //=> 6
Rubyで、これ↓を
fact = proc {|n| n<=1 ? n : n*fact.call(n-1) }
print fact.call(3) #=> 6
1行で書くと???
proc {|n| n<=1 ? n : n*???.call(n-1) }.call(3)
0928デフォルトの名無しさん
2009/12/03(木) 15:30:16のような正規表現にマッチしたインデックスの配列を返すメソッドって?
indexを複数やる感じ
0929デフォルトの名無しさん
2009/12/03(木) 15:43:20[1, 3, [1, 3]]
[3, 5, [3, 5]]
0930929
2009/12/03(木) 15:50:57require "enumerator"
"abcbc".enum_for(:scan, /bc/).map{$~.begin(0)} #=> [1,3]
0931デフォルトの名無しさん
2009/12/03(木) 19:33:50gemでrailsのuninstallしようとしたらエラーが出たのですが、どこがおかしいものなのでしょうか?
(railsといってもRubyGemsの一般的っぽいエラーなのでこちらでお聞きします)
sudo gem install rails しようとして、間違えて、
gem install rails してしまい、アンインストールしようと、
gem uninstall rails するのですが、
(Gem::InstallError) Unknown gem rails >= 0
と出てしまいます。
下記のようにすると、一応はアンインストールできるのですが、君が悪いです。
gem uninstall --install-dir ~/.gem/ruby/1.8 rails
解決する方法はないでしょうか?
環境:
・Ubuntu 9.04 (coLinux)
・ruby 1.8.7 (aptitudeで入れました)
・gem --version => 1.3.1 (aptitude で入れました)
0932931
2009/12/03(木) 19:35:00gem search railsすると、ちゃんと rails 2.3.5が入っているとでます。
0933デフォルトの名無しさん
2009/12/03(木) 19:39:23> gem uninstall --install-dir ~/.gem/ruby/1.8 rails
それがユーザー権限インストールされたgemの正しいアンインストール方法です
0934デフォルトの名無しさん
2009/12/03(木) 21:08:190935デフォルトの名無しさん
2009/12/03(木) 21:13:16ないです
0936931
2009/12/03(木) 21:25:54また、gemで入れたはずのrakeもない言われたのですが、(gem searchだと出る)
どうやらubuntuのRubyGems特有のトラブルのようです。
Ruby on Rails インストールメモ (ubuntu 9.04) - Railsやねん。
http://d.hatena.ne.jp/gedit/20090626/1246008868
なので、自前で入れたら万事解決しますた!
解決しました。ありがとうございまいた。
>>933
あれそうなの?(´・ω・`)
0937デフォルトの名無しさん
2009/12/04(金) 00:55:52これでnilは消えるんですが
""を消す関数ってありませんか?
0938デフォルトの名無しさん
2009/12/04(金) 01:26:220939デフォルトの名無しさん
2009/12/04(金) 01:56:59nil は NilClass という極めて特殊な有名度のクラスのインスタンスだから特殊扱いの対象にできるけど、
empty は String クラスのオブジェクトの内部表現がたまたま空だという程度の意味しかないので
Array というクラスのメソッドで特殊扱いするほどの価値はないと考える
ということで、>>938の言うように、
「要素がStringクラスのオブジェクトで空な場合その要素を消す」という処理を行う
irb> p [1, "", nil].delete_if{|e| e.instance_of?(String) && e.empty?}
[1, nil]
うん、長いんだ
適当なメソッド名で掃き出すのをおすすめ
0940デフォルトの名無しさん
2009/12/04(金) 06:38:15非破壊的ならこっちで
reject(val)って何でないんだろう
0941デフォルトの名無しさん
2009/12/04(金) 09:45:08sayHello
say_hello
のどちらで書くのがスタンダードですか
0942デフォルトの名無しさん
2009/12/04(金) 09:56:360943デフォルトの名無しさん
2009/12/04(金) 09:57:260944941
2009/12/04(金) 10:11:32say_hello
の方が多いみたいですね。
sayHelloで書けと言われたのですが.....
0945デフォルトの名無しさん
2009/12/04(金) 10:14:13後者がスタンダードです
メソッド名やインスタンス変数はlower_name
定数名はUPPER_NAME
モジュール名、クラス名はCamlCase
というのがRubyの原則
例外はクラス名=メソッド名であるような場合
つまり、Regexp()やURI()のようなメソッドぐらいしか思いつかない
0946デフォルトの名無しさん
2009/12/04(金) 10:18:22会社(授業)の方針や規約で従うしかない、というのであればやむを得ない
でも、そうでないなら極力lower_nameにするべき
9割のライブラリは標準に従ってるし
0947941
2009/12/04(金) 10:22:39Rubyに移植しろと言われたのですが、さてどうしたものか....
0948デフォルトの名無しさん
2009/12/04(金) 10:25:06そうでないならRubyに合わせたほうがいい
そんだけでしょ
0949デフォルトの名無しさん
2009/12/04(金) 10:32:17状況によるんじゃね?
sayHelloでないと問題が起きそうだと思うなら、素直にsayHelloで
そうでなければ「Rubyではsay_helloの方が一般的なんです!」と主張
0950デフォルトの名無しさん
2009/12/04(金) 10:35:43そう書けと言われたならそう書くべき
それが嫌ならルールに物申すだけ
alias say_hello sayHello
というのをクラス内で自動生成させるという手もあるけど、
実際にメソッドが増えるから本質的な解決法にはならない
「Rubyで作ってRubyからアクセスするものなのにC++の流儀をわざわざ引き継ぐ理由は何ですか?」
というような質問をして、それでも曲がらなければそりゃ従うべき
0951デフォルトの名無しさん
2009/12/04(金) 10:38:450952デフォルトの名無しさん
2009/12/04(金) 10:40:53Rubyスタイルってなんですか?
0953デフォルトの名無しさん
2009/12/04(金) 11:09:21ぜんぜん一般的じゃないから知らない人のほうが多いが
俺も CamelCase なんかとの比較列挙のときしか使わん
「アンダースコア区切り」で一発で伝わるし
0954デフォルトの名無しさん
2009/12/04(金) 11:10:300955デフォルトの名無しさん
2009/12/04(金) 12:15:25ちょっと短いソースに挑戦してるとこだったので関数の形がよかったんです
ないのは残念
[゙゙,1] - [゙゙]これで我慢しときます
0956デフォルトの名無しさん
2009/12/04(金) 13:20:360957デフォルトの名無しさん
2009/12/04(金) 13:24:290958デフォルトの名無しさん
2009/12/04(金) 13:30:37名前あるんだし
0959デフォルトの名無しさん
2009/12/04(金) 15:37:37p result += item
}
こんな事が出来るイテレータって無いですか?
こんなのつくったんですが、なんか不恰好なので
class Array
def letmap *h
self.map do |m|
yield m , h
end
end
end
[0,0,0].letmap(8) do |c,ph|
p ph[0] += 1
end
0960デフォルトの名無しさん
2009/12/04(金) 18:17:520961デフォルトの名無しさん
2009/12/04(金) 18:26:17replaceによる書き換えしか手段がないかも
0962デフォルトの名無しさん
2009/12/04(金) 19:41:370963sage
2009/12/04(金) 19:52:060964デフォルトの名無しさん
2009/12/04(金) 19:59:13リテラルではなくてRegexpのコンストラクタ使うといいよ
0965デフォルトの名無しさん
2009/12/04(金) 20:02:220966デフォルトの名無しさん
2009/12/04(金) 20:07:03Regexp.new(str)
Regexp.compile(str)
/#{str}/
0967デフォルトの名無しさん
2009/12/04(金) 20:07:28Regexp.new(str)か/#{str}/
Regexp.compile(str)はnewの別名だから好みで
メタ文字がエスケープされていない「正規表現ではない」文字列を
RegexpオブジェクトにしたいならRegexp.escape(str)
0968デフォルトの名無しさん
2009/12/04(金) 20:10:100969デフォルトの名無しさん
2009/12/04(金) 20:23:36ありがとうございます
Regexp.new使います
0970デフォルトの名無しさん
2009/12/04(金) 20:26:25Regexp オブジェクトにするにはそれをさらに Regexp.new なりなんなりしないと。
0971デフォルトの名無しさん
2009/12/04(金) 20:27:37injectは戻り値を置いておかなきゃいけないのが嫌なので作ろうとしてました
やっぱ引数には配列か構造体か関数でも渡さないとダメかなぁと
0972デフォルトの名無しさん
2009/12/04(金) 20:36:56そうだったthx
0973デフォルトの名無しさん
2009/12/04(金) 21:14:28(1..10).inject({}) { |r, x| r.tap { |e| e[x] = x ** 2 } }
え、面倒くさい?ですよねー
0974デフォルトの名無しさん
2009/12/04(金) 22:10:00引数として受け取ったブロックを使って自身の特異メソッドを定義するメソッド、は
どのように書いたらよいでしょうか?
def define_singleton_method(sym, block)
class <<self
define_method(sym, block)
end
end
だと、スコープの関係で sym や block が見えなくなるし
文字列にして eval に渡すという方法だと block が渡せなくて困っています。
0975デフォルトの名無しさん
2009/12/04(金) 22:13:31合計だけなら、[1,2,3,4].inject(:+) でいいけど、ちょっと処理を作り込む時に悩むよなあ。
0976デフォルトの名無しさん
2009/12/04(金) 22:25:43def define_singleton_method(name, &block)
(class << self; self; end).send(:define_method, name, &block)
end
end
x = Object.new
x.define_singleton_method(:hello) { |name| puts "hello, #{name}" }
x.hello('>>974')
#=> hello, >>974
0977974
2009/12/04(金) 22:31:24おお、ありがとうございます!
そういう self の取得方法があるとは、全然気付きませんでした。
そっか、class...end も式で、最後に評価した値を返すんでしたね。
助かりましたっす。
0978デフォルトの名無しさん
2009/12/04(金) 22:32:34この0とか1はどこから出てくるのでしょうか?
iってnilじゃないの?
0979デフォルトの名無しさん
2009/12/04(金) 22:35:340980デフォルトの名無しさん
2009/12/04(金) 22:41:36って、|i|にはindexが入る「決まり」なのか。
0981デフォルトの名無しさん
2009/12/04(金) 22:43:25その評価結果を対応するインデックスの値とする。
p Array(5) {|i| i ** i}
=> [1, 1, 4, 27, 256]
0982デフォルトの名無しさん
2009/12/04(金) 23:49:26def yussu n
h = []
n.times do |index| h.push yield(index) end
h
end
p Array.new(5) {|i| i } # => [0, 1, 2, 3, 4]
p yussu(5) {|i| i }
0983デフォルトの名無しさん
2009/12/04(金) 23:52:460984デフォルトの名無しさん
2009/12/05(土) 00:22:290985デフォルトの名無しさん
2009/12/05(土) 03:18:49で
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 403
になるの俺だけ?
ぐぐっても「どうにもならんから新しいgemを手動でインストールした」
って感じのBlogがあっただけだったけど
>>682は解決したの?
0986デフォルトの名無しさん
2009/12/05(土) 07:58:23しばらくしたらたまに落ちます
0987デフォルトの名無しさん
2009/12/05(土) 09:11:07そういうのを書くときは gem -v と gem env の結果を書け。
たぶんおそらくきっと gem のバージョンが古いだけ。
0988デフォルトの名無しさん
2009/12/05(土) 09:28:100989デフォルトの名無しさん
2009/12/05(土) 11:09:40p h
は問題ないのですが、
p {"a" => 1, "b" => 2, "c" => 3}
がsyntax errorになるのは何故でしょうか?
0990デフォルトの名無しさん
2009/12/05(土) 11:32:17irb(main):010:0> p{|e|'a'}
=> nil
マニュアルにはなぜこうなるかは書かれていない悪寒
0991デフォルトの名無しさん
2009/12/05(土) 11:33:35[1,2,3].each{"a" => 1, "b" => 2, "c" => 3}
これがエラーになるのと同じ理屈
p の引数にカッコ省略でハッシュリテラルが来てると思われてるんではなく、
p がブロックつきメソッドで、その中に文法上不正なよくわからんコンマ並びデータがあると思われてる
p({"a" => 1, "b" => 2, "c" => 3})
と引数カッコを明示するしかないな
0992デフォルトの名無しさん
2009/12/05(土) 11:38:50> ブロック付きメソッド呼び出し
> コードの集まり(ブロック)を受け取ることのできるメソッドをブロック付きメソッド呼び出しと呼ぶ。
>
> ブロック付きメソッドの中ではyieldを使ってブロックを実行することができる。
> 当然のことながら、与えられたブロックをどのように処理するかはメソッド側に委ねられている。
> ので、***内部でブロックを評価しないメソッドにブロックを与えてもなにも起きない。エラーも起きない。***
0993デフォルトの名無しさん
2009/12/05(土) 11:57:52質問者じゃないが納得した
省略可能なことが多すぎて優先順位とか知りきれてないことが多いなあ
実は優先順位が関わるあいまいな表現になってても
記述者(自分)としてはあいまいにしてるつもりはないから余計に混乱するw
0994デフォルトの名無しさん
2009/12/05(土) 13:00:32こういうのはRubyのよくないところだと思うな。
なんとかして欲しい。
0995デフォルトの名無しさん
2009/12/05(土) 13:07:11なんでこんな重要なことなのに知ってる奴いないんだ
0996デフォルトの名無しさん
2009/12/05(土) 14:06:00そりゃ gem tumble 一発で済むからだろ
:~$ cat .gemrc
---
:verbose: true
:sources:
- http://gems.rubyforge.org/
:backtrace: true
:benchmark: false
:update_sources: true
:bulk_threshold: 1000
:~$ gem tumble
Thanks for using Gemcutter!
Your gem sources are now:
- http://gemcutter.org
- http://gems.rubyforge.org/
:~$ cat .gemrc
---
:benchmark: false
:verbose: true
:backtrace: true
:update_sources: true
:sources:
- http://gemcutter.org
- http://gems.rubyforge.org/
:bulk_threshold: 1000
0997デフォルトの名無しさん
2009/12/05(土) 14:08:30まあ、たしかにgithubのgemサポート外されたから、
今度からgemcutterがメインになるだろうことはなんらかのなんらかがあってもいいな。周知させとかないと
0998デフォルトの名無しさん
2009/12/05(土) 14:11:41いや現状のこれが「なんとかした」結果だから
ハッシュリテラルの優先度は高くしないほうがいい
そもそものあれとしてメソッドに引数カッコなしで { } 記述のハッシュリテラルを渡すということ自体が稀
0999デフォルトの名無しさん
2009/12/05(土) 14:16:08中カッコを外すとかは?
p "a" => 1, "b" => 2, "c" => 3
1000デフォルトの名無しさん
2009/12/05(土) 14:28:5110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。