2012年09月プログラム39: Ruby 初心者スレッド Part 50 (489) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【計測】LabVIEW相談室【制御】 (556)
【Intel】OpenCV総合スレ 4画素目【画像処理】 (323)
強いAI(人工知能)ver0.0.1 (962)
プログラム板 自治スレッド Part5 (782)
Androidアプリ制作依頼スレ (618)
Eclipse統合M33【Java/C++/Ruby/Python/Scala】 (495)

Ruby 初心者スレッド Part 50


1 :2012/07/29 〜 最終レス :2012/11/02
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ
前スレ
Ruby 初心者スレッド Part 49
http://toro.2ch.net/test/read.cgi/tech/1336507487/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/

2 :
【RoR】Ruby on Rails Part15
http://kohada.2ch.net/test/read.cgi/php/1341589839/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://toro.2ch.net/test/read.cgi/tech/1155031689/
書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け)
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」 (同上)
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」(脱初心者向け基礎テクニック集、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/
現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.3 の2系統が存在。
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。
1.8 用のスクリプトやライブラリは 1.9.3 では動作しないので注意。
1.9.3 用の教科書があるなら 1.9.3 から始めても構わない。
Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在。
http://rubyinstaller.org/downloads/
Rubyリファレンスマニュアル chm版リミックス
http://ruby.morphball.net/refm-remix.html

3 :
・いつものエディタとターミナルという普段着でお越し下さい
・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない
Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A.好きにしろ
※RubyやRuby使いに対する不満や愚痴などは本スレやバトロワスレなどをご利用下さい

4 :

$a = 6
puts "#{$a}" # => 6
puts "#$a" # => 6

$n = Struct.new(:x).new(4)
puts "#{$n.x}" # => 4
puts "#$n.x" # => #<struct x=4>.x
#             ↑はぁー?

5 :
Rubyが遅いというのはCと比べてとかの相対的な批判であって、
ハードウェアを考慮していない。
実は30年前のCと今のrubyでは今の方のrubyの方が早い。

6 :
Array#delete_if はあっても Array#grep が無いというのはFAQでしょうか?

7 :
前スレ最後のやつお願いします

8 :
>>6
irb> [1,2,3].grep(1)
=> [1]
irb> %w[1 2 3].grep(/1/)
=> ["1"]
オイェァ
ただし、あんまし使い出がないメソッドであることは否定しない
中途半端に使うと肝心なとこで裏切られるので(自業自得だが)、ふつうにfindとか使うのおすすめ

9 :
>>7
> はたらきたくないでござる
うっせーバカ

10 :
>>9
せめてどうググればサンプルなどが出てくるか教えていただけませんか?
回数指定をする繰り返しでもなく、このような例が見つからずに途方に暮れています

11 :
物凄く一般論としては、現在のread moreとかはJavaScriptやらCSSやらで実装されていることが非常に多い
単純な<a>リンクのクリックでは動作しないかもしれない
サイトが固定なのなら、本文ページのURLを自力で作成するのが妥当
全部で何ページあるのかとかはそりゃ自分でHtML読んで調べろ
もし単純な<a>リンクであることがわかってるのなら、そりゃその続きを読むリンクがそのページにまだあるかどうかで最終ページの判定すればいいんじゃないの
次のページがないのに次のページのリンクが有効であることはまずない

12 :
さらにもし、現時点でなにを言っているのかさっぱりわからないのなら、それはライブラリの問題ではなくRuby基礎の問題
Rubyの基礎がまったくできていないために、なにもできない状態になっている
ライブラリを使うことは一旦諦めて、Rubyの基礎の勉強をするといい

13 :
>>11
よくわかりました!ありがとうございます!

14 :
gemライブラリはRuby使い倒せるレベルが前提だからなあ
初心者をなんかどうにかして助けてくれるような機能があることはないよ

15 :
いま、Rubyに猪瀬知事が関心を持っている。
【五輪】 開会式、各国のなかで日本選手団だけが"謎の退場誘導"…猪瀬東京都副知事も関心寄せる
http://2ch-ranking.net/cache.php?thread=uni.2ch.net/newsplus/1343712277/&res=100

16 :
>>15
おもしろくないすねー

17 :
>>14
要望を適切に「分解」するのは人力で、それをやるために必要なのは基礎知識と経験だからねえ
今回で言うと「特定の語句があるまでURLの先を取得することを繰り返して本文を溜め込んで返すメソッド」みたいなものを求められても困る
…あっても面白そうな気はするが、デフォルトではたぶん年に1回くらいしか使えなさそうだ(自力で実装したほうが早い)

18 :
module M; Object; end #=> Object
モジュール内からトップレベルの定数が参照出来るのってなんでだっけ
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fvariables.html#prio
・トップレベルの定数定義はネストの外側とはみなされない
・モジュールだからancestorsにObjectが含まれるわけでもない

19 :
疑問を整理
・ トップレベルに定義されたメソッドと定数は Object に所属することになっている(これはとりあえずそういうものだと理解する)
・ が、モジュール M に対する M.ancestors は [M] だけを返し、Object が含まれていないので Object が見えないはずでは?
てきとーな回答
irb> module M; end
irb> p M.class
Module
irb> p M.class.superclass
Object
superclass の定数がインスタンス内から読めるのは当たり前
…という説明で納得して頂けますでしょうか
たぶんもっとわかりやすくて本質的な説明をしてくれる勇者様がきっと
irb> class SUPERCLASS; end
irb> class CLASS < SUPERCLASS; end
irb> o = CLASS.new
irb> SUPERCLASS.const_set(:CONST,"superclass!")
irb> p o.class
CLASS
irb> p o.class.superclass
SUPERCLASS
irb> class << o; p CONST; end
"superclass!"

20 :
あRほどそういうことか
ありがと

21 :
ようするにこういう状態ですよね
Moduleのインスタンスだってことを見落としてた
class Module < Object
def foo
# ここからObjectの定数が見える
end
end

22 :
>>21
そっすなー
マジカルさ加減で言うとトップレベルがObjectに行くほうがマジカルなんだけど、そこはとりあえずスレ的には丸覚えで

23 :
class Module
X = 0
def foo
X
end
end
module M; end
M.foo #=> 0
module M; X; end #=> NameError
あれ?

24 :
>>18
5番目 (Object)
class ×; end
class 3番目 < ×
 class 2番目 < ×
  class C < 4番目
   include 1番目
   p CONST
  end
 end
end
まずinclude/extendを探し、次にスクリプト上のネストを探し、さらに継承元を探し、最後にObjectクラスを探してCONSTがなかったらエラー
class A1; CONST="A!"
class B1; CONST="B!"
class C1; CONST="C!"; end
class C < C1; p CONST; end
end; end #=> "B!"
class A2; CONST="A!"
class B2;
class C2; CONST="C!"; end
class C < C2; p CONST; end
end; end #=> "A!"
class A3;
class B3;
class C3; CONST="C!"; end
class C < C3; p CONST; end
end; end #=> "C!"
これはそういう順番になるように作ってあるとしか言えない、でいいと思う

25 :
>>23
class Module
X=0
end
module M
p self #=> M
# M=Module.new なので、C::CONST や C.new.class::CONST は読めても C.new::CONST が読めない理屈と同様、Module::X はここから読めない
end
class << M
p self #=> #<Class:M>
# Classの継承元には Module が含まれているのでふつうに読めるというか、回答でこれを出した>>19が間違ってるんだな
end

26 :
結局>>18の見える理由はなんなんだろう
「例外的にそうなってます」でいいのか、それとも
「○○の範囲が見えて、その中にObjectも含まれています」みたいな説明が可能なのか
今の所こういう感じじゃないかと思ってるんだけど違うかな
module A; end とか class A; end の中では以下の順で探索
1 ネストを外側に向かって。ただしトップレベルは含まない
2 継承元に向かって探索(include したモジュールも継承扱い。つまりM.ancestors)
3 Objectから継承元に向かって探索(Object.ancestors。classの場合は2に含まれる)
>>18のページの記述は3が抜けてる?

27 :
あ、書き直し漏れがあった
× M.ancestors
○ A.ancestors

28 :
質問よろしいでしょうか。
a = gets.chomp
while a != "BYE"
puts "what?"
a = gets.chomp
end
このプログラムをwhat?と聞き返されるたびにBYEと入力して、の繰り返しで三回目にそのループから抜けられるようにするにはどうすればよいでしょうか?

29 :
>>28
カウンタをつける。

30 :
what?と聞かれる前(つまり初回)に入力したBYEもカウントしていいんかな?
そうならまずwhileループをbegin〜end while(ruby版do〜whileの構文)に書き換えてから全体を3.timesで囲むとか

31 :
n = 0
while n < 3
  puts "what?"
  a = gets.chomp
  n += 1 if a == "BYE"
end

32 :
>>29>>30>>31
アドバイスありがとうございます。改善してみました。
3.times{
a=gets.chomp
while a != "BYE"
puts "what?"
a=gets.chomp
end}
ただ、これだとBYEと入力したあとにwhat?と返してくれません。どうしたものでしょうか。
今のままだとBYEと入力しない限りはwhatと返す(BYEと返すとループから抜けてしまう)ようになっているので、
BYEと入力してもwhatと返すようにしたいです。それで三回連続でBYEと入力したときだけループから抜けるようにしたいのですが。
BYEと入力した回数をカウンタで数えるのでしょうか。調べてみてもよく分からなかったので教えていただけるとありがたいです。

33 :
>>32
> 三回連続でBYEと入力したときだけループから抜けるようにしたいのですが
連続でないと駄目なの?
だったら>>30は忘れて。これは
BYE
HELLO
BYE
BYE
みたいな入力で抜けることだけを想定して書いてるから
基本的には>>31みたいな感じで、BYE以外が入力されたらカウンタをリセットすればいいんじゃないかな

34 :

loop.each_with_object ["","",""] do | _, c |
  puts "what?"
  a = gets.chomp
  p a
  c << a
  c.shift
  break if c.join == "BYE"*3
end

35 :
ミスった これcycleでいいや
loop.each_with_object ["","",""] do | _, c |

[["","",""]].cycle do | c |

36 :
馬鹿には無理

37 :
>>34
joinしてからの判別だと、BY EBY EBYE みたいな入力でも通ってしまう

38 :
n = 0
while n < 3
  puts "what?"
  gets.chomp == "BYE" ? n += 1 : n = 0
end
標準ライブラリだとプロンプトを引数にとるメソッドはないんだっけ?
read_input("what?:") みたいなの

39 :
いろいろ考えてくださってありがとうございます!知識がなくて皆さんの言っていることは全然わかりませんが・・勉強します。
変化を加えてみました。
puts "Say \'bye\' to that old woman."
n=0
while n<3
a=gets.chomp
n += 1 if a=="BYE"
puts "What? I can\'t hear your voice well."
end
puts "OK."
これだと三回目のBYEを入力したあとにWhat? I can\'t hear your voice well.と表示されてしまいます。
三回目のBYEの後はOKだけ表示されるようにしたいのですが、どうすればよいでしょうか?

40 :
>>39
わかんないなら先進むのやめとけ
理解が先
わかんないのにさらに要素増やしてどうする

41 :
>>40
そうですね。たしかに基本的な用語くらいは理解するべきですよね。
私はこのサイト(http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/Chapter=Contents.html)
を見ていろいろなプログラムを書いてみることが上達への近道だと思ってやってるんですが、
1週間前に初めてプログラミング言語に触った初心者なのでよかったらよい勉強方法を教えていただけませんか?

42 :
>>41
他人に聞いてそのまま書くのは最初の時点では練習にならない
(クラスやメソッドをあらかた知ってる状態では写経も意味があるんだが)
自分で必要なものを考えて、それに必要な機能を自力で探して、それを必要なだけ自分で組み合わせて作れ
もし、プログラミングで作りたい・作らなければならないものが現時点でなにもないのなら、プログラミングのことはすっぱり忘れて他のことをしろ
プログラミングというものが「必要」となったときに、「っていうか自分で作ればいいのか」と思い出すだけで充分

43 :
暇だからプログラミングを始める、というのがおそらく最悪のパターンだな

44 :
>>37
puts "Say \'bye\' to that old woman." 
[["","",""]].cycle do | c |
  print "what?"
  a = gets.chomp
  p a
  c << a
  c.shift
  c[0] == "BYE" and
  c[1] == "BYE" and
  c[2] == "BYE" and break
  puts "What? I can\'t hear your voice well." 
end
puts "OK." 

45 :
printfのフォーマットについて質問なんですが
printf "_ %s" % [ 2 ]
こんな感じのをハッシュでやる方法ってありませんでしたか?
どこかでみたような気がしたんですが書き方を忘れてしまって
printf "_ %s" % { a: 4 }

46 :
printf "_ %{a}" % { a: 4 }

47 :
>>46
それです
ありがとうございます

48 :
あれ、%{sym} ってマニュアルに書いてなかったっけ?
puts "%{symbol}" % {:symbol => 'val'}
val
シンボルじゃないと動きません

49 :
メソッド内で特異クラスの宣言をしたいんですけど、
何か方法はありませんか?
def f
  n = 0
  class << n
  end
end
f

50 :
>>49
Fixnumオブジェクトは特異クラスを持てない
メソッド内で宣言すること自体は普通に出来る

51 :
>>50
そうなんですね
気づきませんでしたありがとうございます

52 :
テキストファイルの全行を配列に読み込みたい(改行文字は削除)場合、
こうやってるんですが、もっと簡単な書き方ありますか?
lines = open(filename) {|f|
f.readlines().map {|l| l.chomp}
}
getsとかeachとか使うにしてもchompは省略できないんですかね?

53 :
p open($0).read.split("\n")
p open($0).readlines.map(&:chomp)
p [*open($0)].map(&:chomp)

54 :
IO.foreach(filename).map{|l| l.chomp}

55 :
今ネット上の画像のurl情報からgtk2を用いてそのurlの元の画像を表示するビューアのようなものを作っているのですが、なぜか画像の表示に失敗してしまいます。
個人的に関数等を吟味したつもりなのですが、結局できませんでした。バイナリだけみたら、自前のデータとほとんど同じように取得できているように一見見えるのですが・・・ すみませんアドバイスお願いします
require "gtk2"
require "open-uri"
NAME = "view"
WINDOW_SIZE = [500, 500]
class Win < Gtk::Window
def initialize
super(NAME)
self.set_default_size(*WINDOW_SIZE)

self.signal_connect("delete_event") do
Gtk.main_quit
end
self.signal_connect("key-press-event") do |w, e|
if e.keyval == Gdk::Keyval::GDK_q
Gtk.main_quit
end
end
end
end
url= 'http://www.astroarts.jp/news/2005/05/09hubble_anniversary/m51.jpg'
image = Gtk::Image.new(open(url,"rb").read)
main_win = Win.new
main_win.add(image)
main_win.show_all
Gtk.main


56 :
追記ですが、url元の画像が作業中消されてしまってたらしいので
http://upload.wikimedia.org/wikipedia/en/thumb/6/6a/Topimage_(2ch).png/250px-Topimage_(2ch).png
でお願いします。こちらの画像でも結果は同じでした
書き込み文字数が足りなくて不親切な質問になってしまったので、一応プログラムの流れを説明します
1、windowを準備(qか罰ボタンで画面を終了するようにする)
2、urlを読み込む
3、url元の画像データをバイナリデータで読み込み、Imageメソッドに渡す(imageにデータを格納する)
4、imageのデータでウィンドウを作る
という流れで作っていたのですが・・・できませんでした

57 :
とりあえず画像はローカルに保存して使え
まさか実行するたびに何百回もサーバにアクセスして画像を取得していたわけではあるまい

58 :
やはりそれしか手段はありませんか・・・
まあ、rubyってそういうものですしね。参考になりました。ありがとうございました

59 :
tmpdirとかに保存すりゃいい

60 :
外部プログラム socat との組み合わせで file descriptor を介して通信したいです。
socat EXEC:./te.rb,fdin=4,fdout=5 /dev/ttyS0 のように
perl では、
use IO::Handle; use IO::File
$fdr = IO::Handle->new()
$fdw = IO::Handle->new()
$fdw->fdopen(4, "w")
$fdr->fdopen(5, "r")
のように書くと実現できるですが、ruby の場合、IO::Handle->new() を実現するには
どうしたらよいでしょうか。いきなり IO.new(4, "w") とすると Bad file descriptor で
Error になってしまいます

61 :
使ったことないけど IO.for_fd ってのがあるようだ。

62 :
あ、IO.new が整数を第1引数に受け取った時の動作と一緒か。

63 :
perlでは未オープンのfdを構わず使用できてしまうのか。

64 :
socat知らないんでshでこんな事してみたけど普通にオープン出来るから
socatの動作の方がおかしいんじゃないかな
--hoge.rb
fd4 = IO.open(4)
fd5 = IO.open(5,'w')
fd5.puts(fd4.read)
--hofe.in
hello world
--shで実行
ruby hoge.rb 4<hoge.in 5>hoge.out #=> hoge.outにhello worldが出力される

65 :
>63, >64 を見て自分の勘違いにきづきました。
perl が error をはかないので勘違いしてました。
単独動作で error をはくだけで、socat の引数で
ruby script を与えれば動いていました。
socat 側でdescriptor 作って、 ruby の script を
call しているから、ruby 側は既に存在している fd を
割り当てるだけでよかったんですね。
コメントいただいた方々ありがとうございました。

66 :
今更RubyにStruct なんてのがあるのを知ったクチなのですが、
このクラスの上手な使い方が思いつきません(ずっとclassを使ってやってたので)
使用例の参考になるコードなどありますでしょうか?

67 :
複数のデータの組をまとめて扱いたい程度のときに便利。
initializeと読み書きアクセサしかないようなクラスを作るイメージ。
LogEntry = Struct.new(:issuer, :severity, :timestamp, :message)
定型的なアクセサの生成をStructに任せ、返ってきた
無名クラスを継承して振るまい(メソッド)だけ追加する例。
class Location < Struct.new(:latitude, :longitude, :altitude)
  def country
  end
end


68 :
>>67のように迂闊に使うとめんどくさいことになることは異論を待たない
initialize とアクセサメソッドが欲しいのならアクセサメソッドだけ定義しろ
class Location
attr_accessor :latitude :longitude :altitude
def country
end
end
使い道が思いつかない、または、他の手段で代替可能なのなら、絶対に使うべきではないクラス

69 :
説得力皆無です

70 :
>>67
はっああああああ??
それやると、selfからみれなくなるけどいいの????
複雑になるだけじゃないの??この動作知ってた?知ってた?ネェ知ってたー?WWW知らなかったのかな!!!!wwwwwっうひゃwwwっうぇwwwww
class Location < Struct.new(:latitude, :longitude, :altitude)
  attr_accessor :x
  def initialize
    @x = 6
  end
  def country
     self.latitude = 3
   p self.latitude # => 2
   p @latitude # => nil
   p self.x # => 6
   p @x # => 6
   
  end
end 
Location.new.country

71 :
すみません、値を間違えました
p self.latitude # => 2  は  p self.latitude # => 3 です

Structの活用は、メソッド内とかでちょっと構造体やらクラスっぽいのが必要になった時の
定義する時の文字数の違いとか、そのくらいだと思われる
def func
  a = Struct.new(:x,:y).new
  p a.x = 2
  a = Class.new { attr_accessor :x,:y }.new
  p a.x = 4
end
func


72 :
HashやClassだと、後から任意のものを突っ込めすぎて自由度が高すぎる、って時に使う感じ?

73 :
そんな感じじゃね
基本classでいいよ

74 :
Structは「Struct使って便利になった」と思うことよりも「やっぱStructにするんじゃなかった」と思うことのほうが多い
最初からがっつり仕様が固まってるプロジェクトでおもむろに使うデータ構造だと思う

75 :
あるベンチでは、RubyのStructはHashよりも遅いという結果が出てたけど、
こうなると利用シーンがよく分からないね

76 :
というか、Rubyのデータ構造の中ではHashが飛び抜けて速い(配列よりも速い)
「Hashのようなもの」を自前で実装した場合は、Hashそのものよりも格段に遅い
Hashに移譲したとしても、移譲自体が遅いのでやっぱり遅い

77 :
それはHash引数とかに使うからかなり頑張ったんじゃ・・・

78 :
質問です
オブジェクトに追加した特異メソッドの削除を行いたいと思ったんですけど
instance_eval→undefしか方法が見つかりませんでした、
remove_methodやundef_methodはないみたいなんですけど特異メソッドの削除の方法ってこれしかないですか?
a = Object.new
def a.f
  p 2
end
a.f
a.instance_eval do
  undef_method  :f rescue p "err0"
  remove_method :f rescue p "err1"
  undef :f
end
a.f rescue p "err2"

79 :
>>78
a = Object.new
def a.a ; p :a_a ; end
def a.b ; p :a_b ; end
a.a
a.b
class << a
remove_method :a
undef_method :b
end
a.a rescue p :no_a
a.b rescue p :no_b

80 :
>>79
見落としていました!!
ありがとうございます!

81 :
これわからないです誰かよろしくお願いします
以下で与えられるフィボナッチ数anを、入力したnに対して計算して表示するプログラムをtext.rbで保存して実行してください.
A₀=1,a₁=1,an=an−1+an−₂

82 :
>>81
よっしゃ実行した次はなにすればいい? って返せ

83 :
>>82


84 :
プログラムの一番最後の=endと書いた行でsyntax errorが出て困ってます
うまく動いていたプログラムの中身をまるまるコピー
→新規作成でまるまる貼り付け
→名前を付けて保存
とやったらエラーが出るようになりました
調べたら改行の文字コードの問題っぽい気がするのですがどうやって直せば良いのでしょうか
RDE使ってます

85 :
>>84
全然ちがうところ間違えてました
スルーしてください

86 :
macrubyの質問もこちらでいいのでしょうか?
当方、macrubyにてプログラムをくんでいますが、
どうやったら終了時に実行されるメソッドを記述できるのかわかりません。
起動時に<def applicationDidFinishLaunching(a_notification)〜>が実行されるように、
終了時にもなにか構文みたいなものがあると思うのですが、ご存知の方いらっしゃいますか?
<def applicationWillTerminate(notification)>とか
<def windowWillClose(notification)>とかを試してみましたが、ピクリとも動きません・・・


87 :
>>86
新Mac板にも前はRubyスレあった気がしたんだが…今見たら見付からないな
Googleで「applicationDidFinishLaunching site:developer.apple.com」でググったら
それっぽい資料がいくつかヒットするけど、どれかに無い?Terminateとか付いてるのあるからその辺りに

88 :
>>87
レスありがとうございます! なんだかんだでできました!
def applicationWillTerminate(sender)で動きました!
もう一ヶ月くらい煮詰まっていたから嬉しい! 本当にありがとうございました!

89 :
encodeでUTF8からSJISに変換するときに
例えば全角チルダとか割り当ての無い文字があるとエラーになりますがその文字だけを無視するにはどうすればいいでしょうか?

90 :
>>89
:undef => :replace, :replace => ''

91 :
>>90
ありがとうございます

92 :
macRubyって知らないんだけど
at_exit { } とか END { } 動かないの?

93 :
>>92
xcodeでマックアプリを組んでいますが、残念ながら動かないです。
多少のobject-cの知識がないとmacrubyは厳しいです。
でも見た目のいいアプリがrubyで作れるのは最高です!

94 :
左様か

95 :
質問なんですけど
Enumeratorを継承したクラスの使い方ってこれであってますか?
http://ideone.com/5m5qa
やりたいことは、
Enumerator.new内でまわしてるオブジェクトに外部から
>p y.cc.x
こんな感じにアクセスしたいって事なんですけど

なんかsuperって引数が暗黙的に渡される?っぽいじゃないですか
けどEnumerator.newのinitializeは引数が渡されるとブロックが評価されてない?ので
superとは別にEnumerator.newを呼び出してEnumを作ってます
一応動いてますけど、二重になってる気がして不安なんですけど

96 :
内部動作意味不明ですけど
ブロックじゃなくてlambdaで渡したらうごきましたもういいです
class B < Enumerator
  def initialize h
    a = super do|y| loop{ y.yield 1 } end
    p a.next # => 5
    a = super &(lambda do|y| loop{ y.yield 1 } end)
    p a.next # => 1
  end
end
B.new [5,6,7]

97 :
質問です
:aaaa
ってやると
p Symbol.all_symbols
ここに追加されますけど、
p Symbol.all_symbols.size
1_000_000_0.times do|i| :"#{i}" end
p Symbol.all_symbols.size
このくらい生成してやると
`intern': symbol table overflow (symbol 2095337) (RuntimeError)
こうなる事が分かりました
いらなくなったシンボルを削除する方法ってあるんでしょうか?

98 :
無理っぽいですね
シンボルは大事に使っていくことにします

99 :
Cursesと、Term::ANSIColor for Rubyを使って、コンソールでシンタックスハイライトができるテキストエディタを目指し作っているのですが、以下のリポジトリのmain.rbを実行すると、最初の文字「1」が黒字になるというバグが発生します。
このプログラム(main.rb)は、README.rbを読み込んで、出力するものです。
https://github.com/217/VMacs
このバグに2時間ほど悩んだのですが、どうにも解決できませんでした。
ライブラリの相性の問題なのでしょうか?
わかる方がいらっしゃったら、教えてください。

100 :
>>99
Linuxでも確認。このケースでは、setposの後にrefresh呼び出しで解消できるけど、
cursesを使う時は、表示が乱れるので標準出力へのprintは避けた方が無難。
cursesの作法で色指定するといいよ。

101 :
クラスメソッドはドットで呼んだほうがいいと思う
あれは「クラスに属する関数なら::で呼ぶのがオブジェクト指向言語の常識」という、
ローカル実装を普遍定義と勘違いした痛い面倒な人を飼い馴らすための時代遅れの機能

102 :
公式では特定の言語のユーザーからの移行をスムーズにするため、みたいなマイルドな表現をしてたのになんでそうはっきり言うのん

103 :
移行が目的じゃなかった、経験者向けだった
まあ、どっちも似たようなもんだけど
Rubyでの呼び方が絶対的にタダシイわけではないけれど、
Rubyではそう使うということになってるんだから、Rubyにおいては極力そのように使ってほしいよね

104 :
ドット呼び出しを推奨する理由は、パーサーの特殊な振る舞いを回避する為。
:: だと大文字で始まる名前が定数と解釈されるので、メソッドと解釈させるには関数呼び出しの () が必要になる。
. で記述すると一貫して () を省略出来る。

105 :
>>100
とりあえずsetposの後にrefresh呼び出したら動きました。
Cursesで色指定する事が出来るのを知りませんでした。なんとか動きました。
ありがとうございました。


106 :
今年のクリスマスプレゼントは何でしょうか?

107 :
intgerが入っているarrayがあるのですが、その要素を全て加算するには、
やはり以下のように外部変数を置くしかないのでしょうか?
 v = 0; arr.map{ |i| v+=i }; return v

108 :
外部というか、どっかに一時記憶用の変数は必要
irb> puts [1,2,3].inject{|r,x| r +=x}
6
それがスコープで消えるかどうかの違いでしかない

109 :
>>107
単純に足すだけならこれでもk
(1..10).to_a.inject(:+)
#=> 55

110 :
畳み込みを使っていいなら
[1, 2, 3].inject {|a, b| a + b }
ではダメなん?

111 :
Array#sumは欲しい欲しい言われてて、議論を煮詰めると「メソッドを呼べればいい」「+でなくてもいい」に必ずなって、んで結局>>109になる
現在のRubyにおける一般的最短は arr.inject(:+)
中身的には>>110
変数内部効率ウンタラを求めてるんじゃなくて単に見かけで変数がなければいいだけだと思うので、Ruby1.9でarr.inject(:+)するかRuby1.8/1.9で>>108しろ

112 :
Rubyじゃなくてプログラミングの問題かもしれませんがRubyでやってるのでここで質問します
操作Aのあと操作Cを行う,ということを繰り返したいのですが,
もし操作Cでエラーが出る場合はAとCの間に操作Bを行わなければなりません
操作A
while
begin 操作C
rescue 操作Bやってから操作C


113 :
すいません途中で送信してしましました
今書いているプログラムが
操作A
while
 begin 操作C
 rescue 操作Bやってから操作C
 end
さらにCのあとにやりたいこと
end

114 :
度々すみません…orz
>>113のように書いているのですが,操作A→Cだけで済むようなときにエラーが出てしまいます
こういうパターンって例外処理ではないのでしょうか?

115 :
begin
# 操作C
next ########################NEXT#########################
rescue
# 操作Bやってから操作C
end
# さらにCのあとにやりたいこと

116 :
>>114
ちょっと話を整理して欲しい所
操作Cを実行せずに、操作Cでエラーが出るかは分からないのだから
「もし操作Cでエラーが出たら、操作Cの前に操作Bをやる」
という制御の流れは実現不可能だ
基本的な制御構造はA→C→A→C→……だと思われるので
while 条件
 操作A
 操作C
end
でいいと思う。ここにどう操作Bを足すかは、やりたいことによる

117 :
>>116
ありがとうございます
今回は操作Bを行うきっかけが「Cができるかできないか」としか書けないので
例外を使う方法で考えてみました
なのでBは例外的に必要というよりは,「CができないならBをつかう」という一種の選択肢なのです
2回に1回くらいBを使わなければならないので...

118 :
後出し後出し後出し後出し後出し後出し後出し
本当にそうとしか表現できないのなら、なにをしたいのか本当は自分でもわかっていない
>>112>>117の時点でまったく別のことを喋っている
自分でもわかっていない粒度・抽象度のものを私たちが理解して回答してあげることはできない
ということで、いっそ全部喋るか、適切な粒度にざくざく切るという行為に時間かけろ
Rubyには条件分岐とループと例外によるジャンプしかないんだから

119 :
初心者は例外使うなて

120 :
メソッドは放っておいても何らかの値を返し、nilが偽として動作し、条件のcond部分での変数代入が日常でしかもcaseが賢いRubyでは
「例外を使うべき例外的場面」なんてのは例外使いまくって火傷どころか焼死しないとピンと来ない
公開ライブラリでないのなら、初心者はぜひ例外使いまくって泣いてください

121 :
>>114
rescue節で実行している操作Cで出た例外を捕捉する記述がないから
begin
 操作C
rescue
 操作B
 retry # beginに戻る
end

122 :
>>117
マニュアルの制御構造を参照してね。
begin
  〜
rescue ErrorA
  ErrorA例外時の処理
rescue
  StandardErrorとサブクラス例外時の処理
else
  例外が発生しなかった時の処理
ensure
  必ず実行する処理
end

123 :
>caseが賢いRuby
else if を使いこなせない馬鹿のための syntax sugar

124 :
elsif

125 :
case proc使ってないやつなんていんの?
どんな発展途上国からおこしの技術者だよ

126 :
10101100000100000000101000000001 を "172.16.10.1" にしたいのですが、
> p IPAddr.new("10101100000100000000101000000001")
#<IPAddr: IPv6:1010:1100:0001:0000:0000:1010:0000:0001:0000:0000:0000:0000:0000:0000:0000/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
と解釈されてしまいます。自分でunpackして作るしかないのでしょうかね。。

127 :
>>> socket.inet_ntoa(struct.pack('i4', socket.htonl(int('10101100000100000000101000000001', 2))))
'172.16.10.1'

128 :
>>126
それだとエラーになったので、素直に2進数で渡してみたよ。
ruby1.9.1 -e "require 'ipaddr';p IPAddr.new(0b10101100000100000000101000000001,Socket::AF_INET).to_s;"
"172.16.10.1"

129 :
>>> "10101100000100000000101000000001".scan(/\d{8}/).map{|x|x.to_i(2)}*"."
'172.16.10.1'

130 :
ありがとうございます、参考にしながらこうやりました。
a = "10101100000100000000101000000001"
p IPAddr.new(a.to_i(2) ,Socket::AF_INET).to_s
 => "172.16.10.1"

131 :
俺の目には>>118が読解力なさ杉にしか見えないが

132 :
一行目からして電波なんだから触らないでおけ

133 :
フラミンゴ2羽犠牲「申し訳ない」 旭川市長陳謝 2012/8/23 19:43
http://www.nikkei.com/article/DGXNASDG2303P_T20C12A8CC1000/
 北海道旭川市の西川将人市長は23日の記者会見で、市が運営する旭山動物園から逃げた
ヨーロッパフラミンゴの捕獲作業で、フラミンゴをおびき寄せるために用意したおとり1羽が死に、
1羽が行方不明になったことを陳謝した。
 市長は「フラミンゴは1羽25万〜30万円。市民に損害を与えて申し訳ない。
犠牲になったフラミンゴにも申し訳ないと思っている」と述べた。
 2羽のフラミンゴはキタキツネに襲われたとみられ、動物園には電話で苦情が約50件寄せられた。
市長は「捕獲して戻すことが重要な役割だ」として捕獲作業を継続する方針を示した。
同時に「寒くなれば南に飛んでしまう可能性があるので、なるべく早く連れ戻したい」と述べた。
 紋別市・コムケ湖で今月17〜18日に行われた動物園による捕獲作業では、逃げたフラミンゴの捕獲に失敗し、
おとりで用意した4羽のうち2羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕

134 :
1〜20までの数がランダムに並んだ配列を出力したいんですがどのようにすれば、うまくいくでしょう?
Scl = 20
num = [rand(Scl) + 1]
while num.size <= Scl
 elm = rand(Scl) + 1
 num.each {|i|
  if
   num[i] != elm
   num << elm
  end
 }
 puts "num_size = #{num.size}"
end
print num
これだと、同じ数が並ぶわ、配列のサイズもバラバラで全くうまくいきません

135 :
(1..20).to_a.shuffle

136 :
おぉ、1行で済むとは・・・
ただ、1.9では .to_a は使えない様なので arry.shuffle で良さそうですね 
ありがとうございました。

137 :
(1..20).sort_by{rand}
とか考えたけど、shuffle1つで済むのか
やっぱりArrayとかEnumerableとかのメソッドは流し見して覚えておくべきだね

138 :
暗記って
1日10個ずつ確実に覚えるよりも
1日100個を流し読みしたほうが効率いいんだよ

139 :
rescueで特定の例外を捕捉したらwarnでメッセージを出力しているのですが、cronで実行した時のみwarnの出力を抑制するなんてできますか?
crontabの設定で対象のrubyプログラムの標準出力のみ/dev/nullにリダイレクトしていますが、rescueで捕捉したエラーについてはメールされるのを防ぎたいです。
warnでエラーを確認したいのは直接実行する時だけで、cron実行時は想定していないエラーのみ確認したいのです。

140 :
>>139
ruby のコマンドラインオプションに -W0 を追加する

141 :
>>140
なるほど!ありがとうございます。

142 :
ruby1.9にちゃんと付いてきているIDEってどのへんでしょうか?
Netbeansは打ち切られていて。。

143 :
RubyMineとか。

144 :
>>142
emacsのruby-modeって、rubyの方がサポートしてるんじゃなかった?

145 :
2つの文章の類似度を判定するサンプルプログラムありませんか?
Ruby1.8でMeCabを使おうと思っているのですがすでにサンプルプログラム落ちてたりしませんかね…

146 :
これこれこういう数式でこう表現されるようなことをプログラムでやりたい、というような言い方なら誰か教えてくれるかも

147 :
>>145
MeCabと言ったら日本語解析しかないだろう。出てくる語句の頻度で判定するなんて言うまでもなく。
あ、質問者じゃないから。
migemoならプログラムから使ったことあったな。そういえばあの超便利ソフトもとはrubyか。

148 :
なんてこった…CPANモジュールをnode.jsで動かしてしまうライブラリ「node-perl」
http://blog.64p.org/entry/2012/08/28/131329
rubyからCPANモジュールを動かすことは技術的に可能?

149 :
>>147の前半は>>146宛。

150 :
>>148
jsで、perlインタプリタを作るまでやるか!?
と思ったけどc++で書かれ、実体はバイナリなのね。

151 :
>>145
意味的な話じゃなくて字面上の類似なら文字列の距離として
定義されているものを使えるように思う。
レーベンシュタイン距離とかハミング距離とか。

152 :
>>145
こういうこと?
def norm doc
sum = 0.0
doc.each_value{|v| sum += v * v}
Math.sqrt(sum)
end
def cosine_similarity doc1,doc2
sum = 0.0
(doc1.keys & doc2.keys).each {|k| sum += doc1[k] * doc2[k]}
sum / (norm(doc1) * norm(doc2))
end
doc1 = {"私" => 1, "太郎" => 1} # 単語の頻度
doc2 = {"私" => 1, "花子" => 1}
puts cosine_similarity doc1,doc2

153 :
>>145
参考までに。
Octopress/JekyllでGroongaによる類似文書検索機能を使う
http://arika.org/2012/07/28/jekyll-and-groonga-similar-search/

154 :
そういえばmecab-rubyてどこいったの?

155 :
「ruby2.0がかなりすごいらしい」ってコピペして回ってるのが居たんですが、1.9と比べて何が凄いんですか?

156 :
下のような、module A と Class C を準備したのですが、同じI/F の module B も準備して
Class C を共通で使いたくなりました。file C.rb で require "A" を "B" 、A::hoge を B::hoge
にするだけですが、class C (file C.rb) は1つのままにしたいです。さらに、Class C を
インスタンスするときにA,B を指示する I/F にはしたくないです。module A,B の wrapper を
用意してclass C はそれを使い、module の切り替えは global チックに行いたいのですが、
その wrapperをどのように記述したらよいかが、わかりません。。

file A.rb
module A
module_function
def hoge(x,y)
end
end
file B.rb
module B
module_function
def hoge(x,y)
end
end
file C.rb
require "A"
class C
def initilize(z)
@x = z
def hoge(w)
A::hoge(@x,w)
end
end

157 :
>>156
AとBを同時に使う必要が無いのであれば
AとBはクラス名を同じにしてそれぞれでrequire 'C'すればいんでね
そうでないなら例えばこんなん
class C
def self.m=(mod) ; @m = mod ; end
def self.m ; @m ; end
def hoge(w) ; self.class.m::hoge(@x,w) ; end
end
C.m = A

158 :
module A
  module_function
  def hoge x , y
    p :a
  end
end
module B
  module_function
  def hoge x , y
    p :b
  end
end
class C
  class << self
    attr_accessor :mod
  end
  def initialize z
    @x = z
  end
  def hoge w
    self.class.mod.method(__method__).call @x , w
  end
end
C.mod = B
c = C.new 2
c.hoge 4

159 :
>>167, >>158 さん、ありがとうございます。
やりたいことができました。本当に助かりました
動的なケースと静的なケースどちらも教えて
いただけて感激です。
確かに静的なケースでは、異なるファイル名で
準備しておいて require しながら起動すれば、
自然に使えますね。依存関係でこり固まっていた
思考が溶けた気分です。


160 :
>>167 でなくて、>>157 さんの間違いです。すみません

161 :
>>137
> (1..20).sort_by{rand}
それ、考えなしの安直プログラマーが高確率でやらかす、典型的なやってはいけないアンチパターンだな。
これは偏りが発生するのでアウト。確率論の問題としては良い題材だから、理由は自分で考えてみるといい。
ぐぐるとこれと同じパターンをやらかす人間が多くて唖然とするが。

162 :
>>161
shuffleが無かった時代に、偏ってもいいからサクッと書きたい用途でよく使われてたんだよ
当時から「ちゃんと混ぜるならちゃんと書く」という風に知られてた

163 :
そもそも言うほど偏り有るの?
sort_by{rand(20)} とか sort{rand-0.5} とかやるならともかく

164 :
irb> a=(1..6).to_a; r=Hash.new{|h,k| k=0}; 1000000.times{r[a.shuffle] +=1}; d=r.values; p Math::sqrt(d.inject(0){|x,y| x+y*y}/d.size-(d.inject(0){|x,y| x+y}/d.size)**2)
62.6418390534633
irb> a=(1..6).to_a; r=Hash.new{|h,k| k=0}; 1000000.times{r[a.sort_by{rand}] +=1}; d=r.values; p Math::sqrt(d.inject(0){|x,y| x+y*y}/d.size-(d.inject(0){|x,y| x+y}/d.size)**2)
61.37589103222861
うん、たいして変わらんですな

165 :
1:def hoge
2:    a = [1,2,3,4,5]
3:
4:    a.each do |b|; c = b; end
5:    p c
6:end
これだとcのスコープが4行目内だけになってエラーになりますが
そこで3行目に
 c = nil
と入れているんですがこれでいいでしょうか?
もっとスマートな方法はないでしょうか

166 :
eachの代わりにfor b in a; c = b; end

167 :
>>165
スコープがそのようになっているんだから、そのように書くのがいちばんスマートだと思うがなにか問題ある?

168 :
1:def hoge
2:    a = [1,2,3,4,5]
3:    p a.last
6:end

169 :
意味把握した
変数宣言がイヤだって事か
元コードみないとわからんけど、eachじゃなくてinjectとかeach_with_objectでやって
そのイテレータの戻り値をcに格納すれば

170 :
>>161
このイディオムはsort_byだから問題ないんだろうと思ってたが

171 :
161はどんなドヤ顔で言ってんだろうw
いるよねー、ランダムのラの字を行った瞬間に脊髄反射で食って掛かるひとw

172 :
>>167-169
ありがとうございます
すいません
説明不足でしたがブロック内で初めて変数を使うとスコープがそのブロック内になってしまうので
>>165のようにブロックの前で変数を宣言するのか(グローバル変数は使うべきではないですよね)もっといい方法があるのか知りたかったということです
>>168>>169
なるほどこれは便利ですね

173 :
ちなみに>>161が言いたかったであろう偏るようなパターンってどんなの?
>>137は偏るの?

174 :
>>173
>>163のパターンは偏るはず
sort_by{rand}はほとんど偏らないけどshuffleよりかなり重い

175 :
module MyModule
def a; p "this is method a"; end
end
class MyClass
include MyModule
def b; p "this is method b"; end
a rescue p "no such method"
b rescue p "no such method"
end
MyClass.new
これでメソッドaとbがないと怒られてしまうのは何ででしょう?
クラス定義の中ではレシーバselfはカレントクラスであるMyClassを参照するはずなのでメソッドa,bを呼べるのでは、と思ったのですが…

176 :
ものすごくおおざっぱに言うと、ふつうのincludeは引数モジュールのメソッドをインスタンスメソッドとして追加する
そして、インスタンスメソッドはクラス定義のclass...endの文脈では呼べない
class C
def a; end
a
end
が3行目でNoMethodError起こすのと同じ理屈
これで納得しない場合はincludeとはなんぞやという話になる

177 :
ゴミみたいなスコープだよね

178 :
>>176
調べてみたりしてなんとなくincludeの役割がわかりましたが、次のコードが動かない理由がわからないです
module MyModule
def self.a; p "this is method a"; end
end
class MyClass
include MyModule
end
MyClass.a
aメソッドをクラスメソッドではなくインスタンスメソッドとして定義してextendしたら MyClass.a で実行できることは確認しました
includeもextendもクラスメソッドは相手にせず、インスタンスメソッドしか見ないという事なんでしょうか

179 :
Rubyに本来クラスメソッドはない。
あるのはクラスインスタンスのインスタンスメソッド。
あとはincludeとextendが何をするものかを考えれ。

180 :
>>179
横から勝手に訂正させてもらうね
×あるのはクラスインスタンスのインスタンスメソッド。
○あるのはクラスインスタンスの特異メソッド。

181 :
Rubyに存在するのはインスタンスメソッドだけ、というのは昔俺も思ってた
普段考えるぶんにはそれでもいいし統一概念ですっきりするんだけど、でも本当はやっぱり違う…

182 :
モジュールをあるクラスにインクルードして使う場合、
モジュール側のメソッド内でそのクラスのインスタンス変数にアクセスするのって普通ですか?

183 :
そのくらいはいいけど
個人的な意見でいえばそこら辺明らかに仕様がイかれてるから
バージョンアップ時に動かないソース作りたくなければ
あまりこだわったことやらない方がいいと俺様は思う

184 :
>>182
システム上および慣習上の問題はないよ
特定のクラス専用の実装べったりのmix-inだね
だいたいにおいてあとあと後悔したりもするが、それが起こらない限りは便利だろう

185 :
>>178
def には役目が2つある
ひとつは、その文脈でのメソッドの定義(予約)
module M
def a; end
end
class C
def b; end
end
これらはメソッドの定義行為であって、その時点で実際にメソッドが作られるわけではない
(include先が)newしたときに、生成オブジェクトに対してインスタンスメソッドとしてどさっと追加される
そしてもうひとつ、既に存在する特定のオブジェクトに対する特異メソッドの追加
def obj.s; end
これは特異メソッドの追加で、オブジェクトobjに対して即座に特異メソッドsを追加する
module MyModule
def self.a; p "this is method a"; end
end
でのdefはその文脈におけるselfの指すオブジェクト(ModuleクラスのオブジェクトMyModule)に特異メソッドを追加する行為であって、クラスやモジュールにメソッドを定義することではない
モジュールオブジェクトMyModuleは定義されたメソッドを持ってないので、includeしようがextendしようがメソッドは使えない

186 :
質問です
初歩的すぎるかもしれませんm(_ _)m
1.9だとerbコマンドは使えないんでしょうか?
参考にしている本は1.8前提だったので;
USB(F:)に入れたためコマンドプロントから入力している状況です
F:\>ruby erb hello.txt.erb
と入力すると、ファイルかディレクトリが見つかりませんというメッセージが出ます
hello.txt.erbというファイルはFドライブに入れています
わかる方教えて頂きたいです

187 :
erbは添付されてるはずだよ
実行できないとしたらそれはcmd.exeが実行ファイルを見つけられないだけだろう
なに言ってるかわからないのなら、フォルダ/ディレクトリと実行パスの勉強をするといい
どうせこれからもずっと必要になる知識だ

188 :
素早いお返事ありがとうございます!!!
回答を頂けて安心しました
勉強します!

189 :
ruby.exeがある場所にerb.batもありませんか?
あれば
ruby erb ではなくてerbだけで実行できるはずですが

190 :
ありがとうございます
やはり下位のものを上位に持っていくことは極力避けるべきですかね
まだ歴が浅いので、システム面や慣習に関する言及は助かります

191 :
>>190
だから管理できる範囲であるならどうでもいいって
ユーザーがincludeして使うモジュールを作ってるわけでも、ファイル数が30超えてるめんどくさいライブラリを作ってるわけでもあるまい
あるオブジェクトのメソッドがクラス定義に書いてあったものかモジュールで追加されたものかを気にする人はまずいない
ほんとにそっちのほうがプログラミングに便利だと確信するのなら、メソッド定義をごっそりモジュールに移すといい

192 :

def f
p 3
end
lambda(&f).call
これを実行すると
:6:in `<main>': wrong argument type Fixnum (expected Proc) (TypeError)
と、でるんですけど動作原理が良く分かりません
どうなっているんでしょうか?


193 :
まずfが普通に評価されて3になる。つまりこれと同じ
lambda(&3).call
3はProcじゃないしto_procも定義されてないからlambda(&3)でエラー

194 :
試したかったことって要は __send__(:f) とか self.method(:f).call とかでいい?

195 :
どちらがエレガントで負荷的にも良いか質問です。
hogeというメソッドを何度も実行したいとき、
1000.times { B.hoge }
というよりも、
app = A.new
1000.times { app.hoge }
とやるほうがいいのでしょうか?
class A
def initialize
...
end
def hoge
...
end
end
class B
def self.hoge
...
end
end

196 :
100万回連続実行したときに0.001秒の遅れが数億円の損害になるような環境であって、
なおかつどうしてもRubyでやらなければ家族がどうなるかわからないぞと脅されているのなら、俺なら前者で書く
なぜなら、定数Bとローカル変数appを比べたとき、絶対的に定数Bのほうが参照が速いから
そうでないのなら意味的に妥当なほうでやるといい
このためにクラスメソッドっぽくない使い方するクラスメソッドをわざわざ作るようなことはしない

197 :
「メソッドが使いたいだけであって、オブジェクト作りたいわけじゃないんだよね」という感覚はないでもないことがないでもない
もしそうならクラスメソッドとかの出番だろうか

198 :
あとあとめんどくさくないことが多いのはAのパターンだと思う
効率とエレガントさに関してはどっちも変わらん

199 :
家族を見殺しにしてでも、cで書くよ

200 :
ruby-openglが、ruby 1.9.3 でインストできない。
1.8.7使えってことかよ。

201 :
>>200
ttp://ruby-opengl.rubyforge.org/build_install.html
まあ最新が2009年なので現在の環境ではどーやっても動作しない可能性はないでもない

202 :
196-199
スピードと使い勝手の勘所、
よくわかりました、あざっす!

203 :
Bは毎回initializeする訳ですか?

204 :
Ruby が class B ... end を最初に見かけたときに1度だけ B = Class.new 相当をしてる
メソッドを1回使いたいだけなのに毎回オブジェクトを作るのはなんかアレだということが起こらないという点でもエコ
っていうか状態を保持利用しない単発野良メソッドでいいならモジュールのクラスメソッドでいい
module M
def M.mes
end
end
M.mes
M.mes
M.mes

205 :
mtime, atimeを変更するメソッドってありますか?unixでいうと
touch -t yymmddみたいなものです。
File.mtime File.atimeはただ取得するだけみたいなのです。
system(touch -t yymmdd)するしかないですか?

206 :
あ,すいません。「特定の日付」に変更という意味です。

207 :
utime

208 :
>>207
ありがとうございました。

209 :
どういたしまして

210 :
Ruby始めようと思っていきなりプログラミング言語Ruby買ったけどちょっと難しいな
C、Java、Pythonは経験あるんだが

211 :
言語が平易だからといって言語本体の解説書が平易だとは限らない
素直に入門書を手に取るべきだったな

212 :
つ ttp://i.loveruby.net/ja/rhg/

213 :
>>210
あれをいきなりやるのは難しいと思う
『初めてのRuby』辺りで書き方をつかむと、言語仕様との落差にびっくりする
大部分のケースでは平易に書ける一方で
細部をつつくといくらでもカオスになるのがRuby

214 :
Windows上のあるフォルダが隠し属性または保護されたオペレーティングファイルであるか判定する方法はありませんか?
例えば "$RECYCLE.BIN" と "System Volume Information" というフォルダです。
これらのフォルダが存在しないパス上で、これらの名前でフォルダを作れるので名前で判定することは出来ません。
どなたか知恵を伝授してください。

215 :
// cscript attr.js
var o, f;
var hidden = 2;
var system = 4; // 設定がわからん
var folder = 16;
var mask = hidden | folder;
o = WScript.CreateObject("Scripting.FileSystemObject");
f = o.GetFolder("D:\\work\\hiddenFolder");
if( (f.Attributes & mask) == mask ) {
  WScript.echo("hidden | folder");
}
/*
D:\work>cscript attr.js
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
hidden | folder
D:\work>
*/

216 :
D:\work>attrib /?
ファイル属性を表示または変更します。
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[ドライブ:] [パス] ファイル名]
       [/S [/D]]
  +   属性を設定します。
  -   属性を解除します。
  R   読み取り専用属性。
  A   アーカイブ属性。
  S   システム ファイル属性。
  H   隠しファイル属性。
  /S  現在のディレクトリとすべてのサブフォルダの一致するファイルを
      処理します。
  /D  フォルダも処理します。

D:\work>attrib /s /d hiddenFolder
    HR     D:\work\hiddenFolder
D:\work>

217 :
Rubyからファイル属性を取得することは無理でしょうか?
cscriptの他にRubyからWind32apiを呼び出すぐらいしか方法ないでしょうか?

218 :
できないんじゃないかなあ。こういうのあるぐらいだし
https://github.com/djberg96/win32-file-stat
system? と hidden? で取れるっぽい

219 :
おいバカ初心者、よく見やがれw
Rバカwwwwwwwwwwwwwwwwwwwwwwww
Rwwwwwwwwwwwwwwwwwwwwwwww

Rwwwwwwwwwwwwwwwwwwwwwwww

Rwwwwwwwwwwwwwwwwwwwwwwww
ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww
ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww
Rゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww
Rコラゴミwwwwwwwwwwwwwwwwww

220 :
「ひな壇は韓流タレント中心に」という構想が一変、TV界と韓流の今 09/16 13:00
http://woman.infoseek.co.jp/news/entertainment/cyzowoman_16Sep2012_25106

 日韓の関係悪化の影響により、韓流離れが加速する現在のテレビ業界。
しかし、2年ほど前には広告代理店を中心に「ゴールデンタイムの番組には韓国人タレントを使用する」流れが作られていたという。
現在は吉本興業所属の芸人が幅を利かせる“ひな壇タレント”を、そっくり韓流と入れ替えるという計画だったそうだ。
 日本国内で、KARAや少女時代がブレークした2010年。
日本音楽事業者協会会長で「尾木プロ」社長の尾木徹氏が、K-POPアーティストの誘致に尽力したと伝えられていた。
そして同時期頃から、広告代理店やテレビ局上層部の間では、こんな“定説”が存在していたという。
「2011年以降は、ゴールデンのバラエティから、吉本芸人はほとんどいなくなります。
代わりにひな壇に座るのがK-POPアーティストや、韓流タレントたち。
安定してレギュラー番組を続けられそうなのは明石家さんま、島田紳助、ダウンタウンくらいで、その他の芸人たちは有名無名問わず降板させていこうという方針でした」(広告代理店幹部)
 ところが3月の震災で、エンタメ業界は数カ月ほど停滞状態が続くことに。
その前後に日本デビューを果たしたK-POPアーティストや、バラエティに登場した韓流タレントも少なからず存在したが、テレビ出演者が大幅に入れ替わるといった事態に至ることはなかった。
「紳助は引退してしまったし、高岡蒼佑のフジテレビ韓流傾倒批判など想定外の事態はいくつも発生しました。
特にネット上でのフジテレビ批判は見過ごせるレベルの話ではなく、連日の抗議デモやスポンサー企業の不買運動など、韓流に対する不安要素ばかりが高まっていきました」(同)
 そして今回の竹島問題で、韓流コンテンツへの傾倒に関して沈黙を貫いてきたテレビ各局も、方針を表明。
フジテレビは当面韓流ドラマの放送予定はないとし、またBS日テレの定例会見では赤座弘一社長が「韓国ドラマが多すぎるのではという声もある。
少なすぎるという声はないので、今後、(韓流ドラマを)少なくしていく方向になると思う」と発言したことも話題になった。


221 :
anというバイト情報サイトから最新情報をプログラムで取得しようと思って以下のようなプログラムを書きました。
require 'net/http'
Net::HTTP.start("area-baito.weban.jp", 80) do |http|
response = http.get('/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1')
puts response.body
end
しかし結果は何も表示されません。
調べてみると、responseの時点で、正常であればNet::HTTPOKが返ってくるはずなのですが、
上のプログラムだとなぜかエラーページにリダイレクトされてNet::HTTPFoundが返ってきていました。
http://area-baito.weban.jp/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1
というアドレスはブラウザで見れば正常に見れるURLです。
なぜプログラムで取得しようとするとエラーページに飛ばされてしまうのでしょうか?

222 :
そのスクリプトのままで動いたよ
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
$ ruby hoge.rb
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   :
<html lang="ja">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J">
        <meta http-equiv="Content-Style-Type" content="text/css">
        <meta http-equiv="Content-Script-Type" content="text/javascript">
  :

223 :
>>222
試していただいてありがとうございます。
ただ、それはrubyのバージョンの違いのようです。
1.8.7だとリダイレクト先の結果が表示されるみたいです。
私の環境の1.9だと何も表示されないようです。
いずれにしてもエラーページにリダイレクトされているみたいです。
プログラムでアクセスするとanのサーバー側で何かしらのヘッダーを見て、これはロボットだからエラーに飛ばせ、
みたいな処理をしているのかなぁと。。

224 :
その可能性に考えが及んでいるなら
とりあえずUser-Agentの偽装くらいは試そうぜ。

225 :
User-Agentはgetメソッドのオプションで色々設定してみたのですが、駄目でした。
javascriptはブラウザで無効にしてもページが見れたので、問題ないようです。

226 :
確かに >>222 はエラーページだった。
調べてみたら、User-AgentとCookieのANUSRIDを返せばページが返ってくるみたい。
Cookieは他にもJSESSIONID等がセットされるので、それらも含めてちゃんと
セットするのがよいと思う。とりあえず確認するなら、ブラウザが保存しているANUSRIDを
使ってみればいいかと
require 'net/http'
Net::HTTP.start("area-baito.weban.jp", 80) do |http|
    hdr = Hash.new
    hdr['User-Agent']='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1'
    hdr['Cookie']='ANUSRID=999999999999999999999999999999999999999999'
    response = http.get('/webapp/are/PSPCALI200L.do?A1=03&J1=07&V1=05&Z1=014&CMD=300&FID=300&V13=40&V2=1', hdr)
    puts response.body
end

227 :
ありがとうございます!無事表示できました!
もう諦めていたので2chを見ていませんでした。遅くなってしまいすいませんでした。
クッキーを設定しないと駄目だったとは・・・これは自力では無理でした。ありがとうございました。

228 :
ゴミ

229 :
すいません。
ライブラリーとモジュールの違いを分かりやすく説明してくれないでしょうか?
グーグルで調べたんだけどいまいち分からない。

230 :
関数を別ファイルにして後から再利用可能な形で呼べるようにしたものがライブラリ
ライブラリに沢山関数があると訳が判らなくなるので名前空間がぶつからないように整理したり
必要に応じて関連した処理や機能でまとめてライブラリにしたものがモジュール

231 :
クラスとことなり、モジュールは、インスタンスをもてない。
クラスにモジュールをインクルードして新しいクラスを作る機能をMix-inと呼びます。
多重継承と対照的に、単一継承によって、Rubyは、継承関係を保ちながら、
モジュールのMix-inによって、多様な依存関係を表現できます。

232 :
>> [1,2,3,4,5].sort{|i,j| i.odd? - j.odd?}
NoMethodError: undefined method `-' for true:TrueClass
>> [1,2,3,4,5].sort{|i,j| i.odd? <=> j.odd?}
NoMethodError: undefined method `<=>' for true:TrueClass
>> [1,2,3,4,5].sort{|i,j| i.odd?.to_i - j.odd?.to_i}
NoMethodError: undefined method `to_i' for true:TrueClass
>> [1,2,3,4,5].sort{|i,j| (i.odd? ? 1:0) - (j.odd? ? 1:0)}
=> [2, 4, 3, 1, 5]
実際に使いたいのはodd?ではなくString#include?等なんですが
boolの比較のもうちょっとスマートな書き方ってないでしょうか

233 :
irb> p %w[A1 2b A3 4A c5].partition{|s| s.include?('A')}
[["A1", "A3", "4A"], ["2b", "c5"]]
irb> p %w[A1 2b A3 4A c5].partition{|s| s.include?('A')}.map{|a| a.sort}.flatten
["4A", "A1", "A3", "2b", "c5"]
あんま短くなってないっすな

234 :
('A`)マンドクセ

235 :
cond? ? 0 : 1 とかの結果でソートするしかないね
true と false を比較したら true が先に来て欲しいという要望は結構あるんだが
?> [2,3,1,5,4].sort_by{|x| [(x.odd? ? 1 : 0), x]}
[2, 4, 1, 3, 5]

236 :
rubyって真理値のソートできないのかよ
クソだな

237 :
列挙型は定数で勝手にやれといういい加減さなのに
真偽はなぜかPascalをはるかに上回る厳格さ(≒貧弱さ)というのが謎だ

238 :
真理値はintじゃないし、Boolクラスもない、という、
単に「そういう設計」というだけのことなのだが。
C言語あたりを、たいして深く理解もせずに、他の言語を、
俺の知ってる言語と違うとdisる輩は多いねぇ。

239 :
馬鹿には無理

240 :
最低限これくらいのメソッドは実装して欲しいところ。
http://msdn.microsoft.com/ja-jp/library/system.boolean_members%28v=vs.80%29.aspx

241 :
文字列tとsがあって、tがsで始まるかどうか判定するにはどうすればいいでしょうか?
if t[0,s.size] == s

242 :
irb> p 'Ruby'.start_with?('Ru')
true
irb> p 'Perl'.start_with?('Ru')
false
Ruby1.8.6では動作しないので正規表現を使う
irb> p 'Ruby' =~ /\A#{'Ru'}/
0
irb> p 'Perl' =~ /\A#{'Ru'}/
nil

243 :
いやいやいや、indexでしょ

244 :
('Perl'*2**2**1024+'Ruby').index('Ruby')

245 :
irb> "This is a pencil." =~ /\A#{"This is a pen."}/
=> 0

246 :
嫌な性格してるなあ
"This is a pencil." =~ /\A#{Regexp.quote("This is a pen.")}/
これでいっすか

247 :
start_with?なんていつの間に追加されたんだよ
ありがとうこれで行きます

248 :
旅行会社にソウルなど韓国へのツアーのキャンセルが相次いでいる。竹島問題をめぐる感情悪化が理由だが、
両国の対立はこれまでにも繰り返され、そのたびに「政治と経済は別」との考えから沈静化に向かっていた。
ところが今回は「嫌韓ムード」もあり、問題再燃から1カ月近くたった今も沈静化どころか、影響が拡大しつつある。
 「韓国は海外渡航先でトップ3に入るドル箱。事態の長期化だけは避けてほしいのだが…」
 大阪市内の日本旅行の店頭には担当者の願いもむなしく、8月下旬以降、韓国への個人パック旅行のキャンセルが
止まらない。関西発着分の9〜10月の予約は前年同期比4割減にまで達しているほどだ。
旅行会社にとってはドル箱の韓国だが、韓流に夢中となり、韓国に何度も出掛けていた女性を中心とする日本人の
意識も少しずつ変わり始めている。
「どのチャンネルも似たような韓国ドラマばかりでうんざりしている」。大阪市内に住む40歳代の女性はこう話す。
また、6月に兵庫県・神鍋高原で韓国人歌手によるコンサートを企画した大阪のイベント会社が突然、倒産した。
2日間でチケット約2万枚の販売を見込んでいたが、売れたのはわずか1400枚。しかも、チケットの全売上高を
歌手への出演料に回したため、払い戻しに応じられない事態となり、チケット購入者からは「詐欺だ」との声が上がった。
 「必要以上に持ち上げられた韓流ブームが薄らぐ一方、嫌韓ムードは日増しに高まっている。韓国への旅行の
落ち込みも長期化するのでは」と旅行業界の関係者は先行きを警戒する。
 実際、韓国に旅行した東京都在住の40歳代女性はこう話す。
 「日本人とわかれば、屋台やタクシーなどは平気で価格をつり上げる。罵声を浴びせる人もいる。竹島問題もあり、
今は行きたくないですね」
http://www.sankeibiz.jp/econome/news/120918/ecc1209180800000-n3.htm

249 :
5バイトのファイルがあって、中身が
先頭4bit : 項目A
次の12bit : 項目B
次の20bit : 項目C
次の4bit : 項目D
の数値データ(big endian)が格納されているとします。
項目A〜Dの値をスマートに取り出すにはどうすればいいですか?

250 :
bindataっていうライブラリがあるよ。gemで入る
以下スマートとはほど遠いコード
buf.unpack("B*")[0].scan(/(.{4})(.{12})(.{20})(.{4})/)[0].map{|e| e.to_i(2) }

251 :
Rubyの標準添付ライブラリってどういう意味なの?
たとえば、
http://doc.ruby-lang.org/ja/1.9.3/library/index.html
を見るとGDBMなんかも入っているけど、実際にはLinuxでもWindowsでも標準で入ってないんだが


252 :
ext/gdbm はソースに入ってるだろ。

253 :
>>252
ソースレベルで入っているだけで一般的に配布されているバイナリでは入っている保障はないってこと?
Unbuntuならapt-getとかFreeBSDならpkg_addとかでruby入れても入っていないのだが
それって標準の意味あるのか

254 :
>>253
つまりそれはgdbm-devかgdbmのソースがシステムに入っていない場合はmakeを中止させるか、
あるいはrubyと一緒にgdbmソースコード一式(またはバイナリ)を配布しろということ?
人はそれを傲慢と呼ぶ
システムにヘッダファイルが存在しない場合は。./configureがNOを返し、その部分だけコンパイルが飛ばされるという動作は極めて妥当
使いたいextのヘッダファイルを事前にインストール(して./configureで指定)するのが一般的
というか、パッケージシステムならlibgdbm-rubyとかruby-gdmとかいうパッケージがあるだろ
rvmやrbenvなんかの自前コンパイル補助するやつならコンパイル前にgdbm-dev(el)パッケージをインストールしとけ
Windowsで配布者がdllごと入れてない場合はgdbm.dllをどっか安心なとこから拾ってきてbin/に入れとけばたぶん動く

255 :
>>254
つまりRubyの標準添付ライブラリというのは環境によって
入っているか入っていないか分からないってことでしょ
別に入れろ言っているわけではないよ
それって"標準"にした意味あるのかなと思っただけ
たとえば"標準でインストール"されているなら依存関係を気にしなくてもいいけど
コンパイル時のオプションで変わるなら入っていない場合のことを考慮しないといけないわけでしょ
あとRubyがバイナリが入っている場合は、gemで入れることになると思うけど
gem gdbmはext/gdbmと同じだとかそういった保障はあるの?
libgdbm-devは仕方がないにしろ、rubyのライブラリはbundlerから入れたい

256 :
Ruby は Matz が始めた趣味言語だから
自分の環境でだけ動けば良いや的発想で作られてる

257 :
>>255
ソースは環境によらずtarballに必ず入っている(これを標準添付と呼ぶ)
この手のものを、インストールする人にコンパイルさせることを強制はできない
使わない人だけコンパイルオプションで外すようにしてもいいけど、たかがgdbmをそんな扱いにするとそっちのほうがめんどくさいよたぶん
使う予定がないのにtkが丸ごと入ったらキレるだろ

258 :
>>255
標準にすることで他のライブラリと名前空間がぶつかることを回避できてるんじゃないの?
rubyの標準添付ライブラリが依存しているものを、
rubyのインストールですべて芋づる式でインストールされたらえらく迷惑だわ
スクリプトで標準添付ライブラリがつかえるかどうかは、必要ならチェックする必要があるだろうな
まあ大抵はスクリプトが例外出すままでOKだと思うけど
あと、たとえばgdbmへアクセスするI/Fを標準添付ライブラリとして用意してるけど、
細かい挙動はOSにインストールされてるGDBMに影響をうけると思う

259 :
>>257
Python には入ってるけど誰もキレてないです

260 :
RubyスレでPythonポリシー持ち出されても…

261 :
>>259
Tkそのものは標準添付されてないと思うよ
Windowsのバイナリ(のインストーラ)には入ってるってだけで

262 :
Linux/BSD以外でどう動作するかは、出たとこ勝負
OSSって結局そんな感じやん

263 :
tkinnerをTkそのものだと思ってる人は意外といる…

264 :
>>257
Ruby開発側と配布されるソースについての標準で
プログラマにとって存在するライブラリが標準化されているわけではないってことね
それが聞きたかっただけです
GDBMは例に出しただけで得に深い意味はないです

265 :
>>264
プログラマにとっても標準だろ
少なくとも標準ライブラリに用意されてるものはそれをつかうべきだし、
別のものを作るなら名前がかぶらないようにするべき
作られたプログラムを使うやつが、必要な環境を整えなければいけないってだけだ

266 :
標準添付という言葉はわかりにくいんだろうか
そんなにRuby独自の表現が入ってるわけでもないと思うんだが

267 :
朝鮮人だろう

268 :
ンッペコバンナー「wwwwwwwwwwwwwwwwwwwwwwwwwwwwww」

269 :
ンッペコバンナー「ンッペコバンナーwwwwwwwwwwwwwwwwwwwwwwwwwwwwww」

270 :
標準添付ライブラリって別途インストールしなくても
requireすれば使えるよってだけの話だろ
どんな機能があるのかはそれこそライブラリ次第で
gdbmだったら説明にあるとおり外部にあるGDBMを扱うインターフェースを
Rubyに提供するだけ

271 :
それが問題なくあてはまるのはpure rubyなライブラリの場合だね

272 :
ソースだけがtarballに収録されてて、実際に言語から利用するにはCコンパイラなどで実行形式ファイルにする必要があり、
しかもコンパイルや実行の際にシステムまたは第三者のヘッダファイルやAPIを読む必要がある
というパターンはけっこうせつめいめんどくさい

273 :
>>270
いや別途インストールが必要だからrequireしても使えないって話だろ

274 :
ライブラリを標準化する意味って標準に従っていれば
同じプログラムをどこでも動かせるってことにあると思うのだが
Rubyの場合は、標準添付ライブラリだけ使うプログラムを書いても
環境によってはインストールされていないので動かない
しかも標準ライブラリの動作が環境依存らしい

275 :
標準A
標準B
標準C

276 :
>>273
別途インストール不要ってのはRubyのライブラリのことだぞ
Rubyのライブラリが呼び出すGDBMとかのシステムのライブラリは当然別途インストールが必要なのは言うまでも無い

277 :
すいません 「初めてのRuby」のサポートページのwikiがバグってるようなので
どなたか編集して直していただけませんか?勘違いならすみません
http://yugui.jp/wiki/hiki.cgi

278 :
バグってる、なんて言う奴いるんだ?

279 :
デバッグする

280 :
一つの値に、複数(可変個)の値を対応付けて記録したい時、定石ってある?
Hash.new{ |hash, key| hash[key] = [] }
↑みたいな感じでいい?

281 :
駄目なのは素人の漏れでも判る

282 :
ダメっていうのはもっと良いやり方があるってこと?
機能的には問題ないと思ってるんだけど。問題点があれば教えてほしい。
(煽りじゃなくて、純粋に質問。単にもっと効率の良い定石があるなら知りたいだけだよ。)

283 :
Apocalypsis Johannis,part13
[13:16]小さい者にも、大きい者にも、富んでいる者にも、貧しい者にも、自由人にも、奴隷にも、
すべての人々にビックデータとスマートフォン、スマートユビキタス監視社会、経済システムの
UIDコードを付けさせた。
また、そのコードすなわち、一定のUID符号化数字を持っている者以外は、経済活動に関われ
ないように、だれも、買うことも、売ることもできないようにした。
[13:17]そのUIDコード数列の一部はシステムの名前そのものからとられている。
[13:18]ここに重要な意味がある。
思慮ある者はそのUIDコードを分析しなさい。そのUIDコードは人間個人を表現している
UniqueIDだからである。
そのUIDコードのエイリアスは666である。

284 :
Apocalypsis Johannis,part14
[14:01]見よ、人がXeonサーバ群の上にいる。14万人がデータセンタで働いており彼らはIDが与えられていた。
[14:03]彼らは新しいスクリプトを書いた。この言語は14万人のほかは誰も理解できなかった。
[14:07]基本に立ち返れ、裁きの時が来たからである。自然の行いを侮る事なかれ。
[14:08]巨大なバブルは崩壊した。不良金融債権をあらゆる国民に買わせた者は倒れた。
[14:09]もし、だれでも、このシステムを作り賛美し、UIDを受けるなら、そのような者は、
[14:10]従来の人間社会から逸脱しダイレクトに毒物を飲むようになる。
[14:11]また、自然界と群集の前で、目に見えない火(放射能)と毒物で苦しめられる。そして、彼らの苦しみは、永遠に続く。
システムを賛美し取り入れるもの、システムを作る者、まただれでもUIDを受け参加する者は、
昼も夜もまったく休むことはできない。

285 :
「月刊 WiLL」2012年11月号
特集:哀れな国、韓国!
http://web-wac.co.jp/magazine/will/201211_w
http://web-wac.co.jp/magazine/wp-content/uploads/4910183971126-190x278.jpg

世界中で嫌われる韓国人とシナ人
韓国人はなぜ日本人を憎むのか
韓国こそ世界一のR輸出大国だ
輸入韓国魚介類は糞尿まみれ
「パクリ無罪」の韓国
ヤミ金で成立する韓国経済
中国でもめちゃくちゃ不人気な韓流ドラマ
韓国大統領に群がるアリとハエ
韓国経済を支えているのは日本
在日韓国文化人の「妄言」を嗤う
朝日新聞・植村隆記者への公開質問状
「竹島をあげる」小沢一郎発言の真偽
韓国人は自分の家に放火する

286 :
ruby 1.9.3
nokogiri 1.5.5
nokogiriでスクレイピングした結果とブラウザのソースとでは異なる内容を表示しています。
たとえば、
2chのスレ一覧を取りに行くと全部取得できません。
ブラウザでは500スレほどあるのですが、nokogiriでは180スレほどしか取得できていません。
</body>直前が明らかに違っています。
内容が常に変わらないとこを見るとキャッシュを表示しているような気がするのですが・・・・
詳しい方、解決方法を教えていただけないでしょうか?


287 :
コード貼ってくださいな

288 :
取得した2chのページのURLを具体的に知りたいな

289 :
Nokogiri自体はスクレイピングしません
…いやまあ、nokogiriコマンドもあるんで、やれないわけじゃないんだけど、たぶん思ってるのとは違う
$ nokogiri http://www.ruby-lang.org/ja/
Your document is stored in @doc...
irb> p @doc.at('title').text
"オブジェクト指向スクリプト言語 Ruby"
ちなみに内容はopen(uri).read
>>286
スクリプトで取得したファイルが「完全」であるかをまず確かめてください
…これが完全に取得されていない場合、まあ、なんかどっか悪いんだとは思うんだけど、2chではなんだろう
次に、そのファイルをNokogiri::HTML.parseして、すべて正しくパースされるかを確かめます
すべて正しくパースされていない場合、配列 Nokogiri::HTML.parse(html).errors にエラーが入っていることがあるので確認します
libxml2やlibxsltがやたら古い場合や適切な文字エンコーディングが推測または指定されていない場合、パースに失敗します
parseメソッドの第三引数に、なんかてきとーなエンコーディング名文字列を指定してください

290 :
rubyのrakeってmakeの完全な代わりになりますか?
make覚えなくてもrakeで代われるなら、rubyの勉強して
なんだか一石二鳥だなあとか思ったんですが

291 :
rubyを覚えた後にrakeを別途覚えるようなもんだから
あまり一石二鳥な感覚ではなかったなあ

292 :
>>290
基本的にmakeでできることは、ほぼ全てrakeでできるはずなので
完全な上位互換(rakeがあればmakeは必要ない)と考えて良いと思う
ただしもちろん、ほかの人の書いたソフトウェアをコンパイルしたりするなら
そこではmakeが必要になるので、そこは諦めてください

293 :
完全じゃ無いじゃん

294 :
makeは普段shellでやってることをそのまま書けるからな。rakeもantもmakeから移植する感じになる。

295 :
>>293
自分で書く分には何でもできるが、人に書かせることはできないってだけだろ。
awk2perlみたいな変換書けば、そうでもないか。

296 :
つまり、互換ですら無いということだな

297 :
誰が互換を求めてるんだよ
まあ、求めていないとも書いてないから分からんか

298 :
単に>>292が「完全な上位互換」と書いたのが嘘だったということでしょ

299 :
rubyはperlの上位互換(キリッ)
と同じ程度の意味だろこのアスペ共が

300 :
>>290の質問からしてなんかヘンだから仕方ないんだけどな
>>290には
「makeと同レベルの自動作業を記述することはできるが、Makefileとの互換性はないので、あくまで自分で書いて自分で実行させるだけの用途にしか使えない」
「実行にはruby実行環境とgemライブラリとrakeライブラリの別途インストールが必要なので、たとえRakefileを配布しても一般的な可搬性は低い(Rubyライブラリ中では高いが)」
>>292には
「そういう用途的なカバーのことはふつうは上位互換とは言わない」
と言うのが妥当

301 :
286です。
お返事いただいた方、ありがとうございました。
encodingを指定してもだめでした。
errorsの中身はSyntax Errorと出ていました。
net/httpでコンテンツを取得し、正規表現で対応しました。

302 :
http://toro.2ch.net/test/read.cgi/tech/1346177196/447

303 :
>>302
ここで答えちゃうけど、要するに捕捉する記述をしていない例外が発生した場合でも
自動的にログだけ取ってプログラムを動かし続けたいって事だろう?
無理じゃね

304 :
class A
def step
puts "A"
end
end
class B < A
def step
super()
puts "B"
end
end
class C < B
def step
# ここでA#stepを呼びたい
puts "C"
end
end
できますか?

305 :
できないはず
クラスCを作るファイルでクラスAの定義を再オープンしてA#orig_stepとかに退避しておくとかどうだろう

306 :
そんなことになるstep関数はオーバーライドしちゃいけないってことだ
もしくはそもそもC<B<Aの継承関係がやりたいことに合っていないのかも

307 :
>>304
継承とか関係なしに呼ぶこと自体はできる
A.instance_method(:step).bind(self).call

308 :
>>305-306
やはり設計を変えようと思います
>>307
bindとかあるのか

309 :
RubyInstaller 1.9.3p194を使ってます
ハッシュ式について分からないことがあるため質問させてください
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html#hashを見て
キーがシンボルの場合のハッシュを書きたいんで
以下のコードを実行してもnilが表示されます
h = {a:"A", b:"B", c:"C" }
p h["a"] # nil
マニュアルからハッシュ部分をコピーしただけなんですが、どうしたらAと表示されますか?

310 :
p h[:a]

311 :
rvmに移行しました。rvm install ruby-headしたら、
1.8.7-p370がインストールされた。
head(最新)って1.9.3系列だと思っていたから、驚いた。
すんません。独り言です。

312 :
>>309
310のとおりで
> h = {a:"A", b:"B", c:"C" }
これは、
h = {:a => "A", :b => "B" , :c => "C"}
これと同じ意味で書き方が若干違うだけで
:aはシンボル変数。
309の書き方だと、
h = {"a" => "A", "b" => "B" , "c" => "C"}
という書き方をしたハッシュなら通じる。
キーの名前自体を使って条件分けなどごにょごにょ
やらないのであれば、シンボル変数が軽いけど、
クラス継承やモジュールをガシガシ書かない間は
違いはさほどないからどっちでもいい。

313 :
前にもスレに書いてあったが、{ sym:'value' } という単純なリテラルとしての書き方はするべきではない
これはシンボルキーなHashを引数に取るメソッドの引数のときにのみ使う

314 :
{ :"ho ge" => "A" } ってのを { a: "A" } 式に書くにはどうするの?
{ ho ge: "A" } も { "ho ge": "A" } もだめだよね

315 :
書けないし、書けなくてもいいと思う
そもそも「やっかいなシンボル」をキーワードに指定しなければならないことなどないはずだから

316 :
シンボルはコンパイル時に定数でなければならない
c で char hoge[variable]; と書けないのと同じ

317 :
最新の純Cの規格に則った環境なら書けるけどなそれ
…まあ、ほとんどのC環境が純CでなくC++になっちゃってるんだが

318 :
Rubyの質問と少しずれるかもしれませんが、
rvmから以降するためrvm imploadしてから、ターミナルの起動時に
-bash: /etc/profile.d/sm.sh: No such file directory
-bash: /etc/profile.d/rvm.sh: No such file directory
と表示されます。
homeの.bashrcと.bash_profileに上の記述はなく、
どこにこの読み込みが書かれているんでしょうか?

319 :
板違い

320 :
すみません板違いでしたね。自己解決しました。
/etc/profileに記述が残ってました。

321 :
>>313
べきじゃない、といよりも、
ライブラリやモジュールのコードを
観る段階になれば自然と身につくと思うんだけどなあ。
おいらはそうだった。

322 :
違うサーバーにあるファイルを実行するために以下のようなスクリプトを書きました。
require 'net/ssh'
Net:SSH.start('host','user') do |ssh|
ssh.exec!('cd dir1')
ssh.exec!('ruby sample.rb')
end
しかしcdコマンドの実行後、カレントディレクトリがdir1になっていないようなのです。
やりたいことは、sshでuser@hostにアクセスして、~/dir1/sample.rbを実行したいです。
ただし、ruby dir1/sample.rbと実行するのではなく、dir1に行ってから実行したいのです。
どのようにすればいいでしょうか。

323 :
ぐぐったらこんなのが
http://stackoverflow.com/questions/10606290/

324 :
>321
他人を自分と同一視するのは病気

325 :
1が全角に見えるのはネタだからか?

326 :
>>322
ssh.exec!('cd dir1; ruby sample.rb')とか出来たりしない?

327 :
>>323
なるほど毎回違うシェルで実行するからカレントディレクトリが戻っちゃうんですね
>>326
これでできました!ありがとうございます

328 :
★修学旅行、韓国から国内に変更…宮崎・日南高
 日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。
 日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。
 竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。
 県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。
http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm

329 :
韓国より台湾へ行けば良いのに

330 :
いま台湾も尖閣でギスギスしてんじゃん

331 :
情報弱者って本当にいるんだな

332 :
群馬が一番危険なのに

333 :
韓国の弾道ミサイルの射程制限が現行の300キロ・メートルから800キロ・メートルに緩和されることについて、
日本政府は、「東アジアの緊張が高まることに直結するものではない」と冷静に受け止めている。
 防衛省幹部は7日、全域が韓国の弾道ミサイル射程内に収まることになる北朝鮮の強い反発が予想されることに関し、
「結果的に抑止効果が高まり、北朝鮮側は挑発行為を行いづらくなる」と語った。
日本にとっても、西日本地域が韓国の射程内に入ることになるが、自衛隊幹部は7日、「日本の安全保障にマイナスなら、
(射程緩和で合意した)米側が認めることはない。
日米韓の枠組みでの抑止力が高まれば、日本にとってもプラス面はある」と指摘した。
http://headlines.yahoo.co.jp/hl?a=20121008-00000564-yom-int

334 :
>>331
これ全部コピペ爆撃なのにね
この板の政治国際ネタが自分に向けられた話題だと思ってる馬鹿は全員同罪
ttp://www.google.co.jp/search?num=50&hl=ja&q=%22%E6%97%A5%E5%8D%97%E9%AB%98%E3%81%AB%E3%82%88%E3%82%8B%E3%81%A8%22+site:2ch.net

335 :
車道にはみ出すな…後ろから歩行者をはねた男
http://www.yomiuri.co.jp/national/news/20121008-OYT1T00646.htm
埼玉県警所沢署は8日、所沢市美原町、建築作業員衣斐昂(いびたかし)容疑者(23)を殺人未遂容疑で逮捕した。
 発表では、7日午前1時40分頃、同市緑町の市道で乗用車を運転し、道路左端を歩いていた男性約10人のうち
3人(22〜23歳)を後ろからはね、殺害しようとした疑い。3人は頭などに軽傷。
 衣斐容疑者は、男性たちの一部が車道にはみ出していたことに文句を言い、いったん通り過ぎた後、
Uターンして再び背後に回り、時速約50〜60キロで突っ込んだという。
車を約2キロ先の駐車場にとめて逃げたが、男性たちの中に顔見知りがおり、市内のホテルで見つかった。
 調べに対し、衣斐容疑者は「広がって歩いているのに腹の虫が治まらなかった」と供述しているという。
(2012年10月8日22時11分 読売新聞)

336 :
“街宣車”に赤色灯設置で右翼団体代表の男を逮捕(10/08 20:03)
http://news.tv-asahi.co.jp/news/web/html/221008053.html
 千葉県野田市で、所有する街頭宣伝車に不正に赤色灯を設置していることを隠して
車検証を交付させたとして、右翼団体代表の男を逮捕しました。
 道路運送車両法違反の疑いで逮捕されたのは、右翼団体「関東一盟会」の代表・
程田一樹容疑者(40)です。警視庁によりますと、程田容疑者は、所有する街宣車の
屋根部分に緊急車両にのみ設置が認められている赤色灯を日常的に設置していたにもかかわらず、
6月の車検の際だけ外し、車検証を交付させた疑いが持たれています。取り調べに対し、
程田容疑者は「間違いありません」「格好つけるためにやった」などと供述し、
容疑を認めています。警視庁によりますと、都内で走行している右翼の街宣車は200台余りで、
そのうちの約2割には不正に赤色灯が設置されているということです。不正街宣車の摘発は、
関東では今回が初めてで、警視庁は今後、厳しく取り締まりを行うとしています。

337 :
>>334
わかってて反応してんのにさらに反応すんなよ
検索まで貼っつけてさぁw

338 :
rubyで関数の中で一時的な名前付き関数を使いたい時ってどうすればよいですか?

339 :
sum = lambda { |x, y| x + y } で、出来ました

340 :
RubyでExcelのVBAってなんでも書けますか?
exlap.rbのページを見たらExcelの基本的な操作は載っているのですが
もっと複雑なものでも同様に問題なく書けるのかを知りたいです

341 :
http://toro.2ch.net/test/read.cgi/tech/1345363310/

342 :
「起動はRubyだけどここだけVBAで書く」というレベルでなら書ける
だから普通は直接VBAで書く
VBAの知識がないとそもそもいっこも書けないし

343 :
VBAそのものは出来ています
それをRubyで呼び出すという形にすればなんでも書けるということでしょうか?
ということは、VBAをRubyで書き直す必要はなくに、呼び出す方法だけ勉強すれば良いということ?

344 :
書けるか書けないかで言えば書ける
きっとRubyのことだから超遅くなるだろう

345 :
>>340
ありがとうございます
速度は気にしないので呼び出す方法を調べてみます
今まで調べても出てこなかったので不安ですがorz

346 :
所謂正確な物言いってやつだな
記述行為が可能であるかどうかで言えば可能
ただし、普通の感覚を持っているなら普通はやらない
複雑なVBAはVBAスクリプトとして書くのが妥当
Rubyから二重三重の手間とレイヤをかけて使ったりはしない
だから「RubyからExcelを操作」みたいなのは流行んないんだよ
RubyでVBAやるのはVBA自体を勉強するのよりも大変なんだもの

347 :
>345
自分にレスするとは自演ぽいな

348 :
>>346
すでに書いてあるVBAスクリプトを新規Excelファイルに書き込む動作を
Rubyで動かすことは可能、ということですよね
>>347
名前欄もレス番も手で打ったらミスりました

349 :
http://www7b.biglobe.ne.jp/~whitetiger/ex/ex2002088.html

350 :
間違えた
PerlからEXCEL-VBAのマクロを起動するには
http://chaichan.lolipop.jp/perlnote/perlnote2007-11-182.htm

351 :
できました
ありがとうございました
http://d.hatena.ne.jp/paz3/20090813/1250134172

352 :
a = [1, 2, 3, 4, 5]とあった時、指定した添字以降の配列を取得するにはどう書くのがよいですか?
例えばf(a, 2)で[3,4,5]が返る というものです。

353 :
こんなんでどうよ
[1,2,3,4,5].slice(2, 100)

354 :
>>353 ありがとうございます!

355 :
def group (lst, n)
rec = lambda { |lst, acc|
rest = lst.slice(n,100)
(rest == nil)?
(lst + acc).reverse :
rec.call(rest, [lst.slice(0,n)] + acc) }
rec.call(lst, [])
end
a = []
200.times do |x|
a << x
end
group(a, 4)
グループ化する関数を作ったのですが以上を実行すると、
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23],
 [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41, 42, 43],
 [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61, 62, 63],
 [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81, 82, 83],
 [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99], [100, 101, 102, 103]]
ここで止まってしまいます。これは仕様でしょうか?
再帰の深さは30程度までなのですか。
ruby 1.9.3p125 (2012-02-16) [i386-mingw32]

356 :
>>353に言い忘れてたんだけど、っていうか、なにか教えてもらったらマニュアルなりで確認して欲しいんだけど、
Array#sliceは「n要素目からx個取り出して配列として返す」だ
slice(2,100)は2要素目から100個取り出す
100個取り出すんだから100越えたら動かない

357 :
slice(n, 100)だからそのあたりで止まるんじゃないかと
もしRubyがスタック食いつぶせば例外が投げられて表示されるよ

358 :
あとcdrに相当するのはlst[1..-1]かlst.slice(1, -1)

359 :
>>356,357,358
あー!なるほど
ありがとうございます!

360 :
>>358
irb(main):242:0> [1,2,3].slice(2,-1)
[1,2,3].slice(2,-1)
nil

361 :
>>360
あああ、ごめんなさい。[1,2,3].slice(1..-1)か

362 :
・韓国は外貨調達をめぐり、「悪縁」という言葉がしっくりくるほど日本には苦々しい記憶がある。
 最もつらい記憶は1997年アジア通貨危機当時。外貨準備が底を突き、デフォルトの危機に
 追い込まれた韓国には、日本から借り入れた短期債務220億ドルがあった。しかし、日本はうち130億ドルを
 その年に回収し、韓国がIMFに支援を要請する決定的な要因になったとされる。日本は97年12月だけで
 70億ドルを回収した。当時の姜万洙財政経済院次官(現産銀金融持株会長)が「必要なときに助けるのが
 真の友人」だと訴えたが、日本は「日本の銀行も自己資本比率8%という規制を満たすために困難な
 状況だ」として、韓国側の求めを断った。
 2008年の世界的金融危機の際にも日本は冷たかった。危機の影響でドル調達が困難になり、韓国政府は
 同年10月に300億ドル規模の韓米通貨スワップで切り抜けたのに続き、日本にも既存の通貨スワップの拡大を
 求めた。しかし、日本は「大規模な通貨スワップ拡大は困る」と慎重姿勢を崩さなかった。結局、韓国政府は
 中国と300億ドルの通貨スワップで合意し、それに基づき日本に圧力をかけて初めて、韓日通貨スワップの規模を
 300億ドルに増額することができた。韓国政府の元幹部は「普段は協議がうまくいっていたのに、困った時期には
 異なることを言い出し、憤らずにはいられなかった」と振り返った。
 日本は昨年の韓日首脳会談で韓国の通貨スワップ拡大要求を喜んで受け入れた。それまでの悪縁は
 解消されたように見えた。当時の日本には円高を緩和する効果もあるため、日本が実利を狙ったという分析も
 あったが、欧州財政危機で動揺する為替相場の安定にも役立ったことは明らかな事実だ。
 しかし、今年8月に独島(日本名・竹島)問題が浮上後、日本の政界が韓日通貨スワップの延長に難色を示し
 結局増額部分の延長はできなくなり、韓国と日本の悪縁は繰り返されることになった。(抜粋)
 http://www.chosunonline.com/site/data/html_dir/2012/10/10/2012101000537.html
★日韓通貨スワップ縮小「日本は経済大国にあるまじき態度」=韓国
 http://news.searchina.ne.jp/disp.cgi?y=2012&d=1010&f=national_1010_012.shtml
※前:http://uni.2ch.net/test/read.cgi/newsplus/1349879756/

363 :
すっごい初歩的な質問で申し訳ないけど
たとえば
a**k(k=0,1,2)
の関数ってどういうスクリプト打てばいいの?
aを代入しただけでk=0,1,2全ての答えをreplyしてもらえるようにしたい

364 :
aに3が代入されたら[0, 1, 8]を返すとかそんなの?だったら
irb(main):001:0> def f(a); [0, 1, 2].map{|e| e ** a }; end
=> nil
irb(main):002:0> f 3
=> [0, 1, 8]

365 :
>>364
オギャアアアアア(^q^)
関数か・・・
ありがとうれす(^q^)

366 :
Enumerableのメソッド群は覚えると配列操作が捗るぞ

367 :
「初めてのプログラミング」P19の
puts 'You?'re swell!'
ってYouの後「?」で合ってます?エラー出るんだけど。
バックスラッシュだと1行目と同じになっちゃうし何だろ

368 :
放射性セシウム:ネットで販売容疑、韓国人2人逮捕
 放射線測定器の動作確認用に放射性物質「セシウム137」をインターネットで販売したとして、警視庁は12日、
放射線障害防止法違反(譲渡)容疑で、測定器販売会社「オアシストレード」(東京都荒川区)の韓国人従業員、
黄娟熙(27)と景善美(28)の2容疑者を逮捕したと発表した。東京電力福島第1原発事故以降、放射性物質の
譲渡を同法で摘発したのは全国初。
 逮捕容疑は黄容疑者らは、11年10月?12年4月、同社のネットショップ「オアシス」で注文した男性17人
に対し、容器に入った「セシウム137」計18個(計約61万円相当)を販売したとしている。同社と違法性を
認識していた客5人も同法違反容疑で書類送検された。
 同法では10キロベクレルを超えるセシウムを取り扱う場合は国への届け出が必要にもかかわらず、37キロベクレル
の商品を無届けで販売していた。生活環境課によると、逮捕された2人は容疑を認めている。容器の表面を測定すると
毎時10マイクロシーベルトとなり測定器が正常に作動するか確認できるという。
http://mainichi.jp/select/news/20121012k0000e040223000c.html

369 :
オライリーの木の描いてるやつ?
バックスラッシュだろうね

370 :
363だけどカルダノの公式を作ってみたらエラー出まくりで
やばいことになった
どこがおかしいのかな
ちなみにOはωのことです
include(Math)

def cardano(a,b,c)
O**3=1
Of+O=-1
D=(-1)(4(-b**2/3*a**2+c/a)**3+27(2*b**3/27*a**3-b*c/(3*a**2)+d/a)**2)
[0,1,2].map{|k| -b/(3*a)+O**k(-b**3/(27*a**3)+(b*c)/6*a**2-d/2*a+(1/6)*sqrt(-D/3))**(1.0/3.0)+Of**k(-b**3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)-1/6*sqrt(-D/3))**(1.0/3.0)}
end
ちなみにエラーは
syntax error,unexpected'='
expecting KEND
dynamic constant assignment
unexpected'('
unexpected')'
といっぱい・・・

371 :
=の左に置けるのは左辺値(くだけていえば変数)だけ。

372 :
今日日、rubyのメリットが見えない
このスレの住人って何かの罰ゲームで使ってるのかな

373 :
>>372
もしかしてGUIとかに使おうとしてる?そうだとしたら確かに壁が多いが
・OOPのプロトタイピングに
・組み込みクラスを魔改造してDSLに
・テキスト処理やリスト処理に
・テストの補助に
・RoR

374 :
>>371
あ、ωは定数だ_| ̄|○

375 :
http://i.imgur.com/2N48B.jpg
http://i.imgur.com/gwhpV.jpg

376 :
>>374
(定数も書けるよ)
数学とは違って=は代入にしか使わないので、ωが満たす条件/関係
O**3=1
を書いたつもりでも、自動的に方程式を解いてくれるわけではない。
(三次方程式だから解いても3つ解があるし…)
自明な1以外は素直にO=Complex(-0.5, -Math.sqrt(3)/2) みたいに書くとか。
数式処理系とかmetafontみたいに方程式を解ける言語もあるけど。

377 :
自分なりに調べて改良してみた
include(Math) 
require'complex'

def cardano(a,b,c)
d=(-1)*(4*((-b**2)/(3*a**2)+c/a)**3+27*(2*b**3/(27*a**3)-b*c/(3*a**2)+d/a)**2)
[0,1,2].map{|k| (-b)/(3*a)+(((-1+sqrt(3).im)/2)**k)*(-b*9*3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)+(1/6)*sqrt(-d/3)**(1.0/3.0)+(((-1-sqrt(3).im)/2)**k)*(-b**3/(27*a**3)+(b*c)/(6*a**2)-d/(2*a)-(1/6)*sqrt(-d/3))**(1.0/3.0))}
end  
だがinvalid charとかいうのがかえってきた(((^q^)))
もうおかしいものなんてないれしょ!
なんだこのそっけない返答は(^q^)
もうかれこれ六時間くらい消えたwww

378 :
include(Math)の後ろに全角空白が入ってるよ
そのコードコピペして動かせば
> hoge.rb:1:invalid multibyte char (US-ASCII)
とか怒られるんだから不正なマルチバイト文字が一行目に入ってるってわかる

379 :
プログラム初めての人がいきなり完成系書き上げようとしても、動かなかった時何が悪いのか分からんでしょ
まず1解だけの計算を目指した方がいいよ
あと、部分式は無理に展開せずに変数や関数を使うべき
require 'complex'
def cardano(a, b, c)
omega = (-1+Complex::I*Math.sqrt(3))/2
p = (3.0*b - a**2.0) / 9.0
q = (27.0*c + 2.0*a**3.0 - 9.0*a*b) / 54.0
t = Math.sqrt(q**2.0 + p**3.0)
puts "がんばれ"
end
puts cardano(ARGV[0].to_f, ARGV[1].to_f, ARGV[2].to_f)

380 :
俺も昔そんなんだったなぁとしみじみしてる

381 :
今Rubyからプログラミング始めた
初心者ですが愚痴ですいません。
1.9+Sinatra+Slim+Redis(セッション管理)、Mongoidで
初めてのバックエンドのあるサイトつくってるのですが
Railsって便利なんですね。
入力バリデーションを自分で考えて実装してましたが、
できあがってRailsをみたら自分が
車輪の再発明状態なのがよくわかりました。
メアドの正規表現とかは自作してたらかなり勉強にはなりましたけど。。
みなさんはバックエンドのあるWebシステムつくるなら
Railsありきでしょうか。

382 :
るはないな

383 :
皆さんのアドヴァイスのおかげでcardanoはなんとかできました
今、条件分岐をやっているところなのですがerrorが出るもののどこが間違ってるのか
わかりません
endがどうのと言ってくるのですが・・・
def solutions(a,b,c)
if a=0
1
else
if 0<b**2-4*a*c
2
else if b**2-4*a*c<0
0
else
1
end
end end
end
ifは三つ、def一つなので
それに対応してendの数も合計四つにすればいいはずですし全くわかりません
ちなみにこれは二次方程式の解の個数を求めさせる問題です

384 :
>>383
回答と関係ないけど、最初の a=0 は a==0
で、2つの else if を elsif にする。endは2つだな。


385 :
ちょっと改良してみた
def det(a,b,c)
b**2-4*a*c
end
def solutions(a,b,c)
if a==0 || det(a,b,c)==0
1
else
if det(a,b,c)>0
2
else
0
end
end
end
でもエラー出るけど汗

386 :
>>384
a==0にしなかったのは完全に自分のミスでしたorz
elsifってのは初めて聞きました

387 :
「endがどうの」などというエラーは存在しない
エラーメッセージは(少なくともRubyと標準ライブラリのエラーは)すべてを表す

388 :
・最近、若い女性の間でも右寄りの思想に傾倒する女子が急増している。
 「K-POPや韓流ドラマは絶対視ない!」、「韓国は国ぐるみで間違った歴史を教えて、日本を悪者に仕立てている。
 許せない!」、「尖閣諸島や竹島は絶対に日本のもの!」、「中韓とは断固国交断絶!」「広告代理店やマスコミが
 朝鮮人と結託して、日本人に反日的な感情を植え付けようとしてる!」……などと語気が荒く語る女性が少なからず
 存在するのだ。
 しかも、彼女たちはいわゆる”普通の女子”。流行やブランド品を好む、 “スイーツ系女子”の相田多喜子さん
 (仮名・33歳・会社員)はこう話す。
 「韓国製のコスメや食品はもちろん、韓国と業務提携、協賛している日本企業の製品も購入しないようになった」
 発端は知人に紹介された「2ちゃんねるまとめブログ」だという。
 「それまで2ちゃんねるに関心がなかったのですが、中国や韓国の実態を伝える書き込みを初めて読んでショックを
 受けました。韓流芸能人が韓国で日本を悪く言っていること、韓国の性犯罪率の高さ、商品にウジが混入すると
 いった企業の衛生管理のずさんさなどを知り、さらにネットで勉強するように。日本のマスコミが偏った報道しか
 しないことを知りました」

 彼女たちの多くが、ネットを通して”真実”にたどり着き、日頃感じていた矛盾が解決したと語る。
 それは、いわゆる「ネトウヨ」とは違うのか……? 
 「違います。私たちがしているのは日本人として当たり前のこと。許してはいけないことを許したくないだけ」(竹中さん)(抜粋)
 http://nikkan-spa.jp/312054

389 :
>>373
メリットの見えなくなった理由が「これって、全部jsでよくね?」なんだ
(デザパタならgithubでサンプルコードのレポジトリ見かけた)
文字コードとか、gem、railsで出来た既存資産でのアドバンテージ教えてくれ

390 :
一体今までどれほどの時間が=と==のせいで無駄になったことだろうか

391 :
>>389
俺自身Railsとかはあんまり知らんのでそこは何とも言えんが
JSで継承関係が絡むクラスベースOOPはあまりやりたいと思わんなあ

392 :
そこのあなた
TypeScript
ですよ

393 :
美女が手書きのボードでLinuxコマンドを教えてくれるアプリ「美女Linux」
http://gigazine.net/news/20121019-bijo-linux/
先をこされたrubyの負け
美女rubyを作って世界に売り込め

394 :
Rubyちゃん「…」

395 :
ド素人ですが教えてください Win7 Ruby193
入力
puts texts
出力
{"text1"=>"あいうえお", "text2"=>"かきくけこ"}
この状態から以下のように実行結果が出せるようにするにはどうしたらよいのでしょうか
入力
puts text1
出力
あいうえお
オリジナルの出力はハッシュのキーと値だと思うのですが、
valuesというメソッドを使おうとしたのですが、定義されていないとエラーが出て使えませんでした。

396 :
puts texts['text1']
#=>あいうえお
ってこと?

397 :
>>396 以下の様にエラーが出てしまいました
(ファイル名).rb:63:in `[]': can't convert String into Integer (TypeError)
後出しでもうしわけないですが、
もとのtextsが別の配列の中から抽出したものなのですが、そのあたりが原因なのでしょうか
このコマンド自体も大きなプログラムの中に私が追加しようとしているのです

398 :
ハッシュに並カッコでなく角カッコ使ってるとか

399 :
>>397
そのエラーが出るということは texts は Hash ではなく Array

400 :
>>398 角カッコが使っているかもしれません
putsだと>>395ですが、p やprint を使うとなぜか角カッコが頭と尻についてしまいます
 p texts
 #=> [{"text1"=>"あいうえお", "text2"=>"かきくけこ"}]
 print texts
 #=> [{"text1"=>"あいうえお", "text2"=>"かきくけこ"}]
そこで、よくわからないままeachメソッドをつかってみるとなんとなく、もとめてる出力がでました
 T1 = 0
 T2 = 0
 texts.each {|texts|
 T1 = "#{texts['text1']}"
 T2 = "#{texts['text2']}"
 }
 puts T1
 #=> あいうえお
激しく無駄の多いような気がしますが・・・

401 :
ruby1.8.7でmecab利用している初心者です
このサイトのプログラム(1.9.1用)を動かしたいと思っています
ttp://blog.fenrir-inc.com/jp/2011/10/ruby-mecab-japanese-keyword.html
require 'MeCab'がうまく行かなかったので
最初のrequire 'MeCab'を削除して代わりに
mecab = ""
text.each_line{|f|
IO.popen("mecab", "r+") {|pipe|
pipe.write(f)
pipe.close_write
mecab << pipe.read
}
}
puts mecab を書きました
このプログラムのmecab = MeCab::Tagger.newと書いた部分で
uninitialized constant MeCab (NameError)
というエラーが出るのですが「::Tagger」の意味が分からず困っています
どこを直せば動くのでしょうか
お願いします

402 :
>>400
その texts は、「Hash1つを要素として持つArray」だ。
"あいうえお"に到達するにはArrayの0番の要素(Hash)のキー"text1"にアクセス。
texts[0]["text1"]

403 :
>>401
MeCab::Tagger
require 'MeCab'が成功したら定義されていたはずの
モジュール(or クラス)MeCab の中に定義されている Tagger
ダミーでとりあえずそういう名前のが存在するようにすればそのエラーだけは
出なくなるだろうけど。


404 :
>>403
全然わからないっす(´・ω・`)
これとか参考になりますか?
ttp://blog.mwsoft.jp/article/33047430.html
とにかく>>401のリンク先と同じ結果を得たいのですが…

405 :
mecabとrubyバインディングがインストールできてないんじゃないの
OS名+ruby+mecab とかでぐぐれば動かすまでの解説が何かしら出るだろうから、
この手順までは進めたけどこの手順が分かりません、とか、この手順でこのエラーが出ました、とか書きなよ

406 :
>>405
そのためのmecab-rubyの配布が公式でなくなっていたので
IO.popenを使っていました
もっと調べてみます

407 :
>>406
見つけたー!できるかもしれないです!頑張ります!

408 :
ソウルからヨボセヨ 「ハングル輸出」は虚報 2012.10.20 03:01 [韓国]

 韓国独自の文字であるハングルは民族的自慢のタネで、10月9日が「ハングルの日」として以前は祭日だった。
 しかし祭日が多すぎると休日からははずされたため、復活を望む声が強い。
 来年には復活の可能性があるとかで、カレンダー業者が気をもんでいる。
 そのハングルをめぐってまずい話が起き問題になっている。
 先年、インドネシアの小さな島の部族がハングルを自分たちの「公式文字」に採択したというニュースがあり
「ハングルの優秀性を世界に示した」として官民挙げて大喜びした。
 教科書でも紹介されるまでになったのだが、最近、この話はマスコミが誇張したもので「公式文字採択」は虚報と分かった。
 政府も教科書や各種展示を手直しすることになったという。
 この少数部族というのはスラウェシ島に近いブトン島のチアチア族といい人口は6、7万人とか。
 固有の部族語を話しているが、韓国の団体が援助を餌にその部族語の表記にハングルを使うことを勧めた。
 その結果「公式文字に採択」となったというのだがインドネシアはローマ字が公用文字。地方の部族が別の文字を
公式文字に採択するのはありえない。
 実際は単にハングルを学んでいるといった程度だったのだ。ハングル愛国主義の勇み足である。(黒田勝弘)
http://sankei.jp.msn.com/world/news/121020/kor12102003020000-n1.htm

409 :
全然わからん…
ぐぐったけどそのまま使えないってことしかわからん…orz

410 :
○○というシステムを××言語で使えるようにしました、というものを利用するのに必要なものは
○○というシステムの動作に関する知識
××言語の使用に関する知識
のふたつ
どちらが欠けても利用できない
「○○というシステムを××言語で使えるようにしたもの」は、○○と××のどちらの知識も必要とする
当たり前っちゃ当たり前

411 :
mecabとrubyというよりwindowsの問題みたいです
名詞の数を数えたいだけなのに難しすぎてタヒにたい

412 :
1.8のMeCab.soなら、↓のページの一番下から落とせるよ
http://www.freia.jp/taka/blog/758/index.html

413 :
>>402 すげーすっきり書けた ほんとにありがとう

414 :
とあるウェブサービスにログインする必要のあるスクリプトを書いています。
テストのたびに毎回ログインさせるのはマズイと思うのですがどうしたら良いのでしょうか。
mockやstubとやらを使ってダミーのデータを返すようにするのが普通なんでしょうか。

415 :
はい
html = uri.read
のようなサーバアクセス部分を
# html = uri.read
html = File.read('200body.html')
のようにするようなイメージでOKです
実際はレスポンスヘッダとかも返さないといけないのでサーバアクセスメソッドごと切り替える形になるかと
いちいち手動でやるのめんどくへえ且つNet::HTTP利用ライブラリ経由で取得してる場合はWebMockなどが使えまする

416 :
ありがとうございます。
webmockを導入して勉強中です。

417 :
ttp://rubyinstaller.org/
が落ちてるっぽいんだけど、ミラーとか再配布してるとことか知ってる人いますか?

418 :
今落ちてはいない気がする
sourceforgeにファイル自体はあるから、その理屈では仮にサイトが落ちてもなんとかなるんだけど…

419 :
rubyの鯖っていつも落ちてるイメージがある

420 :
復活してました
無事落とせました

421 :
お、新しいやつ来てたのか。俺も明日落とそう

422 :
どこか落ちてると思ったらここで調べてる。
http://www.downforeveryoneorjustme.com

423 :
class Parent
 def initialize(name); @name = name end
 def child; Child.new end
 class Child
  def parent_name; "私の親は#{@name}です" end
 end
end
Parent.new("マスオ").child.parent_name
Child.new(@name) というのは避けて
私の親はマスオですという結果を得たいのですが、
どうすればいいでしょうか?

424 :
>>423
コンストラクタがダメなら多分アクセサメソッド使うのもダメなんでしょ?
Parent.new('ノリスケ').child.parent_name
Parent.new('ナミヘイ').child.parent_name
とか作った時どーすんの
ChildからParentに対する(またはその逆とかの)なんらかの参照が無ければ無理よ

425 :
子供に親の情報を持たせたくないなら親や外部に親子関係の情報持てば?

426 :
>>424-425の指摘が妥当
というか、>>423の構造はべつに「カッコ悪」くはない
それなりに素直でごく普通なので、堂々と使うといい

427 :
>>424 >>425 >>426
ありがとうございます。
おとなしくChild.new(@name)と修正しようと思います。

428 :
(flag ? arr.each : arr.revese_each){|i| puts i}
proc = flag ? &arr.each : &arr.revese_each; prco{|i| puts}
みたいな列挙の仕方を分岐するコードを
たまに書きたくなるんですけど、自然でうまいやり方ないですか。

429 :
>>428
こうじゃなくって?なんか別の方法ってこと?
(flag ? arr : arr.reverse).each{|i| puts i }

430 :
やりたい処理の流れをその都度日本語できちっと書いてから考えるようにするとわかる手の話のよーにも思える

431 :
>>428
sendくらいしか思いつかんなー。

432 :
正規表現について質問です。
文中にある固有名詞を全て先頭を大文字にしたいのですが、
str = 'This pen belongs to john smith.\nThat hat belongs to mary jane.\n'
@words_to_capitalize = ['john', 'smith', 'mary', 'jane', 'john rock']
capitalizeRegex = Regexp.union(@words_to_capitalize.collect{|e| /#{e}/i})
str.gsub!(/( |\.)(#{capitalizeRegex})( |\.)/io){
pre = $1; post = $3; mid = $2
pre + mid.gsub!(/(?:\b)(\w)/){$1.capitalize} + post
}
p str
これで、出力は
"This pen belongs to John smith.\\nThat hat belongs to Mary jane.\\n"
となるのですが、求めているのは
"This pen belongs to John Smith.\\nThat hat belongs to Mary Jane.\\n"
なのです。各行の最初にマッチしたものしか置換されません。
gsubを使って、マッチする場合はすべて置換するように書くことはできないでしょうか?
実際には、strが5000語くらいからなる長文で、大文字化する単語は4000語くらいあるので
正規表現の展開をあらかじめ行なっておかないと、単語ごとの処理では2億回も
ループを回す形になります。これだと分単位で時間がかかり、実用的でありません。
長くとも数秒単位で処理を終えたいのです。
たとえば、スペースなどの区切り文字で区切って、単語ごとに処理するという方法も考えられますが
そのやり方だと、'rock'だけでは大文字にしたくないが、'John Rock'とつながる場合は
どちらも大文字にしたいという要求に応えられません。

433 :
>そのやり方だと、'rock'だけでは大文字にしたくないが、'John Rock'とつながる場合は
>どちらも大文字にしたいという要求に応えられません。
前の語を参照するくらいできるでしょ

434 :
>>432
word2cap = ['john rock', 'john', 'smith', 'mary', 'jane',]
re = Regexp.union(word2cap)
str.gsub!(/\b#{re}\b/){ $&.gsub!(/\b\w+/){$&.capitalize} }
Hash使うのとどっちが早いんだろな

435 :
http://gazo.shitao.info/r/i/20121027200426_000.png

436 :
>>434
なんつーキモいコードだ…

437 :
いくつかご回答有難うございました。
>>433
それが、1語遡るだけならそれでも多少のコストは構わないんですが
中には2語以上遡らないといけないレアケースもあるので、そういうレアケースのために負うコストを考えると
区切り記号で区切って1語ずつ処理という手法では難しいのかと思います。
>>434
432では細かく書いてないのですが、単語区切りは一概に \b では処理できないのです。
というのも、たとえば"I don't smoke."というスペルがある場合、単語境界を\bで処理すると、
固有名詞 "Don"に引っ張られて"I Don't smoke."となってしまいます。
なので、\bで一般化することはできず、432で書いた他にも( |,|^|"|'|\?|!|--+)みたいなことを
しないと漏れが生じてしまいます。
自然言語に対して一般化処理を行うのがかなり無理あるのは承知しているのですが
(たとえば、"bill"は固有名詞"Bill"かもしれないし、普通名詞"bill"かもしれないので
最終的な判断は人間が文脈で判断するしかない)、それでも機械的に処理できる範囲では
機械任せにしたいかなと。

438 :
>>432の正規表現が期待通りに動かないのは、後ろの( |\.)が
次の単語の前の空白を消費してるから
先読みが使えそうだけど他にもいろいろ条件がありそうだなあ
str.gsub!(/\b#{capitalizeRegex}(?=[\s\.\?!])/io){
英語の形態素解析ライブラリとか使ったらいいんでね?

439 :
>>438
なるほど!そこでしたか!
ありがとうございます。ライブラリはこれから探してみます。

440 :
>>435
このスレ民はそのダイエットできないな

441 :
島根県と言えば…
アレ?なんだろ?浮かばねえな…

442 :
ヒント:このスレのタイトル

443 :
答: いずもまがたまの里

444 :
砂丘

445 :
それは取鳥

446 :
取烏

447 :
最近島根に初のスタバが出店して
地元では大変なニュースになってたようです

448 :
Ruby初心者どころか、今日からRubyを始めてみようという者なんですが、
.rdoc形式のファイルってどうやって読むのですか?
テキストエディタでももちろん読めますけど、なんかタグもついてるし、
なにかビューワーがあるのですか?
ぐぐってもわからんかったです

449 :
ri

450 :
ri ?
じぇんじぇんわからんちん

451 :
そのまんま読んでいいよ
そのまんま読めるというのがいちおう売りなので

452 :
>>451
例えばrails new hugeとかやって
できるREADME.rdocみると
<tt>hogehoge</tt>みたいなタグがついてるけど
なんか対応したビューワーがあるんじゃないの?

453 :
ないです

454 :
いちおうHTMLに変換して読むということができるんだが、それは自力だ
めんどくさいので、ファイルとして第三者に提供するのでなければ誰もいちいちやらない
そのまま読んだほうが早い

455 :
>>453,454
そうなんですね、、、なんか不思議ですが了解です

456 :
<rails>hogehoge</rails>

457 :
RubyでOpenGLプログラミングできますか?

458 :
なぜOpenGL

459 :
自分でGPU制御してもいいんだけとZバッファとか面倒くさいからGL使いたい
半透明ポリゴン使うからZ順には並べますがめり込んでる処理とかがですね・・
Rubyじゃかけませんよね

460 :
そういうのはruby openglとかでググった方が早いだろ

461 :
できるかできないかでいえばできる
してもいいししなくてもいい
個人的にはしない方が良いと思う
メリットほとんどないし

462 :
最近使い始めたガチの初心者だけど
htmlを書き換えるプロキシがことごとくできない…
サイトにあるサンプルすら動かないってどういうこと…

463 :
サイトのサンプルを動かせるようになってからプログラミングしましょう。

464 :
プロキシサーバはアプリケーションではなくサーバなので、通常のプログラムではありません(語弊だらけ)
ユーザーが自作のサーバ(しかもプロキシサーバ)を立ち上げることを前提としていないセキュリティソフトが多いので、
とりあえずはそのへんのパーソナルファイアウォールとかアンチウィルスソフトとかの設定を見直し

465 :
>>462
そのサンプルと動作環境を特定してくれないとたいしたこと答えられないよ

466 :
自作のプログラムがアンチウィルスソフトに撃墜されたというのはよくある話だな

467 :
自分の動作環境は
OS:windows7
Rubyのバージョン:ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
です。
動かそうとしているサンプルは
http://thinkit.co.jp/article/117/3/
にある、11731フォルダに入っているproxy2.rbやproxy3.rbです。
これらのプロキシを動作しながらページを見ることはできるのですが
書き換えだけができていない。という状態です。
また同じフォルダに入っているproxy4.rbはコンテンツフィルタとして問題なく動作しています。
>>464さんのアドバイスは実践しましたが特に変わりませんでした。
本当に初心者な相談で申し訳ないです…こういった書き方で大丈夫でしょうか

468 :
http://gazo.shitao.info/r/i/20121027200426_000.png

469 :
いまいち要領を得ない
結局、そのサイトのスクリプトを(全く修正せず)実行したが、
いくつかのスクリプトは記事のどおりに動いてないってことか?
proxy2.rbを見ると content-type が text/html でないと処理しないみたいだから
そうでないページでテストしたのでは?


470 :
>>469
試行錯誤で色々試してみたのですが、あなたの言う通りです
content-typeがtext/htmlでないページでテストしていたようです…
次はこれをどのページでも対応できるように考えてみようと思います

471 :
http://codepad.org/N5LwewOA

472 :
proc と Proc.new と lambda と ->(){} に違いはありますか。
またどのように使い分けた方がいいか、指針はありますか。

473 :
WindowsXP ruby1.9.3 RDEver1.1.1 を使っています
「たのしいruby」を片手に勉強してるのですが
def hello
print("hello,ruby.\n")
end
→helloで保存
require "hello"
hello()
→use_helloで保存
これでuse_helloを実行するとエラーが出ます どこがダメなのでしょうか

474 :
たのしいRuby 1.9.2 でぐぐる

475 :
>>474
ありがとうございます
さっそくググってきます
お手数かけました

476 :
エラーメッセージを読めばどこがダメか書いてあるよ

477 :
それはたぶん気のせい

478 :
Rubyのバージョンの問題だな
俺もそれやられたわ
Ruby1.9.2だっけからは$LOAD_PATHにカレントディレクトリが含まれてないからそれだと読み込めない
require './hello'またはrequire_relative 'hello'で解決

479 :
>>472
まず2つに分けると
Proc.new と proc が同じ。
-> と lambda が同じ。
Procのインスタンスを返すという意味ではすべて Proc.new なわけだが、
上段の作り方だとProc#lambda? が false
下段の作り方をしたものは Proc#lambda? が true
になる。
-> は lambda のタイプ量を減らすために構文レベルに組み込んだもの。
(首を捻るとλに見えるはずとmatzは主張しているとかいないとか)
lambda? が true を返すProcは、
* 引数の扱いが厳しい(数が違えばエラー)
* Procのブロック内でreturn すると Proc から return する。
lambda? が false を返すProcは、
* 引数の扱いが緩い(多重代入と同等)
* Procのブロック内でreturnすると、Procを渡されたメソッドからreturnする。
おおまかな使い分けとしては、
(値を返す)無名関数的に使うときは lambda
メソッドにコード片を渡す時は proc
という感じ。

480 :
procって書いてあると、あとでブロックつきメソッドの一部にするのかなーと思う
lambdaって書いてあると、あとで代入してメソッドみたく使うのかなーと思う
Proc.newって書いてあると、原理主義者が出たぞー逃げろーと思う
->って書いてあると、->wwwwwwwwwwwwwwwwwwと思う

481 :
すみません
eachとかのメソッドがどこのクラスに属しているかは
どうやって調べるんですか?

482 :
rubyの場合は関連の無い様々なクラスがそれぞれ独自にeachを実装する

483 :
hoge.each…
という記述があった場合、
p hoge.class
hoge.each…
とかやって、hogeがなにクラスのオブジェクトかを調べて(またはスクリプトから推測して)、そのクラスのマニュアルなりソースなりを読む
p hoge.class
とやってArrayと表示されたらそのhogeはArrayクラスのオブジェクトだからArrayクラスのインスタンスメソッドArray#eachを調べる
もしArrayクラスがINHとかいうクラスを継承してて、Arrayクラスにeachというインスタンスメソッドが定義されてなかった場合はINH#eachも探す
もしArrayクラスがINCとかいうクラスをincludeしてて、Arrayクラスにeachというインスタンスメソッドが定義されてなかった場合はIINC.eachも探す

484 :
それがダックタイピング。
アヒルのように鳴くものはアヒルであるし、 each メソッドがあるクラスはコレクションである。

485 :
p hoge.method(:each).source_location
とかやると組み込みクラスじゃなければそれが定義されてるソースがわかる
組み込みクラスだとnilが返ってくるが、そんときはclassを調べて以下のリファレンスとかから探せばいい
http://doc.ruby-lang.org/ja/1.9.3/library/_builtin.html

486 :
クラスを知りたいときには継承関係もいっしょにわかるこれが便利だな
p hoge.class.ancestors

487 :
irbのヒストリ機能は便利なのだが、過去の入力が長くて折り返しがあった場合、
最終行しか編集できないのは、どうにかならないものか。(Windows)

488 :
emobile

489 :2012/11/02
emobile
TOP カテ一覧 スレ一覧 2ch元 削除依頼
自然言語処理スレッド その3 (617)
C言語なら俺に聞け(入門編)Part 109 (392)
画像処理 その13 (876)
Borland C++ Compiler オ ワ タ (313)
Ruby 初心者スレッド Part 50 (489)
Google App Engine for java (266)
--log9.info------------------
休職から仕事へ復帰しようとしている人22人目 (784)
昼間ライト点灯虫の性欲欠落アスペ1200同性愛池沼番長 8 (792)
過眠(過剰睡眠)からの回復相談6 (586)
ドグマチール38 (214)
境界例(ボーダー)被害者友の会Part117 (949)
札幌の心療内科・精神科 Part8 (224)
★自己愛性パーソナリティ障害の特徴 36人目★ (777)
そもそも自殺が悪いという風潮がおかしい (292)
アスペルガー社員に配慮したら上にパワハラと言われ (288)
表情恐怖 part3 (240)
鬱でも必死に会社に行っている人291 (864)
統合失調症10年以上のベテランのスレ (647)
レキソタン・セニランepisode 33 (496)
統合失調症は治るの?治った人手を挙げて! (503)
【山形】木の実町診療所【コーヒー飲み放題】 (580)
アスペルガー症候群なのに国語が得意4 (231)
--log55.com------------------
キッチン周り道具&小物*使って良かった調理器具38
カレー大好き!39皿目
【買って良いもの】業務用スーパーおすすめ食材7【悪いもの】
酒の肴〜78品目
じゃがいも>>越えられない壁>>>>里芋(失笑)
クワ(ヤマグワ)・ヤマモモ
滋賀県のラーメン屋を語ろう
ラーメン二郎 前橋千代田町店 ★5