[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 03/12 09:10 / Filesize : 211 KB / Number-of Response : 848
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 35



1 名前:デフォルトの名無しさん [2010/03/04(木) 11:00:57 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ 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つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

175 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:49:56 ]
要素の数が0以外なら真を返す、みたいなメソッドがないことが問題をややこしくしてる
本当はこのへんは対称性があってもいい(なくてもいいが)

うまいメソッド名が思いつかなかったっぽい雰囲気はあるが

176 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:56:30 ]
>>170
(誤) さらに加えて
(正) かてて加えて

177 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:05:28 ]
any? はよいんだけど、 [ nil ].any? #=> false なので
要素が1つでもあるか、という判定としては万能ではないかもなー。


178 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:11:51 ]
万能ではないも何も
> 要素の数が0以外なら真を返す、みたいなメソッドがない
という話が既に

179 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:18:35 ]
def hage?

end

def fusa?
!hage
end

みたいなメソッド定義はよく見る
empty? も時流に乗るべきだとは思う

180 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:24:10 ]
富士通御謹製エフトランを知らん奴が意外と多いんだな
汎用機、オフコンを知らん世代が増えて来たったことだな
z/OSで仕事してたころはデータセットをFTPのBINでダウンロードして
shift-JISに変換とかよくやってたぜ




181 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:33:53 ]
懐古厨乙

182 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:37:02 ]
>>181
レスしたのお前だけだぞ

183 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:41:39 ]
おっさん多いなこのスレ。。



184 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:51:59 ]
うんにゃ、知らない奴はレスしないだけ
バックグラウンドがたまたま見えただけに過ぎない

185 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 04:22:42 ]
メソッドと変数が見分けがにくいな

186 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 09:11:00 ]
ローカル変数のように見えて実はメソッド、というのはままある。


187 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 09:19:08 ]
「値は必ず確固としたオブジェクト」なので、メソッドだろうがローカル変数だろうが
値を返すキーワードが実際は何でできてるのかは使用者からは区別する必要ないよねというポリシーがある

mes(foo) としたとき、foo が変数なのかメソッドなのかは実際どうでもいい
foo という名前が解決されてその結果返されるオブジェクトだけが重要

代入が文脈依存なのはそれなりに面倒
selfの有無で同じ名前を2回使い分けられるということでもあるが

188 名前:デフォルトの名無しさん [2010/03/10(水) 09:26:35 ]
さすがにそれはどうでもよくないだろー
local_var()もできないんだし

189 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:01:42 ]
問題になる状況自体が問題だと思うぞ
どういうネーミングだよ

190 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:10:12 ]
めっちゃプリミティブな名前のインスタンスメソッドを作って、なおかつローカル変数もそのままの名前である場合
uri とか

191 名前:デフォルトの名無しさん [2010/03/10(水) 10:34:48 ]
下記コピペの拡散、お願いします!

-- ここから --
欠陥だらけの悪法、民主党が準備を進めている「子ども手当」がまもなく国会を通過する見込みです。
そこで、この法案に対するクレームを直接政府に届けて、少しでも本法案を阻止できるよう動きませんか!?

クレーム先:www.cao.go.jp/sasshin/hatomimi/re_hato/uketsuke.html
ハトミミ「国民の声」 受付窓口
の「■ 一般受付窓口 【おかしなルール(規制・制度)】」に、「基準や要件の見直し」として、本件に関する
抗議をお願いします。実名とメールアドレスが必要となります。○制度の所管省庁 は、厚生労働省です。

なぜ本法案がまずいのか?子ども手当支給対象者、民主党支持者もじっくり考えてみてください。

【子供手当て驚愕の真実】 www.youtube.com/watch?v=Y4wuKv8ExeM&feature=related
驚愕の子供手当て 5959goc.iza.ne.jp/blog/entry/1475880/
2010/3/10付の中日新聞
up3.viploader.net/pic/src/viploader1186653.jpg
viploader.net/pic/src/viploader1186654.jpg

要件をまとめると、
「外国籍の人間も支給対象」「海外在住の日本人は支給対象外」「養子も支給対象」「財源が赤字国債」
「子どもが外国にいても支給対象」「子どもの存在証明として、法的な力を持つ手段がない」
となります。これにより、以下のことが考えられます。

1. この手当目的に、日本より経済状態が低い外国において不当な養子縁組を作るケースが激増する。
2. この手当目的に、日本にやってくる外国人(特に中国人)が激増する。
3. なによりも、負担は将来の子ども達が背負わなければならない。

国会答弁にて、政府も設計に難があるのは認めていますが、今後検討するという理由で、この欠陥を
そのまま推し進めようとしています。まだ諦めるのは早いです。できる限りの手を尽くしましょう!!
-- ここまで --

192 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:57:01 ]
スレ違い

193 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 10:58:59 ]
>>192
レスしたのお前だけだぞ



194 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 13:02:57 ]
>>191
民主は売国政党だからな


195 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:09:34 ]
初心者は1.8.7をインストールすればいいんでしょうか?

196 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:36:37 ]
はい、そうです。

197 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 17:37:07 ]
はい

Windowsならarton.hp.infoseek.co.jp/indexj.html
ただしコマンドプロンプトの知識がどうしても必要

198 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:11:43 ]
def method1(x)
 return true if (0...1000).include?(x)
 return true if (2000...3000).include?(x)
 return true if (4000...5000).include?(x)
 return false
end
---
def initialize
 @arr = []
for i in 0...1000
 @arr.push(i)
end
for i in 2000...3000
 @arr.push(i)
end
for i in 4000...5000
 @arr.push(i)
end
def method2(x)
 return @arr.include?(x)
end

上のmethod1とmethod2をそれぞれ呼び出したとき、
結果は変わらないと思うんですが、処理速度に違いは出ますか?

199 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:49:57 ]
def method3(i)
case i
when 0...1000, 2000...3000, 4000...5000 then true
else false
end
end

ほんとうに整数ならこれが速くてわかりやすい
整数なのならわざわざ配列作る必要はない

200 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:22:30 ]
int x=1000;
for(int i=0;i<=x;x*i)
{
}

201 名前:デフォルトの名無しさん [2010/03/10(水) 19:40:05 ]
(0...1000).include?(x) は 0<=x && x<1000 と同じだけど
(0...1000).to_a.include?(x) は配列の要素を一つずつ比較するので当然遅くなる

202 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:48:12 ]
処理が遅いってどういうとき遅いの?

203 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:05:01 ]
>>202
実際に遅いかどうかプログラム作って確かめてから考えたほうがいい
机上で遅そうだと思っても意外と許容範囲内であることは多い



204 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:09:02 ]
.NETで作ったdllは参照できますか?

205 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:16:00 ]
dll <-> COM <-> Ruby

206 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:18:58 ]
へー、COMなら参照できるのか

どういう原理なんだ?

207 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:38:42 ]
COM Ruby でぐぐると…わあ微妙

208 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:27:35 ]
pause(2) に相当するメソッドでないんですかね。
とりあえずKernel.#sleepによる無限スリープで代用していますが

> sleep(sec = 0) -> Integer
> sec が省略されたり 0 を指定した場合、他スレッドからの Thread#run
> などで明示的に起こさない限り永久にスリープします。

sleep(0) してもすぐ戻ってきやがる。
マニュアルと実際の挙動が違うのはなぜ?
ちなみに引数を省略した場合は仕様通りなんですけど。

209 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:33:11 ]
pause(2)ってサスペンドの時に発行される奴だっけ?

Process.kill :STOP, $$
じゃだめですかね?


210 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:34:53 ]
>>209
ああ、それいいかもです。

ところでKernel.#sleepの挙動がマニュアルと異なるのが気になりますw
sleep(0) ですぐリターンするのは何故でしょう??

211 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:38:10 ]
まあ個人的にはただしい挙動だとは思いますが。
シェルから sleep 3 を実行すると0秒後に復帰しますし、永久にスリープはしませんね。はい。

212 名前:198 mailto:sage [2010/03/11(木) 00:38:23 ]
みなさん、ありがとうございます。
method1の代わりには、ご提示くださったmethod3が確かに良さそうですね

0...1000等はデータ的な数値(整数)で、頻繁に比較するのですが、
データ専用のクラスに数値の配列とmethod2を定義して呼び出し側のクラスから参照して比較したほうが、
呼び出し側のクラス内に直接method1を書くよりも記述のまとまりとしては良いと思ったんです

かと言って、データのクラスにmethod1や3のような記述をしても、
データを管理しているイメージはないですよね

213 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 00:58:39 ]
www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html
ここには0の場合永久スリープとは書いてないな。

RubySpecには
it "pauses execution indefinitely if not given a duration"
(引数がないなら無限に止まる)
はあるけど0を指定した場合の仕様は書いてない。
github.com/rubyspec/rubyspec/blob/master/core/kernel/sleep_spec.rb

でもって、るりま
doc.okkez.net/static/187/class/Kernel.html
には0だと永久スリープとある。

るりまの間違いだろうか。





214 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:02:12 ]
>>212
え、なにそれ

class HogeDataRange
def include?(x)
case x
when 0..1000, 2000...3000 then true else false
end
end
end

puts "13は含まれてるよー" if HogeDataRange.new.include?(13)

とかやる気なの?

215 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:24:00 ]
Rubyでできないことって何?

216 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:26:47 ]
>>215
あなたができそうだと思っているようなことは全てうまく行えない

と答えるのが一番実態に近いと思うん
説明してだいたいをわかってもらえるような人はそういう聞き方しないので

217 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:33:05 ]
そっか

218 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 02:40:42 ]
ものそい他人任せだが、他の初心者にやさしい「見た目わかりやすい」言語を学んでからだと
Rubyのような言語の立ち位置がよく理解できるかと思う

最初からRubyだけ与えられている状態はけっこう不幸だ
だから大学1年の授業にRubyを使うとかいうのは俺はあまりいいと思わん

219 名前:212 mailto:sage [2010/03/11(木) 02:53:01 ]
>>214
そんな感じのをやる気なのですが

220 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 04:49:39 ]
pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%B5%D5%B0%FA%A4%ADRuby%2FTk
ここの一つ目のサンプルコードをコピペして実行したのですがエラーになってしまいます
それとサンプルのVisualnovelも他のrbファイルを取り込むところで
見つけられないらしくエラーが出てしまいます
requireをしないコードは普通に実行できます
それと実行はRDEでやっています
Pathはbinが環境変数のところで通っています
何がいけないんでしょうか?

XPsp3 Ruby1.8.7 RDE1.1.1.1

C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1:in `require': no such file to load -- tk (LoadError)
from C:/DOCUME~1/***/LOCALS~1/Temp/rbF.tmp:1
Complete(1)

221 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 06:08:59 ]
tcl入れてないんじゃね?

222 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 10:16:02 ]
そのRuby自体が、tkをサポートしてないRubyに見える

223 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:27:44 ]
net/httpライブラリでデフォルトのリクエストヘッダを設定する賢い方法ない?

http.rbのHTTPGenericRequest#initializeを直に書き換えるのは気持ち悪いよな



224 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:44:58 ]
そのような動作をするクラスやメソッドを別途作る
net/http そのものを弄ることは推奨されない
固定の HTTP ヘッダが必要なら、固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る

225 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:46:51 ]
手順的に不正確だった
> 固定の HTTP ヘッダを追加して Net::HTTP オブジェクトを作るメソッドを作る

Net::HTTP オブジェクトを作って固定の HTTP ヘッダを追加して返すメソッドを作る

226 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 11:57:11 ]
そこまで書くなら Net::HTTP オブジェクト自体はヘッダのデータ持たないと思うにゃん

227 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:16:18 ]
よーわからんがこういうの?

require 'net/http'
# Net::HTTP.version_1_2 # 1.8.7では既にtrue

def http_get(uri, header={})
Net::HTTP.start(uri.host, uri.port) do |http|
req = Net::HTTP::Get.new(uri.request_uri)
header.each_pair{|k, v| req[k] = v}
return http.request(req)
end
end

uri = URI.parse('www.ruby-lang.org/')
p http_get(uri, {'Accept-Language' => 'ja'}).response['location']
p http_get(uri, {'Accept-Language' => 'en'}).response['location']

228 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:19:50 ]
/aaa\/bbb/
という正規表現文字列にマッチする正規表現というのはどう書けばいいんでしょうか。

\/.*?\/
と書いて、中の\/にマッチしないように
\/[^\\\/]*?\/
としてもダメでした。


229 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:37:15 ]
irb> Regexp.new(Regexp.quote("/aaa\\/bbb/")) =~ "/aaa\\/bbb/"
0
irb> Regexp.new(Regexp.quote("/aaa\\/bbb/"))
/\/aaa\\\/bbb\//
irb> p "/aaa\\/bbb/".scan(/\/aaa\\\/bbb\//)
["/aaa\\/bbb/"]
nil
irb> p "/aaa\\/bbb/".scan(/\/.+?\\\/.+?\//)
["/aaa\\/bbb/"]

どこまで汎用になればいい?
本当にマッチさせたいものはなに?

230 名前:220 mailto:sage [2010/03/11(木) 12:41:00 ]
jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners-2#l2
ここに書いてある通り、One clickインストーラーをインストールしたので
tkは自動で入っているらしいのですが
tk.rbで検索してもHDD内のどこにもなかったんですが
やっぱりインストールされていないということなのでしょうか?

231 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 12:53:06 ]
>>230
OneClickInstallerを使って1.8.7になるはずがない
あれは1.8.6しか存在しない
君が使ったのはRubyInstallerで、これはtkライブラリは含まない
Windowsでtkライブラリを使いたいのなら>>6のActiveScriptRubyを使うべき
これならActiveTclが別途入ってればなんとかなる

余談だけど
> 更新日時:2005/11/16 21:36:46
5年も前の記事をほいほい参考にすべきではない

232 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:47:54 ]
>>224-227
Thanks!
やっぱソコソコ手間かかるか

目的を正直に白状すると,デフォルトのUAがアレなので
常時ナチュラルなUAでライブラリを使用したいだけなんだよね

俺仕様ってことで推奨されない方法で行きます

233 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:53:49 ]
>>228
str = "hoge/aaa\/bbb/fuga"
re = /\/[^\/]++\/[^\/]++\//
p str.slice(re) #=> "/aaa/bbb/"



234 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:59:46 ]
>>232
Net::HTTP を直接使用することは極力避けたほうがいい(第一面倒だ)
自作のスクリプトで何度も使うというのならそのようなライブラリを自作するチャンス

俺は wget を定義して require 'orelib/wget' してしばらく使い回してたぞ

235 名前:232 mailto:sage [2010/03/11(木) 14:15:56 ]
>>234
>極力避けたほうがいい
それはどうして?
net/httpのAPIは結構気に入ってるんだけど

コネクションがスレッドセーフじゃないとか
Errno系の例外が不親切とかそこら辺?

236 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 14:28:03 ]
Net::HTTP は抽象度がわりと低いほうだからじゃないでしょうかぬ
システム的な問題ではないと推測

237 名前:220 mailto:sage [2010/03/11(木) 15:25:24 ]
>>231
仰る通り単体のRubyを入れていたようです
oldと書いていたので新しいもののほうがいいと思って
そっちをダウンロードしてしまったみたいです

ActiveRubyをダウンロード
gemのアップグレード
この時点で試しに
require "tk"
したけどエラー、tcltklibbなどtk関連のファイルがあるのに開けないみたい

>これならActiveTclが別途入ってればなんとかなる
この一文がなければここで挫折してました

そしていろいろぐぐっているとVisualuRubyはすでに入っているようなので
こちらでGUIを作りたいと思います
ありがとうございました

238 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 16:51:12 ]
すみません。お尋ねします。
ファイル上書き確認のコードを書いているのですが

if File.exist?(outfile)
print "#{outfile} は存在しています。上書きしますか ? (y/n): "
answer = STDIN.gets
if /y/i !~ answer
exit;
end
end

問題ないときもあるのですが、状況によっては(その状況が
いまいちよく分からないのですが)printが実行される前に
STDIN.getsに入って、何も表示されないまま待ち受け状態に
なってしまいます。printの対象を事前にflush(?)するには
どうしたら良いのでしょうか?

239 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:08:07 ]
>>213
あんまりよくわからんなりにソースを読んで見たところ(Windows版Ruby1.8.7だとして)

sleep は引数が無いなら WinapiのSleep(INFINITE)で無限に待つみたいで
引数があるなら Winsockのselectっていうのを呼んでた
selectはタイムアウト0秒だとすぐに帰って来るみたいなので
sleep(0) だと sleep() とは違ってすぐに帰ってくるようだ

るりまが間違ってるんじゃないだろうか?
あんまり自信があるわけじゃないので
だれか詳しい人、正確な説明よろしく


240 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:08:27 ]
自分で答言ってる

if File.exist?(outfile)
print "#{outfile} は存在しています。上書きしますか ? (y/[n]): "
$stdout.flush
exit if $stdin.gets =~ /\Ay/i
end

241 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 17:09:19 ]
>>238
flushって言葉を知ってるなら
IOのインスタンスでありprint等の出力先である$stdoutにそれをすればいい
と言えばわかるんじゃないかな

242 名前:238 mailto:sage [2010/03/11(木) 17:25:47 ]
>>240, 241

バッチリ動きました。ありがとうございました。

情けないことに$stdinの方をflushして
動かんなー、と悩んでました・・・。

243 名前:220 mailto:sage [2010/03/11(木) 18:02:05 ]
tkの方が解説サイトや機能が多いので
TCLフォルダにActiveTCL入れてみたけど実行するとエラーになる
いろんなサイトみて環境変数にパスもちゃんと入れたのに
TCL_LIBRARY TKL_LIBRARY INCLUDE LIBなど
実行するとここを読みに行ってエラー
/Ruby/lib/ruby/1.8/i386-mswin32
ここにもActiveRuby入れたときのTCLがあるのになぜエラー?

もう疲れたよ・・・



244 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:11:21 ]
ActiveScriptRuby(ActiveRubyというものは存在しないしこう表現してもいけない)は
デフォルトで C:\Program Files\ruby-1.8 にインストールするはずだが
C:\Ruby にインストールされるのは RubyInstaller の Ruby

245 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:18:22 ]
RubyInstallerをアンインストールしなかったのか
予想外だ

というかRubyでGUIなんかわざわざやろうという人はもっと熟練して賢いもんだと思ってた

246 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:24:04 ]
やはりTkへのアクセスの存在は隠したほうがいいのかもしれない
もう応対がめんどくさすぎる
デフォルトOFFのRubyInstallerの判断は賢い
…正式版じゃないからかもしれないが

どうしてもTkに処理を渡したいとき用のライブラリであって、
Rubyでウィンドウを作るためにあるわけじゃない
なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない

247 名前:220 mailto:sage [2010/03/11(木) 18:32:29 ]
簡単なのはRubyと聞いたのでやろうと思ったんだけど
まさかインストールするだけで2日かかるなんて

248 名前:220 mailto:sage [2010/03/11(木) 18:35:42 ]
>>244
空白開いてるといけないとかどこかで見たから
デフォルト変えてD;\直下にインストールしただけ
エラー表示されるときのパスもちゃんとインストールされた
場所のTCLを参照しているし、でもエラーが出る

RubyInstallerはActivescriptRubyを入れる前に
ちゃんとアインインストールしました
残ったフォルダも直接削除しましたし

249 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:38:28 ]
>>247
簡単だよ

ただ、OS操作とコマンドライン文化に不慣れなプログラミング初心者が独学でやっても簡単だと言った人がいたなら
俺が許可するのでグーで殴れグーで

250 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:40:00 ]
>>249
スレのテンプレすら読めない人も追加で

251 名前:220 mailto:sage [2010/03/11(木) 18:46:47 ]
>>246
>なんでRubyでウィンドウアプリケーションを作ろうと考えるのかもう全く理解できない

ここを見たので、この通りやろうとして躓きました
jp.rubyist.net/magazine/?0002-FirstProgramming
逆になぜ作ってはだめなのか私にはわかりません
そういった説明もないですし

252 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:48:50 ]
>>250
そだな、>>1の注意書きとか読めてないような人にはたぶん無理だな

253 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 18:51:41 ]
Rubyを使ってる人は程度が低いので、Ruby以外の知識が要求されるGUIプログラミングを否定しようとします
そういった人に騙されないようにしましょう



254 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:00:11 ]
>>253
今のお前恐ろしくつまんないんだけど…

255 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:05:13 ]
いや、Rubyとかじゃなく、GUIに関するドキュメント少なすぎるだけだと思う。
LinuxでGTKプログラミングやろうとすると多くの人が挫折するし。

256 名前:220 mailto:sage [2010/03/11(木) 19:06:06 ]
エラー内容
D:/Ruby/lib/ruby/1.8/i386-mswin32/tcltklib.so: tcltklib: fail to open tcl_dll (LoadError)
from D:/Ruby/lib/ruby/1.8/tk.rb:6
Complete(1)

ソースコード
require "tk"
Tk.mainloop

xpsp3で以下をダウンロード
ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub
ActiveTcl8.5.8.1.291945-win32-ix86-threaded.exe
参考サイト
arton.hp.infoseek.co.jp/indexj.html
www.db.is.kyushu-u.ac.jp/rinkou/ruby/activescriptrubyinstallwindows.html
lldev.jp/ruby/tips/ruby_tk_install.html
など・・

こんな感じです

257 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:27:32 ]
環境変数が設定できてないか参照できていないように見える
コマンドプロンプトから

C:\>echo %TK_LIBRARY%
C:\Tcl\lib\tk8.4

C:\>echo %TCL_LIBRARY%
C:\Tcl\lib\tcl8.4

C:\>ruby -e "require 'tk'"
(何もエラーが出ないまま終了)

どうせ RDE がなんかしてるんだろうと思う

258 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:29:51 ]
Ruby と Tk をインストールしてから一度も RDE を再起動してない場合はこうなるな

259 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 19:43:46 ]
RubyもTclも入ってない環境だったので Windows 7 Ultimate 64-bit で試してみた

1. ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub をインストール
2. ActiveTcl8.5.8.1.291945-win32-ix86-threaded.exe をインストール
(インストーラは管理者として実行)

> cd "C:\Program Files (x86)\ruby-1.8\bin"
> irb
irb(main):001:0> require 'tk'
=> true
irb(main):002:0> Tk.mainloop()
# ここでTcl/Tkのウインドウが表示される
=> true

ウインドウを出すところまでは普通に動くね

260 名前:220 mailto:sage [2010/03/11(木) 19:56:49 ]
>>257
全く同じ結果でエラーも出ませんでした
もしやと思って、test.rbをdblclickしたら普通に起動しました
ruby consoleで
>test.rbとやってもフォームが表示されました

>>258
再起動は何度もしましたが同じ結果でした

>>259
そのTCLはActiveScriptRubyに入っているTCLですか?
それとも別途インストールしたほうのTCLでしょうか?
どこかのサイトにRubyが参照しているライブラリのディレクトリを表示する
コマンドが書かれていたんですけど、閉じてしまってわからなくなった

261 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 20:00:39 ]
詰まる初心者の9割はRDE使ってるよな
なんなの

262 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 20:12:21 ]
>>261
誘蛾灯みたいなもんだと思う

コマンドプロンプト上から ruby -e "require 'tk'; Tk.mainloop" を実行してウィンドウが出るのに
RDE のエディタ部に require 'tk';Tk.mainloop と書いて F5 押してエラーログが出るなら RDE の問題

263 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 20:58:57 ]
zipとrarを回答する短いプログラムを作ろうと思っているんだけど、
OSのコマンドを使わずに作りたい

できればwindowsとlinuxのどっちでも動くようにしたい
教えてエロい人!!



264 名前:220 mailto:sage [2010/03/11(木) 21:01:03 ]
初心者は蛾扱いか
プログラマってこういう人間ばっかりか

265 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:05:01 ]
>>263
ソース読んでそういうライブラリ作るとか。
tarは自分で作ったことあるよ。

266 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:10:03 ]
正直RDEというだけで話聞く気9割減

267 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:13:10 ]
>>264
1〜2日くらいしか考えてないんだろ
そんくらいで怒るなよ
みんな親切にしてるじゃないか

268 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:16:51 ]
>>263
コマンドじゃなければいいだけなのならほぼ全てのスクリプト言語でできるぞ
その言語環境がインストールされていることが前提だが
というかシェルに展開を任すような処理をしてる言語を俺は知らない

269 名前:263 mailto:sage [2010/03/11(木) 21:18:06 ]
>>265
tarを解凍するコードをRubyで書くのって、面倒じゃないんですか?
Rubyの文法がまだ分からないんでorz

頑張って作ってくれと頼まれたもので..

270 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:21:00 ]
>>269
いやtarの展開だけなら数百行でおk。
アーカイブに追加するのは、ちゃんとテストしないと恐ろしいのでやめた。
面倒なら外部コマンドに投げるのが楽。

271 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:25:18 ]
>>266
Rubyを知らない人間がRDEを使うのは嫌われる
Ruby on RailsはRubyとは実質無関係なので他所で
Ruby1.9.1はとりあえず初心者は使うな
RubyInstallerはインストール後がめんどくさいから使うな
Rubyで関数と言って教える何かがあったらそいつから即手を切れ

こんなもん?

>>269
それは
「ZIPとTARの仕様構造を自力で調べてそれを展開するようなプログラムを作ることで勉強しろ」
という意味だろうから話がちょっと違う

Rubyは(少なくとも1.8は)いわゆる文字列とバイナリ列は同じなので
○バイト目から△バイト目までをどうにかする、という処理は普通に書ける

もし「外部コマンドがインストールされてないとZip用ライブラリやTar用ライブラリが動作しないのではないか」
と思っているのなら、そんなことはない
普通にインストールされていればRubyは両者をそれこそ3行くらいで展開する

272 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:27:13 ]
あ、Zipってそっちか
それはrubygemからの追加インストールがいるな

273 名前:263 mailto:sage [2010/03/11(木) 21:27:41 ]
>>268
zipを解凍するライブラリーはrubyにもあると思いますが、
rarはライセンスのせいでライブラリーが・・・と思ったので

>>270
さすがに、制限時間があるなかで「Rubyの文法 + 解凍のコード」を
書くのは厳しいですね〜



274 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:47:28 ]
@hoge = hoge
こんなコードがrubyにはあるわけですが、
perlと同じく変数は宣言しなくていいんですか?

最近のperlはmyをつけて、変数を宣言するのが一般的になってきていると思うのですが

275 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 21:51:18 ]
>>260
> そのTCLはActiveScriptRubyに入っているTCLですか?
というか ActiveScriptRuby には Ruby と Tcl をつなぐものしか入ってなくて
Tcl は ActiveState のサイトから持ってきた ActiveTcl に入ってる

ActiveTcl をインストール済みなら環境変数 PATH を使って
Ruby/Tk が勝手に Tcl を見つけてくれるはずだよ

でもって
> もしやと思って、test.rbをdblclickしたら普通に起動しました
> ruby consoleで
> >test.rbとやってもフォームが表示されました
RDEの設定に問題があるんだろうから
RDE から ENV['PATH'] して Tcl\bin が含まれているかチェック

もし含まれていなければ環境変数 PATH か RUBY_TCL_DLL に
Tcl\bin でも設定して試してみて






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<211KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef