トップページ⇒tech
1001コメント373KB

Ruby 初心者スレッド Part 50

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/07/29(日) 14:26:28.92
プログラミング言語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/
0046uy2012/08/06(月) 18:55:17.60
printf "_ %{a}" % { a: 4 }
0047デフォルトの名無しさん2012/08/06(月) 19:35:44.81
>>46
それです
ありがとうございます
0048デフォルトの名無しさん2012/08/06(月) 19:55:01.01
あれ、%{sym} ってマニュアルに書いてなかったっけ?
puts "%{symbol}" % {:symbol => 'val'}
val
シンボルじゃないと動きません
0049デフォルトの名無しさん2012/08/08(水) 09:00:24.68
メソッド内で特異クラスの宣言をしたいんですけど、
何か方法はありませんか?

def f
  n = 0
  class << n
  end
end

f
0050デフォルトの名無しさん2012/08/08(水) 09:15:22.65
>>49
Fixnumオブジェクトは特異クラスを持てない
メソッド内で宣言すること自体は普通に出来る
0051デフォルトの名無しさん2012/08/08(水) 09:19:29.58
>>50
そうなんですね
気づきませんでしたありがとうございます
0052デフォルトの名無しさん2012/08/08(水) 10:49:16.72
テキストファイルの全行を配列に読み込みたい(改行文字は削除)場合、
こうやってるんですが、もっと簡単な書き方ありますか?
lines = open(filename) {|f|
f.readlines().map {|l| l.chomp}
}
getsとかeachとか使うにしてもchompは省略できないんですかね?
0053u2012/08/08(水) 12:50:05.94
p open($0).read.split("\n")
p open($0).readlines.map(&:chomp)
p [*open($0)].map(&:chomp)
0054デフォルトの名無しさん2012/08/08(水) 18:51:31.56
IO.foreach(filename).map{|l| l.chomp}
0055デフォルトの名無しさん2012/08/08(水) 20:39:14.12
今ネット上の画像の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

0056デフォルトの名無しさん2012/08/08(水) 20:45:48.59
追記ですが、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のデータでウィンドウを作る

という流れで作っていたのですが・・・できませんでした
0057デフォルトの名無しさん2012/08/08(水) 20:51:30.98
とりあえず画像はローカルに保存して使え
まさか実行するたびに何百回もサーバにアクセスして画像を取得していたわけではあるまい
0058デフォルトの名無しさん2012/08/08(水) 22:06:46.10
やはりそれしか手段はありませんか・・・
まあ、rubyってそういうものですしね。参考になりました。ありがとうございました
0059デフォルトの名無しさん2012/08/08(水) 22:50:40.06
tmpdirとかに保存すりゃいい
0060デフォルトの名無しさん2012/08/08(水) 23:08:01.45
外部プログラム 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 になってしまいます
0061デフォルトの名無しさん2012/08/08(水) 23:23:51.39
使ったことないけど IO.for_fd ってのがあるようだ。
0062デフォルトの名無しさん2012/08/08(水) 23:24:39.90
あ、IO.new が整数を第1引数に受け取った時の動作と一緒か。
0063デフォルトの名無しさん2012/08/08(水) 23:28:53.29
perlでは未オープンのfdを構わず使用できてしまうのか。
0064デフォルトの名無しさん2012/08/09(木) 09:47:35.72
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が出力される
0065デフォルトの名無しさん2012/08/09(木) 21:07:05.14
>63, >64 を見て自分の勘違いにきづきました。
perl が error をはかないので勘違いしてました。
単独動作で error をはくだけで、socat の引数で
ruby script を与えれば動いていました。
socat 側でdescriptor 作って、 ruby の script を
call しているから、ruby 側は既に存在している fd を
割り当てるだけでよかったんですね。
コメントいただいた方々ありがとうございました。
0066デフォルトの名無しさん2012/08/10(金) 01:01:20.23
今更RubyにStruct なんてのがあるのを知ったクチなのですが、
このクラスの上手な使い方が思いつきません(ずっとclassを使ってやってたので)

使用例の参考になるコードなどありますでしょうか?
0067デフォルトの名無しさん2012/08/10(金) 01:19:39.23
複数のデータの組をまとめて扱いたい程度のときに便利。
initializeと読み書きアクセサしかないようなクラスを作るイメージ。

LogEntry = Struct.new(:issuer, :severity, :timestamp, :message)

定型的なアクセサの生成をStructに任せ、返ってきた
無名クラスを継承して振るまい(メソッド)だけ追加する例。

class Location < Struct.new(:latitude, :longitude, :altitude)
  def country
  end
end

0068デフォルトの名無しさん2012/08/10(金) 05:58:40.93
>>67のように迂闊に使うとめんどくさいことになることは異論を待たない
initialize とアクセサメソッドが欲しいのならアクセサメソッドだけ定義しろ

class Location
attr_accessor :latitude :longitude :altitude
def country
end
end

使い道が思いつかない、または、他の手段で代替可能なのなら、絶対に使うべきではないクラス
0069デフォルトの名無しさん2012/08/10(金) 06:09:36.16
説得力皆無です
0070uy2012/08/10(金) 09:08:21.98
>>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
0071uy2012/08/10(金) 09:14:46.22
すみません、値を間違えました
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

0072デフォルトの名無しさん2012/08/10(金) 10:41:35.51
HashやClassだと、後から任意のものを突っ込めすぎて自由度が高すぎる、って時に使う感じ?
0073デフォルトの名無しさん2012/08/10(金) 11:04:18.15
そんな感じじゃね
基本classでいいよ
0074デフォルトの名無しさん2012/08/10(金) 11:27:59.16
Structは「Struct使って便利になった」と思うことよりも「やっぱStructにするんじゃなかった」と思うことのほうが多い
最初からがっつり仕様が固まってるプロジェクトでおもむろに使うデータ構造だと思う
0075デフォルトの名無しさん2012/08/11(土) 00:16:01.74
あるベンチでは、RubyのStructはHashよりも遅いという結果が出てたけど、
こうなると利用シーンがよく分からないね
0076デフォルトの名無しさん2012/08/11(土) 00:38:57.51
というか、Rubyのデータ構造の中ではHashが飛び抜けて速い(配列よりも速い)
「Hashのようなもの」を自前で実装した場合は、Hashそのものよりも格段に遅い
Hashに移譲したとしても、移譲自体が遅いのでやっぱり遅い
0077デフォルトの名無しさん2012/08/11(土) 00:48:10.35
それはHash引数とかに使うからかなり頑張ったんじゃ・・・
0078uy2012/08/12(日) 20:50:51.52
質問です
オブジェクトに追加した特異メソッドの削除を行いたいと思ったんですけど
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"
0079デフォルトの名無しさん2012/08/12(日) 22:15:15.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
0080uy2012/08/12(日) 22:22:46.17
>>79
見落としていました!!
ありがとうございます!
0081デフォルトの名無しさん2012/08/14(火) 14:19:55.08
これわからないです誰かよろしくお願いします
以下で与えられるフィボナッチ数anを、入力したnに対して計算して表示するプログラムをtext.rbで保存して実行してください.
A₀=1,a₁=1,an=an−1+an−₂
0082デフォルトの名無しさん2012/08/14(火) 14:33:36.43
>>81
よっしゃ実行した次はなにすればいい? って返せ
0083デフォルトの名無しさん2012/08/14(火) 14:35:31.13
>>82
?
0084デフォルトの名無しさん2012/08/16(木) 02:34:12.27
プログラムの一番最後の=endと書いた行でsyntax errorが出て困ってます
うまく動いていたプログラムの中身をまるまるコピー
→新規作成でまるまる貼り付け
→名前を付けて保存
とやったらエラーが出るようになりました
調べたら改行の文字コードの問題っぽい気がするのですがどうやって直せば良いのでしょうか
RDE使ってます
0085デフォルトの名無しさん2012/08/16(木) 02:47:51.68
>>84
全然ちがうところ間違えてました
スルーしてください
0086デフォルトの名無しさん2012/08/17(金) 23:09:56.09
macrubyの質問もこちらでいいのでしょうか?
当方、macrubyにてプログラムをくんでいますが、
どうやったら終了時に実行されるメソッドを記述できるのかわかりません。
起動時に<def applicationDidFinishLaunching(a_notification)〜>が実行されるように、
終了時にもなにか構文みたいなものがあると思うのですが、ご存知の方いらっしゃいますか?
<def applicationWillTerminate(notification)>とか
<def windowWillClose(notification)>とかを試してみましたが、ピクリとも動きません・・・

0087デフォルトの名無しさん2012/08/18(土) 01:32:56.88
>>86
新Mac板にも前はRubyスレあった気がしたんだが…今見たら見付からないな
Googleで「applicationDidFinishLaunching site:developer.apple.com」でググったら
それっぽい資料がいくつかヒットするけど、どれかに無い?Terminateとか付いてるのあるからその辺りに
0088デフォルトの名無しさん2012/08/18(土) 15:58:01.66
>>87
レスありがとうございます! なんだかんだでできました!
def applicationWillTerminate(sender)で動きました!
もう一ヶ月くらい煮詰まっていたから嬉しい! 本当にありがとうございました!
0089デフォルトの名無しさん2012/08/18(土) 18:30:47.12
encodeでUTF8からSJISに変換するときに
例えば全角チルダとか割り当ての無い文字があるとエラーになりますがその文字だけを無視するにはどうすればいいでしょうか?
0090デフォルトの名無しさん2012/08/18(土) 19:54:06.14
>>89
:undef => :replace, :replace => ''
0091デフォルトの名無しさん2012/08/18(土) 20:32:28.42
>>90
ありがとうございます
0092uY2012/08/19(日) 06:50:09.11
macRubyって知らないんだけど
at_exit { } とか END { } 動かないの?
0093デフォルトの名無しさん2012/08/19(日) 14:07:20.87
>>92
xcodeでマックアプリを組んでいますが、残念ながら動かないです。
多少のobject-cの知識がないとmacrubyは厳しいです。
でも見た目のいいアプリがrubyで作れるのは最高です!
0094uY2012/08/19(日) 17:02:01.77
左様か
0095uY2012/08/19(日) 17:03:05.20
質問なんですけど
Enumeratorを継承したクラスの使い方ってこれであってますか?
http://ideone.com/5m5qa

やりたいことは、
Enumerator.new内でまわしてるオブジェクトに外部から
>p y.cc.x
こんな感じにアクセスしたいって事なんですけど


なんかsuperって引数が暗黙的に渡される?っぽいじゃないですか
けどEnumerator.newのinitializeは引数が渡されるとブロックが評価されてない?ので

superとは別にEnumerator.newを呼び出してEnumを作ってます
一応動いてますけど、二重になってる気がして不安なんですけど
0096uY2012/08/19(日) 21:22:10.76
内部動作意味不明ですけど
ブロックじゃなくて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]
0097uY ◆gXFLM6waxs 2012/08/20(月) 21:05:12.74
質問です

: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)

こうなる事が分かりました
いらなくなったシンボルを削除する方法ってあるんでしょうか?
0098uy2012/08/21(火) 04:28:14.40
無理っぽいですね
シンボルは大事に使っていくことにします
0099デフォルトの名無しさん2012/08/21(火) 04:39:46.44
Cursesと、Term::ANSIColor for Rubyを使って、コンソールでシンタックスハイライトができるテキストエディタを目指し作っているのですが、以下のリポジトリのmain.rbを実行すると、最初の文字「1」が黒字になるというバグが発生します。
このプログラム(main.rb)は、README.rbを読み込んで、出力するものです。
https://github.com/217/VMacs
このバグに2時間ほど悩んだのですが、どうにも解決できませんでした。
ライブラリの相性の問題なのでしょうか?
わかる方がいらっしゃったら、教えてください。
0100デフォルトの名無しさん2012/08/21(火) 06:24:28.99
>>99
Linuxでも確認。このケースでは、setposの後にrefresh呼び出しで解消できるけど、

cursesを使う時は、表示が乱れるので標準出力へのprintは避けた方が無難。
cursesの作法で色指定するといいよ。
0101デフォルトの名無しさん2012/08/21(火) 07:30:26.12
クラスメソッドはドットで呼んだほうがいいと思う

あれは「クラスに属する関数なら::で呼ぶのがオブジェクト指向言語の常識」という、
ローカル実装を普遍定義と勘違いした痛い面倒な人を飼い馴らすための時代遅れの機能
0102デフォルトの名無しさん2012/08/21(火) 11:01:55.72
公式では特定の言語のユーザーからの移行をスムーズにするため、みたいなマイルドな表現をしてたのになんでそうはっきり言うのん
0103デフォルトの名無しさん2012/08/21(火) 11:04:50.50
移行が目的じゃなかった、経験者向けだった
まあ、どっちも似たようなもんだけど

Rubyでの呼び方が絶対的にタダシイわけではないけれど、
Rubyではそう使うということになってるんだから、Rubyにおいては極力そのように使ってほしいよね
0104デフォルトの名無しさん2012/08/21(火) 15:54:50.08
ドット呼び出しを推奨する理由は、パーサーの特殊な振る舞いを回避する為。

:: だと大文字で始まる名前が定数と解釈されるので、メソッドと解釈させるには関数呼び出しの () が必要になる。
. で記述すると一貫して () を省略出来る。
0105デフォルトの名無しさん2012/08/21(火) 20:12:53.72
>>100
とりあえずsetposの後にrefresh呼び出したら動きました。
Cursesで色指定する事が出来るのを知りませんでした。なんとか動きました。
ありがとうございました。


0106デフォルトの名無しさん2012/08/22(水) 21:58:17.44
今年のクリスマスプレゼントは何でしょうか?
0107デフォルトの名無しさん2012/08/23(木) 00:14:29.47
intgerが入っているarrayがあるのですが、その要素を全て加算するには、
やはり以下のように外部変数を置くしかないのでしょうか?
 v = 0; arr.map{ |i| v+=i }; return v
0108デフォルトの名無しさん2012/08/23(木) 00:34:08.73
外部というか、どっかに一時記憶用の変数は必要
irb> puts [1,2,3].inject{|r,x| r +=x}
6
それがスコープで消えるかどうかの違いでしかない
0109デフォルトの名無しさん2012/08/23(木) 00:37:49.69
>>107
単純に足すだけならこれでもk
(1..10).to_a.inject(:+)
#=> 55
0110デフォルトの名無しさん2012/08/23(木) 00:39:02.62
畳み込みを使っていいなら

[1, 2, 3].inject {|a, b| a + b }

ではダメなん?
0111デフォルトの名無しさん2012/08/23(木) 00:50:58.00
Array#sumは欲しい欲しい言われてて、議論を煮詰めると「メソッドを呼べればいい」「+でなくてもいい」に必ずなって、んで結局>>109になる
現在のRubyにおける一般的最短は arr.inject(:+)
中身的には>>110
変数内部効率ウンタラを求めてるんじゃなくて単に見かけで変数がなければいいだけだと思うので、Ruby1.9でarr.inject(:+)するかRuby1.8/1.9で>>108しろ
0112デフォルトの名無しさん2012/08/23(木) 03:17:55.02
Rubyじゃなくてプログラミングの問題かもしれませんがRubyでやってるのでここで質問します
操作Aのあと操作Cを行う,ということを繰り返したいのですが,
もし操作Cでエラーが出る場合はAとCの間に操作Bを行わなければなりません
操作A
while
begin 操作C
rescue 操作Bやってから操作C

0113デフォルトの名無しさん2012/08/23(木) 03:19:08.54
すいません途中で送信してしましました
今書いているプログラムが
操作A
while
 begin 操作C
 rescue 操作Bやってから操作C
 end
さらにCのあとにやりたいこと
end
0114デフォルトの名無しさん2012/08/23(木) 03:20:46.42
度々すみません…orz
>>113のように書いているのですが,操作A→Cだけで済むようなときにエラーが出てしまいます
こういうパターンって例外処理ではないのでしょうか?
0115uY2012/08/23(木) 03:35:51.05
begin
# 操作C
next ########################NEXT#########################
rescue
# 操作Bやってから操作C
end
# さらにCのあとにやりたいこと
0116デフォルトの名無しさん2012/08/23(木) 03:39:57.72
>>114
ちょっと話を整理して欲しい所

操作Cを実行せずに、操作Cでエラーが出るかは分からないのだから
「もし操作Cでエラーが出たら、操作Cの前に操作Bをやる」
という制御の流れは実現不可能だ

基本的な制御構造はA→C→A→C→……だと思われるので

while 条件
 操作A
 操作C
end

でいいと思う。ここにどう操作Bを足すかは、やりたいことによる
0117デフォルトの名無しさん2012/08/23(木) 03:48:46.33
>>116
ありがとうございます
今回は操作Bを行うきっかけが「Cができるかできないか」としか書けないので
例外を使う方法で考えてみました
なのでBは例外的に必要というよりは,「CができないならBをつかう」という一種の選択肢なのです
2回に1回くらいBを使わなければならないので...
0118デフォルトの名無しさん2012/08/23(木) 05:36:06.48
後出し後出し後出し後出し後出し後出し後出し

本当にそうとしか表現できないのなら、なにをしたいのか本当は自分でもわかっていない
>>112と>>117の時点でまったく別のことを喋っている
自分でもわかっていない粒度・抽象度のものを私たちが理解して回答してあげることはできない

ということで、いっそ全部喋るか、適切な粒度にざくざく切るという行為に時間かけろ
Rubyには条件分岐とループと例外によるジャンプしかないんだから
0119デフォルトの名無しさん2012/08/23(木) 06:50:57.47
初心者は例外使うなて
0120デフォルトの名無しさん2012/08/23(木) 07:15:20.40
メソッドは放っておいても何らかの値を返し、nilが偽として動作し、条件のcond部分での変数代入が日常でしかもcaseが賢いRubyでは
「例外を使うべき例外的場面」なんてのは例外使いまくって火傷どころか焼死しないとピンと来ない
公開ライブラリでないのなら、初心者はぜひ例外使いまくって泣いてください
0121デフォルトの名無しさん2012/08/23(木) 08:27:20.67
>>114
rescue節で実行している操作Cで出た例外を捕捉する記述がないから

begin
 操作C
rescue
 操作B
 retry # beginに戻る
end
0122デフォルトの名無しさん2012/08/23(木) 08:36:49.47
>>117
マニュアルの制御構造を参照してね。

begin
  〜
rescue ErrorA
  ErrorA例外時の処理
rescue
  StandardErrorとサブクラス例外時の処理
else
  例外が発生しなかった時の処理
ensure
  必ず実行する処理
end
0123デフォルトの名無しさん2012/08/23(木) 08:52:53.65
>caseが賢いRuby

else if を使いこなせない馬鹿のための syntax sugar
0124デフォルトの名無しさん2012/08/23(木) 09:29:22.65
elsif
0125uy2012/08/23(木) 09:31:21.62
case proc使ってないやつなんていんの?
どんな発展途上国からおこしの技術者だよ
0126デフォルトの名無しさん2012/08/23(木) 18:04:09.25
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して作るしかないのでしょうかね。。
0127デフォルトの名無しさん2012/08/23(木) 18:43:00.68
>>> socket.inet_ntoa(struct.pack('i4', socket.htonl(int('10101100000100000000101000000001', 2))))
'172.16.10.1'
0128デフォルトの名無しさん2012/08/23(木) 19:05:10.86
>>126
それだとエラーになったので、素直に2進数で渡してみたよ。
ruby1.9.1 -e "require 'ipaddr';p IPAddr.new(0b10101100000100000000101000000001,Socket::AF_INET).to_s;"
"172.16.10.1"
0129uy2012/08/23(木) 19:07:27.38
>>> "10101100000100000000101000000001".scan(/\d{8}/).map{|x|x.to_i(2)}*"."
'172.16.10.1'
0130デフォルトの名無しさん2012/08/23(木) 19:34:37.52
ありがとうございます、参考にしながらこうやりました。

a = "10101100000100000000101000000001"
p IPAddr.new(a.to_i(2) ,Socket::AF_INET).to_s
 => "172.16.10.1"
0131デフォルトの名無しさん2012/08/23(木) 19:56:56.34
俺の目には>>118が読解力なさ杉にしか見えないが
0132デフォルトの名無しさん2012/08/23(木) 20:07:18.83
一行目からして電波なんだから触らないでおけ
0133デフォルトの名無しさん2012/08/23(木) 20:11:58.61
フラミンゴ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羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕
0134デフォルトの名無しさん2012/08/25(土) 09:42:26.82
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

これだと、同じ数が並ぶわ、配列のサイズもバラバラで全くうまくいきません
0135デフォルトの名無しさん2012/08/25(土) 09:51:32.76
(1..20).to_a.shuffle
0136デフォルトの名無しさん2012/08/25(土) 14:30:00.74
おぉ、1行で済むとは・・・
ただ、1.9では .to_a は使えない様なので arry.shuffle で良さそうですね 
ありがとうございました。
0137デフォルトの名無しさん2012/08/25(土) 15:32:57.30
(1..20).sort_by{rand}
とか考えたけど、shuffle1つで済むのか
やっぱりArrayとかEnumerableとかのメソッドは流し見して覚えておくべきだね
0138uy ◆gXFLM6waxs 2012/08/26(日) 00:57:04.78
暗記って
1日10個ずつ確実に覚えるよりも
1日100個を流し読みしたほうが効率いいんだよ
0139デフォルトの名無しさん2012/08/26(日) 14:04:13.44
rescueで特定の例外を捕捉したらwarnでメッセージを出力しているのですが、cronで実行した時のみwarnの出力を抑制するなんてできますか?
crontabの設定で対象のrubyプログラムの標準出力のみ/dev/nullにリダイレクトしていますが、rescueで捕捉したエラーについてはメールされるのを防ぎたいです。
warnでエラーを確認したいのは直接実行する時だけで、cron実行時は想定していないエラーのみ確認したいのです。
0140デフォルトの名無しさん2012/08/26(日) 14:26:31.17
>>139
ruby のコマンドラインオプションに -W0 を追加する
01411392012/08/26(日) 15:37:49.78
>>140
なるほど!ありがとうございます。
0142デフォルトの名無しさん2012/08/27(月) 23:56:21.48
ruby1.9にちゃんと付いてきているIDEってどのへんでしょうか?
Netbeansは打ち切られていて。。
0143デフォルトの名無しさん2012/08/27(月) 23:59:47.86
RubyMineとか。
0144デフォルトの名無しさん2012/08/28(火) 00:37:49.99
>>142
emacsのruby-modeって、rubyの方がサポートしてるんじゃなかった?
0145デフォルトの名無しさん2012/08/28(火) 22:47:30.79
2つの文章の類似度を判定するサンプルプログラムありませんか?
Ruby1.8でMeCabを使おうと思っているのですがすでにサンプルプログラム落ちてたりしませんかね…
■ このスレッドは過去ログ倉庫に格納されています