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


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

Ruby 初心者スレッド Part 36



1 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 13:56:36 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

231 名前:227 mailto:sage [2010/03/27(土) 20:54:42 ]
>>230
特異メソッドにそんな使い方があったとは
単純にクラスに属すメソッドの定義だと思っていました

ありがとうございます

232 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:56:33 ]
>>230
うひょうこの定義のしかた超きめえ今度から使おう

素直に extend する人用

module RunExtender
def run; @run; end
end

r = Runnable.new
r.extend(RunExtender)
r.run

233 名前:デフォルトの名無しさん [2010/03/27(土) 21:00:57 ]
>>231
発想の順番からいうと、特定のインスタンスだけで使えるように
定義するのが特異メソッド。
で、RubyのクラスってのはClassクラスのインスタンスだから、
その特異メソッドはいわゆるクラスメソッドの位置づけに相当するということ。


234 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 21:05:09 ]
ていうか>>219のもこれで用済まないかね

235 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:33:45 ]
普通のメソッドから特異メソッドにアクセスできないみたいですが、
どうにかなりませんか?

236 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:43:16 ]
>>235
>>231と仮定すると、どうにもならない
そもそも所属が違うから、特異メソッドの存在を知らないインスタンスメソッドは特異メソッドにアクセスできない

そうでないのなら、特異メソッドは new されたオブジェクトではなく
new するのに使った Class オブジェクトの持ち物なので self.class.hoge で使え

237 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:44:57 ]
>>236
thx

238 名前:デフォルトの名無しさん [2010/03/27(土) 22:45:24 ]
できるよ。

irb> class Object; def hello; hello2; end; end
irb> o = Object.new
irb> def o.hello2; puts "hello"; end
irb> o.hello
hello


239 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:52:12 ]
配列にはattr_writerでアクセッサを指定することはできないんでしょうか?



240 名前:デフォルトの名無しさん [2010/03/27(土) 22:53:26 ]
>>239
どういうメソッドが欲しいの?


241 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 23:02:07 ]
メソッドがほしいというより使い方が知りたいのです
attr_writerを指定すると読み書き両方ともできなくなったので
根本的に配列にattr_readerやwriterを使うのは間違いなのですか?



242 名前:デフォルトの名無しさん [2010/03/27(土) 23:05:09 ]
えーと、

class Array
attr_reader ??? # ここに何書いたの?
end


243 名前:デフォルトの名無しさん [2010/03/27(土) 23:07:14 ]
たとえば、配列にhogeという書き込み専用属性を作りたければ、

class Array
attr_writer :hoge
end
a = []
a.hoge = 10
a.instance_variables #=> [:@hoge]

のようにできるけど。


244 名前:239 mailto:sage [2010/03/27(土) 23:08:53 ]
こういう風にしました
readerArray = Array.new(3, 0)

attr_reader :readerArray


245 名前:239 mailto:sage [2010/03/27(土) 23:17:04 ]
質問のしかたが悪くてすみません・・・
こういう感じだとクラス内の配列は読み取りや書き込み専用にはならないのでしょうか
class Foo
def initialize
@readerArray = Array.new(3, 0)
@writerArray = Array.new(3, 0)
end
attr_reader :readerArray #ダメ
attr_writer :writerArray
end

246 名前:デフォルトの名無しさん [2010/03/27(土) 23:32:41 ]
>>245
オブジェクトを作ってみる。
> f = Foo.new #=> #<Foo:0x000001010e23b8 @readerArray=[0, 0, 0], @writerArray=[0, 0, 0]>
@writerArray
書き込みアクセサで書き換える。
> f.writerArray= [1,2,3] #=> [1, 2, 3]
読み出しアクセサはない。
> f.writerArray #=> NoMethodError: undefined method `writerArray' for #<Foo:0x000001010e23b8>
リフレクションで取得は可能。
> f.instance_variable_get(:@writerArray) #=> [1, 2, 3]
@readerArray
書き込みアクセサはない。
> f.readerArray = [10, 20, 30] #=> NoMethodError: undefined method `readerArray=' for #<Foo:0x000001010e23b8>
リフレクションで書き換えることは可能。
> f.instance_variable_set(:@readerArray, [4,5,6]) #=> [4, 5, 6]
読み出しアクセサで取得。
> f.readerArray #=> [4, 5, 6]
attr_reader しかしていないと言っても、それで得られたオブジェクトが読み取り専用になっているわけではないので、
> f.readerArray.pop #=> 6
> f.readerArray #=> [4, 5]
のようなことは起こる。


247 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:03:47 ]
Rubyにアクセサという機構はない
attr_* は同名のインスタンス変数を返す(か代入する)メソッドを自動で作成するだけ

def arr
@arr
end

def arr=(a)
@arr = a
end

メソッド定義を自力で書くのを避けたいときに使うだけで、特別な動作はしない
def を書く代わりにできるだけ

248 名前:239 mailto:sage [2010/03/28(日) 00:11:30 ]
>>246
なるほど
アクセッサで指定した配列オブジェクトそのものは読み、書き専用になるけれども、
その中身のwriterArray[0]とかはwriterArrayのオブジェクトから読み込みができないので
各要素オブジェクトにもアクセスできなくなるので、writeArray[0] = 1 はできなくなり
readerArrayの場合は、readerArrayの読み込みはできるのでreaderArray[0]にアクセスできるけれども
readerArray[0]の要素オブジェクト自体は読み取り専用じゃないので readerArray[0] = 1 ができてしまうんですね
大変参考になりました

>>247
やっぱり横着してはならないのですね

夜遅くまでありがとうございました

249 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:15:03 ]
ぶっちゃけ、attr_ はもう名称変えたほうがいい
こんだけ広まったらもう混乱の元にしかならん



250 名前:デフォルトの名無しさん [2010/03/28(日) 00:15:55 ]
rubyでmail送信したいんだけどXPHomeeditionではできない?
できれば携帯におくりたいんだけどできるかな?
ただしSMTPサーバがない状態で。
VB.NET & XP Professionalなら簡単にできたんだど。
だれかそのあたり詳しい人いますか?
条件は
XP Home Edition
携帯にmail送信。(異常時に)
SMTPサーバなし(外部サーバ通じてではできるらしい。VB.NET & Professional
なら不要)



251 名前:デフォルトの名無しさん [2010/03/28(日) 00:15:58 ]
f.writeArray[0] は f に writeArray というメソッドがあってそこから
返ってくる配列に添え字アクセスする意味。
attr_writer :writeArray では writeArray= というメソッドしか
作られないからダメってことですな。


252 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:20:48 ]
どうでもいいけどLCCで書くのやめて欲しいなあ
Rubyではスネークケースで書いて欲しい

そういやスネークケースって言葉ぜんぜん流行らないよね
write_array みたいな全小文字でアンダースコア区切りの書き方ね

253 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:24:46 ]
>>250
require 'net/smtp'
使い方はマニュアル読め

254 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:25:48 ]
>>252
禿げ同。
初心者がスネークケースで質問するスレ立ててよw

255 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:29:24 ]
>>252
Rubyではあらゆる点でアンダースコア区切りが主流だと思って
ライブラリのトップファイル名をアンダースコア区切りにしたら叩かれたでござる

require 'hoge_lib' ではなく require 'hoge-lib' となるように作ろうね
require しないファイルはアンダースコア区切り

256 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:30:49 ]
個人的にはピリオド区切りが好き

257 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:59:00 ]
私初心者だけど
クラス命はFooBar
メソッド命もFooBar
変数名はfoo_barって感じで書いてた
こういうの嫌われるの?

258 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:00:21 ]
>>257
間違えた
クラス名 => FooBar
メソッド名 => fooBar
変数名 => foo_barでした

259 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:03:37 ]
>>255
マジか。アンダースコアで作っちゃった。
でも、active_recordとかもアンダースコアだし、いいよね?
ちなみに、その指針みたいなのどっかに書いてある?





260 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:16:19 ]
>>258
Rubyではメソッドを呼ぶ行為とローカル変数を呼ぶ行為は字面で区別しない
LCCを使用するのは特定の外部ライブラリのラッパーとかの特殊用途向け
メソッド名と変数名は全部小文字でアンダースコア区切りが普通
ちなみに大文字メソッド名でも定義はできるし動作もする(ただしレシーバ必須で self.Hoge 等と呼ぶ)
余談だが日本語でもできる(文字エンコーディングに注意)

>>259
そもそも active_support なのか active-support なのか activesupport なのかわかりにくいから
新しいメソッドはもうまとめようぜという話になったと記憶

261 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:21:58 ]
こんなとこでどうでもいい宗教論争吹っかけんなよ糞うざいから

262 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:25:50 ]
>>261
別に従わなくてもいい
全部のメソッド名を日本語にしても構わない
DSLで自分のルールを作るのさえ自由だ
end を } にするように書き換えてコンパイルすることを別に止めはしない

ただ、それは孤児になる

263 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:00:57 ]
Java が 1.1 系列になるときに、クラス定義の規則や、命名規則を厳格にすることで、
JavaBeans が成立し、開発環境でそれらを扱えるようになった。
マウスのD&Dで、イベント定義をしたり。

引数なしのコンストラクターを定義して、
setter/getter とか boolean は isProperty() にするとかそんなの。

命名にも、そういう実益があればいいんだけど、単にスタイルの問題だと従う意味が分からない。

264 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:13:14 ]
教祖が適当に決めてるのが現状だしな。
perl互換にしたがる傾向が強いが。

265 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:24:29 ]
>>263
Rubyは本当に本当に自由に書くことができるので、逆に記法が散逸してしまったのだな
スタイルというよりはデファクトの決定
読めない上に入力方法もわからない外国語UTF-8クラス名の外国語UTF-8メソッドを使いますとか言われても困る

rubygems は gem install のインストールディレクトリ名と require のファイル名を別個にすることができるので
たいそう混乱した
これは Hoe や Jeweler のサポートで軽減されてきている


別に従わなくてもいい
特に外部に公開しない場合は
公開するような場合でも、別に守らなくても構わない
ただし、それに伴って何か不利益を被ったとしてもそりゃ自己責任で
俺と違うやり方の世界のほうが悪いんだと叫んでくれ

266 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 08:12:01 ]
jrubyのライブラリはネイティブな実装ですか?

267 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:54:00 ]
「RubyはGUIに向かない、Pythonにしとけ」ってのは、どういうこと?
Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。


268 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:04:22 ]
というかRubyのGUIは全部間借りなのよ
Ruby/TKはTcl/Tkというものを使ってて、Tkの勉強が必要
Ruby/GTKはGTKの、Ruby/QtはQt(Qt4)そのものの勉強をする必要がある
Rubyの文法とか考えとかそういうものとは全く別のものを勉強しなければならない

「GUIはRails並に別」と言われる所以
「わざわざRubyから呼んで苦労背負い込むくらいなら
直接そのプログラミング言語を学んで直接起動させたほうがマシじゃね」という

269 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:07:09 ]
> Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。

これに全く答えてないわけだが。
Pythonには間借りでないGUIライブラリがあるわけ?



270 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:15:22 ]
この際だから
はっきり言ってしまうと
Pythonの場合
wxPythonならwxWidgetsは覚える必要はないし
PyQtならQtを覚える必要がない
TkinterだけはTcl/Tkを知らないと使えないとは思うけど

271 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:35:23 ]
Tclの難しいところ(変数/コマンド置換、制御構文のブレース等)はRubyがやってくれるから
Tcl知ってる人がTk使えるようになるのと
Ruby知ってる人がRuby/Tk使えるようになるのに必要な勉強の量は大差ないだろう

問題はLinuxでRuby/Tkが使えるようになるまでだけど
RubyでGUIやりたいって言ってる人はたいていWindowsユーザなんじゃないか
だとすればActiveScriptRuby入れてActiveTcl入れるだけでRuby/Tkが使えるようになるから
PythonでTkinter使うのとたいしてかわらない

とういわけでRubyでGUIスレの発展を切に願います

272 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:39:34 ]
Ruby/Tkが学習距離的にいちばんマシではある
「とりあえずウィンドウとかボタンとか入力欄とか出せればなんとかなんじゃね」
というコンセプトがRuby寄りだ
「Tcl/Tkでいちばん難しいのはTcl」という本末転倒な症状もRubyなら軽減

が、Rubyを一通り学んでからGUIに手を出すという順番自体は重ねて推奨

273 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:48:22 ]
>>270
それは>>269の答えになってるの?それともただの独り言?

274 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:50:05 ]
>>273
半分くらい答えになってるんじゃね?真偽は置いておいて。
というか何故そんなに喧嘩腰なんだ

275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:54:18 ]
wxPythonなんかも結局wxWidgetsのマニュアル見ることになるから
あんまりRuby/Tkなんかと変わらないよ
その辺はどこのGUIインタフェースも一緒

276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:56:24 ]
深い使い方しないという範囲限定の話だと思う

277 名前:267 mailto:sage [2010/03/28(日) 11:02:09 ]
>>268
プログラム言語によらず、GUIライブラリなんてそんなもんだと思っていたので、
RubyじゃなくてPythonだと何が嬉しいのかを知りたかったのです。

>>270
> wxPythonならwxWidgetsは覚える必要はないし
> PyQtならQtを覚える必要がない
GUIライブラリ固有の知識がなくてもPythonの知識だけでGUIが作れるということでしょうか。
これはにわかには信じられないのですが、ちょっとPython勉強して出直してきます。


278 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:16 ]
ttp://www.ibm.com/developerworks/jp/linux/library/l-qt/
> Ruby/Qt の使い方は、PyQtにかなり似ています。どちらの言語も同じような動的特性 (dynamism) と
> 簡潔性を備えていますので、個々の要素に名前の違いはあるにしろ、似た感じのコードになっていても
> 不思議はありません。
RubyもPythonも似たようなもんなんじゃね?

279 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:42 ]
でも俺はある程度Tcl/Tk知ってるからPerlでもRubyでもPythonでもTcl/Tk単体でも
学習コスト最低レベルでウィンドウを扱える

まあ要は用途次第だな
GUIを提供することだけが最重要で、その裏にあるプログラムの動作はどうでもいいとか



280 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:14:18 ]
そもそものあれとしてGUIが必要な人はRubyを使わないし、
Ruby使ってる人はRubyからGUIライブラリを呼ぼうなんて考えない
GUIが必要なときは素直に他の言語で書く

281 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:23 ]
>>280
んなこたーない。
…とは思うものの、自分も Ruby で書かれた GUI アプリは Rabbit くらいしかしらない。

282 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:35 ]
>>280
で、つまりRuby上のGUIは初心者の領域ではないという話になるわけか
別スレ立ったんだしとりあえずそっちでいいじゃん

283 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:18:38 ]
>>280
それはそうだろうけど、その「他の言語」ってところでPythonを勧められることがままあると。
んで、PythonとRubyではそんなに違いないんじゃないの?ってのが>>267の疑問では。

C#やらJavaやら勧められるんなら、そういう疑問は出てこないと思う。

284 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:20:22 ]
>>281
goRua…は終わったか
ホントにGUI部分の処理が面倒だなあ
ウィンドウ処理と滅茶苦茶高次に融合したRubyとかないの

285 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:25:03 ]
いいからこっちでやれ
Railsとスレ分けられるんだからGUIとだってスレ分けられるだろ

Ruby で GUI するスレ
pc12.2ch.net/test/read.cgi/tech/1269609576/

286 名前:デフォルトの名無しさん [2010/03/28(日) 11:39:52 ]
ここは初心者スレだからGUIの話もオッケーよ

287 名前:デフォルトの名無しさん [2010/03/28(日) 11:46:26 ]
プログラミング初心者には、GUIってのは、すでに出来上がって動いている
ものを操作するのは分かりやすいが、それをそう見えるように作るのは面倒
くさいということは知って欲しいなー。

テキストメッセージ1つのウィンドウを出す程度で満足なら別だけど。


288 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:59:32 ]
Rubyで使えるGUIライブラリってどんなのがあるの?
WndowsFormは使えんよね?

289 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:03:19 ]
attr_writer :hogeとdef hoge=(h);@hoge = h; endは
同じ意味だと思いますが、どっちを使うべきなんですか?



290 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:10:29 ]
>>289
前者は後者の意味であるということを理解してるならどっちでもいいよ

作ってる最中は attr のことが多いと思う
条件演算子→if式→case式 と移行するのと似たような感じで
結局後者(でメソッド内部で正規化処理つき)になることが少なくない

291 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:17:26 ]
>>288
Ruby/Tk
VisualuRuby
Ruby/Qt4
Ruby/GTK2
WxRuby
FxRuby
Apollo
Ruby/FLTK
RubyShoes

なんか終わってるのもいくつかあるが気にするな

292 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:24 ]
>>290
ありがとうございました

293 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:57 ]
>>291
ありがとうございました

294 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:01:29 ]
test do
例外が発生する可能性のある処理
end
----------------------------------------------------------------------------
def test
begin
例外が発生する可能性のある処理
yield
ensure;end
end
このようなコードを書いたのですが、test do; endの適切な処理がわかりません
教えてエロ人!!


295 名前:デフォルトの名無しさん [2010/03/28(日) 13:06:36 ]
発生したときどうしたいのさ?


296 名前:294 mailto:sage [2010/03/28(日) 13:18:57 ]
>>295

test do endの中で全ての例外を処理し、
例外が発生した時はメソッドをreturnで終了させたい

297 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:24:46 ]
> test do endの中で全ての例外を処理
えー
そういう場合はメソッドのユーザーが自分の責任で begin で括る

begin
 test do ... end
rescue => e
 error_handling(e)
end


298 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:30:30 ]
>>297
THX

299 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:51:35 ]
チルダとダブルクォーテーションの使い分けって何かあったっけ?
何か重要なものがあったような気がするけど思い出せないんだ



300 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:55:41 ]
質問が微妙によくわからないけどこれ置いとく
doc.okkez.net/187/view/spec/literal
ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80

301 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:01:10 ]
チルダ ( ~ ) ?
Ruby で ~ を使うのは、マッチング演算子の =~ とその否定の !~ と、
前置の単項演算子で、整数のbitwise-not、正規表現オブジェクトと $_ とのマッチ、
IPAddr オブジェクトのbitwise-not、なので、ダブルクォートとの使い分けをする場面は
ないと思うが...

302 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:08:37 ]
間違ったプライムだ
文字やら文字列列をくくる時なんかに使うアレ

303 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:10:41 ]
′や″をRubyで使うことはない

304 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:13:32 ]
「円記号でエスケープ」と聞いて¥を使ってしまうようなピュアな人がここにも…ッ

というか文字列括る記号はさっき出てた
ttp://doc.okkez.net/187/view/spec/literal#string
このへんで用が済みそうだが

305 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:17:51 ]
うーn?%記法とやらを使えってか?
>>doc.okkez.net/187/view/spec/literal
とりあえずこれ読んでくる

306 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:10 ]
LispやErlangなんかのフォーマット文字列だっけ
チルダ使うの

307 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:46 ]
親クラスのアトリビュートにアクセスするためには、どうすればいいんですか?

308 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:26:42 ]
記号の区別の知識があることがやっぱ前提だよな
"''゛“"”′″`'‘’

309 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:29:56 ]
>>307
Rubyにはアトリビュートというものはない
継承されたクラスの a というメソッド内部から継承元の同名のメソッド a にアクセスするには super を使う



310 名前:307 mailto:sage [2010/03/28(日) 16:34:42 ]
>>309
そんじゃ、親クラスで定義した@hogeには
サブクラスから(メソッドを通さず)アクセスできないってことですか?

311 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:40:09 ]
>>310
え、いやふつーにアクセスできると思うんだが
irb> class C; def initialize; @hoge="hoge"; end; end
irb> class C2 < C; def hoge; @hoge; end; end
irb> p C2.new.hoge
"hoge"


312 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:59:36 ]
読み方いくつかバリエーションあるんだが

" ダブルクォート(ダブルクォーテーション)
' シングルクォート(シングルクォーテーション)
` バッククォート

でいいよな
表記の揺れは許容

313 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:05:59 ]
( ) カッコ、パーレン、小カッコ
{ } ブレース、波カッコ、カーリーブラケット
[ ] ブラケット、角カッコ

314 名前:デフォルトの名無しさん [2010/03/28(日) 17:08:01 ]
シェルスクリプトやPerlの知識はいくらか前提にしたいなー。


315 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:15:11 ]
プライムは 1′23″ とか書くときに使う記号だな

316 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:58:23 ]
>>312
「マーク」を付けないところが童貞っぽい。
IPアドレスをIPって略しちゃうのと一緒で。

317 名前:307 mailto:sage [2010/03/28(日) 18:00:19 ]
>>311
JRubyでJavaのコードを継承しているんだけど
なぜかnilになっちゃう

318 名前:307 mailto:sage [2010/03/28(日) 18:20:48 ]
どうやら、JRubyからJavaのフィールドにアクセスするためには
絶対publicじゃないとダメみたい
しかもJRubyではローカル変数としてアクセスするみたい
class Super{
public String str = "str"
}
class Sub < Super
def initialize
p str
end

319 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:11:37 ]
>>315
わかったからもうやめて
俺のHPは0だ



320 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:20:27 ]
>>316
ダブルクオーテーションとダブルクオーテーションマークに何か違いでも

321 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:43:07 ]
フルだとどうにも長いからな
IPアドレスなんかとは違って紛らわしい候補はないから縮めてもらっても意味はわかるが

そもそもがダブルクとかシングルクとかそれくらい短いといいのに

322 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:04:45 ]
一重引用符、二重引用符で各5文字だ。

323 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:19:17 ]
>>322
それは、カギカッコと区別がつきづらいので使わないで欲しい。

324 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:21:07 ]
半角単引用符
半角複引用符
6文字でFA

325 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:24:53 ]
ほほう«ギュメ»は‹引用符›ではないと申されるかこれは異なことを

…いいよもうシングルクオートで

326 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:27:50 ]
次の瑣末粘着者さんどうぞ

327 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:06:44 ]
メソッドの名称とかモジュールの名称って
短い方がプログラムの実行速度が速くなるとかありますか?

328 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:12:59 ]
…いつのBASICだ
気にする必要はない
変な省略はせずにわかりやすい長めの名称推奨

329 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:38:43 ]
大きなオブジェクトを変数に入れた後は変数に nil を明示的に指定すると
メモリ内に巨大なデータがいつまでも残ったままになったりしません

とか書いたら信じて実行してくれるだろうか



330 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:49:44 ]
irb だとわかるけど、 require するとけっこうメモリ食うよね

331 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 01:56:45 ]
win32版Ruby1.87(OSはWindowsXP)9で、漢字を表示するようなスクリプトをUTF-8で保存して
スクリプト一行目に#! ruby -Kuと入れて実行したら文字化けした
-KsにしてS-JISで保存して実行したら直った

・・・ちゃんとBOM無しとやらにしたのに何でかしら?Ruby本体の設定とかあって、それを間違えてるとかかしら?
ちなみに使用したのはサクラエディタ

332 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:12:20 ]
>>331
Windowsという事は、コマンドプロンプトで実行したという事ですね。
コマンドプロンプトはデフォルトではSJISしか正しく表示できないのです。
コードページをUTF-8に変更すれば表示できると思われます。
方法は「コマンドプロンプト コードページ UTF-8」でググってみて下さい。


333 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:38:29 ]
>>332
d
コマンドプロンプトちゃんの設定が悪かったのか
にしてもこんな設定があったとは・・・

334 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:43:46 ]
chcp65001 のことだったらまともに動かないし使えねーんだが

335 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:47:45 ]
>>334
全く問題ない文字を表示してるだけなら問題はない
>>333はそのパターンだろう

336 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:48:03 ]
QueueにデータAが無かったら、データAを追加する
処理を書きたいのですが
どのようにして確認すればいいのでしょうか?

337 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 13:23:48 ]
デフォルトではQueueは存在しないので、
自分で作るかArrayで代用するか適当なライブラリインストールする必要がある

…で、Arrayで代用する場合はまあ include? でいいんじゃね

queue = Array.new
queue.push('one')
queue.push('two')
queue.push('three')

puts queue.shift
puts queue.shift

queue.push('four') if queue.include?('three')

338 名前:デフォルトの名無しさん [2010/03/29(月) 13:24:23 ]
RubyのQueueはスレッド間のデータ受け渡し用に用意されているもので、
汎用のデータコンテナではないと思う。

一応 Queue のインスタンス変数 @que が内部で持ってるデータのリスト
なので、これを無理矢理参照して include? でデータの存在をチェック出来
るけど、素直にArrayをshift/pushもしくはunshift/popのペアを使って
キューと見なすほうがよいと思う。


339 名前:336 mailto:sage [2010/03/29(月) 13:33:19 ]
>>337-338
よーくわかりました。
Array.newとQueue.newの2つを使いたいと思います
ありがとうございました



340 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:12:32 ]
File.exist?(filename)とFile.exists?(filename)
の違いがわからない
単に書き方が違うだけか?

341 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:21:06 ]
>>340
前者推奨
sつきの後者は互換性のために残されているだけで1.9では既に無い
ttp://www.ruby-lang.org/ja/man/html/obsolete.html#FileTest.2eexists.3f
見つけるの苦労したぞ
わかりやすいとこに置いておいてくれ

342 名前:デフォルトの名無しさん [2010/03/29(月) 20:15:24 ]
その後復活したけどな
svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?view=diff&r1=14389&r2=14390
しかもobsoleteもなくなってるという

343 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:37:30 ]
>>340
なるほど、んじゃあexist?(hoge)を使うようにしよう
ともかくありがとう

344 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:56:56 ]
javaのつもりでcase 文で一行ごとにbreakを入れたら酷い目にあった
知ったかは危険だ・・・

345 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:40:13 ]
スレッドの中から@arrray.shift()としたのですが、
スレッドの外から@arrayを見るとちゃんと動作していません

どうやったら、整合性が取れるようになりますか?

346 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 00:38:52 ]
>>345
> どうやったら、整合性が取れるようになりますか?
typoを無くす

347 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 05:58:33 ]
>>336
それはキューではない。

348 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 08:12:10 ]
>>346
何それ?

349 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:23:04 ]
>>342
まあ 1.9.2 で実際に出たら考える



350 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:25:27 ]
shiftできるんだから、@arrrayの方が正しんだな。

351 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 19:18:13 ]
BitmapArrayって何ですか?

352 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 08:49:43 ]
def hoge *argsのとき、
hoge {:fuga => :piyo} で呼ばれたのか、
hoge :fuga => :piyo で呼ばれたのか判断する方法ってあるんですか?

353 名前:352 mailto:sage [2010/03/31(水) 09:06:16 ]
あ、
hoge {:fuga => :piyo}じゃブロックになっちゃうから
hoge({:fuga => :piyo})ですね。

354 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 09:14:02 ]
Ruby にはキーワード引数というものは存在しない
Symbol キーの Hash をそれっぽく使っているだけ
メソッドの引数内に限り、解釈の混乱の起きない範囲で Hash リテラルは { } を省略することができる

hoge(:key1 => val1, :key2=>val2)

hoge({:key1 => val1, :key2=>val2})
は同じだ

huga(param, {:key1 => val1, :key2=>val2})

huga(param, :key1 => val1, :key2=>val2)
も同じ

355 名前:352 mailto:sage [2010/03/31(水) 10:02:08 ]
どもです。わかりました。

356 名前:デフォルトの名無しさん [2010/04/02(金) 04:53:24 ]
正規表現で得た複数のデータをそれぞれ配列に格納して、
その配列を比較するにはどうすればよいのでしょうか。

357 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 10:02:28 ]
そのまんま1処理ずつ書けばいいじゃん
なんでもかんでも1フレーズに押し込めようとするのは損

358 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 13:57:20 ]
>>356
String#scan
www.ruby-lang.org/ja/man/html/String.html#scan

359 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 01:27:32 ]
鬼車を使いたいんですが、1.87に実装されていますか? 1.91は不安なので。



360 名前:デフォルトの名無しさん [2010/04/04(日) 02:47:06 ]
リテラルは無理だが、oniguruma gemはある。


361 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:02:56 ]
>>360
どうもありがとうございます。今から試してみます。

ところでみなさん、1.9系統への移行はいまだに時期尚早だと思いますか?
正式リリースから一年以上経ったし、そろそろ良いかなーとも思っているんですが。
みなさんはいまだに何か不都合とかありますか。

362 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:42:20 ]
system("make")等でmakeを実行しつつログを保存したいのですが
良い方法はないでしょうか?IOクラスのパイプとかリダイレクトとか良く分からなくて…

text=`make`ではmakeの出力がリアルタイムで確認できず
system("make 2>&1 | tee hoge.txt")では、$?でmakeの戻り値を
取得できなくなってしまうので困ります(失敗したらexitしたいのです)。

363 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:52:42 ]
>>362
1.8 なら fork と exec で自分でがんばるしかないと思う。
1.9.1 なら spawn で、1.9.2 なら open3 で、できるかもしれない。

364 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 15:32:31 ]
spawn for legacy
github.com/ujihisa/spawn-for-legacy

365 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:33:45 ]
Structを要素とする2次元配列の消費メモリが大きくて困っています
500個 * 約13000個 * 要素数5の構造体(整数4つ+文字列)のデータで
2Gbyte以上消費します(Cで書けば150Mbyte程度で収まる)

Rubyではこの程度のメモリ消費は普通なのでしょうか?
あるいは使い方やコツ等が分かっていないのでしょうか?
環境はruby1.8.7 on MacOSXです

366 名前:362 mailto:sage [2010/04/04(日) 17:34:10 ]
>>363>>364
ありがとうございます。1.9.1だったので以下のようにしてみました。
こういうコードでいいのか分かりませんが、とりあえず目的は達成できました。

r,w = IO.pipe
pid = spawn("make", STDOUT=>w)
spawn("tee build.log", STDIN=>r)
ret = Process.waitpid2(pid)[1].to_i
w.close
if ret != 0
puts "[Error] (build) #{src}"
exit 1
end

367 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:40:08 ]
>Rubyではこの程度のメモリ消費は普通なのでしょうか?

普通

368 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 18:56:57 ]
ruby1.8.7がruby1.9系の良いところをフィードバックしたバージョン
rails3がruby1.9対応だからみんなそれまでは焦って動くことはなさそう。

メモリ消費でCと比べるのはrubyがかわいそう
javaだってcの10倍以上使っておかしくないんだぜ?
ruby1.9系が1.8系よりも良い所って
今のところガーベージコレクションが良いって記事しか読んだ事無いな。


369 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:54:00 ]
>>366
わざわざtee使って複数プロセスにするから面倒な事になるんだろ。

ret = IO.popen("make", "r") {|mk|
open("build.log", "w") {|log| IO.copy_stream(mk, log)}
Process.wait2(mk)[1]
}
unless ret.success?
abort "[Error] (build) #{src}"
end

IO.copy_streamがなければそのくらい作れ。




370 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:55:53 ]
あ、teeになってないな、これだと。
copy_streamの代わりにこうでもしてくれ。
mk.each{|line| log.puts(line); puts(line)}


371 名前:365 mailto:sage [2010/04/05(月) 17:58:32 ]
>>367,368
そうですか・・
倍程度かなと勝手に予想してましたが、そんなに甘くはないですね
ありがとうございました。

372 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 22:51:12 ]
書きやすくて実行しやすくてなおかつ投げ出したくならない程度の実行速度も求めた結果、
Ruby においてはメモリはすっげぇ大量に消費される

ご存知の通り、プログラムにおいて実行速度とメモリ使用量はトレードオフだ
どっちも良くしたい場合はアセンブラかせめて C で書か「ねばならない」

大量のデータを処理するのでなければ常識的な範囲内に収まるものではあるのだが、
大量のデータを処理することが事前にわかっているのなら Ruby を使わないほうがたぶん幸せ

373 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:17:25 ]
馬鹿な事いってんじゃないよ、
ムーアの法則知らないのか?
それは、10年前のpcの話だろ

374 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:22:18 ]
>>373
何言ってるの
いつの時代もCPUは100パーセント使用されるし
メモリはスワップにまで突っ込むし
HDDは90%まで埋まるもんだよ

10年前のデータ量を現在のマシンで取り扱うなら、君の言ってることは真だろうね

375 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:34:47 ]
ムーアの法則を知っていてパーキンソンの法則を知らないのはニワカ


376 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:35:36 ]
>>372
大量のデータでまったく同じ処理を何回もするならそうかも知れない
(大量の定義にもよるが)
あるいはとにかく速さを要求されるならそうかも知れん
ただ,大量のデータでもそんなに何度もしないならRubyの方が幸せかも知れん

たとえばRubyで処理に1日かかってアセンブラなら半分の時間でできるとしよう
coding/debug でその差以上得しなければ時間的にさえ得にならない
人件費ではさらに得にならない

coding のオーバーヘッド評価しないと意味が無いから状況に依りすぎる

有名な教訓を思い出すなぁ
"premature optimization is the root of all evil"

377 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:45:13 ]
>>374
いわゆるデスクトップ版Linuxを使ってるとその思いが強くなる

10年くらい前は「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
5年くらい前には「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
今年インストールしたLinuxでも「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思ってる

378 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:59:29 ]
>>377
いいかげんマシン買い換えようよ

379 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:18 ]
>>378
えっ




380 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 14:16:53 ]
今すぐtwmに変更するんだ!

381 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 15:39:04 ]
通年重いのはツールキット部分だな
起動するGUIアプリケーションが全部OpenMotif使うようになるとかなら歓迎だがそうでもあるまい

382 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:11:00 ]
Ruby 使うって時点で GTK だったりするのがアレだ罠






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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