Ruby 初心者スレッド Part 50

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語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デフォルトの名無しさん:2012/07/30(月) 00:31:10.11
【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デフォルトの名無しさん:2012/07/30(月) 00:32:31.62
・いつものエディタとターミナルという普段着でお越し下さい
・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ
・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない

Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか?
A.好きにしろ

※RubyやRuby使いに対する不満や愚痴などは本スレやバトロワスレなどをご利用下さい
4uy:2012/07/30(月) 05:26:01.45

$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デフォルトの名無しさん:2012/07/30(月) 15:05:07.22
Rubyが遅いというのはCと比べてとかの相対的な批判であって、
ハードウェアを考慮していない。

実は30年前のCと今のrubyでは今の方のrubyの方が早い。
6デフォルトの名無しさん:2012/07/30(月) 19:39:24.36
Array#delete_if はあっても Array#grep が無いというのはFAQでしょうか?
7デフォルトの名無しさん:2012/07/30(月) 19:40:42.79
前スレ最後のやつお願いします
8デフォルトの名無しさん:2012/07/30(月) 20:01:00.74
>>6
irb> [1,2,3].grep(1)
=> [1]
irb> %w[1 2 3].grep(/1/)
=> ["1"]
オイェァ
ただし、あんまし使い出がないメソッドであることは否定しない
中途半端に使うと肝心なとこで裏切られるので(自業自得だが)、ふつうにfindとか使うのおすすめ
9デフォルトの名無しさん:2012/07/30(月) 20:03:35.50
>>7
> はたらきたくないでござる
うっせーバカ
10デフォルトの名無しさん:2012/07/30(月) 20:10:54.89
>>9
せめてどうググればサンプルなどが出てくるか教えていただけませんか?
回数指定をする繰り返しでもなく、このような例が見つからずに途方に暮れています
11デフォルトの名無しさん:2012/07/30(月) 20:11:57.07
物凄く一般論としては、現在のread moreとかはJavaScriptやらCSSやらで実装されていることが非常に多い
単純な<a>リンクのクリックでは動作しないかもしれない
サイトが固定なのなら、本文ページのURLを自力で作成するのが妥当
全部で何ページあるのかとかはそりゃ自分でHtML読んで調べろ

もし単純な<a>リンクであることがわかってるのなら、そりゃその続きを読むリンクがそのページにまだあるかどうかで最終ページの判定すればいいんじゃないの
次のページがないのに次のページのリンクが有効であることはまずない
12デフォルトの名無しさん:2012/07/30(月) 20:13:58.04
さらにもし、現時点でなにを言っているのかさっぱりわからないのなら、それはライブラリの問題ではなくRuby基礎の問題
Rubyの基礎がまったくできていないために、なにもできない状態になっている

ライブラリを使うことは一旦諦めて、Rubyの基礎の勉強をするといい
13デフォルトの名無しさん:2012/07/30(月) 20:47:59.36
>>11
よくわかりました!ありがとうございます!
14デフォルトの名無しさん:2012/07/30(月) 20:55:31.07
gemライブラリはRuby使い倒せるレベルが前提だからなあ
初心者をなんかどうにかして助けてくれるような機能があることはないよ
15デフォルトの名無しさん:2012/07/31(火) 15:14:22.36
いま、Rubyに猪瀬知事が関心を持っている。
【五輪】 開会式、各国のなかで日本選手団だけが"謎の退場誘導"…猪瀬東京都副知事も関心寄せる
http://2ch-ranking.net/cache.php?thread=uni.2ch.net/newsplus/1343712277/&res=100
16デフォルトの名無しさん:2012/07/31(火) 23:04:52.75
>>15
おもしろくないすねー
17デフォルトの名無しさん:2012/08/01(水) 11:19:31.20
>>14
要望を適切に「分解」するのは人力で、それをやるために必要なのは基礎知識と経験だからねえ
今回で言うと「特定の語句があるまでURLの先を取得することを繰り返して本文を溜め込んで返すメソッド」みたいなものを求められても困る

…あっても面白そうな気はするが、デフォルトではたぶん年に1回くらいしか使えなさそうだ(自力で実装したほうが早い)
18デフォルトの名無しさん:2012/08/02(木) 01:13:38.04
module M; Object; end #=> Object
モジュール内からトップレベルの定数が参照出来るのってなんでだっけ

http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fvariables.html#prio
・トップレベルの定数定義はネストの外側とはみなされない
・モジュールだからancestorsにObjectが含まれるわけでもない
19デフォルトの名無しさん:2012/08/02(木) 02:18:49.44
疑問を整理

・ トップレベルに定義されたメソッドと定数は 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デフォルトの名無しさん:2012/08/02(木) 02:22:36.55
ああなるほどそういうことか
ありがと
21デフォルトの名無しさん:2012/08/02(木) 02:26:19.13
ようするにこういう状態ですよね
Moduleのインスタンスだってことを見落としてた
class Module < Object
def foo
# ここからObjectの定数が見える
end
end
22デフォルトの名無しさん:2012/08/02(木) 02:30:21.51
>>21
そっすなー

マジカルさ加減で言うとトップレベルがObjectに行くほうがマジカルなんだけど、そこはとりあえずスレ的には丸覚えで
23デフォルトの名無しさん:2012/08/02(木) 05:54:50.91
class Module
X = 0
def foo
X
end
end
module M; end
M.foo #=> 0
module M; X; end #=> NameError

あれ?
24デフォルトの名無しさん:2012/08/02(木) 10:49:51.03
>>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デフォルトの名無しさん:2012/08/02(木) 11:09:01.56
>>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デフォルトの名無しさん:2012/08/02(木) 12:04:38.92
結局>>18の見える理由はなんなんだろう
「例外的にそうなってます」でいいのか、それとも
「○○の範囲が見えて、その中にObjectも含まれています」みたいな説明が可能なのか

今の所こういう感じじゃないかと思ってるんだけど違うかな
module A; end とか class A; end の中では以下の順で探索
1 ネストを外側に向かって。ただしトップレベルは含まない
2 継承元に向かって探索(include したモジュールも継承扱い。つまりM.ancestors)
3 Objectから継承元に向かって探索(Object.ancestors。classの場合は2に含まれる)
>>18のページの記述は3が抜けてる?
27デフォルトの名無しさん:2012/08/02(木) 12:07:05.39
あ、書き直し漏れがあった
× M.ancestors
○ A.ancestors
28デフォルトの名無しさん:2012/08/05(日) 00:45:43.21
質問よろしいでしょうか。

a = gets.chomp
while a != "BYE"
puts "what?"
a = gets.chomp
end

このプログラムをwhat?と聞き返されるたびにBYEと入力して、の繰り返しで三回目にそのループから抜けられるようにするにはどうすればよいでしょうか?
29デフォルトの名無しさん:2012/08/05(日) 01:27:52.18
>>28
カウンタをつける。
30デフォルトの名無しさん:2012/08/05(日) 01:45:13.77
what?と聞かれる前(つまり初回)に入力したBYEもカウントしていいんかな?
そうならまずwhileループをbegin〜end while(ruby版do〜whileの構文)に書き換えてから全体を3.timesで囲むとか
31デフォルトの名無しさん:2012/08/05(日) 02:27:28.02
n = 0
while n < 3
  puts "what?"
  a = gets.chomp
  n += 1 if a == "BYE"
end
32デフォルトの名無しさん:2012/08/05(日) 13:16:54.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デフォルトの名無しさん:2012/08/05(日) 13:53:50.19
>>32
> 三回連続でBYEと入力したときだけループから抜けるようにしたいのですが
連続でないと駄目なの?
だったら>>30は忘れて。これは
BYE
HELLO
BYE
BYE
みたいな入力で抜けることだけを想定して書いてるから

基本的には>>31みたいな感じで、BYE以外が入力されたらカウンタをリセットすればいいんじゃないかな
34uy:2012/08/05(日) 14:57:37.95

loop.each_with_object ["","",""] do | _, c |
  puts "what?"
  a = gets.chomp
  p a
  c << a
  c.shift
  break if c.join == "BYE"*3
end
35uy:2012/08/05(日) 15:22:44.83
ミスった これcycleでいいや

loop.each_with_object ["","",""] do | _, c |

[["","",""]].cycle do | c |
36デフォルトの名無しさん:2012/08/05(日) 18:02:50.69
馬鹿には無理
37デフォルトの名無しさん:2012/08/06(月) 00:13:49.90
>>34
joinしてからの判別だと、BY EBY EBYE みたいな入力でも通ってしまう
38デフォルトの名無しさん:2012/08/06(月) 00:33:56.67
n = 0
while n < 3
  puts "what?"
  gets.chomp == "BYE" ? n += 1 : n = 0
end

標準ライブラリだとプロンプトを引数にとるメソッドはないんだっけ?
read_input("what?:") みたいなの
39デフォルトの名無しさん:2012/08/06(月) 00:48:34.92
いろいろ考えてくださってありがとうございます!知識がなくて皆さんの言っていることは全然わかりませんが・・勉強します。
変化を加えてみました。

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デフォルトの名無しさん:2012/08/06(月) 04:03:01.22
>>39
わかんないなら先進むのやめとけ
理解が先
わかんないのにさらに要素増やしてどうする
4139:2012/08/06(月) 09:07:04.31
>>40
そうですね。たしかに基本的な用語くらいは理解するべきですよね。
私はこのサイト(http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/Chapter=Contents.html)
を見ていろいろなプログラムを書いてみることが上達への近道だと思ってやってるんですが、
1週間前に初めてプログラミング言語に触った初心者なのでよかったらよい勉強方法を教えていただけませんか?
42デフォルトの名無しさん:2012/08/06(月) 09:12:50.59
>>41
他人に聞いてそのまま書くのは最初の時点では練習にならない
(クラスやメソッドをあらかた知ってる状態では写経も意味があるんだが)

自分で必要なものを考えて、それに必要な機能を自力で探して、それを必要なだけ自分で組み合わせて作れ
もし、プログラミングで作りたい・作らなければならないものが現時点でなにもないのなら、プログラミングのことはすっぱり忘れて他のことをしろ
プログラミングというものが「必要」となったときに、「っていうか自分で作ればいいのか」と思い出すだけで充分
43デフォルトの名無しさん:2012/08/06(月) 09:16:53.00
暇だからプログラミングを始める、というのがおそらく最悪のパターンだな
44uy:2012/08/06(月) 09:32:00.14
>>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デフォルトの名無しさん:2012/08/06(月) 18:52:17.57
printfのフォーマットについて質問なんですが

printf "_ %s" % [ 2 ]

こんな感じのをハッシュでやる方法ってありませんでしたか?
どこかでみたような気がしたんですが書き方を忘れてしまって

printf "_ %s" % { a: 4 }
46uy:2012/08/06(月) 18:55:17.60
printf "_ %{a}" % { a: 4 }
47デフォルトの名無しさん:2012/08/06(月) 19:35:44.81
>>46
それです
ありがとうございます
48デフォルトの名無しさん:2012/08/06(月) 19:55:01.01
あれ、%{sym} ってマニュアルに書いてなかったっけ?
puts "%{symbol}" % {:symbol => 'val'}
val
シンボルじゃないと動きません
49デフォルトの名無しさん:2012/08/08(水) 09:00:24.68
メソッド内で特異クラスの宣言をしたいんですけど、
何か方法はありませんか?

def f
  n = 0
  class << n
  end
end

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

56デフォルトの名無しさん: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のデータでウィンドウを作る

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

使用例の参考になるコードなどありますでしょうか?
67デフォルトの名無しさん: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

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

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

使い道が思いつかない、または、他の手段で代替可能なのなら、絶対に使うべきではないクラス
69デフォルトの名無しさん:2012/08/10(金) 06:09:36.16
説得力皆無です
70uy:2012/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
71uy:2012/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

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

87デフォルトの名無しさん:2012/08/18(土) 01:32:56.88
>>86
新Mac板にも前はRubyスレあった気がしたんだが…今見たら見付からないな
Googleで「applicationDidFinishLaunching site:developer.apple.com」でググったら
それっぽい資料がいくつかヒットするけど、どれかに無い?Terminateとか付いてるのあるからその辺りに
88デフォルトの名無しさん:2012/08/18(土) 15:58:01.66
>>87
レスありがとうございます! なんだかんだでできました!
def applicationWillTerminate(sender)で動きました!
もう一ヶ月くらい煮詰まっていたから嬉しい! 本当にありがとうございました!
89デフォルトの名無しさん:2012/08/18(土) 18:30:47.12
encodeでUTF8からSJISに変換するときに
例えば全角チルダとか割り当ての無い文字があるとエラーになりますがその文字だけを無視するにはどうすればいいでしょうか?
90デフォルトの名無しさん:2012/08/18(土) 19:54:06.14
>>89
:undef => :replace, :replace => ''
91デフォルトの名無しさん:2012/08/18(土) 20:32:28.42
>>90
ありがとうございます
92uY:2012/08/19(日) 06:50:09.11
macRubyって知らないんだけど
at_exit { } とか END { } 動かないの?
93デフォルトの名無しさん:2012/08/19(日) 14:07:20.87
>>92
xcodeでマックアプリを組んでいますが、残念ながら動かないです。
多少のobject-cの知識がないとmacrubyは厳しいです。
でも見た目のいいアプリがrubyで作れるのは最高です!
94uY:2012/08/19(日) 17:02:01.77
左様か
95uY:2012/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を作ってます
一応動いてますけど、二重になってる気がして不安なんですけど
96uY:2012/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]
97uY ◆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)

こうなる事が分かりました
いらなくなったシンボルを削除する方法ってあるんでしょうか?
98uy:2012/08/21(火) 04:28:14.40
無理っぽいですね
シンボルは大事に使っていくことにします
99デフォルトの名無しさん: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時間ほど悩んだのですが、どうにも解決できませんでした。
ライブラリの相性の問題なのでしょうか?
わかる方がいらっしゃったら、教えてください。
100デフォルトの名無しさん:2012/08/21(火) 06:24:28.99
>>99
Linuxでも確認。このケースでは、setposの後にrefresh呼び出しで解消できるけど、

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

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

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

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


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

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

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

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

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

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

while 条件
 操作A
 操作C
end

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

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

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

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

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

else if を使いこなせない馬鹿のための syntax sugar
124デフォルトの名無しさん:2012/08/23(木) 09:29:22.65
elsif
125uy:2012/08/23(木) 09:31:21.62
case proc使ってないやつなんていんの?
どんな発展途上国からおこしの技術者だよ
126デフォルトの名無しさん: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して作るしかないのでしょうかね。。
127デフォルトの名無しさん:2012/08/23(木) 18:43:00.68
>>> socket.inet_ntoa(struct.pack('i4', socket.htonl(int('10101100000100000000101000000001', 2))))
'172.16.10.1'
128デフォルトの名無しさん: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"
129uy:2012/08/23(木) 19:07:27.38
>>> "10101100000100000000101000000001".scan(/\d{8}/).map{|x|x.to_i(2)}*"."
'172.16.10.1'
130デフォルトの名無しさん: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"
131デフォルトの名無しさん:2012/08/23(木) 19:56:56.34
俺の目には>>118が読解力なさ杉にしか見えないが
132デフォルトの名無しさん:2012/08/23(木) 20:07:18.83
一行目からして電波なんだから触らないでおけ
133デフォルトの名無しさん: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羽を失った。園は既に、おとりを使った捕獲の中止を決めている。〔共同〕
134デフォルトの名無しさん: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

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

あ、質問者じゃないから。

migemoならプログラムから使ったことあったな。そういえばあの超便利ソフトもとはrubyか。
148デフォルトの名無しさん:2012/08/28(火) 23:01:09.83
なんてこった…CPANモジュールをnode.jsで動かしてしまうライブラリ「node-perl」
http://blog.64p.org/entry/2012/08/28/131329

rubyからCPANモジュールを動かすことは技術的に可能?
149デフォルトの名無しさん:2012/08/28(火) 23:01:35.25
>>147の前半は>>146宛。
150デフォルトの名無しさん:2012/08/28(火) 23:06:47.51
>>148
jsで、perlインタプリタを作るまでやるか!?
と思ったけどc++で書かれ、実体はバイナリなのね。
151デフォルトの名無しさん:2012/08/28(火) 23:19:46.07
>>145
意味的な話じゃなくて字面上の類似なら文字列の距離として
定義されているものを使えるように思う。
レーベンシュタイン距離とかハミング距離とか。
152デフォルトの名無しさん:2012/08/29(水) 00:33:19.21
>>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デフォルトの名無しさん:2012/08/29(水) 00:46:21.53
>>145
参考までに。
Octopress/JekyllでGroongaによる類似文書検索機能を使う
http://arika.org/2012/07/28/jekyll-and-groonga-similar-search/
154デフォルトの名無しさん:2012/08/29(水) 05:02:47.75
そういえばmecab-rubyてどこいったの?
155デフォルトの名無しさん:2012/08/29(水) 18:10:00.84
「ruby2.0がかなりすごいらしい」ってコピペして回ってるのが居たんですが、1.9と比べて何が凄いんですか?
156デフォルトの名無しさん:2012/08/29(水) 20:57:05.07
下のような、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デフォルトの名無しさん:2012/08/29(水) 21:58:08.61
>>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
158uy:2012/08/30(木) 02:01:13.96
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デフォルトの名無しさん:2012/08/30(木) 23:22:57.36
>>167, >>158 さん、ありがとうございます。
やりたいことができました。本当に助かりました
動的なケースと静的なケースどちらも教えて
いただけて感激です。

確かに静的なケースでは、異なるファイル名で
準備しておいて require しながら起動すれば、
自然に使えますね。依存関係でこり固まっていた
思考が溶けた気分です。
160デフォルトの名無しさん:2012/08/30(木) 23:23:43.38
>>167 でなくて、>>157 さんの間違いです。すみません
161デフォルトの名無しさん:2012/08/31(金) 06:45:57.23
>>137
> (1..20).sort_by{rand}
それ、考えなしの安直プログラマーが高確率でやらかす、典型的なやってはいけないアンチパターンだな。
これは偏りが発生するのでアウト。確率論の問題としては良い題材だから、理由は自分で考えてみるといい。
ぐぐるとこれと同じパターンをやらかす人間が多くて唖然とするが。
162デフォルトの名無しさん:2012/08/31(金) 10:42:37.54
>>161
shuffleが無かった時代に、偏ってもいいからサクッと書きたい用途でよく使われてたんだよ
当時から「ちゃんと混ぜるならちゃんと書く」という風に知られてた
163デフォルトの名無しさん:2012/08/31(金) 11:36:15.90
そもそも言うほど偏り有るの?
sort_by{rand(20)} とか sort{rand-0.5} とかやるならともかく
164デフォルトの名無しさん:2012/08/31(金) 12:21:11.02
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デフォルトの名無しさん:2012/08/31(金) 12:47:16.12
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デフォルトの名無しさん:2012/08/31(金) 12:53:56.71
eachの代わりにfor b in a; c = b; end
167デフォルトの名無しさん:2012/08/31(金) 13:17:29.57
>>165
スコープがそのようになっているんだから、そのように書くのがいちばんスマートだと思うがなにか問題ある?
168uy:2012/08/31(金) 14:40:17.28
1:def hoge
2:    a = [1,2,3,4,5]
3:    p a.last
6:end
169uy:2012/08/31(金) 14:46:12.18
意味把握した
変数宣言がイヤだって事か
元コードみないとわからんけど、eachじゃなくてinjectとかeach_with_objectでやって
そのイテレータの戻り値をcに格納すれば
170デフォルトの名無しさん:2012/08/31(金) 15:17:26.34
>>161
このイディオムはsort_byだから問題ないんだろうと思ってたが
171デフォルトの名無しさん:2012/08/31(金) 15:37:46.80
161はどんなドヤ顔で言ってんだろうw
いるよねー、ランダムのラの字を行った瞬間に脊髄反射で食って掛かるひとw
172デフォルトの名無しさん:2012/08/31(金) 22:21:59.27
>>167-169
ありがとうございます
すいません
説明不足でしたがブロック内で初めて変数を使うとスコープがそのブロック内になってしまうので
>>165のようにブロックの前で変数を宣言するのか(グローバル変数は使うべきではないですよね)もっといい方法があるのか知りたかったということです
>>168>>169
なるほどこれは便利ですね
173デフォルトの名無しさん:2012/08/31(金) 22:45:17.75
ちなみに>>161が言いたかったであろう偏るようなパターンってどんなの?
>>137は偏るの?
174デフォルトの名無しさん:2012/09/01(土) 10:10:46.31
>>173
>>163のパターンは偏るはず
sort_by{rand}はほとんど偏らないけどshuffleよりかなり重い
175デフォルトの名無しさん:2012/09/02(日) 14:15:38.97
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デフォルトの名無しさん:2012/09/02(日) 14:31:05.87
ものすごくおおざっぱに言うと、ふつうのincludeは引数モジュールのメソッドをインスタンスメソッドとして追加する
そして、インスタンスメソッドはクラス定義のclass...endの文脈では呼べない
class C
def a; end
a
end
が3行目でNoMethodError起こすのと同じ理屈
これで納得しない場合はincludeとはなんぞやという話になる
177デフォルトの名無しさん:2012/09/02(日) 15:36:55.01
ゴミみたいなスコープだよね
178デフォルトの名無しさん:2012/09/02(日) 19:00:21.38
>>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デフォルトの名無しさん:2012/09/02(日) 20:00:57.17
Rubyに本来クラスメソッドはない。
あるのはクラスインスタンスのインスタンスメソッド。
あとはincludeとextendが何をするものかを考えれ。
180デフォルトの名無しさん:2012/09/02(日) 20:42:44.15
>>179
横から勝手に訂正させてもらうね
×あるのはクラスインスタンスのインスタンスメソッド。
○あるのはクラスインスタンスの特異メソッド。
181デフォルトの名無しさん:2012/09/02(日) 20:44:52.28
Rubyに存在するのはインスタンスメソッドだけ、というのは昔俺も思ってた
普段考えるぶんにはそれでもいいし統一概念ですっきりするんだけど、でも本当はやっぱり違う…
182デフォルトの名無しさん:2012/09/03(月) 00:25:02.82
モジュールをあるクラスにインクルードして使う場合、
モジュール側のメソッド内でそのクラスのインスタンス変数にアクセスするのって普通ですか?
183uy:2012/09/03(月) 05:05:18.87
そのくらいはいいけど
個人的な意見でいえばそこら辺明らかに仕様がイかれてるから
バージョンアップ時に動かないソース作りたくなければ
あまりこだわったことやらない方がいいと俺様は思う
184デフォルトの名無しさん:2012/09/03(月) 06:30:18.49
>>182
システム上および慣習上の問題はないよ
特定のクラス専用の実装べったりのmix-inだね
だいたいにおいてあとあと後悔したりもするが、それが起こらない限りは便利だろう
185デフォルトの名無しさん:2012/09/03(月) 08:23:23.82
>>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デフォルトの名無しさん:2012/09/03(月) 09:38:20.46
質問です
初歩的すぎるかもしれませんm(_ _)m
1.9だとerbコマンドは使えないんでしょうか?
参考にしている本は1.8前提だったので;
USB(F:)に入れたためコマンドプロントから入力している状況です

F:\>ruby erb hello.txt.erb

と入力すると、ファイルかディレクトリが見つかりませんというメッセージが出ます
hello.txt.erbというファイルはFドライブに入れています
わかる方教えて頂きたいです
187デフォルトの名無しさん:2012/09/03(月) 09:45:00.50
erbは添付されてるはずだよ
実行できないとしたらそれはcmd.exeが実行ファイルを見つけられないだけだろう

なに言ってるかわからないのなら、フォルダ/ディレクトリと実行パスの勉強をするといい
どうせこれからもずっと必要になる知識だ
188デフォルトの名無しさん:2012/09/03(月) 09:49:38.88
素早いお返事ありがとうございます!!!
回答を頂けて安心しました
勉強します!
189デフォルトの名無しさん:2012/09/03(月) 17:31:55.82
ruby.exeがある場所にerb.batもありませんか?
あれば
ruby erb ではなくてerbだけで実行できるはずですが
190182:2012/09/03(月) 21:53:13.15
ありがとうございます
やはり下位のものを上位に持っていくことは極力避けるべきですかね
まだ歴が浅いので、システム面や慣習に関する言及は助かります
191デフォルトの名無しさん:2012/09/03(月) 22:04:43.67
>>190
だから管理できる範囲であるならどうでもいいって
ユーザーがincludeして使うモジュールを作ってるわけでも、ファイル数が30超えてるめんどくさいライブラリを作ってるわけでもあるまい
あるオブジェクトのメソッドがクラス定義に書いてあったものかモジュールで追加されたものかを気にする人はまずいない
ほんとにそっちのほうがプログラミングに便利だと確信するのなら、メソッド定義をごっそりモジュールに移すといい
192デフォルトの名無しさん:2012/09/04(火) 06:12:17.13

def f
p 3
end

lambda(&f).call

これを実行すると

:6:in `<main>': wrong argument type Fixnum (expected Proc) (TypeError)

と、でるんですけど動作原理が良く分かりません
どうなっているんでしょうか?


193デフォルトの名無しさん:2012/09/04(火) 06:36:43.28
まずfが普通に評価されて3になる。つまりこれと同じ
lambda(&3).call
3はProcじゃないしto_procも定義されてないからlambda(&3)でエラー
194デフォルトの名無しさん:2012/09/04(火) 06:59:32.42
試したかったことって要は __send__(:f) とか self.method(:f).call とかでいい?
195デフォルトの名無しさん:2012/09/04(火) 08:37:00.94
どちらがエレガントで負荷的にも良いか質問です。
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デフォルトの名無しさん:2012/09/04(火) 10:45:31.38
100万回連続実行したときに0.001秒の遅れが数億円の損害になるような環境であって、
なおかつどうしてもRubyでやらなければ家族がどうなるかわからないぞと脅されているのなら、俺なら前者で書く
なぜなら、定数Bとローカル変数appを比べたとき、絶対的に定数Bのほうが参照が速いから

そうでないのなら意味的に妥当なほうでやるといい
このためにクラスメソッドっぽくない使い方するクラスメソッドをわざわざ作るようなことはしない
197デフォルトの名無しさん:2012/09/04(火) 10:55:13.62
「メソッドが使いたいだけであって、オブジェクト作りたいわけじゃないんだよね」という感覚はないでもないことがないでもない
もしそうならクラスメソッドとかの出番だろうか
198デフォルトの名無しさん:2012/09/04(火) 12:00:10.98
あとあとめんどくさくないことが多いのはAのパターンだと思う
効率とエレガントさに関してはどっちも変わらん
199デフォルトの名無しさん:2012/09/04(火) 22:09:07.93
家族を見殺しにしてでも、cで書くよ
200デフォルトの名無しさん:2012/09/09(日) 20:24:13.08
ruby-openglが、ruby 1.9.3 でインストできない。

1.8.7使えってことかよ。
201デフォルトの名無しさん:2012/09/09(日) 21:20:17.29
>>200
ttp://ruby-opengl.rubyforge.org/build_install.html
まあ最新が2009年なので現在の環境ではどーやっても動作しない可能性はないでもない
202195:2012/09/10(月) 02:15:56.97
196-199
スピードと使い勝手の勘所、
よくわかりました、あざっす!
203デフォルトの名無しさん:2012/09/10(月) 10:06:55.79
Bは毎回initializeする訳ですか?
204デフォルトの名無しさん:2012/09/10(月) 10:29:53.45
Ruby が class B ... end を最初に見かけたときに1度だけ B = Class.new 相当をしてる
メソッドを1回使いたいだけなのに毎回オブジェクトを作るのはなんかアレだということが起こらないという点でもエコ

っていうか状態を保持利用しない単発野良メソッドでいいならモジュールのクラスメソッドでいい

module M
def M.mes
end
end

M.mes
M.mes
M.mes
205デフォルトの名無しさん:2012/09/13(木) 11:55:57.43
mtime, atimeを変更するメソッドってありますか?unixでいうと
touch -t yymmddみたいなものです。
File.mtime File.atimeはただ取得するだけみたいなのです。
system(touch -t yymmdd)するしかないですか?
206205:2012/09/13(木) 11:57:46.80
あ,すいません。「特定の日付」に変更という意味です。
207デフォルトの名無しさん:2012/09/13(木) 12:02:41.51
utime
208205:2012/09/13(木) 12:15:20.71
>>207
ありがとうございました。
209デフォルトの名無しさん:2012/09/13(木) 13:12:39.38
どういたしまして
210デフォルトの名無しさん:2012/09/14(金) 11:11:18.61
Ruby始めようと思っていきなりプログラミング言語Ruby買ったけどちょっと難しいな
C、Java、Pythonは経験あるんだが
211デフォルトの名無しさん:2012/09/14(金) 12:36:26.71
言語が平易だからといって言語本体の解説書が平易だとは限らない
素直に入門書を手に取るべきだったな
212デフォルトの名無しさん:2012/09/14(金) 12:58:29.16
213デフォルトの名無しさん:2012/09/14(金) 23:15:17.09
>>210
あれをいきなりやるのは難しいと思う
『初めてのRuby』辺りで書き方をつかむと、言語仕様との落差にびっくりする
大部分のケースでは平易に書ける一方で
細部をつつくといくらでもカオスになるのがRuby
214デフォルトの名無しさん:2012/09/15(土) 22:14:50.24
Windows上のあるフォルダが隠し属性または保護されたオペレーティングファイルであるか判定する方法はありませんか?
例えば "$RECYCLE.BIN" と "System Volume Information" というフォルダです。
これらのフォルダが存在しないパス上で、これらの名前でフォルダを作れるので名前で判定することは出来ません。
どなたか知恵を伝授してください。
215デフォルトの名無しさん:2012/09/16(日) 01:34:44.72
// 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デフォルトの名無しさん:2012/09/16(日) 02:13:49.46
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デフォルトの名無しさん:2012/09/16(日) 13:37:15.68
Rubyからファイル属性を取得することは無理でしょうか?
cscriptの他にRubyからWind32apiを呼び出すぐらいしか方法ないでしょうか?
218デフォルトの名無しさん:2012/09/16(日) 14:17:06.28
できないんじゃないかなあ。こういうのあるぐらいだし
https://github.com/djberg96/win32-file-stat
system? と hidden? で取れるっぽい
219デフォルトの名無しさん:2012/09/16(日) 17:50:34.30
おいバカ初心者、よく見やがれw

死ねバカwwwwwwwwwwwwwwwwwwwwwwww

死ねwwwwwwwwwwwwwwwwwwwwwwww


死ねwwwwwwwwwwwwwwwwwwwwwwww


死ねwwwwwwwwwwwwwwwwwwwwwwww

ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww

ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww
死ねゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww
死ねコラゴミwwwwwwwwwwwwwwwwww
220デフォルトの名無しさん:2012/09/17(月) 02:21:48.68
「ひな壇は韓流タレント中心に」という構想が一変、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デフォルトの名無しさん:2012/09/17(月) 12:18:52.78
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デフォルトの名無しさん:2012/09/17(月) 12:55:07.69
そのスクリプトのままで動いたよ

$ 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">
  :
223221:2012/09/17(月) 13:35:02.72
>>222
試していただいてありがとうございます。
ただ、それはrubyのバージョンの違いのようです。
1.8.7だとリダイレクト先の結果が表示されるみたいです。
私の環境の1.9だと何も表示されないようです。
いずれにしてもエラーページにリダイレクトされているみたいです。

プログラムでアクセスするとanのサーバー側で何かしらのヘッダーを見て、これはロボットだからエラーに飛ばせ、
みたいな処理をしているのかなぁと。。
224デフォルトの名無しさん:2012/09/17(月) 13:49:19.74
その可能性に考えが及んでいるなら
とりあえずUser-Agentの偽装くらいは試そうぜ。
225221:2012/09/17(月) 14:12:48.25
User-Agentはgetメソッドのオプションで色々設定してみたのですが、駄目でした。
javascriptはブラウザで無効にしてもページが見れたので、問題ないようです。
226222:2012/09/17(月) 15:05:31.78
確かに >>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
227221:2012/09/17(月) 19:33:21.58
ありがとうございます!無事表示できました!
もう諦めていたので2chを見ていませんでした。遅くなってしまいすいませんでした。
クッキーを設定しないと駄目だったとは・・・これは自力では無理でした。ありがとうございました。
228デフォルトの名無しさん:2012/09/18(火) 07:29:40.40
ゴミ
229デフォルトの名無しさん:2012/09/19(水) 15:23:37.62
すいません。
ライブラリーとモジュールの違いを分かりやすく説明してくれないでしょうか?
グーグルで調べたんだけどいまいち分からない。
230デフォルトの名無しさん:2012/09/19(水) 16:25:38.37
関数を別ファイルにして後から再利用可能な形で呼べるようにしたものがライブラリ
ライブラリに沢山関数があると訳が判らなくなるので名前空間がぶつからないように整理したり
必要に応じて関連した処理や機能でまとめてライブラリにしたものがモジュール
231デフォルトの名無しさん:2012/09/20(木) 00:35:11.70
クラスとことなり、モジュールは、インスタンスをもてない。
クラスにモジュールをインクルードして新しいクラスを作る機能をMix-inと呼びます。
多重継承と対照的に、単一継承によって、Rubyは、継承関係を保ちながら、
モジュールのMix-inによって、多様な依存関係を表現できます。
232デフォルトの名無しさん:2012/09/20(木) 05:17:09.05
>> [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デフォルトの名無しさん:2012/09/20(木) 06:14:21.84
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デフォルトの名無しさん:2012/09/20(木) 06:28:01.86
('A`)マンドクセ
235デフォルトの名無しさん:2012/09/20(木) 12:13:48.33
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デフォルトの名無しさん:2012/09/21(金) 07:55:38.84
rubyって真理値のソートできないのかよ
クソだな
237デフォルトの名無しさん:2012/09/21(金) 08:16:34.63
列挙型は定数で勝手にやれといういい加減さなのに
真偽はなぜかPascalをはるかに上回る厳格さ(≒貧弱さ)というのが謎だ
238デフォルトの名無しさん:2012/09/21(金) 10:41:20.09
真理値はintじゃないし、Boolクラスもない、という、
単に「そういう設計」というだけのことなのだが。

C言語あたりを、たいして深く理解もせずに、他の言語を、
俺の知ってる言語と違うとdisる輩は多いねぇ。
239デフォルトの名無しさん:2012/09/21(金) 11:00:59.45
馬鹿には無理
240デフォルトの名無しさん:2012/09/21(金) 21:21:39.20
最低限これくらいのメソッドは実装して欲しいところ。
http://msdn.microsoft.com/ja-jp/library/system.boolean_members%28v=vs.80%29.aspx
241デフォルトの名無しさん:2012/09/21(金) 23:39:02.69
文字列tとsがあって、tがsで始まるかどうか判定するにはどうすればいいでしょうか?
if t[0,s.size] == s
242デフォルトの名無しさん:2012/09/21(金) 23:45:34.39
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デフォルトの名無しさん:2012/09/21(金) 23:46:34.98
いやいやいや、indexでしょ
244デフォルトの名無しさん:2012/09/21(金) 23:53:11.03
('Perl'*2**2**1024+'Ruby').index('Ruby')
245デフォルトの名無しさん:2012/09/22(土) 00:34:21.36
irb> "This is a pencil." =~ /\A#{"This is a pen."}/
=> 0
246デフォルトの名無しさん:2012/09/22(土) 00:38:03.01
嫌な性格してるなあ

"This is a pencil." =~ /\A#{Regexp.quote("This is a pen.")}/

これでいっすか
247デフォルトの名無しさん:2012/09/22(土) 00:43:25.34
start_with?なんていつの間に追加されたんだよ
ありがとうこれで行きます
248デフォルトの名無しさん:2012/09/22(土) 06:46:31.03
旅行会社にソウルなど韓国へのツアーのキャンセルが相次いでいる。竹島問題をめぐる感情悪化が理由だが、
両国の対立はこれまでにも繰り返され、そのたびに「政治と経済は別」との考えから沈静化に向かっていた。
ところが今回は「嫌韓ムード」もあり、問題再燃から1カ月近くたった今も沈静化どころか、影響が拡大しつつある。

 「韓国は海外渡航先でトップ3に入るドル箱。事態の長期化だけは避けてほしいのだが…」

 大阪市内の日本旅行の店頭には担当者の願いもむなしく、8月下旬以降、韓国への個人パック旅行のキャンセルが
止まらない。関西発着分の9〜10月の予約は前年同期比4割減にまで達しているほどだ。

旅行会社にとってはドル箱の韓国だが、韓流に夢中となり、韓国に何度も出掛けていた女性を中心とする日本人の
意識も少しずつ変わり始めている。

「どのチャンネルも似たような韓国ドラマばかりでうんざりしている」。大阪市内に住む40歳代の女性はこう話す。

また、6月に兵庫県・神鍋高原で韓国人歌手によるコンサートを企画した大阪のイベント会社が突然、倒産した。
2日間でチケット約2万枚の販売を見込んでいたが、売れたのはわずか1400枚。しかも、チケットの全売上高を
歌手への出演料に回したため、払い戻しに応じられない事態となり、チケット購入者からは「詐欺だ」との声が上がった。

 「必要以上に持ち上げられた韓流ブームが薄らぐ一方、嫌韓ムードは日増しに高まっている。韓国への旅行の
落ち込みも長期化するのでは」と旅行業界の関係者は先行きを警戒する。

 実際、韓国に旅行した東京都在住の40歳代女性はこう話す。

 「日本人とわかれば、屋台やタクシーなどは平気で価格をつり上げる。罵声を浴びせる人もいる。竹島問題もあり、
今は行きたくないですね」
http://www.sankeibiz.jp/econome/news/120918/ecc1209180800000-n3.htm
249デフォルトの名無しさん:2012/09/23(日) 16:11:57.97
5バイトのファイルがあって、中身が
先頭4bit : 項目A
次の12bit : 項目B
次の20bit : 項目C
次の4bit : 項目D
の数値データ(big endian)が格納されているとします。
項目A〜Dの値をスマートに取り出すにはどうすればいいですか?
250デフォルトの名無しさん:2012/09/23(日) 17:32:19.11
bindataっていうライブラリがあるよ。gemで入る

以下スマートとはほど遠いコード
buf.unpack("B*")[0].scan(/(.{4})(.{12})(.{20})(.{4})/)[0].map{|e| e.to_i(2) }
251デフォルトの名無しさん:2012/09/23(日) 21:31:34.85
Rubyの標準添付ライブラリってどういう意味なの?
たとえば、
http://doc.ruby-lang.org/ja/1.9.3/library/index.html
を見るとGDBMなんかも入っているけど、実際にはLinuxでもWindowsでも標準で入ってないんだが

252デフォルトの名無しさん:2012/09/23(日) 21:37:00.13
ext/gdbm はソースに入ってるだろ。
253デフォルトの名無しさん:2012/09/24(月) 06:33:18.09
>>252
ソースレベルで入っているだけで一般的に配布されているバイナリでは入っている保障はないってこと?
Unbuntuならapt-getとかFreeBSDならpkg_addとかでruby入れても入っていないのだが

それって標準の意味あるのか
254デフォルトの名無しさん:2012/09/24(月) 08:02:15.01
>>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デフォルトの名無しさん:2012/09/24(月) 09:11:03.74
>>254
つまりRubyの標準添付ライブラリというのは環境によって
入っているか入っていないか分からないってことでしょ

別に入れろ言っているわけではないよ
それって"標準"にした意味あるのかなと思っただけ

たとえば"標準でインストール"されているなら依存関係を気にしなくてもいいけど
コンパイル時のオプションで変わるなら入っていない場合のことを考慮しないといけないわけでしょ

あとRubyがバイナリが入っている場合は、gemで入れることになると思うけど
gem gdbmはext/gdbmと同じだとかそういった保障はあるの?
libgdbm-devは仕方がないにしろ、rubyのライブラリはbundlerから入れたい
256デフォルトの名無しさん:2012/09/24(月) 09:19:05.96
Ruby は Matz が始めた趣味言語だから
自分の環境でだけ動けば良いや的発想で作られてる
257デフォルトの名無しさん:2012/09/24(月) 09:32:39.30
>>255
ソースは環境によらずtarballに必ず入っている(これを標準添付と呼ぶ)

この手のものを、インストールする人にコンパイルさせることを強制はできない
使わない人だけコンパイルオプションで外すようにしてもいいけど、たかがgdbmをそんな扱いにするとそっちのほうがめんどくさいよたぶん
使う予定がないのにtkが丸ごと入ったらキレるだろ
258デフォルトの名無しさん:2012/09/24(月) 09:39:11.50
>>255
標準にすることで他のライブラリと名前空間がぶつかることを回避できてるんじゃないの?

rubyの標準添付ライブラリが依存しているものを、
rubyのインストールですべて芋づる式でインストールされたらえらく迷惑だわ

スクリプトで標準添付ライブラリがつかえるかどうかは、必要ならチェックする必要があるだろうな
まあ大抵はスクリプトが例外出すままでOKだと思うけど

あと、たとえばgdbmへアクセスするI/Fを標準添付ライブラリとして用意してるけど、
細かい挙動はOSにインストールされてるGDBMに影響をうけると思う
259デフォルトの名無しさん:2012/09/24(月) 11:05:11.33
>>257
Python には入ってるけど誰もキレてないです
260デフォルトの名無しさん:2012/09/24(月) 11:16:29.88
RubyスレでPythonポリシー持ち出されても…
261デフォルトの名無しさん:2012/09/24(月) 11:26:02.17
>>259
Tkそのものは標準添付されてないと思うよ
Windowsのバイナリ(のインストーラ)には入ってるってだけで
262デフォルトの名無しさん:2012/09/24(月) 18:05:59.17
Linux/BSD以外でどう動作するかは、出たとこ勝負
OSSって結局そんな感じやん
263デフォルトの名無しさん:2012/09/24(月) 18:12:10.11
tkinnerをTkそのものだと思ってる人は意外といる…
264デフォルトの名無しさん:2012/09/24(月) 19:48:55.22
>>257
Ruby開発側と配布されるソースについての標準で
プログラマにとって存在するライブラリが標準化されているわけではないってことね
それが聞きたかっただけです
GDBMは例に出しただけで得に深い意味はないです
265デフォルトの名無しさん:2012/09/25(火) 00:23:20.41
>>264
プログラマにとっても標準だろ
少なくとも標準ライブラリに用意されてるものはそれをつかうべきだし、
別のものを作るなら名前がかぶらないようにするべき

作られたプログラムを使うやつが、必要な環境を整えなければいけないってだけだ
266デフォルトの名無しさん:2012/09/25(火) 00:45:16.50
標準添付という言葉はわかりにくいんだろうか
そんなにRuby独自の表現が入ってるわけでもないと思うんだが
267デフォルトの名無しさん:2012/09/25(火) 02:44:32.00
朝鮮人だろう
268デフォルトの名無しさん:2012/09/25(火) 07:55:09.98
ンッペコバンナー「wwwwwwwwwwwwwwwwwwwwwwwwwwwwww」
269デフォルトの名無しさん:2012/09/25(火) 09:57:27.49
ンッペコバンナー「ンッペコバンナーwwwwwwwwwwwwwwwwwwwwwwwwwwwwww」
270デフォルトの名無しさん:2012/09/25(火) 21:51:17.51
標準添付ライブラリって別途インストールしなくても
requireすれば使えるよってだけの話だろ
どんな機能があるのかはそれこそライブラリ次第で
gdbmだったら説明にあるとおり外部にあるGDBMを扱うインターフェースを
Rubyに提供するだけ
271デフォルトの名無しさん:2012/09/25(火) 22:00:23.26
それが問題なくあてはまるのはpure rubyなライブラリの場合だね
272デフォルトの名無しさん:2012/09/25(火) 22:37:49.06
ソースだけがtarballに収録されてて、実際に言語から利用するにはCコンパイラなどで実行形式ファイルにする必要があり、
しかもコンパイルや実行の際にシステムまたは第三者のヘッダファイルやAPIを読む必要がある

というパターンはけっこうせつめいめんどくさい
273デフォルトの名無しさん:2012/09/26(水) 01:57:11.55
>>270
いや別途インストールが必要だからrequireしても使えないって話だろ
274デフォルトの名無しさん:2012/09/26(水) 02:16:30.14
ライブラリを標準化する意味って標準に従っていれば
同じプログラムをどこでも動かせるってことにあると思うのだが
Rubyの場合は、標準添付ライブラリだけ使うプログラムを書いても
環境によってはインストールされていないので動かない
しかも標準ライブラリの動作が環境依存らしい
275uy:2012/09/26(水) 04:22:42.11
標準A
標準B
標準C
276デフォルトの名無しさん:2012/09/26(水) 19:18:14.89
>>273
別途インストール不要ってのはRubyのライブラリのことだぞ
Rubyのライブラリが呼び出すGDBMとかのシステムのライブラリは当然別途インストールが必要なのは言うまでも無い
277デフォルトの名無しさん:2012/09/27(木) 09:26:22.91
すいません 「初めてのRuby」のサポートページのwikiがバグってるようなので
どなたか編集して直していただけませんか?勘違いならすみません
http://yugui.jp/wiki/hiki.cgi
278デフォルトの名無しさん:2012/09/27(木) 10:29:07.78
バグってる、なんて言う奴いるんだ?
279デフォルトの名無しさん:2012/09/27(木) 12:35:35.68
デバッグする
280デフォルトの名無しさん:2012/09/28(金) 00:24:30.56
一つの値に、複数(可変個)の値を対応付けて記録したい時、定石ってある?

Hash.new{ |hash, key| hash[key] = [] }

↑みたいな感じでいい?
281デフォルトの名無しさん:2012/09/28(金) 01:06:24.47
駄目なのは素人の漏れでも判る
282デフォルトの名無しさん:2012/09/28(金) 01:31:14.51
ダメっていうのはもっと良いやり方があるってこと?

機能的には問題ないと思ってるんだけど。問題点があれば教えてほしい。
(煽りじゃなくて、純粋に質問。単にもっと効率の良い定石があるなら知りたいだけだよ。)
283デフォルトの名無しさん:2012/09/28(金) 03:32:46.67
Apocalypsis Johannis,part13
[13:16]小さい者にも、大きい者にも、富んでいる者にも、貧しい者にも、自由人にも、奴隷にも、
すべての人々にビックデータとスマートフォン、スマートユビキタス監視社会、経済システムの
UIDコードを付けさせた。
また、そのコードすなわち、一定のUID符号化数字を持っている者以外は、経済活動に関われ
ないように、だれも、買うことも、売ることもできないようにした。
[13:17]そのUIDコード数列の一部はシステムの名前そのものからとられている。
[13:18]ここに重要な意味がある。
思慮ある者はそのUIDコードを分析しなさい。そのUIDコードは人間個人を表現している
UniqueIDだからである。
そのUIDコードのエイリアスは666である。
284デフォルトの名無しさん:2012/09/28(金) 03:37:21.74
Apocalypsis Johannis,part14
[14:01]見よ、人がXeonサーバ群の上にいる。14万人がデータセンタで働いており彼らはIDが与えられていた。
[14:03]彼らは新しいスクリプトを書いた。この言語は14万人のほかは誰も理解できなかった。
[14:07]基本に立ち返れ、裁きの時が来たからである。自然の行いを侮る事なかれ。
[14:08]巨大なバブルは崩壊した。不良金融債権をあらゆる国民に買わせた者は倒れた。
[14:09]もし、だれでも、このシステムを作り賛美し、UIDを受けるなら、そのような者は、
[14:10]従来の人間社会から逸脱しダイレクトに毒物を飲むようになる。
[14:11]また、自然界と群集の前で、目に見えない火(放射能)と毒物で苦しめられる。そして、彼らの苦しみは、永遠に続く。
システムを賛美し取り入れるもの、システムを作る者、まただれでもUIDを受け参加する者は、
昼も夜もまったく休むことはできない。
285デフォルトの名無しさん:2012/09/28(金) 09:17:33.70
「月刊 WiLL」2012年11月号
特集:哀れな国、韓国!
http://web-wac.co.jp/magazine/will/201211_w
http://web-wac.co.jp/magazine/wp-content/uploads/4910183971126-190x278.jpg


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

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

詳しい方、解決方法を教えていただけないでしょうか?

287デフォルトの名無しさん:2012/09/29(土) 19:00:23.00
コード貼ってくださいな
288デフォルトの名無しさん:2012/09/29(土) 19:34:18.21
取得した2chのページのURLを具体的に知りたいな
289デフォルトの名無しさん:2012/09/29(土) 21:47:26.67
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デフォルトの名無しさん:2012/09/29(土) 23:19:14.24
rubyのrakeってmakeの完全な代わりになりますか?
make覚えなくてもrakeで代われるなら、rubyの勉強して
なんだか一石二鳥だなあとか思ったんですが
291デフォルトの名無しさん:2012/09/29(土) 23:45:07.19
rubyを覚えた後にrakeを別途覚えるようなもんだから
あまり一石二鳥な感覚ではなかったなあ
292デフォルトの名無しさん:2012/09/30(日) 00:02:43.02
>>290
基本的にmakeでできることは、ほぼ全てrakeでできるはずなので
完全な上位互換(rakeがあればmakeは必要ない)と考えて良いと思う

ただしもちろん、ほかの人の書いたソフトウェアをコンパイルしたりするなら
そこではmakeが必要になるので、そこは諦めてください
293デフォルトの名無しさん:2012/09/30(日) 00:29:41.05
完全じゃ無いじゃん
294デフォルトの名無しさん:2012/09/30(日) 00:38:43.48
makeは普段shellでやってることをそのまま書けるからな。rakeもantもmakeから移植する感じになる。
295デフォルトの名無しさん:2012/09/30(日) 00:43:57.55
>>293
自分で書く分には何でもできるが、人に書かせることはできないってだけだろ。
awk2perlみたいな変換書けば、そうでもないか。
296デフォルトの名無しさん:2012/09/30(日) 00:51:19.58
つまり、互換ですら無いということだな
297デフォルトの名無しさん:2012/09/30(日) 01:19:37.99
誰が互換を求めてるんだよ
まあ、求めていないとも書いてないから分からんか
298デフォルトの名無しさん:2012/09/30(日) 01:22:33.37
単に>>292が「完全な上位互換」と書いたのが嘘だったということでしょ
299uy:2012/09/30(日) 08:35:07.43
rubyはperlの上位互換(キリッ)

と同じ程度の意味だろこのアスペ共が
300デフォルトの名無しさん:2012/09/30(日) 09:06:01.43
>>290の質問からしてなんかヘンだから仕方ないんだけどな

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

と言うのが妥当
301デフォルトの名無しさん:2012/09/30(日) 23:06:23.93
286です。

お返事いただいた方、ありがとうございました。
encodingを指定してもだめでした。
errorsの中身はSyntax Errorと出ていました。
net/httpでコンテンツを取得し、正規表現で対応しました。
302デフォルトの名無しさん:2012/10/01(月) 09:31:27.39
303デフォルトの名無しさん:2012/10/01(月) 12:28:15.94
>>302
ここで答えちゃうけど、要するに捕捉する記述をしていない例外が発生した場合でも
自動的にログだけ取ってプログラムを動かし続けたいって事だろう?
無理じゃね
304デフォルトの名無しさん:2012/10/02(火) 00:13:33.81
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デフォルトの名無しさん:2012/10/02(火) 00:24:36.92
できないはず
クラスCを作るファイルでクラスAの定義を再オープンしてA#orig_stepとかに退避しておくとかどうだろう
306デフォルトの名無しさん:2012/10/02(火) 00:31:15.69
そんなことになるstep関数はオーバーライドしちゃいけないってことだ
もしくはそもそもC<B<Aの継承関係がやりたいことに合っていないのかも
307デフォルトの名無しさん:2012/10/02(火) 10:32:00.29
>>304
継承とか関係なしに呼ぶこと自体はできる
A.instance_method(:step).bind(self).call
308デフォルトの名無しさん:2012/10/02(火) 18:54:31.73
>>305-306
やはり設計を変えようと思います
>>307
bindとかあるのか
309デフォルトの名無しさん:2012/10/05(金) 10:51:54.24
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デフォルトの名無しさん:2012/10/05(金) 11:23:19.67
p h[:a]
311デフォルトの名無しさん:2012/10/06(土) 13:47:08.50
rvmに移行しました。rvm install ruby-headしたら、
1.8.7-p370がインストールされた。
head(最新)って1.9.3系列だと思っていたから、驚いた。

すんません。独り言です。
312デフォルトの名無しさん:2012/10/06(土) 19:52:32.32
>>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デフォルトの名無しさん:2012/10/06(土) 20:08:44.07
前にもスレに書いてあったが、{ sym:'value' } という単純なリテラルとしての書き方はするべきではない
これはシンボルキーなHashを引数に取るメソッドの引数のときにのみ使う
314デフォルトの名無しさん:2012/10/06(土) 20:09:58.69
{ :"ho ge" => "A" } ってのを { a: "A" } 式に書くにはどうするの?
{ ho ge: "A" } も { "ho ge": "A" } もだめだよね
315デフォルトの名無しさん:2012/10/06(土) 21:04:47.69
書けないし、書けなくてもいいと思う
そもそも「やっかいなシンボル」をキーワードに指定しなければならないことなどないはずだから
316デフォルトの名無しさん:2012/10/07(日) 03:47:49.62
シンボルはコンパイル時に定数でなければならない
c で char hoge[variable]; と書けないのと同じ
317デフォルトの名無しさん:2012/10/07(日) 04:04:15.17
最新の純Cの規格に則った環境なら書けるけどなそれ
…まあ、ほとんどのC環境が純CでなくC++になっちゃってるんだが
318デフォルトの名無しさん:2012/10/07(日) 07:33:44.33
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デフォルトの名無しさん:2012/10/07(日) 09:47:01.14
板違い
320318:2012/10/07(日) 11:41:29.54
すみません板違いでしたね。自己解決しました。
/etc/profileに記述が残ってました。
321デフォルトの名無しさん:2012/10/07(日) 20:25:54.58
>>313
べきじゃない、といよりも、
ライブラリやモジュールのコードを
観る段階になれば自然と身につくと思うんだけどなあ。
おいらはそうだった。
322デフォルトの名無しさん:2012/10/07(日) 22:35:15.09
違うサーバーにあるファイルを実行するために以下のようなスクリプトを書きました。

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デフォルトの名無しさん:2012/10/07(日) 23:02:57.92
ぐぐったらこんなのが
http://stackoverflow.com/questions/10606290/
324デフォルトの名無しさん:2012/10/07(日) 23:47:06.50
>321
他人を自分と同一視するのは病気
325デフォルトの名無しさん:2012/10/07(日) 23:51:25.09
1が全角に見えるのはネタだからか?
326デフォルトの名無しさん:2012/10/08(月) 00:43:00.82
>>322
ssh.exec!('cd dir1; ruby sample.rb')とか出来たりしない?
327322:2012/10/08(月) 00:50:22.65
>>323
なるほど毎回違うシェルで実行するからカレントディレクトリが戻っちゃうんですね
>>326
これでできました!ありがとうございます
328デフォルトの名無しさん:2012/10/08(月) 03:58:49.46
★修学旅行、韓国から国内に変更…宮崎・日南高

 日本と韓国の関係悪化を受けて、宮崎県立日南高は2年生27人が12月に予定していた韓国への
修学旅行を国内に変更した。

 日南高によると、同校の修学旅行は韓国と国内の二つから選べることになっており、今年は2年生
170人のうち、143人が東京や群馬などの国内を選択。27人が同校の姉妹校・冠陽高があるソウル
などへの旅行を希望していた。

 竹島問題などを巡って、日韓関係が悪化していることから、韓国への修学旅行について慎重に検討した
結果、「韓国の情勢が不透明で、生徒の安全などを考慮した」として、行き先を国内に一本化したという。

 県内の別の高校も来年3月に計画している韓国への修学旅行について、変更を検討しているという。

http://www.yomiuri.co.jp/kyoiku/news/20121006-OYT8T00695.htm
329デフォルトの名無しさん:2012/10/08(月) 08:27:30.16
韓国より台湾へ行けば良いのに
330デフォルトの名無しさん:2012/10/08(月) 10:58:32.97
いま台湾も尖閣でギスギスしてんじゃん
331デフォルトの名無しさん:2012/10/08(月) 11:30:39.42
情報弱者って本当にいるんだな
332デフォルトの名無しさん:2012/10/09(火) 00:31:18.86
群馬が一番危険なのに
333デフォルトの名無しさん:2012/10/09(火) 04:12:48.13
韓国の弾道ミサイルの射程制限が現行の300キロ・メートルから800キロ・メートルに緩和されることについて、
日本政府は、「東アジアの緊張が高まることに直結するものではない」と冷静に受け止めている。

 防衛省幹部は7日、全域が韓国の弾道ミサイル射程内に収まることになる北朝鮮の強い反発が予想されることに関し、
「結果的に抑止効果が高まり、北朝鮮側は挑発行為を行いづらくなる」と語った。
日本にとっても、西日本地域が韓国の射程内に入ることになるが、自衛隊幹部は7日、「日本の安全保障にマイナスなら、
(射程緩和で合意した)米側が認めることはない。
日米韓の枠組みでの抑止力が高まれば、日本にとってもプラス面はある」と指摘した。
http://headlines.yahoo.co.jp/hl?a=20121008-00000564-yom-int
334デフォルトの名無しさん:2012/10/09(火) 05:14:01.78
>>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デフォルトの名無しさん:2012/10/09(火) 05:37:31.37
車道にはみ出すな…後ろから歩行者をはねた男
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デフォルトの名無しさん:2012/10/09(火) 05:40:00.96
“街宣車”に赤色灯設置で右翼団体代表の男を逮捕(10/08 20:03)
http://news.tv-asahi.co.jp/news/web/html/221008053.html

 千葉県野田市で、所有する街頭宣伝車に不正に赤色灯を設置していることを隠して
車検証を交付させたとして、右翼団体代表の男を逮捕しました。

 道路運送車両法違反の疑いで逮捕されたのは、右翼団体「関東一盟会」の代表・
程田一樹容疑者(40)です。警視庁によりますと、程田容疑者は、所有する街宣車の
屋根部分に緊急車両にのみ設置が認められている赤色灯を日常的に設置していたにもかかわらず、
6月の車検の際だけ外し、車検証を交付させた疑いが持たれています。取り調べに対し、
程田容疑者は「間違いありません」「格好つけるためにやった」などと供述し、
容疑を認めています。警視庁によりますと、都内で走行している右翼の街宣車は200台余りで、
そのうちの約2割には不正に赤色灯が設置されているということです。不正街宣車の摘発は、
関東では今回が初めてで、警視庁は今後、厳しく取り締まりを行うとしています。
337デフォルトの名無しさん:2012/10/09(火) 12:21:35.05
>>334
わかってて反応してんのにさらに反応すんなよ
検索まで貼っつけてさぁw
338デフォルトの名無しさん:2012/10/09(火) 20:49:09.03
rubyで関数の中で一時的な名前付き関数を使いたい時ってどうすればよいですか?
339デフォルトの名無しさん:2012/10/09(火) 21:05:57.52
sum = lambda { |x, y| x + y } で、出来ました
340デフォルトの名無しさん:2012/10/10(水) 14:34:50.03
RubyでExcelのVBAってなんでも書けますか?
exlap.rbのページを見たらExcelの基本的な操作は載っているのですが
もっと複雑なものでも同様に問題なく書けるのかを知りたいです
341デフォルトの名無しさん:2012/10/10(水) 14:41:10.58
342デフォルトの名無しさん:2012/10/10(水) 14:42:15.14
「起動はRubyだけどここだけVBAで書く」というレベルでなら書ける
だから普通は直接VBAで書く
VBAの知識がないとそもそもいっこも書けないし
343340:2012/10/10(水) 14:51:27.38
VBAそのものは出来ています
それをRubyで呼び出すという形にすればなんでも書けるということでしょうか?
ということは、VBAをRubyで書き直す必要はなくに、呼び出す方法だけ勉強すれば良いということ?
344デフォルトの名無しさん:2012/10/10(水) 14:59:17.38
書けるか書けないかで言えば書ける
きっとRubyのことだから超遅くなるだろう
345340:2012/10/10(水) 15:04:37.30
>>340
ありがとうございます
速度は気にしないので呼び出す方法を調べてみます
今まで調べても出てこなかったので不安ですがorz
346デフォルトの名無しさん:2012/10/10(水) 15:05:49.46
所謂正確な物言いってやつだな
記述行為が可能であるかどうかで言えば可能
ただし、普通の感覚を持っているなら普通はやらない
複雑なVBAはVBAスクリプトとして書くのが妥当
Rubyから二重三重の手間とレイヤをかけて使ったりはしない

だから「RubyからExcelを操作」みたいなのは流行んないんだよ
RubyでVBAやるのはVBA自体を勉強するのよりも大変なんだもの
347デフォルトの名無しさん:2012/10/10(水) 15:27:39.29
>345
自分にレスするとは自演ぽいな
348デフォルトの名無しさん:2012/10/10(水) 15:31:42.98
>>346
すでに書いてあるVBAスクリプトを新規Excelファイルに書き込む動作を
Rubyで動かすことは可能、ということですよね

>>347
名前欄もレス番も手で打ったらミスりました
349デフォルトの名無しさん:2012/10/10(水) 15:38:13.54
350デフォルトの名無しさん:2012/10/10(水) 15:48:37.74
間違えた

PerlからEXCEL-VBAのマクロを起動するには
http://chaichan.lolipop.jp/perlnote/perlnote2007-11-182.htm
351デフォルトの名無しさん:2012/10/10(水) 17:01:44.49
できました
ありがとうございました
http://d.hatena.ne.jp/paz3/20090813/1250134172
352デフォルトの名無しさん:2012/10/10(水) 20:17:42.48
a = [1, 2, 3, 4, 5]とあった時、指定した添字以降の配列を取得するにはどう書くのがよいですか?
例えばf(a, 2)で[3,4,5]が返る というものです。
353デフォルトの名無しさん:2012/10/10(水) 20:19:11.62
こんなんでどうよ
[1,2,3,4,5].slice(2, 100)
354デフォルトの名無しさん:2012/10/10(水) 20:24:07.61
>>353 ありがとうございます!
355デフォルトの名無しさん:2012/10/10(水) 21:53:56.09
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デフォルトの名無しさん:2012/10/10(水) 22:01:17.18
>>353に言い忘れてたんだけど、っていうか、なにか教えてもらったらマニュアルなりで確認して欲しいんだけど、
Array#sliceは「n要素目からx個取り出して配列として返す」だ
slice(2,100)は2要素目から100個取り出す
100個取り出すんだから100越えたら動かない
357デフォルトの名無しさん:2012/10/10(水) 22:01:50.21
slice(n, 100)だからそのあたりで止まるんじゃないかと
もしRubyがスタック食いつぶせば例外が投げられて表示されるよ
358デフォルトの名無しさん:2012/10/10(水) 22:04:07.01
あとcdrに相当するのはlst[1..-1]かlst.slice(1, -1)
359デフォルトの名無しさん:2012/10/10(水) 22:10:05.18
>>356,357,358
あー!なるほど
ありがとうございます!
360デフォルトの名無しさん:2012/10/10(水) 22:13:21.48
>>358
irb(main):242:0> [1,2,3].slice(2,-1)
[1,2,3].slice(2,-1)
nil
361デフォルトの名無しさん:2012/10/10(水) 22:54:34.32
>>360
あああ、ごめんなさい。[1,2,3].slice(1..-1)か
362デフォルトの名無しさん:2012/10/11(木) 10:16:41.75
・韓国は外貨調達をめぐり、「悪縁」という言葉がしっくりくるほど日本には苦々しい記憶がある。
 最もつらい記憶は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デフォルトの名無しさん:2012/10/11(木) 22:40:48.34
すっごい初歩的な質問で申し訳ないけど
たとえば
a**k(k=0,1,2)
の関数ってどういうスクリプト打てばいいの?
aを代入しただけでk=0,1,2全ての答えをreplyしてもらえるようにしたい
364デフォルトの名無しさん:2012/10/11(木) 22:59:57.23
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デフォルトの名無しさん:2012/10/11(木) 23:05:25.31
>>364
オギャアアアアア(^q^)
関数か・・・
ありがとうれす(^q^)
366デフォルトの名無しさん:2012/10/12(金) 02:36:53.03
Enumerableのメソッド群は覚えると配列操作が捗るぞ
367デフォルトの名無しさん:2012/10/12(金) 21:38:58.68
「初めてのプログラミング」P19の
puts 'You?'re swell!'
ってYouの後「?」で合ってます?エラー出るんだけど。
バックスラッシュだと1行目と同じになっちゃうし何だろ
368デフォルトの名無しさん:2012/10/12(金) 21:47:49.12
放射性セシウム:ネットで販売容疑、韓国人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デフォルトの名無しさん:2012/10/12(金) 22:44:53.45
オライリーの木の描いてるやつ?
バックスラッシュだろうね
370デフォルトの名無しさん:2012/10/13(土) 08:57:24.49
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デフォルトの名無しさん:2012/10/13(土) 12:23:51.48
=の左に置けるのは左辺値(くだけていえば変数)だけ。
372デフォルトの名無しさん:2012/10/13(土) 13:43:17.54
今日日、rubyのメリットが見えない
このスレの住人って何かの罰ゲームで使ってるのかな
373デフォルトの名無しさん:2012/10/13(土) 14:41:47.23
>>372
もしかしてGUIとかに使おうとしてる?そうだとしたら確かに壁が多いが

・OOPのプロトタイピングに
・組み込みクラスを魔改造してDSLに
・テキスト処理やリスト処理に
・テストの補助に
・RoR
374デフォルトの名無しさん:2012/10/13(土) 19:35:30.52
>>371
あ、ωは定数だ_| ̄|○
375デフォルトの名無しさん:2012/10/13(土) 19:45:52.42
376デフォルトの名無しさん:2012/10/13(土) 22:20:17.06
>>374

(定数も書けるよ)

数学とは違って=は代入にしか使わないので、ωが満たす条件/関係

O**3=1

を書いたつもりでも、自動的に方程式を解いてくれるわけではない。
(三次方程式だから解いても3つ解があるし…)
自明な1以外は素直にO=Complex(-0.5, -Math.sqrt(3)/2) みたいに書くとか。

数式処理系とかmetafontみたいに方程式を解ける言語もあるけど。
377363:2012/10/13(土) 23:25:36.37
自分なりに調べて改良してみた
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デフォルトの名無しさん:2012/10/13(土) 23:44:37.28
include(Math)の後ろに全角空白が入ってるよ
そのコードコピペして動かせば
> hoge.rb:1:invalid multibyte char (US-ASCII)
とか怒られるんだから不正なマルチバイト文字が一行目に入ってるってわかる
379デフォルトの名無しさん:2012/10/14(日) 03:41:15.16
プログラム初めての人がいきなり完成系書き上げようとしても、動かなかった時何が悪いのか分からんでしょ
まず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デフォルトの名無しさん:2012/10/14(日) 07:15:21.45
俺も昔そんなんだったなぁとしみじみしてる
381デフォルトの名無しさん:2012/10/15(月) 02:05:05.84
今Rubyからプログラミング始めた
初心者ですが愚痴ですいません。

1.9+Sinatra+Slim+Redis(セッション管理)、Mongoidで
初めてのバックエンドのあるサイトつくってるのですが

Railsって便利なんですね。
入力バリデーションを自分で考えて実装してましたが、
できあがってRailsをみたら自分が
車輪の再発明状態なのがよくわかりました。

メアドの正規表現とかは自作してたらかなり勉強にはなりましたけど。。
みなさんはバックエンドのあるWebシステムつくるなら
Railsありきでしょうか。
382デフォルトの名無しさん:2012/10/15(月) 03:21:03.34
るはないな
383363:2012/10/15(月) 22:47:56.09
皆さんのアドヴァイスのおかげで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デフォルトの名無しさん:2012/10/15(月) 22:53:02.63
>>383
回答と関係ないけど、最初の a=0 は a==0
で、2つの else if を elsif にする。endは2つだな。

385363:2012/10/15(月) 23:01:02.94
ちょっと改良してみた
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

でもエラー出るけど汗
386363:2012/10/15(月) 23:02:25.90
>>384
a==0にしなかったのは完全に自分のミスでしたorz

elsifってのは初めて聞きました
387デフォルトの名無しさん:2012/10/15(月) 23:47:06.76
「endがどうの」などというエラーは存在しない
エラーメッセージは(少なくともRubyと標準ライブラリのエラーは)すべてを表す
388デフォルトの名無しさん:2012/10/16(火) 19:57:45.40
・最近、若い女性の間でも右寄りの思想に傾倒する女子が急増している。
 「K-POPや韓流ドラマは絶対視ない!」、「韓国は国ぐるみで間違った歴史を教えて、日本を悪者に仕立てている。
 許せない!」、「尖閣諸島や竹島は絶対に日本のもの!」、「中韓とは断固国交断絶!」「広告代理店やマスコミが
 朝鮮人と結託して、日本人に反日的な感情を植え付けようとしてる!」……などと語気が荒く語る女性が少なからず
 存在するのだ。

 しかも、彼女たちはいわゆる”普通の女子”。流行やブランド品を好む、 “スイーツ系女子”の相田多喜子さん
 (仮名・33歳・会社員)はこう話す。
 「韓国製のコスメや食品はもちろん、韓国と業務提携、協賛している日本企業の製品も購入しないようになった」

 発端は知人に紹介された「2ちゃんねるまとめブログ」だという。
 「それまで2ちゃんねるに関心がなかったのですが、中国や韓国の実態を伝える書き込みを初めて読んでショックを
 受けました。韓流芸能人が韓国で日本を悪く言っていること、韓国の性犯罪率の高さ、商品にウジが混入すると
 いった企業の衛生管理のずさんさなどを知り、さらにネットで勉強するように。日本のマスコミが偏った報道しか
 しないことを知りました」


 彼女たちの多くが、ネットを通して”真実”にたどり着き、日頃感じていた矛盾が解決したと語る。
 それは、いわゆる「ネトウヨ」とは違うのか……? 
 「違います。私たちがしているのは日本人として当たり前のこと。許してはいけないことを許したくないだけ」(竹中さん)(抜粋)
 http://nikkan-spa.jp/312054
389デフォルトの名無しさん:2012/10/17(水) 22:01:18.00
>>373
メリットの見えなくなった理由が「これって、全部jsでよくね?」なんだ
(デザパタならgithubでサンプルコードのレポジトリ見かけた)
文字コードとか、gem、railsで出来た既存資産でのアドバンテージ教えてくれ
390デフォルトの名無しさん:2012/10/18(木) 18:35:52.55
一体今までどれほどの時間が=と==のせいで無駄になったことだろうか
391デフォルトの名無しさん:2012/10/19(金) 01:35:21.93
>>389
俺自身Railsとかはあんまり知らんのでそこは何とも言えんが
JSで継承関係が絡むクラスベースOOPはあまりやりたいと思わんなあ
392デフォルトの名無しさん:2012/10/19(金) 13:13:18.72
そこのあなた
TypeScript
ですよ
393デフォルトの名無しさん:2012/10/19(金) 21:48:47.03
美女が手書きのボードでLinuxコマンドを教えてくれるアプリ「美女Linux」
http://gigazine.net/news/20121019-bijo-linux/

先をこされたrubyの負け

美女rubyを作って世界に売り込め
394デフォルトの名無しさん:2012/10/20(土) 08:14:20.37
Rubyちゃん「…」
395デフォルトの名無しさん:2012/10/20(土) 18:22:06.35
ド素人ですが教えてください Win7 Ruby193

入力
puts texts
出力
{"text1"=>"あいうえお", "text2"=>"かきくけこ"}

この状態から以下のように実行結果が出せるようにするにはどうしたらよいのでしょうか
入力
puts text1
出力
あいうえお

オリジナルの出力はハッシュのキーと値だと思うのですが、
valuesというメソッドを使おうとしたのですが、定義されていないとエラーが出て使えませんでした。
396デフォルトの名無しさん:2012/10/20(土) 18:25:58.61
puts texts['text1']
#=>あいうえお

ってこと?
397デフォルトの名無しさん:2012/10/20(土) 18:39:09.97
>>396 以下の様にエラーが出てしまいました
(ファイル名).rb:63:in `[]': can't convert String into Integer (TypeError)

後出しでもうしわけないですが、
もとのtextsが別の配列の中から抽出したものなのですが、そのあたりが原因なのでしょうか
このコマンド自体も大きなプログラムの中に私が追加しようとしているのです
398デフォルトの名無しさん:2012/10/20(土) 21:02:48.37
ハッシュに並カッコでなく角カッコ使ってるとか
399デフォルトの名無しさん:2012/10/20(土) 21:15:47.25
>>397
そのエラーが出るということは texts は Hash ではなく Array
400デフォルトの名無しさん:2012/10/20(土) 23:51:47.60
>>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デフォルトの名無しさん:2012/10/21(日) 00:19:41.40
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デフォルトの名無しさん:2012/10/21(日) 01:49:48.42
>>400

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

texts[0]["text1"]
403デフォルトの名無しさん:2012/10/21(日) 01:54:10.40
>>401

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

404デフォルトの名無しさん:2012/10/21(日) 03:19:20.52
>>403
全然わからないっす(´・ω・`)
これとか参考になりますか?
ttp://blog.mwsoft.jp/article/33047430.html
とにかく>>401のリンク先と同じ結果を得たいのですが…
405デフォルトの名無しさん:2012/10/21(日) 04:15:34.08
mecabとrubyバインディングがインストールできてないんじゃないの

OS名+ruby+mecab とかでぐぐれば動かすまでの解説が何かしら出るだろうから、
この手順までは進めたけどこの手順が分かりません、とか、この手順でこのエラーが出ました、とか書きなよ
406デフォルトの名無しさん:2012/10/21(日) 04:26:01.03
>>405
そのためのmecab-rubyの配布が公式でなくなっていたので
IO.popenを使っていました
もっと調べてみます
407デフォルトの名無しさん:2012/10/21(日) 04:33:49.02
>>406
見つけたー!できるかもしれないです!頑張ります!
408デフォルトの名無しさん:2012/10/21(日) 07:06:04.17
ソウルからヨボセヨ 「ハングル輸出」は虚報 2012.10.20 03:01 [韓国]


 韓国独自の文字であるハングルは民族的自慢のタネで、10月9日が「ハングルの日」として以前は祭日だった。
 しかし祭日が多すぎると休日からははずされたため、復活を望む声が強い。
 来年には復活の可能性があるとかで、カレンダー業者が気をもんでいる。

 そのハングルをめぐってまずい話が起き問題になっている。
 先年、インドネシアの小さな島の部族がハングルを自分たちの「公式文字」に採択したというニュースがあり
「ハングルの優秀性を世界に示した」として官民挙げて大喜びした。

 教科書でも紹介されるまでになったのだが、最近、この話はマスコミが誇張したもので「公式文字採択」は虚報と分かった。
 政府も教科書や各種展示を手直しすることになったという。

 この少数部族というのはスラウェシ島に近いブトン島のチアチア族といい人口は6、7万人とか。
 固有の部族語を話しているが、韓国の団体が援助を餌にその部族語の表記にハングルを使うことを勧めた。

 その結果「公式文字に採択」となったというのだがインドネシアはローマ字が公用文字。地方の部族が別の文字を
公式文字に採択するのはありえない。
 実際は単にハングルを学んでいるといった程度だったのだ。ハングル愛国主義の勇み足である。(黒田勝弘)

http://sankei.jp.msn.com/world/news/121020/kor12102003020000-n1.htm
409デフォルトの名無しさん:2012/10/21(日) 07:21:20.14
全然わからん…
ぐぐったけどそのまま使えないってことしかわからん…orz
410デフォルトの名無しさん:2012/10/21(日) 07:45:29.74
○○というシステムを××言語で使えるようにしました、というものを利用するのに必要なものは

○○というシステムの動作に関する知識
××言語の使用に関する知識

のふたつ
どちらが欠けても利用できない
「○○というシステムを××言語で使えるようにしたもの」は、○○と××のどちらの知識も必要とする
当たり前っちゃ当たり前
411デフォルトの名無しさん:2012/10/21(日) 08:51:08.73
mecabとrubyというよりwindowsの問題みたいです
名詞の数を数えたいだけなのに難しすぎてタヒにたい
412デフォルトの名無しさん:2012/10/21(日) 13:49:02.60
1.8のMeCab.soなら、↓のページの一番下から落とせるよ
http://www.freia.jp/taka/blog/758/index.html
413デフォルトの名無しさん:2012/10/22(月) 21:51:47.81
>>402 すげーすっきり書けた ほんとにありがとう
414デフォルトの名無しさん:2012/10/23(火) 01:45:10.39
とあるウェブサービスにログインする必要のあるスクリプトを書いています。
テストのたびに毎回ログインさせるのはマズイと思うのですがどうしたら良いのでしょうか。
mockやstubとやらを使ってダミーのデータを返すようにするのが普通なんでしょうか。
415デフォルトの名無しさん:2012/10/23(火) 04:53:26.17
はい

html = uri.read

のようなサーバアクセス部分を

# html = uri.read
html = File.read('200body.html')

のようにするようなイメージでOKです
実際はレスポンスヘッダとかも返さないといけないのでサーバアクセスメソッドごと切り替える形になるかと

いちいち手動でやるのめんどくへえ且つNet::HTTP利用ライブラリ経由で取得してる場合はWebMockなどが使えまする
416デフォルトの名無しさん:2012/10/23(火) 19:04:49.54
ありがとうございます。
webmockを導入して勉強中です。
417デフォルトの名無しさん:2012/10/24(水) 11:24:15.69
ttp://rubyinstaller.org/
が落ちてるっぽいんだけど、ミラーとか再配布してるとことか知ってる人いますか?
418デフォルトの名無しさん:2012/10/24(水) 11:37:23.08
今落ちてはいない気がする
sourceforgeにファイル自体はあるから、その理屈では仮にサイトが落ちてもなんとかなるんだけど…
419デフォルトの名無しさん:2012/10/24(水) 12:27:49.86
rubyの鯖っていつも落ちてるイメージがある
420デフォルトの名無しさん:2012/10/24(水) 15:47:47.17
復活してました
無事落とせました
421デフォルトの名無しさん:2012/10/24(水) 18:09:23.91
お、新しいやつ来てたのか。俺も明日落とそう
422デフォルトの名無しさん:2012/10/24(水) 21:45:12.11
どこか落ちてると思ったらここで調べてる。
http://www.downforeveryoneorjustme.com
423デフォルトの名無しさん:2012/10/25(木) 03:22:14.74
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デフォルトの名無しさん:2012/10/25(木) 04:58:55.34
>>423
コンストラクタがダメなら多分アクセサメソッド使うのもダメなんでしょ?

Parent.new('ノリスケ').child.parent_name
Parent.new('ナミヘイ').child.parent_name
とか作った時どーすんの
ChildからParentに対する(またはその逆とかの)なんらかの参照が無ければ無理よ
425デフォルトの名無しさん:2012/10/25(木) 07:48:11.72
子供に親の情報を持たせたくないなら親や外部に親子関係の情報持てば?
426デフォルトの名無しさん:2012/10/25(木) 09:43:34.26
>>424-425の指摘が妥当
というか、>>423の構造はべつに「カッコ悪」くはない
それなりに素直でごく普通なので、堂々と使うといい
427デフォルトの名無しさん:2012/10/25(木) 22:58:49.19
>>424 >>425 >>426
ありがとうございます。
おとなしくChild.new(@name)と修正しようと思います。
428デフォルトの名無しさん:2012/10/26(金) 04:55:55.79
(flag ? arr.each : arr.revese_each){|i| puts i}

proc = flag ? &arr.each : &arr.revese_each; prco{|i| puts}

みたいな列挙の仕方を分岐するコードを
たまに書きたくなるんですけど、自然でうまいやり方ないですか。
429デフォルトの名無しさん:2012/10/26(金) 05:40:20.45
>>428
こうじゃなくって?なんか別の方法ってこと?
(flag ? arr : arr.reverse).each{|i| puts i }
430デフォルトの名無しさん:2012/10/26(金) 10:32:09.68
やりたい処理の流れをその都度日本語できちっと書いてから考えるようにするとわかる手の話のよーにも思える
431デフォルトの名無しさん:2012/10/26(金) 21:53:03.46
>>428
sendくらいしか思いつかんなー。
432デフォルトの名無しさん:2012/10/27(土) 00:45:57.16
正規表現について質問です。
文中にある固有名詞を全て先頭を大文字にしたいのですが、

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デフォルトの名無しさん:2012/10/27(土) 01:16:00.63
>そのやり方だと、'rock'だけでは大文字にしたくないが、'John Rock'とつながる場合は
>どちらも大文字にしたいという要求に応えられません。

前の語を参照するくらいできるでしょ
434デフォルトの名無しさん:2012/10/27(土) 01:53:18.26
>>432
word2cap = ['john rock', 'john', 'smith', 'mary', 'jane',]
re = Regexp.union(word2cap)
str.gsub!(/\b#{re}\b/){ $&.gsub!(/\b\w+/){$&.capitalize} }

Hash使うのとどっちが早いんだろな
435デフォルトの名無しさん:2012/10/27(土) 20:05:16.15
436デフォルトの名無しさん:2012/10/27(土) 21:37:27.54
>>434
なんつーキモいコードだ…
437432:2012/10/27(土) 21:52:35.50
いくつかご回答有難うございました。

>>433
それが、1語遡るだけならそれでも多少のコストは構わないんですが
中には2語以上遡らないといけないレアケースもあるので、そういうレアケースのために負うコストを考えると
区切り記号で区切って1語ずつ処理という手法では難しいのかと思います。

>>434
432では細かく書いてないのですが、単語区切りは一概に \b では処理できないのです。
というのも、たとえば"I don't smoke."というスペルがある場合、単語境界を\bで処理すると、
固有名詞 "Don"に引っ張られて"I Don't smoke."となってしまいます。
なので、\bで一般化することはできず、432で書いた他にも( |,|^|"|'|\?|!|--+)みたいなことを
しないと漏れが生じてしまいます。

自然言語に対して一般化処理を行うのがかなり無理あるのは承知しているのですが
(たとえば、"bill"は固有名詞"Bill"かもしれないし、普通名詞"bill"かもしれないので
最終的な判断は人間が文脈で判断するしかない)、それでも機械的に処理できる範囲では
機械任せにしたいかなと。
438デフォルトの名無しさん:2012/10/28(日) 01:07:44.52
>>432の正規表現が期待通りに動かないのは、後ろの( |\.)が
次の単語の前の空白を消費してるから
先読みが使えそうだけど他にもいろいろ条件がありそうだなあ
str.gsub!(/\b#{capitalizeRegex}(?=[\s\.\?!])/io){

英語の形態素解析ライブラリとか使ったらいいんでね?
439デフォルトの名無しさん:2012/10/28(日) 01:31:21.07
>>438
なるほど!そこでしたか!
ありがとうございます。ライブラリはこれから探してみます。
440デフォルトの名無しさん:2012/10/28(日) 02:48:02.24
>>435
このスレ民はそのダイエットできないな
441デフォルトの名無しさん:2012/10/28(日) 11:23:19.22
島根県と言えば…
アレ?なんだろ?浮かばねえな…
442デフォルトの名無しさん:2012/10/28(日) 12:33:44.46
ヒント:このスレのタイトル
443デフォルトの名無しさん:2012/10/28(日) 12:51:52.75
答: いずもまがたまの里
444デフォルトの名無しさん:2012/10/28(日) 14:26:18.48
砂丘
445デフォルトの名無しさん:2012/10/28(日) 14:29:05.28
それは取鳥
446デフォルトの名無しさん:2012/10/28(日) 14:35:01.09
取烏
447デフォルトの名無しさん:2012/10/28(日) 17:10:55.01
最近島根に初のスタバが出店して
地元では大変なニュースになってたようです
448デフォルトの名無しさん:2012/10/28(日) 19:19:40.56
Ruby初心者どころか、今日からRubyを始めてみようという者なんですが、
.rdoc形式のファイルってどうやって読むのですか?
テキストエディタでももちろん読めますけど、なんかタグもついてるし、
なにかビューワーがあるのですか?
ぐぐってもわからんかったです
449デフォルトの名無しさん:2012/10/28(日) 19:35:23.02
ri
450デフォルトの名無しさん:2012/10/28(日) 19:54:03.23
ri ?
じぇんじぇんわからんちん
451デフォルトの名無しさん:2012/10/28(日) 20:05:57.80
そのまんま読んでいいよ
そのまんま読めるというのがいちおう売りなので
452デフォルトの名無しさん:2012/10/28(日) 20:11:55.82
>>451
例えばrails new hugeとかやって
できるREADME.rdocみると
<tt>hogehoge</tt>みたいなタグがついてるけど
なんか対応したビューワーがあるんじゃないの?
453デフォルトの名無しさん:2012/10/28(日) 21:04:30.39
ないです
454デフォルトの名無しさん:2012/10/28(日) 21:05:41.83
いちおうHTMLに変換して読むということができるんだが、それは自力だ
めんどくさいので、ファイルとして第三者に提供するのでなければ誰もいちいちやらない
そのまま読んだほうが早い
455デフォルトの名無しさん:2012/10/28(日) 23:29:24.53
>>453,454
そうなんですね、、、なんか不思議ですが了解です
456デフォルトの名無しさん:2012/10/28(日) 23:40:43.12
<rails>hogehoge</rails>
457デフォルトの名無しさん:2012/10/29(月) 03:18:39.17
RubyでOpenGLプログラミングできますか?
458デフォルトの名無しさん:2012/10/29(月) 03:19:38.55
なぜOpenGL
459デフォルトの名無しさん:2012/10/29(月) 03:38:22.72
自分でGPU制御してもいいんだけとZバッファとか面倒くさいからGL使いたい
半透明ポリゴン使うからZ順には並べますがめり込んでる処理とかがですね・・
Rubyじゃかけませんよね
460デフォルトの名無しさん:2012/10/29(月) 05:05:20.97
そういうのはruby openglとかでググった方が早いだろ
461デフォルトの名無しさん:2012/10/29(月) 09:07:20.27
できるかできないかでいえばできる
してもいいししなくてもいい
個人的にはしない方が良いと思う
メリットほとんどないし
462デフォルトの名無しさん:2012/10/30(火) 02:59:06.28
最近使い始めたガチの初心者だけど
htmlを書き換えるプロキシがことごとくできない…
サイトにあるサンプルすら動かないってどういうこと…
463デフォルトの名無しさん:2012/10/30(火) 05:35:06.84
サイトのサンプルを動かせるようになってからプログラミングしましょう。
464デフォルトの名無しさん:2012/10/30(火) 07:39:15.69
プロキシサーバはアプリケーションではなくサーバなので、通常のプログラムではありません(語弊だらけ)

ユーザーが自作のサーバ(しかもプロキシサーバ)を立ち上げることを前提としていないセキュリティソフトが多いので、
とりあえずはそのへんのパーソナルファイアウォールとかアンチウィルスソフトとかの設定を見直し
465デフォルトの名無しさん:2012/10/30(火) 10:35:36.77
>>462
そのサンプルと動作環境を特定してくれないとたいしたこと答えられないよ
466デフォルトの名無しさん:2012/10/30(火) 10:56:55.25
自作のプログラムがアンチウィルスソフトに撃墜されたというのはよくある話だな
467462:2012/10/30(火) 11:28:28.05
自分の動作環境は
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デフォルトの名無しさん:2012/10/30(火) 15:12:17.86
469デフォルトの名無しさん:2012/10/30(火) 15:13:24.65
いまいち要領を得ない

結局、そのサイトのスクリプトを(全く修正せず)実行したが、
いくつかのスクリプトは記事のどおりに動いてないってことか?

proxy2.rbを見ると content-type が text/html でないと処理しないみたいだから
そうでないページでテストしたのでは?

470462:2012/10/30(火) 15:33:23.62
>>469
試行錯誤で色々試してみたのですが、あなたの言う通りです

content-typeがtext/htmlでないページでテストしていたようです…
次はこれをどのページでも対応できるように考えてみようと思います
471デフォルトの名無しさん:2012/10/30(火) 16:59:13.93
472デフォルトの名無しさん:2012/10/31(水) 00:03:05.49
proc と Proc.new と lambda と ->(){} に違いはありますか。
またどのように使い分けた方がいいか、指針はありますか。
473デフォルトの名無しさん:2012/10/31(水) 13:58:13.18
WindowsXP ruby1.9.3 RDEver1.1.1 を使っています
「たのしいruby」を片手に勉強してるのですが

def hello
print("hello,ruby.\n")
end
→helloで保存

require "hello"
hello()
→use_helloで保存

これでuse_helloを実行するとエラーが出ます どこがダメなのでしょうか
474デフォルトの名無しさん:2012/10/31(水) 14:25:04.15
たのしいRuby 1.9.2 でぐぐる
475デフォルトの名無しさん:2012/10/31(水) 15:10:26.75
>>474
ありがとうございます
さっそくググってきます
お手数かけました
476デフォルトの名無しさん:2012/10/31(水) 18:47:06.95
エラーメッセージを読めばどこがダメか書いてあるよ
477デフォルトの名無しさん:2012/10/31(水) 18:54:43.20
それはたぶん気のせい
478デフォルトの名無しさん:2012/10/31(水) 21:15:58.28
Rubyのバージョンの問題だな
俺もそれやられたわ
Ruby1.9.2だっけからは$LOAD_PATHにカレントディレクトリが含まれてないからそれだと読み込めない
require './hello'またはrequire_relative 'hello'で解決
479デフォルトの名無しさん:2012/10/31(水) 21:27:54.11
>>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デフォルトの名無しさん:2012/10/31(水) 22:09:34.72
procって書いてあると、あとでブロックつきメソッドの一部にするのかなーと思う
lambdaって書いてあると、あとで代入してメソッドみたく使うのかなーと思う
Proc.newって書いてあると、原理主義者が出たぞー逃げろーと思う
->って書いてあると、->wwwwwwwwwwwwwwwwwwと思う
481デフォルトの名無しさん:2012/11/01(木) 00:36:06.92
すみません
eachとかのメソッドがどこのクラスに属しているかは
どうやって調べるんですか?
482デフォルトの名無しさん:2012/11/01(木) 00:43:09.68
rubyの場合は関連の無い様々なクラスがそれぞれ独自にeachを実装する
483デフォルトの名無しさん:2012/11/01(木) 01:16:12.10
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はちみつ餃子 ◆8X2XSCHEME :2012/11/01(木) 01:19:21.90
それがダックタイピング。
アヒルのように鳴くものはアヒルであるし、 each メソッドがあるクラスはコレクションである。
485デフォルトの名無しさん:2012/11/01(木) 01:57:44.23
p hoge.method(:each).source_location
とかやると組み込みクラスじゃなければそれが定義されてるソースがわかる
組み込みクラスだとnilが返ってくるが、そんときはclassを調べて以下のリファレンスとかから探せばいい
http://doc.ruby-lang.org/ja/1.9.3/library/_builtin.html
486デフォルトの名無しさん:2012/11/01(木) 02:23:36.29
クラスを知りたいときには継承関係もいっしょにわかるこれが便利だな
p hoge.class.ancestors
487デフォルトの名無しさん:2012/11/01(木) 02:42:19.57
irbのヒストリ機能は便利なのだが、過去の入力が長くて折り返しがあった場合、
最終行しか編集できないのは、どうにかならないものか。(Windows)
488デフォルトの名無しさん:2012/11/02(金) 13:08:47.37
emobile
489デフォルトの名無しさん:2012/11/02(金) 13:09:17.78
emobile
490デフォルトの名無しさん:2012/11/05(月) 05:21:44.75
MeCabで名詞カウントするプログラム作成しています
しばらく放置していたのですがまた取り掛かります
https://friendpaste.com/425ROVMjubUeEqcJnzYUo8
文字化けしていますがこのプログラムの3行目は
NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/
と書いてあります
これらの品詞が連続して出てきた時に一つの単語とみなして欲しいのですがどう付け加えれば良いでしょうか
ド変態でカウントして欲しいのにドと変態で別々でカウントしてしまうのです
47〜49行目は解析したいテキスト、51行目は名詞扱いされる記号を書いています
どなたかよろしくお願いいたします
491デフォルトの名無しさん:2012/11/05(月) 16:37:08.00
>>490
化け化けで見えないからどんな文章で引っかかってるのかわからん
つうか変なとこで苦労するより辞書作った方が早いんじゃね
492デフォルトの名無しさん:2012/11/06(火) 01:39:48.62
>>491
化けている部分は>>490に書いた通りです
47〜49行目に入るテキストは特に決まりがないので辞書作成は無理です
NECESSARYに書いた品詞が2つ以上続いた場合は一単語とみなしてカウントしたいです
例えばテキストに「ド変態と変態」と入れると「ド」は接頭詞,名詞接続で「変態」は名詞,一般なので
"ド"=>1 "変態"=>2 とアウトプットされますが欲しい結果は "ド変態"=>1 "変態"=>1 なんです
493デフォルトの名無しさん:2012/11/06(火) 01:41:07.16
>>492
あと51行目に関しては!や@などの記号が名詞扱いだったので除外するために入れました
それだけなので無視してください
494デフォルトの名無しさん:2012/11/06(火) 03:06:31.84
0を区切りとした数列のグループそれぞれの和を返す、
f([1, 2, 3, 0, 5, 5, 0, 2, 4, 6, 0]) => [6, 10, 12]
となるような関数fを作りなさい (10点)
495デフォルトの名無しさん:2012/11/06(火) 11:55:31.09
>>494
どっかの高校の試験問題?
496デフォルトの名無しさん:2012/11/06(火) 12:17:08.95
でけた
def f(suretu)
 result = []
 sum = 0
 suretu.each do |x|
  sum += x
  if x == 0 then
   result += [sum]
   sum = 0
  end
 end
 return result
end

p f([1,2,3,0,5,5,0,2,4,6,0])
[6, 10, 12]
497デフォルトの名無しさん:2012/11/06(火) 12:58:48.42
def f(lst)
  lst.chunk{|n|
    n == 0 ? :_separator : :num
  }.map{|_, seq|
    seq.inject(0, &:+)
  }
end
498デフォルトの名無しさん:2012/11/06(火) 16:32:16.03
>>497
:_separatorを活用してる人をものすごくひさしぶりに見た
499デフォルトの名無しさん:2012/11/06(火) 20:58:56.25
文字列と同様に、Array#splitみたいなのがあれば便利そうだ
500デフォルトの名無しさん:2012/11/06(火) 20:59:27.22
つーか chunk categorize の使い道を自分では思いつけん。
501デフォルトの名無しさん:2012/11/06(火) 21:16:49.26
今更だけど
>>494>>490への遠回しな答えでしょ
502デフォルトの名無しさん:2012/11/07(水) 02:00:09.49
exlap.rbを利用しないで

require 'win32ole'
fso = WIN32OLE.new("Scripting.FileSystemObject")
filename = fso.GetAbsolutePathName("test.xls") #フルパス名で記録
xl = WIN32OLE.new("Excel.Application")
xl.Visible = true #Excelが動くのを見えるようにする
if test(?e, filename) #filenameが存在する場合
wb = xl.Workbooks.Open(filename)
else #filenameが存在しないので新規オープン
wb = xl.Workbooks.Add()
end
ss.Range("C2").Select #左2列と上1行を固定
xl.ActiveWindow.FreezePanes = true

だと動くのにexlap.rbを利用して

require 'exlap'
require 'win32ole'
xl = Exlap.new
filename = "test.xls"
wb = xl.book_open filename # ワークブックを開く
ss = wb.first_empty_sheet # 最初の空シートを選択
ss.Name = "論文の要約一欄" # ワークシート名を設定
ss.Range("C2").Select #左2列と上1行を固定
xl.ActiveWindow.FreezePanes = true

だと最後の行でエラーでるのはなぜですか?
503デフォルトの名無しさん:2012/11/07(水) 07:52:29.75
1.8の正規表現で
'<a href="http://www.foo.com/index.html">foo</a><a href="http://www.foo2.com/index.html">foo2</a>' ←HTMLの一部
>'http://www.foo2.com/index.html'
'n1 n2 n3 n4 n5' ←文字列の一部
>'n5'
みたいな結果を得たいのですがどのように書けば出来ますか?
[/<a href=".(+?)">foo2<\/a>/,1]
>http://www.foo.com/index.html">foo</a><a href="http://www.foo2.com/index.html
[/^.+\s(.+?)$/,1]
>n2 n3 n4 n5
となってしまいます
504デフォルトの名無しさん:2012/11/07(水) 10:16:29.74
>502
exlapだから
505デフォルトの名無しさん:2012/11/07(水) 13:09:14.63
>>504
最後の行をどう書けば動きますか?
exlapではセルの固定はできないのでしょうか
506デフォルトの名無しさん:2012/11/07(水) 13:13:10.38
exlap 使っても require 'win32ole' は変わらないんだから
exlap 使う意味なくね?
507デフォルトの名無しさん:2012/11/07(水) 15:04:26.67
>>506
このあともexlapを使うのでwin32oleを組み合わせたいのですが
まずここのエラーの理由がわからないと他のエラーも直せないのです…
508デフォルトの名無しさん:2012/11/07(水) 21:05:03.40
>>503
.*のマッチする範囲が広すぎるので、制限してやるのがポイント
""の内部で"が出現することは無いだろうから [^"]+などとしてやる

htmlsrc = '<a href="http://www.foo.com/index.html">foo</a><a href="http://www.foo2.com/index.html">foo2</a>'
p /<a\s+href="([^"]+)"\s*>\s*foo2\s*<\/a>/.match(htmlsrc)
=> #<MatchData "<a href=\"http://www.foo2.com/index.html\">foo2</a>" 1:"http://www.foo2.com/index.html">

なんでもかんでも正規表現でがんばっていた時期が私にもありました

509デフォルトの名無しさん:2012/11/07(水) 23:08:58.75
>>507
エラーメッセージもなしにエラーの理由なんて分かりません

excel持ってないからあてずっぽうだけど、
xl.objで生のExcel.Applicationオブジェクトに触れるっぽいから
exlapがラップしてないメソッド使う場合は
xl.obj.ActiveWindow.FreezePanes = true
みたいにするんじゃないか?
510デフォルトの名無しさん:2012/11/08(木) 01:32:51.06
>>503
うーん、質問の意味がわからない…
なんでいきなり
'n1 n2 n3 n4 n5' ←文字列の一部
が出てくるのか…
511デフォルトの名無しさん:2012/11/10(土) 17:52:07.72
a[b + c => d] = e
この添字の部分はどういう意味ですか?
512デフォルトの名無しさん:2012/11/10(土) 17:57:08.61
ハッシュ
513デフォルトの名無しさん:2012/11/10(土) 21:08:45.55
シングルトンってオブジェクト一つしかつくれないってことだけど
具体的になイメージがわかない。
例をだして教えてください。
514デフォルトの名無しさん:2012/11/10(土) 21:37:34.04
>>513
おれは、通し番号をつくってる
たとえば、ファイルをひらいたりとじたりしてるとき、操作したファイルの通し番号
515デフォルトの名無しさん:2012/11/10(土) 21:41:06.10
>>513
必要ないものを作ったり使ったりしてはいけません
思いつかないのなら、使おうとしてはいけません
516デフォルトの名無しさん:2012/11/10(土) 21:43:21.95
>>513
Javaには、グローバル変数がない。シングルトンを利用する。
JavaのプログラムをRubyに翻訳するとき、Rubyでもシングルトンを利用できる。
グローバル変数でもできる
517デフォルトの名無しさん:2012/11/10(土) 23:43:05.25
>>513
The earthとか、ひとつしか存在しないものを定義するとき便利。そのシステム中に一定個しか出現しないものにもいい。
518デフォルトの名無しさん:2012/11/10(土) 23:50:03.02
>>515が真理ではある…のだが、地雷踏み抜かないと成長しないというのも真理…かもしれない
本当に必要になったらわかるようになるから忘れろ、ってのもありだけどね
519デフォルトの名無しさん:2012/11/11(日) 01:02:17.84
一つしか作れないことよりも、新規生成したつもりでも既存のオブジェクトとして存在していれば、
素知らぬ顔をしてそのオブジェクトが帰ってくるのが、使い勝手が良い気がする。

複数の場所・タイミングで生成される可能性があるが、どこで作られたとしても、他の場所で使い回したい。みたいな。
生成がコピーによる生成を含めて、一カ所に閉じ込められるなら、要件としてシングルトンを満たしていても、採用する
必要は無いかなと思う。
520デフォルトの名無しさん:2012/11/11(日) 01:16:34.15
GoFでいうFlyweightとSingletonを組み合わせるパターンはしばしば出現する

ファクトリの部分にキャッシュを入れて、
かつファクトリ自体が一つであることを保証しようとすると
勝手にそうなる
521デフォルトの名無しさん:2012/11/11(日) 15:10:16.37
>>499
ホイ

class Array
def arsplit(pattern)
# pattern = regexp, string or number
result = []
result << []
self.flatten.each do |elm|
if pattern === elm
result[-1] != []? result << [] : false
else
result[-1] << elm
end
end
result[-1] == []? result.pop : false
result
end
end
522デフォルトの名無しさん:2012/11/11(日) 15:11:17.94
>>521の続き

[1,2,3,0,5,5,0,2,4,6,0].arsplit(0)
=> [[1,2,3],[5,5],[2,4,6]]
[1,2,3,0,5,5,0,2,4,6,0].arsplit(0).map{|ar| ar.inject(:+)}
=> [6,10,12]

" hoge hage hige ".split("")
=> [" ", " ", " ", "h", "o", "g", "e", " ", " ", "h", "a", "g", "e",
" ", " ", " ", " ", " ", " ", "h", "i", "g", "e", " ", " ", " "]
" hoge hage hige ".split("").arsplit(/&yen;s/)
=> [["h", "o", "g", "e"], ["h", "a", "g", "e"], ["h", "i", "g", "e"]]
523デフォルトの名無しさん:2012/11/11(日) 20:17:57.17
なんか冗長だなぁ…
524デフォルトの名無しさん:2012/11/11(日) 21:36:16.49
[:a,:b,:c,:d,:e,:f][0,3,5]
=> [:a, ;d, ;f]
という感じで複数の添字で引っこ抜くのできないの?


a = [:a,:b,:c,:d,:e,:f]
[a[0], a[3], a[5]]
でもいいけどマンドクセ
525デフォルトの名無しさん:2012/11/11(日) 22:13:42.89
>>524
Array#values_at
526デフォルトの名無しさん:2012/11/11(日) 23:01:11.51
>>522 >>525
values_at とか inject は知らなかった
使えそう

自分←不勉強
527デフォルトの名無しさん:2012/11/13(火) 14:33:49.47
1.8.7 から 1.9 への移行したい。
どこかに注意点のまとめがあったはずなんだけど見つからない。
528デフォルトの名無しさん:2012/11/13(火) 15:13:58.58
529デフォルトの名無しさん:2012/11/13(火) 16:31:02.80
http://d.hatena.ne.jp/takehikom/20090129/1233169748
>2行目に「# -*- coding: utf-8 -*-」(マジックコメント)を書きましょう。

1行目に
#coding: utf-8
とか書くのはダメ?
-*- は emacs 用とかじゃなくて
530デフォルトの名無しさん:2012/11/13(火) 18:16:39.38
>>529
おk
531デフォルトの名無しさん:2012/11/13(火) 18:17:00.55
Rubyとして意味はなくても装飾はつけといたほうがよいということになってる
すくなくともEmacsの簡便な動作には必要なものなので、それに相乗りして「なんか余計なの書いてあったから消した」を防ぐ効果が期待できる
Emacsを使ってるか、すくなくとも知っていればこの行を消すことはないはず
532デフォルトの名無しさん:2012/11/13(火) 18:30:45.74
> Rubyとして意味はなくても装飾はつけといたほうがよいということになってる

どこで推奨されてましたっけ?
533デフォルトの名無しさん:2012/11/13(火) 19:41:26.88
>>532
これ、私も知りたい
534デフォルトの名無しさん:2012/11/13(火) 19:46:28.22
本当にRubyにマジックコメントは必須だったのだろうか
どのエンコードか指定するのはもちろん良いとして
書かなくても自動判別できるようにするべきだったのでは
535デフォルトの名無しさん:2012/11/13(火) 19:49:48.31
require 'AutoEnc'
536デフォルトの名無しさん:2012/11/13(火) 20:35:57.67
>>534
1万行あるスクリプトファイルの、最後の行にだけぽつんと日本語が使われてる、とか、
EUCかシフトJISか判別不可能なオクテット列しか現れない、とか、
そういう嫌なケースがいくらも思いつく。
537デフォルトの名無しさん:2012/11/13(火) 21:39:28.19
自動判別は誤爆のほうが多いし、たとえばShift_JIS/CP932とLatin-5あたりの区別は技術的に困難
Latinの中でどのLatinかを判別するのも出現頻度と辞書頼りで根本的に誤爆上等
文字エンコーディングは「最初にファイルを書いた人」が"絶対に知っている"はずなので、
わざわざ電気代と時間をかけて推測して当たりか外れかドキドキするよりもその人に確かな情報を教えてもらうのがコスト的にベスト

テキストファイルは本来、最低限、文字エンコーディング情報をファイル中またはファイル付随で持つべきだった
…そんな「エンコーディング形式」なんて概念が不要だった時代からの遺産だから仕方がないんだけど
538529:2012/11/13(火) 21:40:50.28
>>530
ありがと

いま自分のスクリプトをみたら
> #coding: Windows-31J
> $KCODE='s'
とか
> #coding: utf-8
> $KCODE='u'
> # あ utf8
って書いてあったんだけど、
これって移行期を考えて書いてあったのかな?
って他人に聞く話ではないなw

obj.method{ |arg| ... } の arg がブロックローカルに
なることにビビった。
とりあえず、each_with_index とか times あたりが怪しいので
全部調べた。やっぱりヤバイのあった。疲れた。_| ̄|○
539デフォルトの名無しさん:2012/11/13(火) 22:29:56.10
ST2最強や
emacsなんていらんかったんや!
540デフォルトの名無しさん:2012/11/13(火) 23:04:16.16
先端開発版だと、デフォルトのソースエンコーディングがUTF-8になったようですが
2.0はそれで決定なんですかね?
541デフォルトの名無しさん:2012/11/13(火) 23:16:22.22
それと String#bメソッドでエンコーディングをASCII-8BITに出来るそうですが
やっぱりリテラルもあったほうがいいと思うんですけどね
%u() と %U() でUTF-8のリテラル
%b() と %B() でASCII-8BITのリテラル
みたいな

さらに贅沢を言えば、Windows用に\をエスケープしないリテラルが欲しいですな
"""ほげほげ\ほげほげ\ほげほげ\"""的なやつか、%記法で
542デフォルトの名無しさん:2012/11/14(水) 01:28:05.21
つーかいまどきutf-8以外使ってる方が悪いんだから
utf-8使ってる限りは変なコメント書かせずに良きに計らってくれよっていうね
543デフォルトの名無しさん:2012/11/14(水) 12:01:20.43
>テキストファイルは本来、最低限、文字エンコーディング情報をファイル中またはファイル付随で持つべきだった
>…そんな「エンコーディング形式」なんて概念が不要だった時代からの遺産だから仕方がないんだけど

Appleはエロいよ
544デフォルトの名無しさん:2012/11/14(水) 12:33:22.64
Windows Ruby1.9.3p286です
if a then
p "true"
end
って書くと"true"って表示されますが
if a == true then
p "true"
end
って書くと表示されません

Rubyではifのfalseとnil以外は真になるのに撫ぜa==trueが偽になるのでしょうか?
あとifはthenを省略かけるのですが、業界的には省略するのとしないのどっちが当たり前でしょうか?
545デフォルトの名無しさん:2012/11/14(水) 13:10:56.91
a が 1 とか 2 とか bool じゃないならそうなる
要するにあんた Perl に毒され杉だよってこと
546デフォルトの名無しさん:2012/11/14(水) 13:41:29.40
一瞬、「a が 1 とか 2 とか bool 」だったらa==trueがtrueになるのかと思った
あいまいな日本語はよくないぞ
547デフォルトの名無しさん:2012/11/14(水) 13:52:04.10
気付いたけど敢えて直さなかった
今は反省していない
548デフォルトの名無しさん:2012/11/14(水) 14:06:28.19
例えば1とか2のように、aがboolではない場合そうなります
つまり、あなたはPerlの感覚にとらわれすぎているということです
549デフォルトの名無しさん:2012/11/14(水) 14:35:35.53
>>531は結局寝言?
550デフォルトの名無しさん:2012/11/14(水) 14:50:36.89
世の中、Emacs中心に物事が回っている。そういうことだ
551デフォルトの名無しさん:2012/11/14(水) 16:34:00.50
a.rb の中身

# coding: Windows-31J
$KCODE='s'
doc=<<'EOD'
こんにちは
世界
EOD
p doc

a.rb の出力 1.8 では

"こんにちは\n世界\n"

になっていたけど、1.9 では

"こんにちは\r\n世界\r\n"

になったりしますか?

# ブロックパラメーターの確認と修正オワタ 疲れた・・・
552デフォルトの名無しさん:2012/11/14(水) 18:08:16.08
binmode と同じか
553デフォルトの名無しさん:2012/11/14(水) 20:15:14.51
resolv、net-dns、dnsrubyといくつかあるけどどれが主流ですかね
それぞれの違いとかどんなものなのか知りたいのだけど資料もあまり多くはないな
554デフォルトの名無しさん:2012/11/15(木) 08:51:04.61
Ruby 1.9x irbでの環境で実行していて、
16進文字コードと、正規表現の入力チェックに
関して質問したいことが出ました。
"0123456789" =~ /&yen;A&yen;d+&yen;z/u
=> 0
こういう入力チェックをしている状況で、
たとえば先頭の0を16進表記しても
"&yen;x30123456789" =~ /&yen;A&yen;d+&yen;z/u
=> 0
という風になります。
'&yen;x30123456789' =~ /&yen;A&yen;d+&yen;z/u
=> nil
一方、式展開をさせないシングルクォートだと
こうなります。
irb以外の、ブラウザからの
postやgetされた16進表記などの入力値は、
どういう風に処理されるのでしょうか
&yen;x30はrubyで処理するときにはもう既に
展開されて0になっているのか、などです。
それとも処理系やブラウザ依存でしょうか。
555デフォルトの名無しさん:2012/11/15(木) 08:53:12.80
Ruby 1.9x irbでの環境で実行していて、
16進文字コードと、正規表現の入力チェックに
関して質問したいことが出ました。
"0123456789" =~ /\A\d+\z/u
=> 0
こういう入力チェックをしている状況で、
たとえば先頭の0を16進表記しても
"\x30123456789" =~ /\A\d+\z/u
=> 0
という風になります。
'\x30123456789' =~ /\A\d+\z/u
=> nil
一方、式展開をさせないシングルクォートだと
こうなります。
irb以外の、ブラウザからの
postやgetされた16進表記などの入力値は、
どういう風に処理されるのでしょうか
\x30はrubyで処理するときにはもう既に
展開されて0になっているのか、などです。
それとも処理系やブラウザ依存でしょうか。
556デフォルトの名無しさん:2012/11/15(木) 08:56:09.86
>\x30はrubyで処理するときにはもう既に展開されて0になっているのか
いいえ
>処理系や
いいえ
>ブラウザ依存
いいえ
557デフォルトの名無しさん:2012/11/15(木) 08:56:33.08
> &yen;
(マカーだ…)
(マカーが来たわ…)
558デフォルトの名無しさん:2012/11/15(木) 11:32:51.71
rubyでwinndowsのプログラムはつくれますか
559デフォルトの名無しさん:2012/11/15(木) 12:33:39.08
yesかnoかで言えばyes
茨の道だからお薦めはしない
LLでやりたいってことなら
Pythonの方がWindowsと相性良い
560デフォルトの名無しさん:2012/11/15(木) 13:10:18.99
ありがとうございます
561デフォルトの名無しさん:2012/11/15(木) 16:25:01.43
ttp://www.kkaneko.com/rinkou/ruby/kanjicode.html
>日本語文字コードの変換
>【要点】
>Ruby バージョン 1.9 以降: String::encode を使う
>Ruby バージョン 1.8 以下: NKF を使う

1.9 でも、NKF を使っていてもいいんでしょ?
562デフォルトの名無しさん:2012/11/15(木) 18:25:56.63
>\x30はrubyで処理するときにはもう既に展開されて0になっているのか
はい
563デフォルトの名無しさん:2012/11/15(木) 20:41:02.78
まずはここに接続
サーバー chat.na1.lol.riotgames.com
ポート 5223
SSL使用


接続したあと pvp.netに認証↓
ドメイン pvp.net
ID tarou
PASS test
resource xiff

これをXMPPで送信したいんですけどRubyでやる方法教えてください
564デフォルトの名無しさん:2012/11/15(木) 20:41:50.02
565デフォルトの名無しさん:2012/11/15(木) 20:49:25.27
汚いトロルだなあ
566デフォルトの名無しさん:2012/11/16(金) 08:52:30.95
>>556
>>562
あざまっす処理系やブラウザには依存しない、
でOKのようですね。
>&yen;x30はrubyで処理するときにはもう既に展開されて0になっているのか
ここについてはご意見違うようですが。
httpの通信の部分ですよね。
567デフォルトの名無しさん:2012/11/16(金) 09:15:29.92
>>557
知ってるかもしれませんが、
ローカルでirbやったりすると
Windowsと比較にならないくらい
実行が早いっすよ。

MacBookAirはスタバでドヤ顔のためでもなく
デザイナーのためでもなく、
エンジニアのノマド開発用だとおもいます。
568デフォルトの名無しさん:2012/11/16(金) 09:37:02.24
なぜ比較対象がWindowsなんだろう
569デフォルトの名無しさん:2012/11/16(金) 11:19:22.83
>567
Window8があまりにひどいので
次買い換えるときはMacにするかも知れない
楽しみに待っててね!
570デフォルトの名無しさん:2012/11/16(金) 11:33:04.35
>>568
5年前くらいの頭で止まってるとそうなる
Windows7マシンにCUIなLinuxをVMで入れるのがコスパと使い勝手の総合で現状最強

※ コスパを入れ忘れないように願います
571デフォルトの名無しさん:2012/11/16(金) 12:48:33.42
andLinux いいよね
572デフォルトの名無しさん:2012/11/16(金) 17:35:15.04
def change(hash)
 hash.merge!(key: "change")
end

h = {key: "value"}
change(h)
h[:key] # => "change"

となるのに、rspecで
it do
 h = {key: "value"}
 change(h)
 h[:key].should == "change"
end
とすると
expected: "change"
got: "value" (using ==) となってしまいます。
なにが間違っているんでしょうか。
573デフォルトの名無しさん:2012/11/16(金) 23:00:19.56
>>572

method(:change) を出力してみると分かるかもしれないけど、
RSpecが定義しているマッチャーメソッドに change がある。

expect { operation }.to change(:hoge).from(X).to(Y)

のように使う奴。

別の名前のメソッドにすれば期待通りに動く。
574デフォルトの名無しさん:2012/11/17(土) 01:54:35.18
ありがとうございます。
無事動作しました!
575デフォルトの名無しさん:2012/11/17(土) 06:10:57.41
S式のファイルをパースしてHashにしたいんだけどライブラリとかないかな?
576デフォルトの名無しさん:2012/11/17(土) 18:28:26.52
>>570
無料の中では、Linux良いよね。
577デフォルトの名無しさん:2012/11/17(土) 18:37:11.81
>>575
どれほど堅牢かは知らないけどRipper.sexpや
https://github.com/aarongough/treetop-sexp-parser

いっそのことLLスレにお題として持ち込んでみてほしい
578デフォルトの名無しさん:2012/11/17(土) 18:51:06.19
hashにしたい人なんて居ないだろうから無いだろう。
579デフォルトの名無しさん:2012/11/17(土) 20:56:36.01
Hashじゃなかった。Arrayだった。
>>577は少し試してみたけど使えそう。
ってか、基本rubygemsしか探さないから気づかなかったわ。
ありがd
580デフォルトの名無しさん:2012/11/18(日) 04:57:48.10
>573
なんで名前空間分かれてないの?
581デフォルトの名無しさん:2012/11/18(日) 05:02:48.19
DSLだから
ユーザーはキーワードを事前にすべて把握「していなければならない」
これはDSL使用における不可避な義務

assertというメソッド作ったらぶっ壊れるのと同じ
582デフォルトの名無しさん:2012/11/18(日) 19:38:46.37
Ruby1.9.3のマニュアルのsucc -> Timeについて
http://doc.ruby-lang.org/ja/1.9.3/class/Time.html

t = Time.now
p t
p t.succ
を実行するとwarning: Time#succ is obsolete; use time + 1って警告が出ます。
p t + 1と書けということなんでしょうが、succは1.9.3では非推奨なんですか?
将来のバージョンではsuccは消えるってことでしょうか?
583デフォルトの名無しさん:2012/11/19(月) 10:20:22.30
Rubyで、ブロックパラメータの構文木って取得できない?
foo {|x| x == nil ? 1 : 0 }
みたいな関数呼び出しがあったとして、foo()が受け取ったブロックの中身を構文木として取り出してごにょごにょしたい。
584デフォルトの名無しさん:2012/11/19(月) 10:56:29.33
exerb のソース見ると良いよ
585デフォルトの名無しさん:2012/11/19(月) 14:11:23.12
>>584
できないってことか。
586デフォルトの名無しさん:2012/11/19(月) 14:15:17.75
そこに書いてある
587デフォルトの名無しさん:2012/11/19(月) 19:15:08.83
>>583
Rubyの標準機能ではできない。たしかRubiniusならできたような。

>>584
exerbはソースコードをパースしてるだけなんじゃないの?583がやろうとしているのはそうじゃないでしょ。
588デフォルトの名無しさん:2012/11/20(火) 15:37:59.31
最近ようやくrvmに手を出したものです。環境はOSX10.8です。現状は
$ rvm list
rvm rubies
=* ruby-1.9.3-p194 [ x86_64 ]
# => - current
# =* - current && default
# * - default
which rubyだと
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
です。
589デフォルトの名無しさん:2012/11/21(水) 20:49:38.11
ものすごい初歩的なミスだと思うのですが助けて!

環境 ruby1.8 windows7

# 配列を作成
ary = [
[1, "aさん", "[email protected]"],
[2, "bさん", "[email protected]"],
[3, "cさん", "[email protected]"],
[4, "dさん", "[email protected]"]
]

require "CSV"

file = CSV.open("hoge.csv", "w", "\t", "\n")
ary.each { |row| file << row }


配列をタブ区切りCSV?に出力するコードに、
↓な感じでダブルクォーテーションをつけようとしたんだけどエラーが出るんです。

file = CSV.open("hoge.csv", "w", "\t", "\n", {:force_quotes=>true})

エラーメッセージ
C:/AptanaWorkspace/Hello2/array2.rb:13:in `open': wrong number of arguments (5 for 4) (ArgumentError)
from C:/AptanaWorkspace/Hello2/array2.rb:13

↓にするとダブルクォーテーションは付くんだけど、区切りの文字はないし改行もされないです
file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})
590デフォルトの名無しさん:2012/11/21(水) 20:51:32.91
↓にするとまたエラーがでます
file = CSV.open("hoge.csv", "w", "\t", {:force_quotes=>true})

エラーメッセージ
c:/ruby/lib/ruby/1.8/CSV.rb:492:in `index': type mismatch: Hash given (TypeError)
from c:/ruby/lib/ruby/1.8/CSV.rb:492:in `generate_body'
from c:/ruby/lib/ruby/1.8/CSV.rb:288:in `generate_row'
from c:/ruby/lib/ruby/1.8/CSV.rb:692:in `<<'
from C:/AptanaWorkspace/Hello2/array2.rb:16
from C:/AptanaWorkspace/Hello2/array2.rb:16:in `each'
from C:/AptanaWorkspace/Hello2/array2.rb:16


csv.rbを覗いてみると83行目が↓になっててパラメータを5つ渡せるように見えるのですが
最後の&blockはパラメータではないのでしょうか?
def CSV.open(path, mode, fs = nil, rs = nil, &block)
591デフォルトの名無しさん:2012/11/21(水) 20:59:24.16
>>590
&amp;block はブロックなのでここの open の上の方のように書きます
ttp://doc.ruby-lang.org/ja/1.8.7/class/CSV.html
592デフォルトの名無しさん:2012/11/21(水) 22:16:59.39
>>591
どこを見ればいいのかわかりませんorz

{:force_quotes=>true}をどこらへんに書けばいいのでしょうか
593デフォルトの名無しさん:2012/11/21(水) 22:49:44.82
>>590
1.8じゃそんなオプションないとかじゃないの?
適当にリファレンス見てみると
http://doc.ruby-lang.org/ja/1.8.7/class/CSV.html こっちはforce_quotesなんて見つからないけど
http://doc.ruby-lang.org/ja/1.9.2/class/CSV.html 1.9だと普通に書いてあるし
594デフォルトの名無しさん:2012/11/21(水) 23:00:10.21
1.9ではFasterCSVが標準のCSVとして採用されたんじゃなかったかな
1.8にFasterCSV入れれば同じように使えるかと
595デフォルトの名無しさん:2012/11/22(木) 00:12:46.16
>>593
file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})

これだと一応ダブルクォーテーションは付いたので、対応してるのかなと思いましたが、
1.9からの機能かも知れないのですね

1.8にFasterCSV入れるか1.9でやってみます!
596デフォルトの名無しさん:2012/11/22(木) 18:34:41.52
初心者スレに逝けよ
597デフォルトの名無しさん:2012/11/22(木) 21:30:30.37
598デフォルトの名無しさん:2012/11/23(金) 01:05:19.56
599デフォルトの名無しさん:2012/11/23(金) 01:13:15.60
600デフォルトの名無しさん:2012/11/23(金) 01:47:24.14
ごくろうw
601デフォルトの名無しさん:2012/11/23(金) 02:10:54.99
>>600
あんたすげぇよ…
602デフォルトの名無しさん:2012/11/24(土) 16:11:03.86
# この前にstrを組み立てる処理
str = result
require 'net/ftp'
ftp.open('server', 'user', 'pass')

この後、ftp.put()でstrをアップしたいのですが、ftp.put()はファイルのパスを引数に取るので、strを渡せません。
ファイルのパスを引数に取るメソッドはたくさんあるのでこのようなケースはよくありそうなのですが、一般的にはどのように処理すればいいのでしょうか。
603デフォルトの名無しさん:2012/11/24(土) 16:14:43.24
ftpを止めるべき
604デフォルトの名無しさん:2012/11/24(土) 16:22:39.91
>>602
net/ftpはpurerubyだからソースを読んでみるといい
どうせ回答も似たようなのしか来ないだろう
605デフォルトの名無しさん:2012/11/24(土) 18:36:13.15
>>602
nfsとかで直接って書き込めばいいじゃん。
606デフォルトの名無しさん:2012/11/24(土) 19:43:28.18
内容をTempfileに書いて、putのlocal側にTempfile#pathを渡す。
607デフォルトの名無しさん:2012/11/24(土) 23:05:30.99
それだとファイル名おかしくなる
608デフォルトの名無しさん:2012/11/25(日) 05:06:33.05
転送ファイル名を別途指定できないんならそんなライブラリは捨てろ
609デフォルトの名無しさん:2012/11/25(日) 12:24:17.92
ちゃんと local と remote 両方指定できるだろ。

http://doc.ruby-lang.org/ja/1.9.3/method/Net=3a=3aFTP/i/put.html
610デフォルトの名無しさん:2012/11/25(日) 12:32:27.08
1.8.7とgemでインストールできるもののみで
Gmailの下書きにファイルを添付したメールを保存
ってできそうでしょうか?
watirで行けるかと思いきや、IE向けのSeleniumドライバ?を別途インストールする必要があるみたいでした
611デフォルトの名無しさん:2012/11/25(日) 14:52:34.83
>>610
gmailをimapでアクセス可に設定できるのなら簡単になりそうじゃない?
612デフォルトの名無しさん:2012/11/25(日) 15:32:17.36
RDEの最新版がダウンロードできないんですけど
613デフォルトの名無しさん:2012/11/25(日) 22:07:20.44
>>611
できるだけWebアクセス(httpかhttps)だけで・・・と考えてましたが
こだわらないとしたら確かにimapでできそうですね
ありがとうございます考えてみます
614デフォルトの名無しさん:2012/11/27(火) 21:27:27.98
ノーパソでキーボードが小さくてアンダーバーが打ちにくいので
to_iやto_fをtoiやtofに変更したいのですがどうしたらいいでしょうか
615デフォルトの名無しさん:2012/11/27(火) 21:35:33.63
オレオレRubyを作りたいというのではないよね?

class String
&nbsp;&nbsp;alias toi to_i
end

あたりでいいんじゃないの?
# 尚、Rational, Float, Complexにも定義されている。
616デフォルトの名無しさん:2012/11/27(火) 21:47:04.00
>>615
ありがとうございます
単に自分の環境だと打ちにくいから変更したいというだけで
いわゆる動く擬似コードの視点から見ればto_iやto_fのが
良いと思ってます
617デフォルトの名無しさん:2012/11/28(水) 14:09:32.06
アンダースコアの有無を無視して補完してくれるエディタを使え
618デフォルトの名無しさん:2012/11/28(水) 14:15:43.00
>>614
エディタ何使ってるかしらんけど、補完や短縮入力あればそれで
Vimなら、
iabbr toi toi
とか。スレ痴やな…
619デフォルトの名無しさん:2012/12/01(土) 05:37:33.04
Rubyって標準ライブラリにZipファイルを圧縮解凍するのついてないんだ…
Javaは付いてるのに…
620デフォルトの名無しさん:2012/12/01(土) 06:34:39.05
Unix環境じゃzipファイル使うことあんま無いからな
一般にgzipだからrubyにはzlibが用意されてる
Javaはjarファイルとの絡みでzipの読み書き欲しいだろうけど
621デフォルトの名無しさん:2012/12/01(土) 11:14:56.99
pythonにはzipfileもgzipもbz2も付いてるよ!
622デフォルトの名無しさん:2012/12/01(土) 11:19:23.60
>>621
全OS制覇を目指すならそれくらい標準でできんとお話にならん
Rubyは「そういうのめんどくさいからやりたい人が誰かやって」で通してきたからなあ
623デフォルトの名無しさん:2012/12/01(土) 12:01:20.25
Gemがあるんだからそれを使えばいいだろ
624デフォルトの名無しさん:2012/12/01(土) 15:39:28.62
javaもrubyも自分に必要な機能だからあるんだな

だがjavaのzipは日本語がうにこーどでウィンドウズのツールで開くとうにうに
625デフォルトの名無しさん:2012/12/01(土) 15:44:33.78
>624
情弱乙
626デフォルトの名無しさん:2012/12/01(土) 18:12:39.74
せめてbundlerみたいなのを標準で入れてほしいな
Gemなんて知らねって(Rubyをただの実行環境としか使ってない)人に渡すのが難なんだよね
627デフォルトの名無しさん:2012/12/01(土) 20:56:18.54
質問いたします、クラスの
メソッド群をcommaderのところで
イテレーション実行する際、
hogeのようにパラメータが不要な場合に
__send__のところの、*argsをうまく
取り除く?方法はないでしょうか?

class A
def hoge
puts("hogehoge")
end
def fuga(x)
puts(x)
end
def commander
order = [:hoge, :fuga]
params = {:fiuga => "fugafuga"}
self.each{|method|
args = params[method]
self.__send__(method, *args)
}
end
628デフォルトの名無しさん:2012/12/01(土) 21:03:58.36
bundlerにそういう機能があるだろ
629628:2012/12/01(土) 21:04:46.10
>>626
630デフォルトの名無しさん:2012/12/01(土) 22:56:51.67
>>627
(脱線:self.eachはorder.each だろうか?)

method(method).arity で判断とか。
質問で使っているローカル変数と被って紛らわしいな。
631デフォルトの名無しさん:2012/12/02(日) 00:39:51.52
>>627
argsが空の配列だと引数は無かったものになるよ

def hoge() :hoge end
send(:hoge,*[]) # => :hoge
send(:hoge,*[1]) #ArgumentError
632デフォルトの名無しさん:2012/12/02(日) 01:08:18.28
もしかして >>627 は引数のある fuga のほうで(typoのため)引数を
渡し損ねてエラーになってるのを見間違えたのだろうか?
633デフォルトの名無しさん:2012/12/02(日) 03:22:34.15
>630-632
誤字、脱字多くて失礼しました。回答ありがとうです
>>631
>argsが空の配列だと引数は無かったものになるよ
ありがとうございます。これ使わせていただきます。
634デフォルトの名無しさん:2012/12/02(日) 03:58:56.73
【お題】
WINDOWSで一定時間(10分)ごとにブラウザ(ChromeかIE)を更新(読み込み)するマクロ





を教えて下さいお願いします
635デフォルトの名無しさん:2012/12/02(日) 05:17:12.17
>>634
webrick/httpproxyでコンテンツ編集するプロクシ作って
window.setTimeout(function(){window.location.reload()},1000*60*60*10);
みたいなjavascriptをHTMLソースに埋め込む

つうか自動更新付いてるブラウザか拡張機能使えよ
636デフォルトの名無しさん:2012/12/02(日) 06:04:45.67
ぶちゃけ、>>634だけじゃ何をやりたいのかよくわからん
更新するページを自分が管理しているのかどうかとか、
もっと具体的に
637デフォルトの名無しさん:2012/12/02(日) 06:48:26.10
見るだけなら、自動更新機能のあるWebブラウザまたはWebブラウザに追加できる自動更新機能を使うというのがいちばん妥当かと思う
いちいち見せなくてもいいのならRubyで取得して差分出したりなんだりということはできるが、用途次第っすなー

ちなみにどこをどう頑張ってもいわゆるマクロ相当の簡便さ可搬さにはできない
IE操作ならVB.netとかC#使え
Firefoxアドオン製作ならjavaScript使え
どちらにおいてもRubyの出番はない
638デフォルトの名無しさん:2012/12/02(日) 15:27:02.35
crontabで1分起きにrubyの結果をテキストに吐き出したいんだが上手くいかない
*/1 * * * * ruby -e 'puts "#{Time.now.to_i}\t#{`コマンド`}"' >> ~/ファイル名.txt
txtを見てみるとunixタイムとタブのみ出力されていて、肝心のrubyの結果が出ないんだ
コマンド>> ~/ファイル名.txtのみで実行したときはしっかりと出力されるんだが。。。
crontabの書き方が悪いのか?
639デフォルトの名無しさん:2012/12/02(日) 16:02:03.06
>>638
とりあえず最後に 2>&1 を追加して様子を見る
640デフォルトの名無しさん:2012/12/02(日) 16:15:50.90
>>639
コマンドが見つからないみたいだ パスがおかしいのか?
641デフォルトの名無しさん:2012/12/02(日) 16:42:57.25
crontabのPATHとかシェルのPATHとかパーミッションとかtypoとか
まあrubyとはあんまり関係ない部分だと思うわ
642デフォルトの名無しさん:2012/12/02(日) 20:18:19.06
実行内容を puts ENV["PATH"] にしてみたらあらびっくりというパターンかな。
643デフォルトの名無しさん:2012/12/02(日) 20:33:56.90
crontabって、root用と一般ユーザー用があるんだろ?LPIC1落とした
644デフォルトの名無しさん:2012/12/02(日) 21:00:03.69
次は Time.now をフォーマットしようとして crontab(5) の % の扱いにハマる。
645デフォルトの名無しさん:2012/12/02(日) 21:04:12.52
>>641
PATH通ってないことがほとんどだな
ユーザーが手動ログインしたときの環境とcrontabが実行されるときの環境はほとんどの場合まったく違う
Rubyをrvmやrbenvでホームディレクトリにインストールしている場合なんかはそのままではたいてい動かない
646デフォルトの名無しさん:2012/12/02(日) 21:09:12.15
Ruby使おうと思ってるんですが
PerlのCPANみたいなのありますか?
それはCPANよりモジュールそろってますか?
教えて
647デフォルトの名無しさん:2012/12/02(日) 23:21:21.95
CPANみたいなものは、多分、gemだろうけど
あなたみたいな人はVBAでも弄ってる方が絶対に幸せだよ
648デフォルトの名無しさん:2012/12/02(日) 23:33:39.85
railsブームも去りそうだし、そろそろ成熟したOSSのツールの
バインドでも充実させてくれれば良いのにな
649デフォルトの名無しさん:2012/12/03(月) 00:19:06.11
>646
きみにぴったりなのはpythonだよ
650デフォルトの名無しさん:2012/12/03(月) 11:39:57.13
>>646
CPANほどそろってない
651デフォルトの名無しさん:2012/12/03(月) 12:55:46.61
Rubyは誰でも簡単に使えるようになるし
誰が使っても同じようなコードかけるのがいいよね
Perlは難しいし書く人によってコードが変わりまくるし
変態的で比較的レベルの高い人じゃないと向いてないよ
652デフォルトの名無しさん:2012/12/03(月) 18:29:59.58
初めての言語は Java、次に JavaScript その次が Perl

ある日「ひさしぶりに Perl を使おう」と思い立ち
$line = chomp($line);
と書いて、意図通り動かないことに気がついたとき
自分は Perl に向いていないと思った。
my とか bless とか、配列とかの不満よりも、
上記の1行コードでの失敗の方がおどろいた。
653デフォルトの名無しさん:2012/12/03(月) 19:38:41.74
Perlってほんといらつく言語
みんな嫌々使ってたと言わざるを得ない
ってかもうみんな忘れちゃった言語だよね
まだ使ってる人はコボラーの様にパララー原人としてウッホウッホと生きてゆくしかない。
654デフォルトの名無しさん:2012/12/03(月) 20:15:56.63
周りの評価
流行
新しい/古い

の基準で生きてるお前は死ね
655デフォルトの名無しさん:2012/12/03(月) 21:15:41.53
Linuxにほぼ入ってるから、インストールスクリプトとかでよく見かける。そのうちpythonに置き換わるのかな。
656デフォルトの名無しさん:2012/12/03(月) 21:19:02.75
>>652

なんで動かないんだろうと思ったら…

> It returns the total number of characters removed from all its arguments.

(  Д )    ゚   ゚

完全に忘れていた。
657デフォルトの名無しさん:2012/12/03(月) 21:37:35.69
>>655
Linuxディストリビューションのコアのほうに近い新規スクリプトはPythonか移植性の高い書き方をされたシェルスクリプトかどちらか
新規にPerlスクリプトがゼロから書かれることはまずない
658デフォルトの名無しさん:2012/12/03(月) 21:50:13.09
rubyは好きだけどrubyだけ使ってるとマジでアホになってくるな…
まぁこんな多様性の無い会社で働いてる俺が悪いんだけど。
659デフォルトの名無しさん:2012/12/03(月) 21:55:53.97
どちらにしろ「Rubyしか書けない」は阿呆確定なので、Rubyをオモテでほとんど使わないことを気にする必要はない
家で存分に使い倒せ
660デフォルトの名無しさん:2012/12/03(月) 22:14:17.97
>>657
なぜ同じことを二度言う。
661デフォルトの名無しさん:2012/12/03(月) 23:00:52.05
jsだけ書ければ十分←これが真理
662デフォルトの名無しさん:2012/12/03(月) 23:08:34.14
C、C++、Java、JavaScript、AWK、SED、ShellScript、Lisp、Scheme、Prolog、VBA、VB、C#、Obj-C、Clojure、Erlang、Ruby、Pyhton
くらいは標準装備だろ?普通のプログラマなら。
663デフォルトの名無しさん:2012/12/03(月) 23:52:16.54
Perlが抜けてるよ低脳
664デフォルトの名無しさん:2012/12/04(火) 00:16:44.98
shすら書けないとは。
665デフォルトの名無しさん:2012/12/04(火) 00:17:16.70
あった//
666デフォルトの名無しさん:2012/12/04(火) 18:19:55.86
>>662
erlang以外は、どれもスグに習得できる自信がある。
毎日短いスクリプトを書くための標準装備がjsだけで良い。
667デフォルトの名無しさん:2012/12/04(火) 18:22:14.96
多くの言語を行き来するって、本質的に、どうでも良い仕事をしているPGで、
はやい話が会社側からすれば、何時捨てたところで変わりがいくらでも居る人材
668デフォルトの名無しさん:2012/12/04(火) 18:42:36.47
別にこれくらい普通じゃね…?
初心者はえっと思うかもしれないけど、
普通なんだよ。別に特別なわけじゃなく、普通なんだよね。
ごく普通。
669デフォルトの名無しさん:2012/12/04(火) 18:57:24.07
ガリ女が私デブだよ
とかいうのと似てるね
670デフォルトの名無しさん:2012/12/04(火) 22:17:20.17
なにひとつとして(Rubyすら)"極め"てはいないが、使えるかどうかで言えば5言語やそこらは普通に使えるな
HTML5未満とCSSはカウントしないのでよろしく
671デフォルトの名無しさん:2012/12/04(火) 22:24:44.39
近年稀に見るキモいレスを見た
672デフォルトの名無しさん:2012/12/04(火) 22:27:30.38
ここしばらくずっときもい
本スレならまだしも初心者スレでこういう流れは勘弁
673デフォルトの名無しさん:2012/12/04(火) 23:09:00.90
C、C++、Java、JavaScriptなんてきょうび標準スキルでそ。
AWK、SED、ShellScript、Lisp、この辺はLinuxとEmacsを使ってたらごく普通。
んでiOS流行ってんだからObj-C触ったことないプログラマなんているはずない。
VBAなんてそこらへんの事務員さんでも使ってるような言語。
VBやC#なんてWindows使ってたら普通に使うし。
あとSICP読んでない奴なんて居るわけないんだからSchemeは当然みんなできるし、
Ruby、Pythonなんてそこらへんにおちてるちょっとしたスクリプトを拝借していじってりゃ覚えるし、
Prolog、Erlang、Clojure、Smalltalkくらいは教養としてやっとけよってレベルでそ?
674デフォルトの名無しさん:2012/12/04(火) 23:20:26.48
SEDって全部大文字で書くとおくすりみたいですね
675デフォルトの名無しさん:2012/12/04(火) 23:25:00.68
冬だなぁ…
676デフォルトの名無しさん:2012/12/04(火) 23:48:37.63
そういうレベルで使えると言う奴も居るのか。面接で言語数アピールしてくる奴は気をつけよう。
677デフォルトの名無しさん:2012/12/05(水) 00:11:37.33
Twitterとかの自己紹介欄に沢山言語書いたり
ハテブに沢山言語のカテゴリ作っててスカスカってクズだろうなあ
678デフォルトの名無しさん:2012/12/05(水) 00:37:54.08
うちのお勉強サイトがそれだ

虫食いのようにあれこれ摘んでろくな記事が増えない
679195:2012/12/05(水) 00:43:33.74
>>661
jsが使えて十分とかは、
ちっこいサイトでnode.jsで
遊ぶレベルならいいよ。
680デフォルトの名無しさん:2012/12/05(水) 01:15:20.09
飯食えるレベルなら何でもいい。素晴らしいことだ。と最近になって思う。

大学生時代の俺は・・・
それなりに高学歴であらゆる言語をマスターして情報科学を学びEmacsを極限までカスタマイズして
家では自宅サーバーを立ち上げてスタバでドヤ顔でmacbookで作業して有名ベンチャーでバイトをしてチヤホヤされ人生勝った気でいた。
しかし社会に出たら勝手が違った。稼ぐためには価値を生み出さなければならないのだ。自分のためではなく人のために働く必要がある。

俺みたいにはなるなよ。
681デフォルトの名無しさん:2012/12/05(水) 01:42:25.97
環境設定の質問いいですか?

Mac OSX Mountain Lion
症状:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
となって実行できない。
バージョン:ruby 1.9.3p194(rbenvでインストール rbenvはHomebrewでインストール)

ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'の出力結果
→/usr/local/etc/openssl/cert.pem(つまりHomebrewで入れたOpenSSLのパス)

なんでエラーになるんだろう?
ちなみにUbuntuでは実行できた。
682デフォルトの名無しさん:2012/12/05(水) 04:28:49.41
680
了解
683デフォルトの名無しさん:2012/12/05(水) 23:21:51.69
>>681
キーチェインアクセスからシステムのルート証明書リストを書き出して
使ってみたらどうでそ?
684デフォルトの名無しさん:2012/12/05(水) 23:39:54.03
おまいらの使ってるIDEを教えてくれ。
685デフォルトの名無しさん:2012/12/06(木) 00:34:32.78
>>684
emacs
686デフォルトの名無しさん:2012/12/06(木) 04:30:27.52
>>680
大学でてたら経営工学概論なんて講義ぐらい取ったんじゃないの?
だいたいベンチャーって、どこも10年ぐらいで潰れるだろ。
とはいえ、ウェブ系でロクロ回してる連中と中堅規模の無能の集まりって、
どっちが最後まで立ってんだろな。巻き込まれたくないバブルだこと
ところで受託開発とニッチでコアな技術って、どっちが社会的に付加価値あるんだろ
687デフォルトの名無しさん:2012/12/06(木) 04:44:22.66
>>673
SICPもprologも内容的に被るから、片方で良いでしょ
web系よかメーカー系の方が、よっぽど技術者らしい人生を送れそう
web系は、もはやエンジニアではなく起業家か事務屋の集合体か何かだ

>>676
経験年数に対して言語数が多ければ大した仕事してないって見るでしょ。普通は。
よっぽどボンクラな採用担当でもなけりゃ、言語や経験年数より、どの業務に従事したか聞くよ
688デフォルトの名無しさん:2012/12/06(木) 04:51:13.49
常時使う言語なんて、多くて2つぐらいが限度でしょ
時間と記憶力の資源は、もっと有意義なことに使えよ
689デフォルトの名無しさん:2012/12/06(木) 10:32:07.35
>>688
例えばWeb屋さんだと、
バックエンドに、Ruby、C、Java、Node.js
フロントエンドに、JavaScript、Java、Action Script、
メンテにShellSsript、
くらいはごく普通に常用してるでしょ?
あなたは初心者なのになんで意見しちゃうの?
690デフォルトの名無しさん:2012/12/06(木) 11:20:46.51
Ruby は無いわ
691デフォルトの名無しさん:2012/12/06(木) 12:30:51.72
Perl PHPのほうがしっくりくるな
692デフォルトの名無しさん:2012/12/06(木) 12:45:17.15
Web屋のバックエンドはPHPだと思う
Rubyはシェルスクリプトレベルの頻度と隠れ具合なはず
「見えない」部分で言語指定がない場合にはシェルスクリプトで書くが、それがRubyになる感じ

まあ、初心者スレ向きの話ではない
「Rubyができるからといって仕事や就職の口があるわけではない」という認識で間違いない
仕事や就職自体は別の技術で受けて、プロダクト本体にならない自由裁量部分でRubyを使う
693デフォルトの名無しさん:2012/12/06(木) 13:51:51.54
Web屋は自信満々だね
694デフォルトの名無しさん:2012/12/06(木) 15:42:39.31
コピペで何とかしようとするとPHP
695デフォルトの名無しさん:2012/12/06(木) 15:43:02.65
配列について質問です
配列の中に配列を入れたくて調べているのですが
ary=[[a, b, c, d, ], [e, f, g, ], [h, i, ], [j, k, l, m, ]]
のように各要素数がバラバラの二重配列って作れないんですか?

最初一つ目の要素(a, b, c, d, )のあとに二つ目(e, f, g, )を追加,というようにぼんぼん突っ込んでたら,
ary=[a, b, c, d, e, f, g, h, i, j, k, l, m, ]という配列になってしまって
本当はary[0]=[a, b, c, d, ],ary[1]=[e, f, g, ]を取り出したいのに
カンマで切れてary[0]=[a, ],ary[1]=[b, ]となってしまったのです
二重配列以外にも対策あったら教えて下さいお願いします
696デフォルトの名無しさん:2012/12/06(木) 16:11:37.96
irb(main):001:0> ary=[]
=> []
irb(main):002:0> ary << %w(a b c d)
=> [["a", "b", "c", "d"]]
irb(main):003:0> ary << %w(e f g)
=> [["a", "b", "c", "d"], ["e", "f", "g"]]
irb(main):004:0> ary
=> [["a", "b", "c", "d"], ["e", "f", "g"]]
irb(main):005:0> ary[0]
=> ["a", "b", "c", "d"]
irb(main):006:0> ary[0][1]
=> "b"
697デフォルトの名無しさん:2012/12/06(木) 16:40:34.69
初心者スレでパーセントリテラル使う自己満は死んでいいよマジで
698デフォルトの名無しさん:2012/12/06(木) 16:49:33.57
まあ今回はパーセント記法のほうが余計にわかりづいらいな

>>695
Array#<< および Array#push は引数のオブジェクトを配列の最後の要素として単純に追加する
要素を配列にしたければ引数に配列を指定すればいい

irb> arr = []
irb> arr << ['a', 'b', 'c', 'd']
irb> arr << ['e', 'f', 'g']
irb> p arr
[["a", "b", "c", "d"], ["e", "f", "g"]]
699デフォルトの名無しさん:2012/12/06(木) 19:24:32.93
rubyについて質問です。

あらかじめrubyで何かしらのサーバを立てておいて
サーバが動いているマシン内で別のrubyプログラムを走らせて
サーバの挙動を変えたいのですが、このようなことは可能でしょうか?

例 別プログラムが動いてない時のサーバはアクセスがあると「A」を返すが
  別プログラムを動かすと「B」を返すようになる。
  (「A」を返すところを「B」を返すように動的に書き換える)
700デフォルトの名無しさん:2012/12/06(木) 19:51:01.75
パーセント記法くらい普通だろ
ググって調べろよカス
701デフォルトの名無しさん:2012/12/06(木) 19:55:18.34
>>699
可能です!
702デフォルトの名無しさん:2012/12/06(木) 20:06:56.71
可能かどうかで言えば可能だが、おそらく90%くらいの確率でアプローチ法が間違ってるな
703デフォルトの名無しさん:2012/12/06(木) 20:32:10.87
>>699
できるかどうかすら他人に訊かないと分からないレベルならもっと大人しいことから勉強しなよ

そもそもここが何のスレかも分かってないみたいだし
704デフォルトの名無しさん:2012/12/06(木) 20:45:28.02
systemuでpidpfかpgrepを叩いて判定すりゃええやんか。
705デフォルトの名無しさん:2012/12/06(木) 20:55:28.66
馬鹿には無理
706デフォルトの名無しさん:2012/12/06(木) 21:16:46.83
>>698
できました!ありがとうございます
%wも分かったのですが実際のデータはスペースも含んでいるので使えませんでした
707デフォルトの名無しさん:2012/12/06(木) 22:22:18.49
フロントにJAVAって使ったことないな
708デフォルトの名無しさん:2012/12/07(金) 04:52:08.29
良いとしこいたおっさんがふぇぇとか言ってると虫酸が走る
709デフォルトの名無しさん:2012/12/07(金) 12:45:15.22
昨日に引き続き配列の質問です
以下のプログラムでうまくいかないのですがどこがおかしいのでしょうか
ary_a = Array.new(0)
k = 3
while k < 10
text = [k] #既に存在しているk番目のテキスト
ary_b = Array.new(0)
counter.count("#{text}") #テキスト中から名前と出現回数を探すモジュールを使用
counter.result.each do |name, count| #名前と回数を配列に入れていく
ary_b << "#{name}"
ary_b << count #この時点で["花子", 1, "太郎", 3]のような配列になる
end
ary_a << ary_b #二重の配列を作っていく
k += 1
end

本当はary_a[0]=["花子", 1, "太郎", 3],ary_a[1]=["花子", 2, "優子", 1]としたいのに
ary_a[0]のカウントにary_a[1]が追加されてary_a[1]=["花子", 3, "太郎", 3, "優子", 1]となってしまいます
お願いします
710デフォルトの名無しさん:2012/12/07(金) 13:00:10.25
>>709
X ary_a = Array.new(0)
O ary_a = [[]]
711デフォルトの名無しさん:2012/12/07(金) 13:05:24.44
>>710
かわりませんでしたorz
ちなみに以下のものはうまく行きます
ary=[]
ary << %w(a b c d)
p ary => [["a", "b", "c", "d"]]
ary << %w(e f g)
p ary => [["a", "b", "c", "d"], ["e", "f", "g"]]
ary=[]
ary << %w(a b c d)
p ary => [["a", "b", "c", "d"]]
712デフォルトの名無しさん:2012/12/07(金) 13:19:39.93
なにも追加動作のない空の配列の生成に Array.new は使ってはいけない、目立ってめんどくさいから
ごく普通に素直にリテラルで [] や [ ] と書くとよい

なにかデータを格納したマイオブジェクトがあって、メソッド引数で動作を指定して、動作結果を利用したいという場合は
my = MyObject.new(init_data)
my.action(condition)
my.result...
ではなく、actionメソッドの戻り値の時点で計算結果を返すようにするとよい(resultメソッド自体は別途存在しても構わない)
my = MyObject.new(init_data)
result = my.action(condition)
result...

んで、おそらく、単にcountメソッドかresultメソッドがバグってる
p k,text,counter.result,'--------------------'
あたりをeachの前に入れて、期待通りの出力になるかどうか確かめてみれ
713デフォルトの名無しさん:2012/12/07(金) 15:57:27.95
>>712
ありがとうございます メソッドがバグってるみたいです
でも私の知識ではメソッドを直すよりもあとから修正したほうが早そうですw
配列からハッシュ作成しているので,{"花子"=> 3, "太郎"=> 3, "優子"=> 1}
から{"花子"=> 1, "太郎"=> 3}を引き算して{"花子"=> 2, "優子"=> 1}を作る方法はありますか?
なんとぐぐれば良いのかあやふやですが調べてみます
714デフォルトの名無しさん:2012/12/07(金) 16:34:09.68
いややっぱりメソッド書き直してみます(`・ω・´)
webで見つけた名詞カウントモジュールなのですが繰り返し利用すると加算されてしまうのはなぜでしょうか
インスタンス変数が空になってないから?初心者すぎてorz
長いので分けます

module Meishi
class WordCounter
NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/

def initialize
@result = Hash.new(0)
end

attr_reader :result

# mainループ
def count(text)
words = split_to_words(text)
count_up_result(words)
self
end
715デフォルトの名無しさん:2012/12/07(金) 16:34:40.37
# Mecabで単語に分割し,必要な品詞のみ抽出する
def split_to_words(text)
results = IO.popen("mecab", "r+") { |mecab|
mecab.puts(text)
mecab.close_write
mecab.readlines
}
results.map { |result| necessary?(result) ? result.split.first : nil }.compact
end

# 単語として使うする属性を判断する
def necessary?(feature)
case feature
when Regexp.new(NECESSARY.join('|'))
true
else
false
end
end

# 単語数をカウント
def count_up_result(words)
words.each do |word|
@result[word] += 1
end
end
end
end

以上ですお願いします
716デフォルトの名無しさん:2012/12/07(金) 16:53:07.19
まあそりゃ@resultを初期化せずに何度もcount_up_result呼んだら足されてしまうわな
717デフォルトの名無しさん:2012/12/07(金) 17:13:47.54
>>708
幼女ですが何か
718デフォルトの名無しさん:2012/12/07(金) 18:03:24.27
>>716
ああやっぱり初期化のところでしたか…
調べていたら最初のinitializeが初期化だと出てきたのですが初期化できていないのでしょうか
719デフォルトの名無しさん:2012/12/07(金) 18:09:57.33
……えーと
720デフォルトの名無しさん:2012/12/07(金) 18:12:09.99
あらゆる Rubist は幼女
721デフォルトの名無しさん:2012/12/07(金) 18:52:52.00
>>718
プログラムは思っている通りではなく書いている通りに動く
たいへん残念なことにプログラミングは魔法ではないので、自力で道筋を考えて記述する必要がある

挙げられたメソッドを見る限り、どれがどうやってどう動いているか把握できてないものと思われる
722デフォルトの名無しさん:2012/12/07(金) 18:59:22.34
>>721
カウントするところだけを何度も呼び出してたんですね…
呼び出してカウントする都度@resultを初期化しなければいけないんですね
今なにも考えず@result = Hash.new(0)をぶちこんだらエラーでたので調べているところですorz
723デフォルトの名無しさん:2012/12/07(金) 19:03:24.38
できた!できたできた!!
カウントする度にメソッドまるごと呼び出したらできました!
みなさんありがとうございました!!
724デフォルトの名無しさん:2012/12/07(金) 19:13:07.08
とう

module Meishi
class WordCounter
NECESSARY = %w/名詞,サ変接続 名詞,一般 名詞,形容動詞語幹 名詞,固有名詞 名詞,接尾 名詞,副詞可能 接頭詞,名詞接続/

def count(text)
result = {}
split_to_words(text).each{|word| result[word] += 1}
result
end

def mecab(text)
IO.popen("mecab", "r+") { |mecab| mecab.puts(text); mecab.close_write; mecab.readlines}
end

def split_to_words(text)
words = []
pattern = Regexp.new(NECESSARY.map{|s| Regexp.quote(s)}.join('|'))
mecab(text).each{|line| words << result.split.first if line =~ pattern}
words
end
end
end

たぶん動かない
result メソッドはなくなったので count の戻り値を直接使ってね
725デフォルトの名無しさん:2012/12/07(金) 19:27:29.59
そうか卒論の追い込みシーズンか
726デフォルトの名無しさん:2012/12/07(金) 19:31:13.22
>>724
不憫なコードだなおいw
727デフォルトの名無しさん:2012/12/08(土) 15:00:06.14
以下のお題と仮定して、関数型プログラミングのスタイルで書いてみた
「mecabを使って、あるテキスト中に含まれる名詞の出現回数を集計せよ」

http://play.island.ac/codepaste/code?id=29

ポイントは、メソッド Enumerable#inject を使った配列からハッシュの生成(>>713 ...?)
もし分からなければ、以下の文書を一読してみて!!

・Rubyによる関数型プログラミング
 http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html

・YOUたち!RubyでinjectしちゃいなYO!
 http://melborne.github.com/2012/06/18/i-am-inject-lover-too/
728デフォルトの名無しさん:2012/12/08(土) 15:34:39.28
お題じゃなくて宿題だろ
宿題は自分でやれよ
729デフォルトの名無しさん:2012/12/08(土) 18:24:01.75
テキストの色と背景色をRGBで設定したいのですが、 init_colorを使うといい話を聞きました。ググっても init_colorのサンプルがットしなくてどう書いて良いのかわかりません。どなたかご教示お願いします。
require "curses"
Curses.init_screen
Curses.start_color
Curses.init_pair 1, Curses::COLOR_BLACK, Curses::COLOR_WHITE
begin
Curses.attrset(Curses.color_pair(1))
Curses.addstr("Hello World!")
Curses.refresh
Curses.getch
ensure
Curses.close_screen
end
730デフォルトの名無しさん:2012/12/08(土) 18:29:29.95
int init_color(short color, short r, short g, short b);
init_color ルーチンは色の定義を変更します。 次の 4 つの引数を取ります。
変更する色の番号の後に 3 つの RGB 値が続いたものです (赤、緑、青の各コンポーネントの量についてです)。
最初の引数の値は、0 と COLORS の間である必要があります
(デフォルトのカラーインデックスについては、 Colors のセクションを参照してください)。
最後の 3 つの引数はそれぞれ 0 と 1000 の値の間にある必要があります。
init_color を使用するとき、 画面上にその色が発生したところはすべてただちに新しい定義に変化します。
731デフォルトの名無しさん:2012/12/08(土) 20:06:23.86
たとえば
Curses.init_color(Curses::COLOR_BLACK, R, G, B)
すると、画面で COLOR_BLACK を指定した部分の色が
指定のRGBに変わるんじゃないの?

うちのターミナルだと Curses.can_change_color? が false なので確認できないけど。
732デフォルトの名無しさん:2012/12/09(日) 04:19:10.16
引きこもりプログラマなんですが中二の妹に家から出て散歩でもしろと言われるのですが意味がわかりません。
733デフォルトの名無しさん:2012/12/09(日) 04:49:31.77
で?
734デフォルトの名無しさん:2012/12/09(日) 10:22:08.95
近いうちに地震来るから
嫌でも外に出ることになる
735デフォルトの名無しさん:2012/12/09(日) 10:46:51.45
proc = proc{ a }
[1].each{ |a| p proc.call }

1を出力して欲しいのにブロックのaが参照出来ないみたいでエラーになってしまいます。
proc = proc(a){ a } と値を渡す以外の方法でブロックのaを参照する方法はないでしょうか。
736デフォルトの名無しさん:2012/12/09(日) 15:01:50.79
>>735
[1].each{|a| proc = proc{a}; p proc.call}
737デフォルトの名無しさん:2012/12/09(日) 15:35:52.44
Rubyだとこんなんでもいいんだな
a=0
proc=proc{a}
[1].each{|b|a=b; p proc.call}
738デフォルトの名無しさん:2012/12/09(日) 16:43:43.73
>>735
いわゆる動的スコープの振る舞いを
そのままRubyで実現する方法は無いと思う
739デフォルトの名無しさん:2012/12/09(日) 18:51:22.78
ruby1.8.7を使っています
コードの中にVBAのコードを書いているのですが例えば
i = 1
a = <<EOT
j = i
EOT
のようにVBAの中にそれまでRubyで使っていた変数を入れることは不可能でしょうか
740デフォルトの名無しさん:2012/12/09(日) 19:10:07.18
i = 1
a = <<EOT
j = #{i}
EOT
741デフォルトの名無しさん:2012/12/09(日) 19:13:41.50
742デフォルトの名無しさん:2012/12/09(日) 19:16:13.65
>>740-741
できました
ありがとうございました
743デフォルトの名無しさん:2012/12/10(月) 01:59:02.41
構文などはそれなりに覚えてきたので、セオリーのような物を掴むために.rbのソースコードを色々と読んでみたいのですが、
綺麗にまとまっていて分量もそれほど多くない(数百行?)ものでオススメはありますか?
Class周りの実際の使い方がよくわからないのでそのへんが書いてあるといいです
744デフォルトの名無しさん:2012/12/10(月) 02:08:22.10
そのレベルだと本買って勉強した方がいいんじゃないか?
プログラミングRubyとか、オライリーのやつとかベストプラクティスとかそこら辺
745デフォルトの名無しさん:2012/12/10(月) 04:07:27.20
一応たのしいRuby第三版を読んだのですが、そのあたりの本だと色々とコードが豊富なんですかね
ただ使われてるプログラムも読んでみたいです
746デフォルトの名無しさん:2012/12/10(月) 04:22:31.24
事前に自力でうんざりするほどスクリプト書いてないと、セオリーなんて見えないし教えられても身につかないぞ
スレ直近だと>>714-715から>>724の「値の受け渡しにインスタンス変数を使わないで済むならそうする」というのがあるが、これを口で言ってもピンと来ないはず

使いでがあって構造見れそうなのはNet::HTTPとかだろうか
HTTPの知識ないとわけわかめだけど

なんか自分の知識のある分野のスクリプト読んでみるのがいいかと思う
ここで一度も使ったことがなくて用途もよくわからんライブラリを「綺麗だから」という理由で勧めても、たぶん"読めない"
多少汚なくても、自分が使える分野の他人の書き方を眺めるほうが勉強になる
あとあと「あのライブラリってヒドかったのね」とわかればそれはそれで糧
747デフォルトの名無しさん:2012/12/10(月) 04:41:04.10
>>744
プログラミングRubyはさすがに
初心者向けとは言いがたいと思う
748デフォルトの名無しさん:2012/12/10(月) 07:07:48.71
反面教師にはcgi.rbがおすすめ
749デフォルトの名無しさん:2012/12/10(月) 10:07:38.73
750デフォルトの名無しさん:2012/12/10(月) 11:37:08.87
C言語に比べてどこがどういう風に簡単なの?
751デフォルトの名無しさん:2012/12/10(月) 12:04:44.26
よりによって比較対象がCかよ…

理屈的には、Cで書かれたマクロの集合体がRubyだ
Rubyスクリプトは、C言語プログラムを細かく動作指示しているに過ぎない
752デフォルトの名無しさん:2012/12/10(月) 12:40:51.71
>>751
>理屈的には、Cで書かれたマクロの集合体がRubyだ

Cでインタープリター、コンパイラを作ってるからという意味なら、かなりの数の言語が相当するな。
753デフォルトの名無しさん:2012/12/10(月) 13:19:47.23
C以外のプログラム言語なんてそもそもそんなもんという気はする
いかに安楽効率的わかりやすくCプログラムを動作させるかの指示の集合体
754デフォルトの名無しさん:2012/12/10(月) 13:20:57.72
>>732
正しい助言だ
散歩すると、
健康によい、うつ状態も改善する、便秘がよくなる、日光でビタミンDができる、よく眠れる、食欲が出る、

よいことずくめ
755デフォルトの名無しさん:2012/12/10(月) 15:27:32.29
>>753
日常的な事務処理用だと、DSLの楽さは捨てがたい。
756743:2012/12/10(月) 17:48:00.07
色々とありがとうございます
757デフォルトの名無しさん:2012/12/12(水) 08:50:03.28
ものすごく基本的なことなのかもしれませんが
この処理ができるならやって、できないならスルー
ってどう書けばよいでしょうかw

具体的には複数のテキスト内を順番にサーチしていき
ある文字列があるならそれを取り出し、なければなにもしないという処理をしたいです

if サーチした結果 = nil
 p 1
else
 p 2
end にしたら全部2になるし

if サーチした結果 = ""
にしたら全部1になるしで判別できません
758デフォルトの名無しさん:2012/12/12(水) 11:05:20.51
=は代入
==が比較

if サーチした結果 == nil
とする。

あるいは
if サーチした結果.nil?
とか
if !サーチした結果
とか
unless サーチした結果
とする。
759デフォルトの名無しさん:2012/12/12(水) 11:48:48.85
>>757
書いてみたコードを晒したら、アドバイスしやすい。
760デフォルトの名無しさん:2012/12/12(水) 11:58:04.85
ありがとうございます
返ってくる値がnilじゃなくて""だったので
h = サーチした結果
unless h == ""
 テキストとってくる
end
これでうまくいきそうです
761デフォルトの名無しさん:2012/12/13(木) 00:10:06.22
なんで!が有るのにunlessも有るんですか?
if conditionとunless !conditionって同じですよね?
unlessを使うと、
・タイプ数が多くなる
・手続き中に正常系と異常系が混在して頭の切り替えコストが増える
・二重否定が可能
なんだけどメリット有るんですか?
762デフォルトの名無しさん:2012/12/13(木) 00:13:32.90
Perlから引き継いだ以上の意味はないんじゃない?
763デフォルトの名無しさん:2012/12/13(木) 00:18:15.21
強いてあげるなら、

* 後置するとブロークンイングリッシュとして読みやすくなる場合がある。
* if !condition だと ! を見落としやすい (if ! condition のように間を開けて見やすくする流儀もある)。

尚、unless には else 節を付けないほうがいい。
それこそ二重否定でわかりづらくなる。
764デフォルトの名無しさん:2012/12/13(木) 00:25:15.57
!を見落とすって経験上ないなぁ
なんかJavaとかでifに常に{}書けという主張とやや似てる
765デフォルトの名無しさん:2012/12/13(木) 00:34:01.73
perlintro(1)には

> This is provided as a more readable version of "if (!condition)".

とだけ。
766デフォルトの名無しさん:2012/12/13(木) 00:44:13.43
>>765
同意できないw
767デフォルトの名無しさん:2012/12/13(木) 01:18:12.72
[1,2,3].each_with_index do |e, i|
 puts "#{i+1} / #{SIZE_OF_ARRAY}"
end

とかしたいだんけどSIZE_OF_ARRAYを表す組み込み変数とか無いの?

array = [1,2,3]
array.each_with_index do |e, i|
 puts "#{i+1} / #{array.size}"
end
だと変数への代入が増えて何かダサイ
768デフォルトの名無しさん:2012/12/13(木) 01:20:29.82
なぜイレテータのローカルスコープにselfちゃんが居ないのか…
769デフォルトの名無しさん:2012/12/13(木) 01:24:16.83
[1,2,3].tap {|array| array.each_with_index {...} }

# 全然解決になってない:)
770デフォルトの名無しさん:2012/12/13(木) 01:33:08.50
>>766
おまえのような雑魚が同意できなかったところで誰も困らない
Larryが使いやすければ、それでいい
771デフォルトの名無しさん:2012/12/13(木) 01:51:26.84
class Enumerator
def with_size(&blk)
return to_enum(:with_size) unless blk

ary = to_a
size = ary.size
ary.each{|args|
blk[*args, size]
}
end
end

%w(a b c).each_with_index.with_size{|s,i,n|
p [s,i,n]
}
772デフォルトの名無しさん:2012/12/13(木) 23:29:31.42
どなたか教えてください!
rubyでプログラムを実行し、表示させた結果をメモしないままターミナルを閉じてしまいました。
表示履歴を見る方法はありますか?
773デフォルトの名無しさん:2012/12/13(木) 23:34:34.31
ターミナルがログを保存する設定にでもなってない限り方法は無い
入力したコマンドラインの履歴でよければ$HOME/.bash_historyとかに入ってる可能性があるけど
774デフォルトの名無しさん:2012/12/13(木) 23:42:24.44
レスありがとうございます。
コマンドラインじゃなくて、コマンドラインで実行させた結果が知りたいです。
詳しい人に初期設定してもらったので、ひょっとしたらログを保存する設定になっているかもしれません。
その場合、どう入力したらいいかご存知でしょうか?
ググってもググってもよくわからないんです・・・!
775デフォルトの名無しさん:2012/12/13(木) 23:48:34.19
以前、なにかの拍子に全履歴がのってるファイルを開いて、
「ほー」と思った記憶があるんだけど幻だったのかな・・・
776デフォルトの名無しさん:2012/12/13(木) 23:52:28.56
>>774
その詳しい人に聞いたらいいじゃないか
ちなみにターミナルっていっても色々あるけどmacの場合はこんなのが出てきた
http://at-fog-of-index.blog.so-net.ne.jp/2010-12-24
777デフォルトの名無しさん:2012/12/14(金) 00:10:35.36
>>776
その詳しい人はある日出社しなくなったまま行方不明になってしまったのでなんとも・・・

今後はちゃんと保存しておくよう、教えていただいた方法で設定しておきますね、ありがとうございます。
今回はもう諦めて上司に土下座することにします。

これを機にいろいろとrubyを勉強しよう、そうしよう・・・
778デフォルトの名無しさん:2012/12/14(金) 00:17:36.01
last
779デフォルトの名無しさん:2012/12/14(金) 00:18:50.85
Ruby/Tkってどう?
780デフォルトの名無しさん:2012/12/14(金) 01:03:06.56
rakeの引数がキモすぎるな…
これならシェルの引数をそのまま渡した方がまだましだわ。
781デフォルトの名無しさん:2012/12/14(金) 01:08:53.91
「rake 引数 きもい」でググると結構でてくるな。
782デフォルトの名無しさん:2012/12/14(金) 01:11:01.80
argsの挙動がキモいな。
なんかC臭さの残る仕様だわ。
783デフォルトの名無しさん:2012/12/14(金) 01:33:04.23
現状環境変数使うのが正解だな。
railsのrakeもそうなってるしな。
784デフォルトの名無しさん:2012/12/14(金) 02:17:12.12
自分で作った例外クラスをスロー&キャッチする時に、再利用性がなく、その処理内だけで使うような例外クラスで、わざわざ大げさにclass Hogeとか定義するまでもないような場合に、ちょろっとその場で定義して使うような機能はないんですかね?

↓おおげさ
class HogeException < Exception
end
begin
 raise HogeException.new
rescue HogeException
 puts "うわー"
end

↓こんな感じで書きたい
begin
 raise :hoge if hoge
 raise :fuga if fuga
rescue :hoge
 puts "うわー"
rescue :fuga
 puts "ぬわー"
end
785デフォルトの名無しさん:2012/12/14(金) 02:17:53.00
ラベル付き汎用例外、みたいな
786デフォルトの名無しさん:2012/12/14(金) 04:58:42.95
>>784
Rubyにおける例外クラス定義とraiseとrescueはおおげさでもなんでもない
Javaのように管理しようとすると破綻するぞ
787デフォルトの名無しさん:2012/12/14(金) 07:54:51.75
濫用するとかっこわるいぞ、みたいなことは言われてるがな
アプリケーションエラー以外の例外クラス名を思いつかなくて事前にifで避けられるならifで避けたほうがマシ
788デフォルトの名無しさん:2012/12/14(金) 10:54:38.25
>スロー&キャッチ
case exp =
catch(:exp) do
throw(:exp,:hoge) if hoge
throw(:exp,:fuga) if fuga
end
when :hoge then puts 'うわー'
when :fuga then puts 'ぬわー'
end
789デフォルトの名無しさん:2012/12/14(金) 10:56:32.73
>>788
(´・ω・`)…
790デフォルトの名無しさん:2012/12/14(金) 19:31:55.86
メッセージで分岐すれば

flag='うわー'

begin
raise 'うわー' if flag=='うわー'
raise 'ぬわー' if flag=='ぬわー'
rescue Exception => ex
case ex.message
when 'うわー'
puts ex.message
when 'ぬわー'
puts ex.message
end
end
791デフォルトの名無しさん:2012/12/14(金) 19:36:33.22
>>790
最早なんのためになにを避けてたんだかわからなくなってるな
792デフォルトの名無しさん:2012/12/14(金) 20:14:27.84
>>784
> ↓こんな感じで書きたい
> begin
>  raise :hoge if hoge
>  raise :fuga if fuga
> rescue :hoge
>  puts "うわー"
> rescue :fuga
>  puts "ぬわー"
> end

元がコレだからな
なんで例外使いたいんだか
793デフォルトの名無しさん:2012/12/14(金) 20:26:11.93
気を遣って単純な例示にしようとしたら「これならそもそもいらないんじゃね??」みたいな反応を返される悲しい例
794デフォルトの名無しさん:2012/12/14(金) 22:53:54.04
gotoが有れば解決
795デフォルトの名無しさん:2012/12/14(金) 23:03:50.62
class SymbolException < Exception
 attr_reader :sym
 def initialize(sym)
  @sym = sym
 end
end

class Symbol
 alias old_match ===
 def ===(obj)
  return old_match(obj) unless SymbolException === obj
  obj.sym == self
 end
end

def raise(*args)
 Kernel.raise *args unless args.length == 1 && Symbol === args[0]
 raise SymbolException.new(args[0])
end



begin
 raise :hoge
rescue :fuga
 p "fuga"
rescue :hoge
 p "hoge"
end

こんなの実装できるとかRuby変態だろ…
796デフォルトの名無しさん:2012/12/15(土) 00:57:15.80
>>795
>こんなの実装できるとかRuby変態だろ…

偽装Lispだからな。
797デフォルトの名無しさん:2012/12/15(土) 01:02:50.15
おまいらの会話、高度過ぎて付いていけない。
おまいらなら、余裕でRuby GOLDが取れそうだな。
798デフォルトの名無しさん:2012/12/15(土) 02:12:28.77
sendメソッド使いまくるソースが嫌い
なんでもかんでも重複を省こうとする
アホちゃうかと
読みやすさ、メンテのしやすさ、手間、バランスを考えろ
799デフォルトの名無しさん:2012/12/15(土) 02:32:23.51
再利用するってことは、依存が増えるってことだからな。
そこが分かってない。
800デフォルトの名無しさん:2012/12/15(土) 05:33:45.21
Rubyって
def doya
 if a == 1# えー
 || b =~ /hoge/ # びー
 || c !~ /moge/ # しー
 || d.empty? # でー
 || !e.nil? # いー
 then
  puts "わーい"
 else
  puts "ぐはあ"
 end
end
とか書けないんだ。
801デフォルトの名無しさん:2012/12/15(土) 05:35:48.83
↓だと各条件にコメントが書けない
一行で書けるブロックコメントも無いしなぁ
def doya_sub
 if a == 1 || b =~ /hoge/ || c !~ /moge/ || if d.empty? || !e.nil?
  puts "わーい"
 else
  puts "ぐはあ"
 end
end

じゃあ↓こうする?
こりゃりたーんりたーん五月蝿いなぁw
def doya
 puts doya_sab ? "わーい" : "ぐはあ"
end

def doya_sub
 return true if a == 1# えー
 return true if b =~ /hoge/ # びー
 return true if c !~ /moge/ # しー
 return true if d.empty? # でー
 return true if !e.nil? # いー
 return false
end
802デフォルトの名無しさん:2012/12/15(土) 07:13:54.44
>>800
はい、Ruby的には判断できませぬ
インデントとか揃わなくてかっこ悪いとたいへん不評なのですが

if
cond1 || # when 1
cond2 || # when 2
cond3 # when 3
then
のようにorを後ろに書いてくだされ
803デフォルトの名無しさん:2012/12/15(土) 07:25:33.12
あ、ifで改行しちゃった

if cond1 || # when 1
cond2 || # when 2
cond3 # when 3
then
804デフォルトの名無しさん:2012/12/15(土) 19:21:50.57
rubyのbegin-endが嫌いで{}に変われば良いのにって思ってたけれど、
groovyと比較するとbegin-endの方が目に優しいね
805デフォルトの名無しさん:2012/12/16(日) 01:30:47.96
わざとレトロなトークンを使うことで
記号含有率を下げると同時に、`波括弧を目立ちやすくする
という設計意図があるらしい
806デフォルトの名無しさん:2012/12/16(日) 04:28:35.10
文句のほとんどがifの部分で、文句の本質は「俺の知ってるCと違う」なので、礼儀正しく無視されてきたという経緯はないでもない
トークンとして長くて大きくて実質"予約語"として命名余地を圧迫してることは否定しないが、使用中の見易さそのものは大差ねえよ
807デフォルトの名無しさん:2012/12/16(日) 04:32:17.38
インデントがひどいと{}のほうがbegin-endよりまともに読めそうだけどまともにインデントすればいい話か
808デフォルトの名無しさん:2012/12/16(日) 08:49:25.76
rubyのbegin-endは、Javaのtry〜、であって、{} じゃないぞ。
809デフォルトの名無しさん:2012/12/16(日) 12:49:58.30
rvmで1.8系と1.9系といくつかのバージョンをインストールしてみたんですが
スクリプトから特定のバージョンを指定で実行するようにしたい時は
#!/Users/username/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
とかしないといけないんでしょうか。

これだとバージョンを上げるとスクリプトを修正しないといけないので、
#!/Users/username/.rvm/rubies/ruby-1.9
とかで指定できて、rvmで自動的に最新の1.9系へのシンボリックリンクがはられる、
みたいのができると便利だと思うんですけどできないですか?
810デフォルトの名無しさん:2012/12/16(日) 13:24:54.53
>>809
rvm に 1.9系の最新 みたいな概念はないんじゃない?
811デフォルトの名無しさん:2012/12/17(月) 04:53:24.51
Ruby1.9.3です
定数のように値を後で変更できない配列やhashを作成することはできませんか?
812デフォルトの名無しさん:2012/12/17(月) 05:28:33.09
irb> a = [1,2]
irb> a.freeze
irb> a << 3
RuntimeError: can't modify frozen array
irb> p a
[1, 2]

ただ、実際のところはそれほど強制的な効果はなく、わりと嫌われてもいる
ユーザーに値を変更して欲しくないのなら、マニュアルにそう書くか、そもそも自己責任で放置するほうがよい
813デフォルトの名無しさん:2012/12/17(月) 06:04:06.74
Rubyではクラスやメソッドやデータ構造を他人が変更しうるのは「当たり前」で、
変更したらうまく動作しない可能性があるのも「当たり前」
「これを外部から変更されたらプログラムが誤動作するので変更を禁止したい」
とか過保護または過敏に考える必要はない
814デフォルトの名無しさん:2012/12/17(月) 06:57:23.26
禁止したいときはドキュメントに書く
815デフォルトの名無しさん:2012/12/17(月) 06:59:51.34
Refinementsが入れば改善されるんじゃないの?
816デフォルトの名無しさん:2012/12/18(火) 00:14:43.70
酷い知ったかを見た
Railsのソース見てもfreezeぐらいたくさん出てくるのに。
817デフォルトの名無しさん:2012/12/18(火) 04:35:32.86
私は宝石を作っている。私はSTDLIBにだ "multi_json"依存関係の代わりに "json"を使うべきでしょうか?
818デフォルトの名無しさん:2012/12/18(火) 11:15:16.40
>>811
こういうのじゃダメなの?
class << FOO=Object.new
def bar
1
end
def baz
2
end
end
819デフォルトの名無しさん:2012/12/18(火) 19:37:56.04
自分の用途ではfreezeでよさそうです、ありがとうございました
820デフォルトの名無しさん:2012/12/19(水) 11:32:58.13
ここを参考にしてttp://qiita.com/items/348195ef6f797af08010

class Counter < BasicObject
 def initialize
  @count = 0
 end
 def plus(n)
  @count += n
 end
 def method_missing(*a)
  @count.send(*a)
 end
end

みたいな感じのクラスを作って思い通りの動作は得られたのですが、
インスタンスの.classがFixnumになってしまうのがどうにも・・・
他にうまい実装方法ありませんかね?
821デフォルトの名無しさん:2012/12/19(水) 12:17:38.57
ところで、対応するのは class メソッドだけでいいの?
ancestorsは? kind_of? は? instance_methods で plus が出ないけどいい?

ということで選んで移譲するのがいいように思う
てゆーか Object や Module のメソッドを使いたいなら BasicObject の直接継承なんてやってはいかんぜよ
822デフォルトの名無しさん:2012/12/19(水) 12:59:51.22
実際問題としてやりたいのは

class Counter
 attr_reader :count
 def initialize
  @count = 0
 end
 def plus(n)
  @count += n
 end
end

こういうクラスがあったとして
counter = Counter.new
counter.count #こうじゃなくてcounter単体で@countの値を得たい

つまり.countを省略したいと言うだけのことなのです
委譲を使って下記のようにも書けたのですが・・・そういうことではないんですかね?

class Counter < DelegateClass(Integer)
 def initialize
  super 0
 end
 def plus(n)
  __setobj__ self + n
 end
end
823デフォルトの名無しさん:2012/12/19(水) 21:58:40.90
便乗して質問になるんですが
pでの表示はinspectとか、文字列に埋め込んだりするとto_sとかが呼び出されて変換されますが
足し算などでは勝手に何かメソッドを呼んでくれたりはしないんでしょうか?
824デフォルトの名無しさん:2012/12/19(水) 23:57:44.76
足し算に使うと整数100のように振る舞うクラス。

class C
# C.new + 10 #=> 110
def +(other) 100 + other end
# 10 + C.enw #=> 110
def coerce(n) [n,100] end
end
825823:2012/12/20(木) 01:35:31.25
>>824
なるほどcoerceというのが呼ばれるんですね
ありがとうございました
826デフォルトの名無しさん:2012/12/20(木) 22:53:23.66
分散並列処理フレームワークありませんか?
827デフォルトの名無しさん:2012/12/21(金) 01:29:03.32
しょうもない質問で申し訳ないのですが、スクレイピング出来るコードをサーバー上に起きました。

ruby ファイル名.rb で必要な情報一覧はLinuxコンソール上から叩くと取得出来ています。

これをブラウザ上にテキスト形式でどの様に表示させればいいのか解らず、sinatraと言うフレームワークもためしましたが上手く行かず、、、

多分凄い簡単な気もするのですが全くわかりません。

テキストにしたいと言う理由は実行結果をjson形式の書式に無理やり変えている為です。require jsonは利用してません。DBは利用してません。

プログラミング自体初心者です。。
828デフォルトの名無しさん:2012/12/21(金) 02:14:25.80
君は日本語も初心者のようだね
829デフォルトの名無しさん:2012/12/21(金) 02:17:30.67
>>827
とりあえず、ここを嫁。
http://www.sinatrarb.com/intro-jp.html
んでhttp://localhost:4567をWebブラウザでアクセスしてうまくいってそうなら
次は、↓みたいにparamsってHashの変数を使うように書き換えて再起動して、

# myapp.rb
require 'sinatra'
get '/' do
 return '嫁は' + params[:yome] + '妹' + params[:imouto]
end

↓でアクセスして引数が参照できたら、
http://localhost:4567/?yome=morisama&imouto=rikka

あとは好きにいじって行け。
あとHTTPの勉強が少し要ると思う。
830デフォルトの名無しさん:2012/12/21(金) 02:24:11.23
>>829
有り難うございます。

:4567で起動はしてるのですが、Linuxのコンソール上には結果は出ていてエラーもありません。

ですがブラウザは真っ白な状態になっていてソースを表示しても何も入ってないと言う感じです。

スクリプトの結果をコンソールと同じ様にしたいだけなのにそれがどうしても出来ません。
831デフォルトの名無しさん:2012/12/21(金) 02:30:02.59
>>829

ちなみにコードは

get '/' do

ここにまるごと張り付けてます。

end

ハッシュを利用しないといけないのであればなぜそうなのかが公式見ても理解出来ません。。。
832デフォルトの名無しさん:2012/12/21(金) 02:47:36.88
クラスタマシン使った方が安上がりになりそうなことまで、hadoopつかってる企業とかありそう
833デフォルトの名無しさん:2012/12/21(金) 02:56:23.28
>>831
コンソールへの出力にputsとか使ってるんだろう?
putsは引数の文字列をlinuxコンソールに出力するメソッド(本当は違うけど)
今現在コンソールに出力されてる文字列をブラウザに送るにはどうすればいいかは
829に書いてくれてあるのをみればわかるだろわかるよなわかってくれよそんくらい
834デフォルトの名無しさん:2012/12/21(金) 03:26:47.76
>>831
get '/' do

 return "森夏ちゃんエロい"
end

とかいて、表示したいもんを文字列にしてreturnで返せ。
そうしたらブラウザで
http://localhost:4567/
にアクセスすると"森夏ちゃんエロい"が表示されるんだよ。
835デフォルトの名無しさん:2012/12/21(金) 03:51:48.91
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
836デフォルトの名無しさん:2012/12/22(土) 14:51:40.51
gs = TCPServer.new(12345)
s = gs.accept()
s.puts("あ")
でクライアントに"あ"が送信されますが送信文に改行\nを加えるとそこで送信文が終わってしまします
つまりs.puts("あ\nい")とするとクライアントは"あ"しか受信してくれません
なんとかなりませんか
837デフォルトの名無しさん:2012/12/22(土) 14:58:50.35
getsは1行読み込むんだから、putsで改行1つ入れたらそりゃ2回gets呼ばんといかんだろう。
http://doc.ruby-lang.org/ja/1.9.3/method/IO/i/gets.html
838デフォルトの名無しさん:2012/12/23(日) 00:52:07.77
windowsコマンドプロンプトirbで無限ループに入るとCtrl+C押しても止まりませんよね
皆さんどうしていますか
839デフォルトの名無しさん:2012/12/23(日) 01:41:22.82
いままで見たことない
exit も打てなくて C-c も使えないということ?

じゃ、GUIのタスクマネージャから終了させる
コマンドラインだったら、別の DOS プロンプトから tasklist で
実行時期が早めの DOSプロンプト(cmd.exe)の pid を調べて kill する
840デフォルトの名無しさん:2012/12/23(日) 08:32:59.15
>実行時期が早めの DOSプロンプト(cmd.exe)の pid を調べて kill する

嘘を教えるな
irb.exe もしくは ruby.exe の pid を調べて kill する
841839:2012/12/24(月) 00:28:12.80
素で間違えてしまった
フォローありがとう
842デフォルトの名無しさん:2012/12/28(金) 11:02:17.08
require 'net/smtp'
してrubyでメールを送ることに成功したのですが、宛先がgmailのときだけ
/usr/lib/ruby/1.8/net/smtp.rb:942:in `check_response': 553 5.7.1 <[email protected]>... Relay operation rejected (Net::SMTPFatalError)
from /usr/lib/ruby/1.8/net/smtp.rb:911:in `getok'
from /usr/lib/ruby/1.8/net/smtp.rb:854:in `rcptto'
from /usr/lib/ruby/1.8/net/smtp.rb:835:in `rcptto_list'
from /usr/lib/ruby/1.8/net/smtp.rb:833:in `each'
from /usr/lib/ruby/1.8/net/smtp.rb:833:in `rcptto_list'
from /usr/lib/ruby/1.8/net/smtp.rb:654:in `sendmail'
from ./mailtest.rb:26:in `sendmail'
from /usr/lib/ruby/1.8/net/smtp.rb:526:in `start'
from /usr/lib/ruby/1.8/net/smtp.rb:463:in `start'
from ./mailtest.rb:25:in `sendmail'
from ./mailtest.rb:68
となって失敗してしまいます。対処法をご存知のかたは教えて下さい。
843842:2012/12/28(金) 11:51:38.09
すみません
smtpの認証パラメータを設定していなかったのが原因でした
844デフォルトの名無しさん:2012/12/31(月) 07:06:44.40
ファイルを読み込んで特定の文字列を別の文字列に置き換えるようにしたいです。

test01
うんこ
うんち
う○こ

のように書かれているとします。
このうち「う○こ」を「うんこ」に置き換えたいのですがどうすればいいですか?
ファイルに直接変更を加えるということです。
845デフォルトの名無しさん:2012/12/31(月) 10:37:49.71
ruby -i -p -e '$_ に対する置換処理' 対象ファイル
846デフォルトの名無しさん:2012/12/31(月) 11:02:01.60
>>844

1.ファイルを一時ファイルにコピーする。
2.もとのファイルの名前で新しいファイルをつくる(書込み用)
3.一時ファイルを1行ずつよんで、該当する部分を変更して書込み用ファイルに出力する。
847デフォルトの名無しさん:2012/12/31(月) 11:13:30.77
sub(pattern, replace)
文字列中で pattern にマッチした最初の部分を文字列 replace で置き換えた文字列を生成し返します

gsub(pattern, replace)
文字列中で pattern にマッチする部分全てを文字列 replace で置き換えた文字列を生成し返します

リファレンスマニュアル
848デフォルトの名無しさん:2012/12/31(月) 11:15:02.14
`sed -i -e "s/う○こ/うんこ/g" #{ファイル名}`
849デフォルトの名無しさん:2012/12/31(月) 11:17:08.53
行中の文字列置換だったらsedがばっちりその用途じゃん
rubyで考えるよりも早いんじゃない
850デフォルトの名無しさん:2012/12/31(月) 11:18:17.52
とおもったらすでに書かれていた
851デフォルトの名無しさん:2012/12/31(月) 18:59:24.83
Windowsにはsedはないから
>>847の方法を使う必要がある
フィルタ的に使うのに意外と
手間がかかるよねrubyは
852デフォルトの名無しさん:2012/12/31(月) 19:26:52.36
windosでのsed実装を探したほうが早くねってなる流れ
853デフォルトの名無しさん:2012/12/31(月) 20:07:43.05
時代はWindowsw
854デフォルトの名無しさん:2012/12/31(月) 20:09:58.73
>>852
Windows版なんて聞いたことないし、あったとしても
どこの馬の骨が作ったかわからないフリーソフトレベルだろうから
大事なテキスト処理は任せられないなあ
多くのユーザーに揉まれたUnixツール群は偉大だ
855デフォルトの名無しさん:2012/12/31(月) 20:36:15.57
cygwinくらい知ってろよ。
856デフォルトの名無しさん:2012/12/31(月) 21:38:07.26
rubyでコピーしないでrenameできる
857デフォルトの名無しさん:2012/12/31(月) 21:44:25.90
>>854
windowsでコンパイルすればいいだろ。バイナリしか提供されないノンフリーソフトじゃないんだから。
858デフォルトの名無しさん:2012/12/31(月) 22:07:57.60
GNU sedみたいなオプソのsedがあるからな
859デフォルトの名無しさん:2013/01/01(火) 00:42:03.47
シフトJISとおもってたら、機種依存文字、外字が混在してたりする
860デフォルトの名無しさん:2013/01/01(火) 03:45:47.57
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
死ねゴミ共が
861 【大吉】 【699円】 :2013/01/01(火) 04:21:05.39
あけおめ
862 【大吉】 :2013/01/01(火) 08:47:45.99
Python 最強
863デフォルトの名無しさん:2013/01/02(水) 18:17:46.23
>>859
俺も今そこで手が止まってる

nokogiriで特定の動的ページから複数のサイトをランダムにスクレイピングしたくて
パースする時にファイルの宣言文を見てエンコードする文字コードを自動で決めてくれるnokogiriの仕様に依存してるわけだけど
shiftjisエンコードされてて機種依存文字が入っていた場合だと何故かエンコードエラーが出るんだよなー
解決策として

・nokogiriが使ってるiconvを機種依存文字対応のものにする
・Mechanize経由でパースすれば多分大丈夫

みたいのが調べて出てきたけどiconvってそもそも何ぞや?
標準添付か組み込みのライブラリで解決できる方法は無いんか?とか
理解しないといけないことが多すぎて何か腑に落ちなくてもやもやイライラしてる

三が日までに何とかしないと社内で無能扱い確定だ
年明けに何でこんなことやってるんだろ…
864!omikuji:2013/01/02(水) 18:19:55.28
あけましておめでとう
865デフォルトの名無しさん:2013/01/05(土) 10:17:04.79
日本 Perl
海外 Python


何でこんな中途半端なRubyなんて使ってるクズがいるんだろうな
866デフォルトの名無しさん:2013/01/05(土) 10:21:05.96
LL戦争前のMatzの布教と宗教性だな
Ruby厨がMacBook持って萌えアニメやOSS信仰してるあたりで反吐が出る
iphoneいじってRuby会議ですか?
くだらねー小さい技術ネタで盛り上がって何も生産性のない話題っすよね
railsもオワコンだし
Rubyはオワコンなんだよ
その現実を受け止めよう
現実が変わることはない
867デフォルトの名無しさん:2013/01/05(土) 11:34:12.67
反吐吐いて脱水症状でそこらへんで一人で野垂れ死んでれば?

ここでそうやっていくらdisっても、現実は変わらないよw
現実を受け止めようw
現実が変わることはないw
868デフォルトの名無しさん:2013/01/05(土) 13:13:22.73
↑w
869デフォルトの名無しさん:2013/01/05(土) 18:34:26.78
アプリ起業 iPhone C#まとめ Ver 1.5
http://tinyurl. com/9w97424
870デフォルトの名無しさん:2013/01/06(日) 17:04:45.07
871デフォルトの名無しさん:2013/01/06(日) 17:05:16.48
872デフォルトの名無しさん:2013/01/06(日) 17:24:46.14
873デフォルトの名無しさん:2013/01/06(日) 17:25:26.68
調
874デフォルトの名無しさん:2013/01/06(日) 17:25:57.72
875デフォルトの名無しさん:2013/01/06(日) 17:27:08.68
876デフォルトの名無しさん:2013/01/06(日) 17:42:53.52
877デフォルトの名無しさん:2013/01/06(日) 17:43:40.64
878827:2013/01/11(金) 21:44:54.56
お久しぶりです。
あれからちょっと手を動かせなくて久しぶりにレス頂いていた書き込みを読み結果が表示出来る様になりました。
式展開、インスタンス変数と言う言葉を学習しました。。。(恥
ですが表示結果の全てを出力したいのに一行しか出て来ない状況でどの様に記述するのが正しいのか、
もしくはもっと別の記述方法があるのかご指導頂きたく…

get '/' do

content_type :json

hoge = Rack::Utils.parse_query(@env['rack.request.form_vars'])
param = params['keyword']
keyword = param
escaped_keyword = CGI.escape(keyword)
doc = Nokogiri.HTML(open("http://www.google.co.jp/search?&num=10&hl=en&safe=off&client=safari&tbo=d&rls=en&source=lnms&tbm=nws&sa=X&tbs=qdr:h24&ie=UTF-8&oe=UTF-8&q=#{keyword}"))
start = "["
doc.search("div#search ol li").each_with_index do |li, idx|
href = ""
html = ""
link = ""
li.search("h3 a").each do |alink|
879827:2013/01/11(金) 21:46:29.62
長過ぎて書き込めず上記の続きです。

href = alink.attribute("href")
URI.parse(href).query.split(/&/).each do |str|
strs = str.split(/=/)
link = strs[1] if strs[0] == "q"
"asdfasfdasfdafd"
end
html = alink.inner_html
end
next if "#{href}" !~ /^¥/url/
@@_beg ="{"
@@_dom = "¥"domain¥":¥"#{link.split("/")[2]}¥","
@@_url = "¥"url¥":¥"#{link}¥","
@@_t = "¥"title¥":¥"#{html}¥""
@@_clo = "},"
end
@@_null = "{¥"null¥":¥"null¥"}"
@@_close = "]"
res =[start,@@_url,@@_t,@@_clo,@@_null,@@_close]
end

笑っちゃう様なコードかもしれませんが、ここまで来るのに一苦労でした。難しいですね。
またこの状態だと1ペアの結果しか返せずコンソールに表示される10ペア全ての結果を返したい感じです…
880デフォルトの名無しさん:2013/01/11(金) 22:27:09.41
sinatraだっけ?

rackup すると
vendor/bundle/ruby/2.0.0/gems/rack-1.4.3/lib/rack/builder.rb:129:
in `to_app': missing run or map statement (RuntimeError)
って言われるんだけど?

あと、なんでクラス変数(@@....)を使う?
881デフォルトの名無しさん:2013/01/11(金) 22:41:49.86
>>880
はい、sinatraで試しています。
私の環境ではエラーが出てないのですが、、

クラス変数ですか、
インスタンス変数?を使ったつもりでした 汗
882デフォルトの名無しさん:2013/01/12(土) 01:01:01.55
>>881
URI.parse....each のブロックで @@_xxx に結果を放り込んでるけど、これが毎回上書きされてるから最後に解析された結果しか出力されな
い。
a = 0; 10.times { |i| a = i }; [a]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
にならないのと一緒で。
思い通りの動作にするなら
a = []; 10.times { |i| a.push i }; a
みたいに配列に放り込むようにすればいい

あと、今回の場合、クラス変数(@@foo)は勿論、インスタンス変数(@foo)も使う必要ないで
883デフォルトの名無しさん:2013/01/12(土) 01:19:57.51
>>882
有り難うございます!
ここのブロック周りはコピペを弄ってる状態に近くてアドバイス内容の意味までは的確に理解出来ませんが今から解読しながら頑張ってみます。

全く先に進めなかったのでこれでまた前進できるかもしれません。
884827:2013/01/12(土) 01:35:21.11
>>882

今ソースを見ながら考えてます。
ですが具体的にどこに何を書くのかさっぱり分らず
この感じだと今迄と同様一日以上悩んでもよく分らないパターンになりそうです。

もし宜しければ、参考になりそうなホームページ等あったら教えて頂きたいです。
今まで調べたキーワードは以下で、それに関連するページは一通り見てきました。

変数 式展開, インスタンス変数 展開, 配列展開, 連想配列, 配列 変数 展開

既に関連ワードがあったら見たけど理解出来てないと言う感じです。
何が分らないのかが分らない感じも多少あります。Orz.
885827:2013/01/12(土) 04:50:36.39
こんなのサラサラ書ける人達は凄いな。。
今日は寝よう。。
886デフォルトの名無しさん:2013/01/12(土) 10:03:54.82
コピペして動いたら満足して次にいくんじゃなくて
何故それで動いてるのか1行1行理解して進まなきゃダメやで
887デフォルトの名無しさん:2013/01/12(土) 11:07:23.43
いちばん大事な
・ メソッドの作り方使い方
が入ってない気がする
行数が10行超すか、製作日数が1日を超したなら、一見冗長になったように感じたとしても最低限メソッドにするべき

def ユーザー入力からキーワードを抽出して返す
end
def ぐぐってHTMLを返す(keyword)
end
def HTMLをNokogiriでパースして生データにして返す(html)
end
def HTML由来の生データをHTML出力用に整形する(data)
end
def 受け取った文字列をRackで表示するだけ(output)
end

keyword = ユーザー入力からキーワードを抽出して返す
html = ぐぐってHTMLを返す(keyword)
data = HTMLをNokogiriでパースして生データにして返す(html)
output = HTML由来の生データをHTML出力用に整形する(data)
受け取った文字列をRackで表示するだけ(output)

なんも考えてないメソッド構成だが、これのいいとこはスクリプト作成中にいちいちブラウザから入力したりGoogleにアクセスしたりしなくてもいいように作るのが簡単なとこだ

# keyword = ユーザー入力からキーワードを抽出して返す
# html = ぐぐってHTMLを返す(keyword)
html = File.open(事前にHDDに保存していたHTMLファイル,'rb'){|f| f.read}

Nokogiriのパースの部分がうまくいってない気がするなら、スクリプト途中でdataをpなりputsなりして表示させて確かめ、exitで終了させればいい
data = HTMLをNokogiriでパースして生データにして返す(html)
p data
exit
888デフォルトの名無しさん:2013/01/12(土) 12:23:29.46
モヤモヤした脳内からこねくり回すんではなく、処理を小さな単位の"言葉"でまとめる癖がつくので
メソッドの作成はRubyの基礎覚えたら極力早いうちからやるのがおすすめ
889デフォルトの名無しさん:2013/01/12(土) 12:27:16.51
10行で1メソッドってやり過ぎじゃない?
メソッドだらけになっちまう。せめて100行で
890デフォルトの名無しさん:2013/01/12(土) 12:34:19.57
クラスやモジュールの作成云々はずっとあとでいいな
「自作メソッド多過ぎ! わけわからん! 耐えられん!」とか思ってから勉強すると
実際の困難を解決する手段としてすんなり覚えられる

オブジェクト指向とかインスタンスとかそのへんの概念はとりあえず飛ばす
ひとまず、メソッドをまとめて一気に(または場合分けで)順次起動するシステムとしてクラスを使う

>>889
>>887も言ってるが、処理がごっついかどうかにもよるかと
自前で正規表現して自前で埋め込み文字列するだけならメソッドにする必要はないかも
今回のようにopen-uriでWebアクセスしたりNokogiriで面妖な抽出をしたりHTMLの変なデータ作ったりRackでDSL()する場合は
元スクリプトが10行程度でもいくつかメソッドにしたほうが気楽かもしんない

本当の"書き捨て"のスクリプトなんてのはそうそうあるもんじゃない、特に初学者
891デフォルトの名無しさん:2013/01/12(土) 13:36:45.31
結果でなくてまず設計でメソッドわけろよ。
892デフォルトの名無しさん:2013/01/12(土) 13:37:30.35
>>889
俺なんて1行のメソッド山ほど作るが…
893デフォルトの名無しさん:2013/01/12(土) 13:38:10.04
昔はコンソールの行数で25とか40行が基準だったな。
894デフォルトの名無しさん:2013/01/12(土) 13:50:07.31
>>892
コメント、def、内容、endを1行で書くのか。
895デフォルトの名無しさん:2013/01/12(土) 16:04:42.10
>>891
それは会社の新人研修でやってください
896デフォルトの名無しさん:2013/01/12(土) 16:40:11.08
「行数が多くなったからメソッドに」なんてのは分かってない証拠
897デフォルトの名無しさん:2013/01/12(土) 16:47:00.99
その通り。プログラミングは情報科学課程必須。素人が作っていいものではない。
898デフォルトの名無しさん:2013/01/12(土) 17:38:15.45
>>894
いやattr_readerの本質的な動作を知らなかった頃にはやった事はあるけど、そういう意味じゃねえw
899デフォルトの名無しさん:2013/01/12(土) 18:05:50.10
設計関係なくスクロールしなきゃいけないくらいだったら、内部的にわけられそう。
900デフォルトの名無しさん:2013/01/12(土) 21:12:34.33
ツクラーですが
やっと・・・やっとeach文が使えるようになった
すごい便利、すごい嬉しい、
一個づつ処理していた悪夢からやっと開放された達成感夢がひろがりんぐ!

でもreturnがワケワカメ
どう便利なのかもワカラン
けど沢山つかわれてるから便利そうな感じはする
eachの比じゃないくらいそこらじゅうで使われてる。でも意味わからん。
return分の魅力を教えてください・・・やり方は自分で調べます未知すぎてモチベが
901デフォルトの名無しさん:2013/01/12(土) 21:29:37.04
RGSSはRubyだけどRubyじゃないからなあ
扱う環境が特殊でちと説明し辛い
902デフォルトの名無しさん:2013/01/12(土) 21:36:10.68
eachは値返すんだからおおむね文とは呼べない(式と言われてもうーんって感じだが)

とりあえず、Rubyでeach文と書いてある解説があったらそれは似非で君にとって有害文書だから即燃やせ
each文という言葉を知っているということは他の何らかのプログラミング言語を知っているということだ
それでいて式と文と制御構造の違いに関心を払わないということは、あまりに危険な兆候
903デフォルトの名無しさん:2013/01/12(土) 21:40:23.89
return文が分からないというのは構造化プログラミングのメリットが分からないってことじゃないの?
必要性を感じないならそのまま使わずに書き続けていけばいいと思う
そのうちちょっと長いプログラム書こうと思ったらすぐ欲しくなるだろうし

あとRGSSはこっちで聞いたほうがいいんじゃない?
http://www.tekepon.net/fsm/modules/reqbb/
まあ言語からちゃんと勉強しようという意気を持った人をスクリプト乞食の掃き溜めに送り込むのは心苦しいけどw
904デフォルトの名無しさん:2013/01/12(土) 21:43:45.66
やりかたが分からないと言ってみる
905デフォルトの名無しさん:2013/01/12(土) 21:45:03.70
二ちゃんねる初心者だから来たけど全くやりかたわからないです
(´;ω;`)
906デフォルトの名無しさん:2013/01/12(土) 22:05:26.26
>>901 RGSSだけやりゃ十分的な話はよく聞きます
>>902 手当たりしだいググって○文という表現が脳に浸透してしまたヨ
>>903 はいメリットというか何してんの状態で、必要性以前の問題ですハイ
でも理解してないとスクリプト改変する時とかに何してるかさっぱりで
必要性としてはそこらへんの理由です。なにが良くてreturn乱発してんの?という疑問が糸口になるかなぁと
907デフォルトの名無しさん:2013/01/13(日) 00:48:52.28
>>906
メソッド内で最後に評価された式が戻り値となるRubyにおいて
returnの存在理由はメソッドの中断、もしくは式が戻り値であることの明示にある

returnは「戻す、返す」という意味でもあるので戻り値の明示としやすい
例えばただ変数だけ書かれたなら戻り値だと皆判るが
最後の式が代入式など、副作用を伴う場合には
副作用だけが目的なのか、戻り値まで意図してるのか判りにくい
なので最後でも敢えてreturnと書いて
「この式は戻り値まで意図してこの式を書いたのですよ」
との意思表示としたりとかね

また他の言語出身者なら、他言語には戻り値にreturn必須の言語もあるので
return書かないと自分で分からなくなる、という人もいると思う

中断については、Rubyには処理の中断方法が様々にあって
場面に応じて使い分けるものだと思う
・ループやイテレータを終了するbreak
・式を評価しそれを戻り値としてメソッドを中断するreturn
・例外を発生させて処理を中断するraise
・例外を使わないことで「異常ではない大域脱出」を行わせるcatch/throw
908デフォルトの名無しさん:2013/01/13(日) 01:00:14.23
ネストした外側のループを抜けるのはcatchで事足りるが
ネスとした外側のループをnextしようとすると途端に酷いコードになる。
909デフォルトの名無しさん:2013/01/13(日) 01:06:41.96
mod_rubyってどこで手に入りますか?
910デフォルトの名無しさん:2013/01/13(日) 18:43:00.41
rubyのencodeではまった
invalid、undefオプション指定してるのに何故かArgumentError invalid〜が出る
色々調べたらどうやら文字列の文字コードとencodeで指定した文字コードが同じだったら変換処理してくれないんだな
サポート終了したiconvで事なきを得たけどこの仕様はちょっと酷すぎだよrubyたん…ふぇぇ
911デフォルトの名無しさん:2013/01/13(日) 20:50:36.67
>>910
エンコードをいじらず悪い文字を置換したいだけっていう要望は出てるけど
next minor ってことは早くてもver 2.1.xか。
http://bugs.ruby-lang.org/issues/6752
912デフォルトの名無しさん:2013/01/14(月) 13:54:30.17
どなたかRuby 1.8.7で1.9.xのString#encodeとか
String#force_encodingを使えるようにする方法をご存じない
ですか?。スクリプトを1.8系にも対応させたいのですが、
修正が要るのはそこだけなので。
913デフォルトの名無しさん:2013/01/14(月) 14:17:21.56
>>912
特にはないです

if str.respond_to? :force_encoding
 str.encode(...)
else
 require 'nkf'
 NKF.nkf(...)
end

のようにひとつひとつ自前で書くしかない
実際は MyModule::Util.encode_string のようにメソッドにしてそれに任せるが、
エンコーディング処理したいとこ全てに挟むという本質は同じ
かなり醜くなることを覚悟する必要がある
914デフォルトの名無しさん:2013/01/14(月) 14:26:39.24
半年まって、1.8.7サポートを切りすてるのが楽なのでは。どうせもうすぐ終わりだし。
915912:2013/01/14(月) 14:35:37.27
>>913, 914

どうもです。1.8.7に対応させておくとMac OSXに標準で
入っているから、コマンドラインアプリとして使ってもらい
やすいんですよね・・・。

やっぱり汚くいくしかなさそうです。
916デフォルトの名無しさん:2013/01/14(月) 15:31:50.86
MyModule::Utilとかに置くよりはStringにencodeメソッドを追加してしまうのが
Ruby的ではあろう。(当然必要な範囲での実装に限って)
917デフォルトの名無しさん:2013/01/14(月) 17:43:48.18
>>916
それはいちばんやってはいけないこと
918デフォルトの名無しさん:2013/01/14(月) 18:17:42.20
>>917
naze?
919デフォルトの名無しさん:2013/01/14(月) 18:19:57.74
917じゃないけど、encode を見てるライブラリが発狂するとか、そーゆう系で苦労するので小手先な回避はやめてほしい…。
920827:2013/01/14(月) 21:11:34.56
回答頂いた方有り難う御座いました。すぐにはnokogiri周りを理解してやるのが難しく他の
やり方を模索し一旦ファイルへ書き出す所まで出来ました。メソッドも一つ作ってみました。

今はそのファイルの中に入ったものを表示させようとしてます。

# 前回の続きです。
next if "#{href}" !~ /^¥/url/
@@_beg ="{"
@@_dom = "¥"domain¥":¥"#{link.split("/")[2]}¥","
@@_url = "¥"url¥":¥"#{link}¥","
@@_t = "¥"title¥":¥"#{html}¥""
@@_clo = "},"
@@_file_name = "result.txt"
File.open(@@_file_name, 'a'){|file|
file.write "#{@@_url}#{@@_t}¥n"
}
end

def res
f = open ("result.txt")
puts f.read
f.close
end
"#{res}"
end

最後に開いたファイル内確かに文字列あるはずなのですが、相変わらずブラウザが真っ白です。
メソッド内でputsを外しても同様の結果になってしまいます。
921デフォルトの名無しさん:2013/01/14(月) 21:38:11.01
だから…って誰も言ってないか
とりあえずはSinatra使うな
そのせいで(あなたにとっての)ブラックボックスになっている

まず、スクリプトに値を変数でベタ書きしておいて、それの加工データ文字列をコンソールに表示するスクリプトを作れ

完璧に動作することがわかったら、次は、Sinatraによる、Webブラウザ経由のユーザー入力をそのまま出力するスクリプトを作れ

それもできたら、そのSinatraスクリプトのユーザー入力データをコンソールスクリプトのベタ書き変数に代入し、
コンソールスクリプトの加工済みデータ文字列をSinatraの出力に渡せ

「ユーザーの入力をSinatra経由で受け取り、内部で加工して、SinatraでWebブラウザに表示する」スクリプトの完成だ
922デフォルトの名無しさん:2013/01/14(月) 21:40:35.35
>>920
どこぞから拾ってきたソースつなぎ合わせてプログラム作るのは結構だが
言語の基礎くらいは理解しておかないと動くものは作れないよ
923デフォルトの名無しさん:2013/01/14(月) 21:50:00.38
Sinatraは
HTTPとCGIに熟知した人が「手順めんどくせえ!」と思って楽するために使うものであって
HTTPとCGIを知らない人が「勉強めんどくせえ!」と思って楽するために使うものではない
924827:2013/01/14(月) 22:10:29.00
皆さんレスありがとうございます!

>>921

Sinatraは>>923さんも言ってる様にちょっと私のレベルで使うべきものではない
んですね。汗 後は文字列周りの処理も全然理解出来てないと痛感します。

以前他の方には変数を文字列として展開、で前回表示出来る様になったものの今回
メソッドを作って展開しても全く文字が出て来なくて違いも分らない感じです。
今の自分にはおっしゃる通り1つずつつくって試していくしかないですね。

>>922

まず先にやりたい事がどうゆう方法で出来るのか見て後から1つずつ読み解いて行こうと考えてました。
基礎は本も買って学習してますが、今回やろうとしてる事はちょっと今のレベルからだとかなり難しい
状況なんだなと思ってきました。

>>923

それは貴重な意見です。railsだと当然難しすぎるし、もっと簡易な感じでと探しまわった結果
sinatra見つけたのですが、本来知ってる方が使うべき物だったんですねありがとうございます。
925827:2013/01/14(月) 22:46:49.57
すいません、報告です。基礎…基礎…と色々考えてたら昔は基礎と言えば掲示板
と言うのは聞いた事あるな…と思い掲示板の作り方を見ていた所そこにヒントが
ありました。

f = open ("result.txt")
msg = f.read
f.close
"#{msg}".to_json

msgを用意してその中に f.read を入れて最後(ここは適当になんとなく入れました)
.to_jsonとこの様な記述に変えたところ正常にデータを取得する事が出来ました。

どんどん上書きされてかない様に一時ファイルに作成するようにすれば一旦は意図した
動作出来そうです!皆さんから色々言われてここに行き着けたので有り難う御座います。

これでやっと時間が取れるので指摘頂いた全てバラして順に処理をさせるやり方等
これから順に学習して行こうと思います。

(この期間でどんな形でもいいからやりきる!と当初自分へ言い聞かせてプログラミングを開始した為)
926デフォルトの名無しさん:2013/01/15(火) 07:36:25.41
いつも逃げてるといざというときに踏ん張りが効かない
927デフォルトの名無しさん:2013/01/15(火) 11:13:53.50
>>915
その調子だと将来OSXのRubyが1.9に移行したとき地獄を見ると思う
今からrvmを入れてでも1.9で書いてみるべき
928デフォルトの名無しさん:2013/01/15(火) 11:19:10.17
PHPのpukiwikiかdokuwikiが定番ですが
Rubyで定番のwikiを教えてください
929デフォルトの名無しさん:2013/01/15(火) 12:02:49.84
定番でもなんでもないが、しばらく無くなりそうにないのはGollum
Githubのwiki部分だ

Ruby/Railsでwikiエンジンってあんまり活発じゃない印象
930デフォルトの名無しさん:2013/01/15(火) 12:31:04.60
なるほど、おとなしくpukiwikiで乗り切ります
931デフォルトの名無しさん:2013/01/15(火) 13:24:20.32
一時期hikiがよく使われてたけど最近放置されてるしなー
932デフォルトの名無しさん:2013/01/15(火) 13:48:08.04
"Rubyにまつわる"からといって、Ruby製のものを使わなければならないということはない
PHP製が機能的で便利なのなら、PHP製のアプリケーションを使えばいい

なんでもかんでもRubyというのは残念な人のやること
933デフォルトの名無しさん:2013/01/15(火) 14:23:44.92
まあ、研究目的というか、とりあえずRubyで作ってみようぜみたいなのはアリだと思うけど、
自作でもないものを無理して使う必要はないよね

地元の農作物で無理しておいしくない加工品作ってる自治体のようだ
農作物は品種によって「向く料理」「向かない料理」があるので、素直にそれに従え
934デフォルトの名無しさん:2013/01/15(火) 18:48:25.18
そして最終的には「Ruby製は全く役に立たない」という結論に至らせようとするのが>>932
935デフォルトの名無しさん:2013/01/15(火) 18:51:38.34
なに見えない敵と戦ってるの。
936デフォルトの名無しさん:2013/01/15(火) 18:58:50.51
それは>>932にも言いなよ
937デフォルトの名無しさん:2013/01/15(火) 19:41:21.95
>>935
Rubyスレにはプログラミングをしたことのない人が居座っています
自分がレスできる話題や流れを虎視眈々と狙っています
いいかげん慣れてください
938デフォルトの名無しさん:2013/01/16(水) 01:51:41.33
Rubyに固執する必要はないってのは正論中の正論だけど
初心者が最初に触った方がいいって意味での優劣だったらPHPよりRubyじゃねーの
PHPって楽だけど型付け糞だし書いててストレス溜まるしコード書く楽しみが得られない
といいつつ仕事ではRubyは滅多に使わずPHPの案件が多いというジレンマ
939デフォルトの名無しさん:2013/01/16(水) 05:04:46.80
windows版rubyで、特殊フォルダのパスを取得するにはどうすればいいのですか?
940デフォルトの名無しさん:2013/01/16(水) 08:02:38.59
>>938
どの言語がいいか、というのは不毛な罵り合い(論争ですらない)になりやすいから余り関わりたくないが、
言語xxxが気に入ってる者の数 * 初心者をアシストする者の割合、が多いかどうかが結構重要だと思う。
かく言う自分も、日常的に使う言語は5~6種類あるんで、時々初心者スレ見て、疑問への回答を書き込んでる。
理解していたつもりのことが、サクッと説明出来なかった時なんかは、結局は自分にも役立ってる。
941デフォルトの名無しさん:2013/01/16(水) 08:36:03.81
お仕事で人気がある点、書いてて楽しくないし実にならない点で
PHPとVBは双璧ですからな
942デフォルトの名無しさん:2013/01/16(水) 11:19:26.28
具体的にRubyのどこが楽しくてPHPのどこが楽しくないの?
こういう話はたまにネットで流れてるけど具体的に聞いた事が一度もない
943デフォルトの名無しさん:2013/01/16(水) 11:29:59.37
そりゃ具体的に説明しても難癖つけられるからみんな諦めたんだよ
944デフォルトの名無しさん:2013/01/16(水) 13:05:23.00
変数にいちいち$、センスが驚くほどない関数名、メンバアクセスの面倒さかっこ悪さ、
デザイン兼用のPHPerの尻拭いをさせられる…細かいけどこういうとこでいちいちストレスが溜まる
945デフォルトの名無しさん:2013/01/16(水) 13:32:24.68
>>943
難癖(本人的には論破)するのが目的だからな
する気も起きんわ
946デフォルトの名無しさん:2013/01/16(水) 14:28:27.64
>>945
>難癖(本人的には論破)するのが目的だからな

そういうのを惨めだと感じない人は、感覚が違うんだから無視推奨。
なにか得られるかもと思ってスレ覗いてる大勢が居るだろう、ぐらいの気持ちで普通に書き込めばいいんじゃまいか?
947デフォルトの名無しさん:2013/01/16(水) 22:36:37.38
phpとか後付けオブジェクト指向言語は不完全で使いにくい。オブジェクト指向設計しない人にとっては何の問題もないんだろうけど。
948デフォルトの名無しさん:2013/01/17(木) 00:25:12.20
PHPの$の存在価値がイマイチ解らない
Perlは記号別に意味を持たせちゃったりリファレンス絡みとかで
そもそもアレがないと根本的にデータ構造が表せなくなってるから仕方ないが
949デフォルトの名無しさん:2013/01/17(木) 10:48:30.93
構文解析するときに$があったほうが楽なのではないかという想像
950デフォルトの名無しさん:2013/01/17(木) 10:53:08.10
Rubyが使われているブラウザゲームを教えてください
951デフォルトの名無しさん:2013/01/17(木) 11:08:36.28
ありません
…まあ、もしかしたらあるかもしれないけど、Rubyだというのが見えるわけでもRubyが使えるわけでもないのでなんとも

もしかしなくてもサーバ上のRubyで動作するCGIゲームの配布を求めているのなら、
一般的にそういうものはないと記憶してるので、ゲーム製作板あたりにでも行って作ったりねだったりするとええ
ゲ製作技術
http://toro.2ch.net/gamedev/
952デフォルトの名無しさん:2013/01/17(木) 11:21:15.62
バックはRubyで作るのが流行っているって聞いたのでそういうブラウザゲームを作っているゲーム会社に就職したかっただけなんです
953デフォルトの名無しさん:2013/01/17(木) 11:31:33.51
一緒に作ろうぜ
954デフォルトの名無しさん:2013/01/17(木) 11:35:09.05
本当に一緒にやりますか?
955デフォルトの名無しさん:2013/01/17(木) 11:50:48.80
>>952
Rubyの経験はぶっちゃけ不要です
なぜなら、Rubyは"簡単"だから
就職してから社内での使い方を学んでも充分間に合う

どうせならHTTPとかCSSとかFlashとか顧客対応とかレベルデザインとかの、Rubyより数倍数十倍の時間がかかる技術の経験を積んできてください
もっぺん書くけど、Rubyの事前経験は不要です
956デフォルトの名無しさん:2013/01/17(木) 11:56:44.40
ブラゲ製作運営会社に就職するのに必要な言語?
中国語と韓国語に決まってるだろうが
957デフォルトの名無しさん:2013/01/17(木) 12:02:30.22
うちの会社来たら好きなだけ無給でやらせてあげますよ
958!omikuji:2013/01/17(木) 12:20:46.65
なぜそこでHTTPとCSSが出てくる
959デフォルトの名無しさん:2013/01/17(木) 12:32:27.50
>>955
ひどい褒め殺しを見た
960デフォルトの名無しさん:2013/01/17(木) 12:40:49.33
半年でなくなる会社に就職する理由もないけどな
ケーキ食べるのが好きだからってヤマザキパンに就職したって意味ねえ
961デフォルトの名無しさん:2013/01/17(木) 13:48:22.43
ブラゲは見た目の瞬間的な収入額は多いけど、出ていく初期費用や維持費用も大きいから見た目ほど儲からないんだよな
コンビニで現金収入が1日60万あっても手元には5000円くらいしか残らないのと似たような感覚
あのお札の束はどこ行っちゃったのみたいな
962デフォルトの名無しさん:2013/01/17(木) 13:53:08.64
>>952
そういう目的だったら、Pythonの方がマシ。
Rubyは偽装Lispだから、アプリ言語が必要なときは便利。
963デフォルトの名無しさん:2013/01/17(木) 14:11:33.88
まじすか
でも日本でPython使ってる仕事って見た事ないんですよ求人とかで
964デフォルトの名無しさん:2013/01/17(木) 14:16:01.14
探し方が悪い
965デフォルトの名無しさん:2013/01/17(木) 15:16:33.13
CoffeeScriptでブラゲ開発してるとこが、開発環境のバックエンドにrubyだかrailsを使ってるとか聞いたことがあるな
ただこの手のケースではrubyのコード自体を書くことはほぼ無いし、
本番環境ではrubyはほぼ仕事してなかったりする

そして実際重要なのは、CoffeeScriptのコードでもなく、絵を書くデザイナーだったり
966デフォルトの名無しさん:2013/01/17(木) 15:42:41.20
そういうとこではRubyプログラマは「足りてる」のよね
コード書き担当はみんなRubyが使える状態であることが多い(Excelのマクロ状態)
人員募集するとしたら、Rubyコーディング以外の業務や役職でだろうな
967デフォルトの名無しさん:2013/01/17(木) 16:32:26.36
>>939
探したらgemとかあるかもしれませんが

require 'win32ole'
shell = WIN32OLE.new("WScript.Shell")
puts shell.SpecialFolders("MyDocuments")
puts shell.SpecialFolders("Desktop")

使用できる特殊フォルダは
http://msdn.microsoft.com/ja-jp/library/cc364437.aspx
とか参照

Win32APIでがんばっても取れます
Shell32.dllのSHGetFolderPath関数を直接call
しかし、面倒くさい
968デフォルトの名無しさん:2013/01/17(木) 16:38:23.02
ボールを投げて地面に落下するまでを計算できるライブラリってありませんか?
物理学?落下学?数学に疎くてなんてググっていいか分からず探しきれません
969デフォルトの名無しさん:2013/01/17(木) 16:46:37.69
落下学ってなんですか?
970デフォルトの名無しさん:2013/01/17(木) 16:47:58.42
Windowsで動かしてます

system("notepad")
というコードを
コマンドプロンプトで ruby test.rb
でrubyスクリプトを実行すると
メモ帳が起動しますが、メモ帳が閉じるまでrubyスクリプトが待機しています
メモ帳を終了すると実行したrubyスクリプトも終了します。
待機せず、メモ帳が起動したかどうかは知らなくても良いので、コードを実行したらそのままrubyスクリプトを終了させる方法はございませんか?
971デフォルトの名無しさん:2013/01/17(木) 16:57:25.54
spawn("notepad")
972デフォルトの名無しさん:2013/01/17(木) 17:07:24.23
できました!ありがとうございます
973デフォルトの名無しさん:2013/01/17(木) 19:02:06.18
system("start notepad")
974デフォルトの名無しさん:2013/01/17(木) 21:13:18.49
>>968

ぐぐるなら 弾道計算 とか 放物線 とか 自由落下 とかかなぁ
計算するだけなら keisan.casio.jp に式もいろいろあるぞ。
975デフォルトの名無しさん:2013/01/17(木) 23:57:33.92
初心者なため以下の理由からIDEから入ろうと思うのですが
Ruby1.9.3に対応した定番のIDEというのはありますか?

・requireする名前が分からないため
・メソッドに必要なrequireがわからないため
・オブジェクトのメソッドを把握してなくても補完から補いたいため
976デフォルトの名無しさん:2013/01/18(金) 00:02:26.75
特にはないです

もしあなたがなにかIDEを既に利用していて、そのIDEがRubyに対応しているのなら、そのIDEでRubyプログラミングをするとよいでしょう
977デフォルトの名無しさん:2013/01/18(金) 00:04:59.38
>>975
ある程度のRubyの知識がある上で使うならともかく
そこまで依存出来るようなのはないと思っていい
素直にエディタの隣にマニュアル広げてたほうが信頼出来る
978デフォルトの名無しさん:2013/01/18(金) 00:18:30.75
オライリーの初めてのルビーが良本すぎて濡れてきた
抑えるとこちゃんと抑えてるわ
979デフォルトの名無しさん:2013/01/18(金) 14:51:01.27
ruby会議に出席できるぐらいのスキルはどのくらいのものですか?
980デフォルトの名無しさん:2013/01/18(金) 15:11:20.44
ユーザーがいる自作ライブラリをGithubで公開して適度に質疑応答やPullRequestやforkがあり、
ブログもなんかてきとーに技術関連のを書いてなんとなくアクセス数もあり、
メーリングリストで検索すると自作ライブラリや投稿者名が何回か出るくらい

が妥当

ただ出席して見るだけならそんなんでなくてもOK
981デフォルトの名無しさん:2013/01/18(金) 15:17:41.84
登壇者になれるかどうかなんて、CFPへの応募が通ればOK、だけじゃねーの
982デフォルトの名無しさん:2013/01/18(金) 15:27:29.08
>>980-981
ありがとうございます
983デフォルトの名無しさん:2013/01/18(金) 22:37:03.51
gem installしたライブラリが読めません
require "rubygems"
require "fcgi" ここでエラーになります。

irbからはrequireできるのですが、、、
984デフォルトの名無しさん:2013/01/19(土) 17:56:58.63
最近Rubyの案件へって来た希ガス
985デフォルトの名無しさん:2013/01/19(土) 18:01:32.91
Rubyの資産(数万行)を引き継いだ初心者です。
2.0で試したところ、動作しませんでした。
1.8は余命半年とのことでちょっと焦ってます。
今のところ、こんな対応を考えているのですが、
(1)地道に2.0対応する
(2)JRubyの1.8互換モードで動作させる
実は自動変換するツールなどあれば教えていただきたいです。
986デフォルトの名無しさん:2013/01/19(土) 18:07:16.91
Ruby2.0ってもうすぐ出るんですか?
これから勉強しようと思って1.8を入れたところなんですがショックです
987デフォルトの名無しさん:2013/01/19(土) 18:35:14.47
>>979
あれは喋るネタがあってなんぼであって、登壇する事が目的じゃないような
でないと、就活・売名のためのステージになってしまうよ
988デフォルトの名無しさん:2013/01/19(土) 20:13:04.02
>>985
ツールは知らないが
・JRubyで動作させる場合のリソース(構築時間、費用、互換性問題の評価、性能)
・Ruby2.0以降が多くなってきても、今のままで使えるか?(機能・性能の改修が必要か)
で判断すればいいんでは?

フルスペックでの動作必須、or技術へのキャッチアップが必要なら、今のうちに2.0対応を始めたほうがいい。
一部動かなくてもいい、or長期間使わないなら、互換モードで。
できるだけ数値化しての比較が吉。
ローコストで済まして、足りない機能はRuby以外(手動も含む)で補うという発想もある。
989デフォルトの名無しさん:2013/01/19(土) 20:26:05.68
>>987
Rubyコミュに限ったことじゃないけど
ボッチだのフリーターだのといった弱者属性を
ファッショナブルに利用する馬鹿を許している時点で
意識の高いガチ無能層にタカられても同情できない感がある
990デフォルトの名無しさん:2013/01/19(土) 21:55:20.69
就活・売名以上に重要なことって何?
991デフォルトの名無しさん:2013/01/20(日) 04:30:24.94
Windows8対応(たぶん)てふざけてんなー
遊びでやってんのか?
992デフォルトの名無しさん:2013/01/20(日) 08:22:27.51
そこそこには動くはずだけど、どっか細かいとこで誤動作とか残ってるかもしれないからごめんね、という程度の意味だろう
情けない表現であればあるほど、業務で使う人はいなくなるはずだから、業務的な被害も減る
993デフォルトの名無しさん:2013/01/20(日) 08:40:52.23
次スレ
Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/
994デフォルトの名無しさん:2013/01/20(日) 09:13:46.52
マルチプラットフォームで動かない言語ってkz
995デフォルトの名無しさん:2013/01/20(日) 09:52:19.60
Windows で作業してくれる人が少ないんでしょ
996デフォルトの名無しさん:2013/01/20(日) 10:27:23.73
VB
Delphi
997デフォルトの名無しさん:2013/01/20(日) 18:18:44.62
Windows で C# が普及している時期に
Rubyは 1.8 から 1.9 の移行期に遭遇した

Windows で Ruby を使う意義が薄れている
998デフォルトの名無しさん:2013/01/20(日) 19:04:40.55
C#とRubyは分野が違うのでは?
999 忍法帖【Lv=40,xxxPT】(1+0:5) :2013/01/20(日) 22:01:34.93
うめてんてー

次スレ
Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/
1000 忍法帖【Lv=40,xxxPT】(2+0:5) :2013/01/20(日) 22:02:09.39
完走

Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。