Ruby初心者スレッド Part 10

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/03/21(水) 17:43:00
>>951
空行が混じってないファイルだったのでは?
953デフォルトの名無しさん:2007/03/21(水) 18:26:59
なら>>947のは2行目じゃなくて3行目だろうに
紛らわしいなぁ。
954デフォルトの名無しさん:2007/03/21(水) 18:36:29
sample/tk/demos-jp
にピタゴラスイッチみたいなかわいいサンプルがあってワロタ
955デフォルトの名無しさん:2007/03/21(水) 18:43:05
windowsだとexerbを使えばexe配布出来るわけですが
linuxだとそうもいかず
ということはソースごと配布せざるを得ない?完全なるオープンソース状態?
いやだいやだ!
どうすりゃいいんだ?
956デフォルトの名無しさん:2007/03/21(水) 18:50:13
linux版exerbを開発すればええやん。
というか、UNIX界隈はバイナリの互換性が低くてやってられんだけでは(w
957デフォルトの名無しさん:2007/03/21(水) 18:54:47
つかソレは本当に公開に足るスクリプトなのかという話が

Windowsは細かい動作するスクリプトはニッチでも需要があるが
Linux界隈では自力でやってしまうことのほうが多いはず

使いでのあるライブラリとかならまだしも単一のバイナリではなんとも
958デフォルトの名無しさん:2007/03/21(水) 18:55:21
>>948
ありがとうデス。
>>953
す、す、すみません。
959デフォルトの名無しさん:2007/03/21(水) 19:11:58
apt-get一発で処理系が入る世界だからなあ
960デフォルトの名無しさん:2007/03/21(水) 20:08:10
>>948
unless line.size > 0
より
if line.empty?
のが早い…とかどっかで聞いたような
ソース忘れたけど
まぁ別解のお節介。
961デフォルトの名無しさん:2007/03/21(水) 20:29:24
vineかfedoraに移住予定なのです
962デフォルトの名無しさん:2007/03/21(水) 20:59:51
すみません、質問させてください
アクセサを記述したときふと気が付いたのですが、
classを記述するときに、

def hoge=(x)
@hoge=x
end

と記述したのですが、

これを呼び出すときは

hoge = x
とか、書いていました
つまり、=とメソッド名の間にスペースが入ってしまっています。

なのになぜ、正常に動作するのでしょうか?
963デフォルトの名無しさん:2007/03/21(水) 21:27:57
Cygwin 1.5.19 で ruby 1.8.6 を
./configure --enable-shared ; make ; make install
のようにビルドしてインストールしましたが
ruby -rnkf -e '' を実行すると
ruby: no such file to load -- nkf (LoadError)
というエラーがでました。
インストール方法に問題があるでしょうか?
964デフォルトの名無しさん:2007/03/21(水) 21:29:55
>962
代入の = はいくつかの解釈がされる。

var = val # 変数への代入
obj[idx] = val # obj.[]=(idx,val)
obj.hoge = val # obj.hoge=(val)

なので、より正確に書くなら

obj.hoge = x

だな。レシーバなしの hoge = x だと
ローカル変数 hoge への代入になってしまう。
965デフォルトの名無しさん:2007/03/21(水) 21:29:56
>>955
yarvには難読化機能があるらしいけど、それじゃだめなのか?

966デフォルトの名無しさん:2007/03/21(水) 21:57:26
>>964
サンクス
そういう勉強はどこですればいいの?
単純にRubyかけるだけではなく、もう少し深く学びたくなってきたので
967デフォルトの名無しさん:2007/03/21(水) 22:00:34
マッツと愛を育む
968デフォルトの名無しさん:2007/03/21(水) 22:05:35
使用法の勉強には全く役に立たないくせにデカくて厚くて高くて細かいこと書いてある例の本にお布施
969デフォルトの名無しさん:2007/03/21(水) 22:15:25
970デフォルトの名無しさん:2007/03/21(水) 22:56:02
>966
そういう細かい仕様はリファレンスマニュアルを隅から隅まで読んだり
MLを読んだりしてると覚えてくる。

ちなみにさっきのはリファレンスマニュアルの
「演算子式」→「代入」に書かれてる内容。
971デフォルトの名無しさん:2007/03/22(木) 01:45:01
以下のようなtidyのサンプルを実行すると

require 'rubygems'
require 'tidy'
Tidy.path = "/usr/local/bin/tidy"
html = '<html><title>title</title>Body</html>'
xml = Tidy.open(:show_warnings=>true) do |tidy|
tidy.options.output_xml = true
puts tidy.options.show_warnings
xml = tidy.clean(html)
puts tidy.errors
puts tidy.diagnostics
xml
end
puts xml


以下のようなエラーがでます。
RuntimeError: can't find the symbol 'tidyCreate'

method symbol in import.rb at line 126
method import in import.rb at line 145
method extern in import.rb at line 61
method load in tidylib.rb at line 17
method path= in tidy.rb at line 46
at top level in tidy_test_sample.rb at line 7


ご教授お願いします。
当方mac10.4.9 ruby1.8.5
972デフォルトの名無しさん:2007/03/22(木) 01:53:17
で、>>938はRuby on Railsの何を追いかけてたの?
973デフォルトの名無しさん:2007/03/22(木) 01:54:57
RoRが諦めかけていた夢を追いかけてたの
974デフォルトの名無しさん:2007/03/22(木) 21:53:51
def on_start(event)
rd = rand(@words.length)
@engTxt.set_value(@words[rd][0])
sleep 1
@japTxt.set_value(@words[rd][1])
end

sleepの入る位置がおかしいです。
英語を表示してから日本語を表示したいのですが、1秒待ってから英語と日本語を同時に表示します。
解決策はありますか?
975デフォルトの名無しさん:2007/03/22(木) 22:00:54
Windowがどれだかわからないけど、refresh呼んでみたら?
http://wxruby.rubyforge.org/doc/window.html#Window_refresh
976971:2007/03/22(木) 22:17:43
Tidy.path =

の行でエラーがでます。
自分なりにいろいろpathを変えてみた中ででた
エラーのパターンは
RuntimeError: can't find the symbol 'tidyCreate'  もしくは
Unable to load ほにゃほにゃ

です。

ttp://tidy.sourceforge.net/trt/tidy_mosx.tgz
HTML tidyは上記をダウンロードし解凍した”tidy”を
/usr/local/bin/ に放り込みました。
ターミナルで
tidy -h
とするとヘルプが表示されているのでインストールはできていると思います。


tidyは
gem install tidy でインストールし1.1.2がインストールできていると思います。

お助けください。
977デフォルトの名無しさん:2007/03/22(木) 22:24:22
>>975
そのサイトは知りませんでした!!!
ありがとうございます!!!
超感動しました。sizerの使い方もよくわからなかったので;;
978MoonWdLnkQ ◆MoonWdLnkQ :2007/03/23(金) 00:27:15
>>976
Tidyのコマンドじゃなくて、TidyLibライブラリを指定しないと駄目。
979デフォルトの名無しさん:2007/03/23(金) 01:48:15
>>978

ありがとうございます。

そうだったのですか。

scrapi-1.2.0についてたlibtidy.soでいいのでしょうか?

上記libtidy.soをTidy.pathにした場合
Unable to load /usr/local/bin/libtidy.so がでてきます。

ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/vikiwiki/vikiwiki/vikiwiki2/tool.txt?rev=1.3
ここを参考にしようにも
ttp://tidy.sourceforge.net/src/tidy_src.tgzがダウンロードできても解凍できず
tidy4aug00.tgzをダウンロードして
make
sudo make install
してもコンパイル中?にエラーがでてうまくいきませんでした。
980971:2007/03/23(金) 02:28:40
>>978

すいません。自己解決しました。

ttp://nixbit.com/cat/programming/quality-assurance-and-testing/railstidy/
ここを見ていたら
It is assumed to be found at /usr/lib/libtidy.so .
とあったので見てみると
そのものはなかったものの
/usr/lib/libtidy.A.dylib というのを発見し、試してみると動きました。

本当にありがとうございました。


ついでで申し訳ないのですが
私は>>905で書いたようにハッシュと配列でデータを格納しましたが
>>917ではStructを使っています。

この2通りのやり方における違いとはどういったところでしょうか?
981MoonWolf ◆MoonWdLnkQ :2007/03/23(金) 03:34:48
>>980
Structだとアクセサが便利なのと
newするときに配列渡すだけで初期化できるとこがいい。
Arrayへの変換もできるし。
982デフォルトの名無しさん:2007/03/23(金) 09:04:42
983デフォルトの名無しさん:2007/03/23(金) 09:14:36
>>982
おつおつ
984デフォルトの名無しさん:2007/03/23(金) 13:08:59
>>982
ごちゃごちゃした1はいらない
985971:2007/03/23(金) 13:44:47
>>981
なるほど。ありがとうございます。

StructはRubyの入門書の類にはあまり出てこなかったので
ほとんど知りませんでした。

便利そうなので勉強して使ってみたいと思います。
986デフォルトの名無しさん:2007/03/23(金) 14:32:50
>>984
初心者スレだから必要
おまえのようなやつは本スレだけみとけ
987デフォルトの名無しさん:2007/03/23(金) 17:04:17
Tk::BWidget::NoteBook について質問なのですが,
raise(page=nil) メソッドで特定のページをアクティブにする(表示する)事はできたのですが,
逆に,現在アクティブな(表示されている)ページの情報を取得するにはどうしたらよろしいのでしょうか?

タブを右クリック→そのタブを削除

みたいな動作が欲しいのですが…
988デフォルトの名無しさん:2007/03/23(金) 17:23:55
wxRubyを使え
989デフォルトの名無しさん:2007/03/24(土) 13:28:47
if A > B then



if A - B > 0 then

ってどっち使うほうがいい?
990デフォルトの名無しさん:2007/03/24(土) 13:38:35
>>989
そりゃアルゴリズムにおけるAとBの意味による
例えば自動車Aと自動車Bの速度だとすると
前者は「Aの方がBよりも速い」
後者は「AのBに対する相対速度が正」

Rubyは人間の思考中心の言語だからNE
991デフォルトの名無しさん:2007/03/24(土) 13:45:42
>>989
A-B>0は、Cのintのような整数の範囲が限られている場合に意図しない(が正しい)
動作をすることがあるが、Rubyは自動的にFixnum<->Bignum変換されるから、
文脈に応じて分かりやすいほうでいいんじゃないかな。
992デフォルトの名無しさん:2007/03/24(土) 13:51:33
みんなreturnは必ず書くよな!
993デフォルトの名無しさん:2007/03/24(土) 13:54:05
最悪nilでも返さないとデータ漏洩につながるからな。
994デフォルトの名無しさん:2007/03/24(土) 13:56:54
>>990-991
ありがとう
適当に使い分けるよ
995デフォルトの名無しさん:2007/03/24(土) 14:01:06
returnは書く
でも
if hoge
 return foo
else
 return bar
end
な書き方ってあっちこっち飛び回って実際問題gotoと一緒だよなぁ
returnってメソッド内で1つだけにしたほうがいいのかなぁ
996デフォルトの名無しさん:2007/03/24(土) 14:02:21
>>995の自己レス
例えば
if hoge
 piyo = foo
else
 piyo = bar
end
return piyo
こんな風にね
997デフォルトの名無しさん:2007/03/24(土) 14:15:12
>>996
メイン分岐の処理自体に前処理を書くのが楽だったとしても無理矢理まとめる?

return nothing unless hoge.has_key?('momomo')

のような

出口は1個であるべきなんだけど難しいね
998デフォルトの名無しさん:2007/03/24(土) 14:27:44
if文が値返すから

return (if condition
 hoge
else
 bar
end)

とか書けるな。返す文を短く書けるなら

return (condition ? hoge :bar)

999デフォルトの名無しさん:2007/03/24(土) 15:09:25
でっかい if 文で括ったほうが素直かと
容易にネストしまくると思われるが
1000デフォルトの名無しさん:2007/03/24(土) 15:12:21
>>992
def hoge
@hoge
end
で、いちいち return @hogeとは書かない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。