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

Ruby 初心者スレッド Part 56©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net2014/12/13(土) 09:29:12.93ID:DLY4IovQ
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 55
http://peace.2ch.net/test/read.cgi/tech/1403361584/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん2014/12/13(土) 11:36:58.78ID:rv+X6bjI
「クソの用心のうた」 作詞・作曲・台詞 太田豊史雄

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 一日一回 よいクソを
 ブリブリ モリモリ 日曜日
 「ケツを大切にしよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 月に一度は 浣腸を
 ビチビチ 水便 月曜日
 「腸をきれにしよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 屁には用心 屁の用心
 カンチョー カンチョー 火曜日だ
 「クソ我慢はやめよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 クソは便酒の お母さん
 グイグイ グイグイ 水曜日
 「クソを大切にしよう 一日一便」
0003名無しさん@そうだ選挙に行こう2014/12/13(土) 18:07:33.37ID:wupMBGRm
Rubyとかgemコマンドの使い方がわかりません。

本には、次のように書かれています。

「試しに、Rubyのソースからクラスやメソッドの構成を参照するrdefsというgemパッケージを検索してみましょう。

% gem search rdefs

*** REMOTE GEMS ***

rdefs (0.0.2)」

これをやってみようと、最初に試みたのは、
Rubyと書いてあるやつをダブルクリックしてコマンドプロンプトっぽい黒いやつが出てきたところで
「% gem search rdefs」と打ち込むことで、これはエンターを押した直後に一瞬で消えてしまいました。

次に、Rubyコマンドプロンプトの方でやってみましたが、
「% gem search rdefs」と打ったら失敗(『'%'は、内部コマンドまたは外部コマンド...』のエラー)して、
「gem search rdefs」と打ったらちゃんと「*** REMOTE GEMS ***」が出ました。
(でも、rdefs (0.0.2)は出てこなかった)

疑問はいろいろありますが、特に次がわかりません。
1.「% gem search rdefs」はどこに打ち込めばいいのか?
2.コマンドプロンプトでは"%"を除外しないとうまくいかなかったっぽいが、"%"とはどういう存在なのか?
3.結局、正しく「gemパッケージをインストール」するにはどうすればいいのか

お願いします。
0004名無しさん@そうだ選挙に行こう2014/12/13(土) 18:33:39.73ID:cDWMVZ6e
>>3
1. コマンドプロンプト
2. '%' はコマンドを打ち込むことを表すことが多い。'>' が使われることもある
 したがって実際に実行させる場合は '%' や '>' は省略しなければならない
3. gem install <gem名>
0005名無しさん@そうだ選挙に行こう2014/12/13(土) 19:16:06.90ID:qpx34oJT
>>4
ありがとうございます!
0006名無しさん@そうだ選挙に行こう2014/12/13(土) 19:30:49.35ID:gn9mQ4CY
前のスレで、ファイルの最終行を消す方法を伺った者です
truncateを使うことにしました!
回答どうもありがとうございました
0007デフォルトの名無しさん2014/12/14(日) 21:58:28.43ID:8U4w7i4K
Rubyで無名ブロック作って即時実行することはできるのでしょうか


JavaScriptにおける(function(){})()みたいなやつです
0008デフォルトの名無しさん2014/12/14(日) 22:05:37.58ID:ivAaTykD
Proc.new {|x| x+1}.call 1
0009デフォルトの名無しさん2014/12/14(日) 22:53:18.03ID:igCzp+zo
ラムダでいいじゃん
->(x){x+1}[1]
0010名前は開発中のものです。2014/12/14(日) 22:59:57.18ID:Jnvv+4N5
ハァ・・・最近忙しくてruby触ってないお・・・(´・ω・`)
ruby触りたい・・・
せっかくある程度身に付いたのに身に付いたばかりで触る時間減ると
また忘れていく・・・
0011デフォルトの名無しさん2014/12/14(日) 23:33:15.46ID:8U4w7i4K
>>8-9
有難うございました
0012デフォルトの名無しさん2014/12/15(月) 10:05:50.58ID:X5+DHKvY
>>6
自分がレスしといてなんだけどイリーガル系全然考慮してないよ
今更だけど注意しといてくれ
0013デフォルトの名無しさん2014/12/15(月) 17:40:49.57ID:kTAaEB1y
>>12
ご指摘ありがとうございます。
私の用途の範疇では件の方法で大丈夫でしたが、注意しておきたいと思います。
0014デフォルトの名無しさん2014/12/16(火) 09:04:06.25ID:lqhDdyeK
>>12
イリーガル=非合法。
イレギュラーの間違いでは?
0015デフォルトの名無しさん2014/12/16(火) 12:49:34.17ID:vHDhcsvC
Illegal Function Call
視点によっては間違ってない
0016デフォルトの名無しさん2014/12/16(火) 12:54:30.91ID:e7BH2hjc
懐かしいエラーメッセージだが、単にその英語が間違ってたのではないかという気もするw
0017デフォルトの名無しさん2014/12/16(火) 20:26:18.61ID:/G1f9edX
rubyの初期で入ってる暗号化ライブラリってRESERVEDも実際と違ったりするし使うのやめたほうがいいですか?
例えばbase64やRFC〜とか
0018デフォルトの名無しさん2014/12/16(火) 23:02:53.13ID:e7BH2hjc
base64は暗号化ではないし、全体として何を言おうとしてるのかすらわからない。
0019デフォルトの名無しさん2014/12/17(水) 21:30:01.70ID:BeU/9l9q
今年もクリスマスに何かあるんです?
0020デフォルトの名無しさん2014/12/17(水) 21:34:53.72ID:lhoaDEbV
>>19
Ruby 2.2 が(多分)でる
0021デフォルトの名無しさん2014/12/18(木) 09:57:24.52ID:wFynChwC
あるサイトの画像を集めていて、年齢確認がでる場合(画像がR-18)とでない場合のページが存在するのですが
年齢確認がある場合、年齢確認と確認後のurlが同一なためopen-uriで開いても年齢確認ページのソースを取得してしまい困っています
回避する方法はあるのでしょうか?
0022デフォルトの名無しさん2014/12/18(木) 19:25:53.72ID:lnYTNFCY
Object.new.to_s #=> "#<Object:0x1234567>"
の0x1234567って何を意味しているんですか?
object_idとも思いましたが違うようです
0023デフォルトの名無しさん2014/12/18(木) 20:03:07.94ID:siOJVJ1k
object_id*2っぽいかな?
なぜその値なのかは知らん
0024デフォルトの名無しさん2014/12/18(木) 21:07:14.04ID:48UW7eHV
http://i.loveruby.net/ja/rhg/book/object.html
でいうところのVALUE
0025デフォルトの名無しさん2014/12/18(木) 21:24:27.11ID:nUQSuv6d
なるほど、勉強になるなぁ
0026デフォルトの名無しさん2014/12/18(木) 21:57:20.80ID:wCefEqGM
>>21
クッキーだろ
0027デフォルトの名無しさん2014/12/19(金) 23:48:25.45ID:Ak6+g1yP
Rubyリファレンスマニュアル chm版リミックス
のスムーススクロールの機能って邪魔なだけじゃない?
あれで移動すると戻るボタンが機能しないからメソッド一覧からいろいろ飛んで戻ってってすごいやりにくい
手元ではchm再コンパイルして機能削除したやつ作ったけど
0028デフォルトの名無しさん2014/12/20(土) 07:16:59.37ID:dWuhsWfV
>>21
もしURLの最後に、クエリ情報をつけ足して、
認証前後のURLを変えると、
いつも認証せずに認証後のページに、アクセスできてしまう

ttp://〜?キー1=値1&キー2=値2&〜

それを避けるため、毎回認証させるように、
例えばPHPなら、PEAR::Authというライブラリで、フォーム認証する

ただし、同一セッション間では、再認証がいらないように、
クッキーとか、フォームの隠しフィールドに、
値を入れているのだろう
0029デフォルトの名無しさん2014/12/20(土) 16:40:35.14ID:lEZ+5INX
クラスを定義しているファイルを実行するとメソッドが呼ばれて実行されるのはどうして?インスタンス化してないのに。
0030デフォルトの名無しさん2014/12/20(土) 19:55:34.17ID:KBX+SOS/
そこらへんはメタプログラミングRubyって本にこってり書いてある
0031デフォルトの名無しさん2014/12/20(土) 23:49:49.62ID:B5CT9989
>>26 >>28
ありがとうございます、解決できました
0032デフォルトの名無しさん2014/12/21(日) 17:53:16.95ID:HnwskcxI
初歩的な質問で申し訳ありませんがお願いします
gem install nokogiri が失敗します
OSはwindows8.1でRubyは2.0.0p481です
エラーメッセージは以下の通りです

ERROR: Could not find a valid gem 'nokogiri' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect retur
ned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (
https://rubygems.org/latest_specs.4.8.gz)

原因または解決方法が分かる方がいたら教えてください
0033デフォルトの名無しさん2014/12/21(日) 21:26:50.73ID:XFFvzADQ
Windowsでgem installするとSSLエラーが出る場合の解決策
http://qiita.com/shimoju/items/394818b4989b94680aaf
0034デフォルトの名無しさん2014/12/21(日) 23:24:06.42ID:OZE/nfT+
File.open("hoge.txt","wb"){|file|
file.write 0
}

上の
バイナリモードの書き込み(wb)とそうじゃないの(w)
でhoge.txtを出力したんすが、まったく同じでした。
結局バイナリモードってなんですが?
いろいろ見たけどよくわかりませんでした。
0035デフォルトの名無しさん2014/12/21(日) 23:53:39.57ID:NfmN1Wug
"n"を出力すれば分かるだろ
Windowsじゃなきゃ関係ないよ
0036デフォルトの名無しさん2014/12/21(日) 23:55:59.18ID:NfmN1Wug
"\n"だった
0037デフォルトの名無しさん2014/12/21(日) 23:57:45.70ID:HnwskcxI
>>33
おかげさまでSSL通信のエラーは解決しました。ありがとうございます。

ただNokogiriのインストールに関してはその後も山ほどエラーが出たので
最終的にはビルド済みのバイナリーファイルをダウンロードしてそのままインストールしました
0038デフォルトの名無しさん2014/12/22(月) 21:46:18.28ID:QU4NlpEK
REXMLで、ファイルを読んでくれないのですが、どうすればよいでしょうか。
xmlファイルは、アプリケーションと同じファイルフォルダにあります。
doc = REXML::Document.new("a.xml")

次の方法だと、エラーになります。
doc = REXML::Document.new(File.new("a.xml"))

rexml.rb:4:in `initialize': No such file or directory @ rb_sysopen - a.xml(Errno::ENOENT)
from rexml.rb:4:in `new'
from rexml.rb:4:in `<main>'
0039デフォルトの名無しさん2014/12/22(月) 22:06:46.38ID:+y3wtk/E
エラーのとおり、a.xml というファイルが読めてない
実行時のカレントディレクトリにあることを確認すべし
0040デフォルトの名無しさん2014/12/22(月) 22:07:56.12ID:wGmzBE1B
>>38
再現するための最小のスクリプトください
0041デフォルトの名無しさん2014/12/22(月) 22:28:16.24ID:DFOZol/g
絶対パス名か実行時のカレントディレクトリからの相対パス名を指定
若しくはa.xmlがあるディレクトリに移動
0042デフォルトの名無しさん2014/12/23(火) 06:15:39.85ID:Wq4N9ufp
みなさん、レス有難うございます。
こんな感じです。

require 'rexml/document'
doc = REXML::Document.new(File.new("a.xml"))
ZZZ = Struct.new(:aaa, :bbb, :ccc)
zzzs = REXML::XPath.match(doc,"/yyy/zzz").map do |zzz|
aaa_element = zzz.elements["AAA"]
aaa = aaa_element ? aaa_element.text : nil
bbb_element = zzz.elements["BBB"]
bbb = bbb_element ? bbb_element.text : nil
ccc_element = zzz.elements["CCC"]
ccc = ccc_element ? ccc_element.text : nil
end

いくつかのサイトを参考にしてみたのですが、うまくいきませんでした。
http://docs.ruby-lang.org/ja/2.1.0/library/rexml=2fdocument.html
http://d.hatena.ne.jp/aoi_273/20090311/1236764850
http://k-shogo.github.io/article/2013/09/03/ruby-xml/
0043デフォルトの名無しさん2014/12/23(火) 06:41:07.77ID:Wq4N9ufp
解決しました。
「カレントディレクトリ」を「Ruby interpreter」が置いてあるフォルダのことだと勘違いしていました。
書いたプログラムのあるフォルダに移動したら動きました。

初心者過ぎてすみません。
0044デフォルトの名無しさん2014/12/24(水) 10:44:21.44ID:cuUtxhMJ
ある変数vに対して、:vや'v'からその値を取得したいのですが、
eval('v')のようにする以外に何か方法はあるでしょうか?
0045デフォルトの名無しさん2014/12/24(水) 13:40:07.76ID:kEZAS2wh
http://docs.ruby-lang.org/ja/2.1.0/class/Binding.html#I_LOCAL_VARIABLE_GET
0046デフォルトの名無しさん2014/12/24(水) 14:23:58.90ID:cuUtxhMJ
>>45
ありがとうございます!
0047デフォルトの名無しさん2014/12/24(水) 14:46:08.90ID:ioNhDOiv
順列ではなく、同じ組合せを判定できる関数ってある?
もし無ければ、要素をソートしてから比べるけど

集合(set)では、同じ要素を持てないため、
同じ要素を持てるもので

[1,2,2] == [2,1,2]
[1,2,2] != [1,2,2,3]
0048デフォルトの名無しさん2014/12/24(水) 18:32:20.60ID:4+blJEbJ
ない
0049デフォルトの名無しさん2014/12/24(水) 19:24:33.39ID:kde12yWR
要素の値をキー、出現数を値としたハッシュで数えたら?
それならO(n)だからソートより速いでしょ
0050デフォルトの名無しさん2014/12/24(水) 22:01:27.51ID:kEZAS2wh
https://rubygems.org/gems/multiset
0051デフォルトの名無しさん2014/12/24(水) 22:50:49.52ID:kde12yWR
そんなくだらないことにわざわざgemを使うな
際限なく依存関係が増えて無茶苦茶になる
0052デフォルトの名無しさん2014/12/24(水) 22:54:40.10ID:ZFXquuAL
そんなあなたにbundler
0053472014/12/25(木) 18:03:50.49ID:GZxGVqty
multiset(多重集合)の機能の説明はどこにあるの?
H.Hiro は日本人?日本語の説明はどこ?

[1,2,2] == [2,1,2]
簡単にこういう感じで、比較できない?
0054472014/12/25(木) 18:20:34.69ID:GZxGVqty
Ruby用 多重集合(マルチセット)ライブラリ
ttp://maraigue.hhiro.net/multiset/

Multisetの逆引きリファレンス
ttp://maraigue.hhiro.net/multiset/reverseref.ja.html#s26

ここに日本語の説明があった
== で比較できる
0055デフォルトの名無しさん2014/12/25(木) 20:25:03.94ID:30SwzOSe
n要素の配列から取り出せる部分列全パターン(計2**nパターン)を列挙したいんですが
何かいい単純な書き方がありますでしょうか?

今のところ以下のように、
何かを出してから足し合わせたりと1段間に処理を挟むような考え方でしか出せていません

a=[1,2,3]
n=a.size

p (0..n).flat_map{|i|a.combination(i).to_a}
#=> [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

p (0..2**n-1).map{|i|a.select.with_index{|j,k|2**k&i>0}}
#=> [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
0056デフォルトの名無しさん2014/12/25(木) 22:09:01.66ID:lIYOW+qd
スクレイピングをするときの目印(タグ)は、どうやって見つければいいんでしょうか。
サンプルコード見るとうまく切り出してあるのですが、ブラウザでソースを表示させても全然わかりません。
0057デフォルトの名無しさん2014/12/25(木) 22:35:42.38ID:EJcNEjL/
XPathじゃね?
0058デフォルトの名無しさん2014/12/25(木) 22:40:28.35ID:dAMLPR9k
>>56
idが付いてる近くの要素からXPathで相対指定
0059デフォルトの名無しさん2014/12/25(木) 22:41:03.06ID:/SHsWe6V
nokogiriでも使ってんの?
0060デフォルトの名無しさん2014/12/25(木) 23:37:56.28ID:6x6Injm4
>>55
powersetで調べてみたが、多分無い
a.inject([[]]){|i, j|i+i.map{|k|k+[j]}}
0061デフォルトの名無しさん2014/12/26(金) 07:02:56.94ID:abtjB2iM
>>57->>59
ありがとうございます。
nokogiriを使っています。
XPathについて調べてみます。
0062デフォルトの名無しさん2014/12/26(金) 07:08:18.74ID:exs6NRdc
>>61
https://getfirebug.com/html
他のブラウザも似たような機能があるはず
Rubyに直接関係ないから他に投げたほうがよかったかも
0063デフォルトの名無しさん2014/12/26(金) 07:21:16.94ID:uiZ6TSzq
>>56
<tag id="~">
<tag class="~">

idはそのページの中の、ある部分をピンポイントに指定するためにつけられるので、
ある特定部分だけ切り出すときにはidが目印に使える。
classはそのページの中で繰り返しあらわれる部分をまとめて指定するためにつけられるので、
繰り返しあらわれる部分をすべて抜き出すときにclassが使える。

ただしすべてのサイトがidやclassを使っているとは限らないので、
そういうときはソースにつけられたコメント部分を目印にしたり、
本文部分の特徴的な言葉や、本文の言葉とタグの組み合わせを目印に抜き出したりもする。

以上は正規表現等を使って自分で切り出す場合の基本的な考え方です。
要はプログラムが判断できる特徴的なパターンを見つけられるか、
また繰り返し使う場合はそれに加えて変化のないパターンを見つけられるか、です。
006456=612014/12/26(金) 08:13:14.79ID:abtjB2iM
>>62
おぉ、見やすいです。
ソースを表示させる方法がわからなくて、Chrome入れて使っていたところです。

>Rubyに直接関係ないから他に投げたほうがよかったかも

すいません。
「プログラミング」と「Webプログラミング」の区別もついていないので。。。

>>63
ありがとうございます。
やっぱり人力なんですね。
まずはニュースサイトで試してみます。
0065デフォルトの名無しさん2014/12/26(金) 09:58:24.25ID:exs6NRdc
>>64
ソースを整形して表示してくれるだけのものじゃない
画面上のオブジェクトがHTMLのどの要素に該当するかとか
その要素へのXPathやCSSセレクタも調べられる
わけわかんなければ最低でもHTMLとCSSはやったほうがいいよ
0066デフォルトの名無しさん2014/12/26(金) 10:20:05.28ID:4oEvTEY8
nokogiri のチュートリアルはけっこう分かりやすかったはず。
xpath とかcss による選択はあれを地道にやるのが一番早道と思う。
http://www.nokogiri.org/
正規表現でやるのは、この場合、苦しい・・・
0067デフォルトの名無しさん2014/12/26(金) 13:52:30.12ID:5vBQJBUk
>>60
ありがとうございます
これ元が集合なら冪集合(powerset)っていうんですね勉強になりました
提案のコードも2**nになってるのが分かりやすそうなので参考にさせていただきます
0068デフォルトの名無しさん2014/12/26(金) 13:56:53.41ID:+ZEo3HL0
gem listで
bundler (1.7.9, 1.7.2, 1.6.1)
みたいに複数のバージョンが表示されたんですけどなぜですか?
最新のバージョンのみあればいいんですけどどうしたらいいんですか?
0069デフォルトの名無しさん2014/12/26(金) 14:40:55.61ID:abtjB2iM
ありがとうございます。
1個だけですが、Yahoo!のニュースの記事を読むことができました。

>>65
なんか、firebugの凄さがわかってきた気がします。
メイン画面のカーソルとリンクしているから目印も見つけやすいんですね。

あと、HTMLとCSSは、codecademyで一通りやってみました。

>>66
チュートリアルの英語は簡単そうですが、プログラミングの素養がないと読むのが難しそうです。
0070デフォルトの名無しさん2014/12/26(金) 21:14:00.65ID:5tJd12mY
>>68
gem uninstall でバージョン指定して消せばいい
0071デフォルトの名無しさん2014/12/26(金) 23:48:23.09ID:5vBQJBUk
最新があればいいならgem cleanupでいい
0072デフォルトの名無しさん2014/12/27(土) 14:44:36.68ID:bemsRSfW
str = "0123456789"
str.gsub(/\d/){|i|
???? if i == '7'
i*2
}
0073デフォルトの名無しさん2014/12/27(土) 14:52:07.92ID:bemsRSfW
すみません>>72は投稿ミスです。
ブロックの処理を途中で終わらせてしまうことってできないでしょうか?
下の例で、 next if i > '6' などとせずに、なおかつ i == '7' の時にブロックの処理を終了させて
str == "024681012" となるようにしたいんです。
breakに何か良い引数を与えられればできそうなんですが……。
str = "0123456789"
str.gsub!(/\d/){|i|
 ???? if i == '7'
 i*2
}
0074デフォルトの名無しさん2014/12/27(土) 15:00:31.01ID:bemsRSfW
どうでもいいミスなんですが
>>73の i*2 は i.to_i*2 でしたorz
0075デフォルトの名無しさん2014/12/27(土) 15:12:46.01ID:/8XYRH5a
>>70
>>71
gem cleanupしても消えてないgem
bigdecimal (1.2.5, 1.2.4)
minitest (5.5.0, 4.7.5)
rake (10.4.2, 10.1.0)
rdoc (4.2.0, 4.1.0)
test-unit (3.0.8, 2.1.1.0)
これらはバージョンを指定して消したら消せますけど、cleanupで消えなかったのには重要なものであり消さないほうがいいから消えてないのでしょうか?
0076デフォルトの名無しさん2014/12/27(土) 15:49:18.59ID:tc//XukK
>>73
subやgsubのブロックは正規表現の闇をなんとかするために仕方なく導入されたので、
いわゆる繰り返しブロックとは使われ方が違う
そしてその使われ方をきちんと勉強すればどうすればいいのかわかるはず

irb> str = "0123456789"
irb> p str.gsub(/\d/){|s| i=s.to_i; if i < 7 then (i*2).to_s else '' end}
"024681012"
0077デフォルトの名無しさん2014/12/27(土) 16:43:56.59ID:Ot9S3ylY
>>75
そいつらは Ruby をインストールしたときにデフォルトで入ってる gem だな
0078デフォルトの名無しさん2014/12/27(土) 20:00:20.18ID:LBkOC5Ta
>>74
これじゃあかんか?

"0123456789".scan(/\G[^7]/){|s|p s.to_i*2}
or
"0123456789".scan(/\G[^7]/).map{|s|s.to_i*2}.join
0079デフォルトの名無しさん2014/12/28(日) 12:15:55.82ID:8XwUHTCv
>>76 >>78
ありがとうございます!
\Gなんてメタ文字知りませんでした。
これでうまくできそうです。
0080デフォルトの名無しさん2014/12/28(日) 19:00:20.64ID:EhJlAFnh
\Gなんて使ってるのは見たことないんですがどういう時に使うものなのか何かサンプルはありませんか?
0081デフォルトの名無しさん2014/12/28(日) 19:08:58.77ID:0BcgJOIK
>>80
1.8.7になっちゃいますが、ここにありますよ
http://docs.ruby-lang.org/ja/1.8.7/doc/spec=2fregexp.html#regexp
あとこことかも
http://magazine.rubyist.net/?0020-BundledLibraries
0082デフォルトの名無しさん2014/12/28(日) 19:17:55.56ID:EhJlAFnh
/ab./gみたいなのは分かってたんですが、\Gが(式形式で)使われてるのは見たことなかったです。
るびまの記事ですか。
読み応えあるんですが、目次の列挙や概説だけだと必要な検索が出来ず必要な記事が得られないんで、結局チェックしてないし購読もしてなかったです。
0083デフォルトの名無しさん2014/12/29(月) 10:21:21.48ID:ewjsxoFu
ネット上のサンプルコードを参考にして、アマゾンのランキングを取得してみたのですが、1位から4位で止まってしまいます。
どこが間違っているのでしょうか?

require 'open-uri'
require 'nokogiri'
require 'sqlite3'
db = SQLite3::Database.new('books.db')
db.execute('DROP TABLE amazon')
db.execute('CREATE TABLE IF NOT EXISTS amazon (title varchar(200), auther varchar(100));')
url = "http://www.amazon.co.jp/(ランキング)"
user_agent = 'Chrome'
charset = nil
html = open(url, "User-Agent" => user_agent) do |f|
charset = f.charset
f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath("/html/body/div[1]/div[2]/div[4]/div[2]/div/div[2]/div/ul/li/div/div/div/div[2]/div[1]").each do |title|
puts title.xpath("a/h2").text
puts title.xpath("div/span[2]").text
db.execute 'INSERT INTO amazon values ( ?, ? );', ["#{title.xpath("a/h2").text}", "#{title.xpath("div/span[2]").text}"]
end

Webスクレイピングを用いたデータ検索クローラ構築入門
(アドレスが長すぎるため省略)
0084デフォルトの名無しさん2014/12/29(月) 10:34:41.21ID:QBEoZzS/
実際のページのURLがわからないと答えられないよ
0085デフォルトの名無しさん2014/12/29(月) 11:02:05.88ID:ewjsxoFu
>>84
すみません。長すぎてエラーになったので削りました。
アマゾン、キンドル、無料、洋書、英語のランキングです。
「Amazon.co.jp: 無料本: Kindleストア」で検索
→「 Kindle洋書 (22,870) 」
→「Language (言語):英語(English)」のリストです。
0086デフォルトの名無しさん2014/12/29(月) 12:08:46.32ID:oVO4sOnA
>>83
サンプルが最小サンプルでないので、クラクラしそう。
とりあえず、db部分コメントアウトしてして、
処理を puts title.xpath("a/h2").text の部分だけ残して
それだけうまく動作するかまずやってみては?
0087デフォルトの名無しさん2014/12/29(月) 12:15:01.97ID:tirsBVZi
>>83
>/html/body/div[1]/div[2]/div[4]/div[2]/div/div[2]/div/ul/li/div/div/div/div[2]/div[1]
さすがにこれはHTMLのデザインの詳細に依存しすぎだろ
ブラウザのデバッガ使ったのかもしれないけど、
勉強せずに目的を達成したいだけならkimonoでも使えば?
0088デフォルトの名無しさん2014/12/29(月) 12:21:17.37ID:QBEoZzS/
>>83
1. open-uriでHTMLを取得してテスト
2. nokogiriで目的の情報を抽出してテスト
3. 1と2が正しく書けたらデータベースに保存してテスト

と分けてやらないとどこがまずいのかわからない
というわけで2だけ書くと

require 'nokogiri'

doc = Nokogiri::HTML.parse(open(ARGV[0]))
doc.css("li[id^=result]").each_with_index do |li, rank|
 rank += 1
 title = li.at_css("a[title]")["title"]
 author = li.at_css("div[class*=a-spacing-none]").text
 puts "rank: #{rank}"
 puts "title: #{title}"
 puts "author: #{author}"
 puts
end

----

$ ruby amazon.rb tmp.html
rank: 1
title: Salads To Go (English Edition)
author: Arnel Ricafranca、 Jesse Vince-Cruz
...
rank: 16
title: Oliver Twist
author: Charles Dickens
0089デフォルトの名無しさん2014/12/29(月) 14:52:52.86ID:ewjsxoFu
>>86-88
ありがとうございます。

86さんのアドバイスに従ってコメントアウトしてみると、データの取得ができていませんでした。
88さんのcssに代えたら全部取得出来ました。

87さんの仰るとおり、自分でも長すぎるなぁとは思っていたので、これからkimonoを試してみます。
0090デフォルトの名無しさん2014/12/30(火) 01:59:12.31ID:RRcZT/Fu
[名前] タイトル.zip というファイルから、 名前 というフォルダーを作り、
作ったフォルダーにファイルを移動するスクリプトを作りたいです

フォルダーを作るまではできたのですが、
File.move(file, $1)
の部分が動きません

アドバイスいただけないでしょか? お願いします

Windows7
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]

my_dir = "D:/Desktop/tmp/"
Dir.chdir(my_dir)
Dir.foreach('.') do |file|
if File.file?(file)
file =~ /\[(.*?)\]/
unless $1.nil?
unless Dir.exist?($1)
Dir.mkdir($1)
end
File.move(file, $1)
end
end
end
0091デフォルトの名無しさん2014/12/30(火) 02:19:33.25ID:+3NH/drr
>>90
エラー貼らなきゃ
File.moveじゃなくてrequire 'fileutils'してからFileUtils.mv
0092デフォルトの名無しさん2014/12/30(火) 10:56:45.60ID:eF/E6diu
Ruby2.1.5でGUIを作りたいのですが、どのツールが一番初心者向きですか。
少し調べたところでは、
Ruby/Tk
 ・日本語の解説が充実
 ・Tcl/Tk8.6の対応パッチが2.1.3までしかない
Shoes
 ・なんかかっこいい
 ・日本語の解説が少ない
wxRuby
・難しそう
0093デフォルトの名無しさん2014/12/30(火) 11:19:36.39ID:dxBK7ujR
>>92
Python
RubyでGUI作るならサーバー立ててWebベース一択
0094デフォルトの名無しさん2014/12/30(火) 16:41:39.40ID:RRcZT/Fu
>>91
エラーコードがなかったですね、すいません
教えていただいた修正でうまく動きました
ありがとうございました!
0095デフォルトの名無しさん2014/12/30(火) 17:39:46.79ID:k+HJ9cRI
>>92
RubyでGUIという時点で初心者向きではない
PythonもGILがあるのでちょっと複雑化すると詰まる
実はPerlが一番素直なのかもしれない
0096デフォルトの名無しさん2014/12/30(火) 18:20:21.32ID:UE3DpMfR
>>92
ruby付属のwebrick サーバーでcgi がいいかも。ホントは
Sinatra がよさげなんだけど、いいガイドとなる文書がなさげ。
オライリージャパンにepub の本が売ってるようだが、内容は知らない。
rails は重量級すぎるという前に、規約ならなんやらでものすごく難しい。
0097デフォルトの名無しさん2014/12/30(火) 18:41:27.01ID:+3NH/drr
Sinatraはチュートリアルが日本語化されてるよ
オライリーから出てる本の内容はそのチュートリアルがベースで
下層のRaccの説明とブログツールの作成が加筆されてる
0098デフォルトの名無しさん2014/12/30(火) 19:12:08.34ID:UE3DpMfR
>>97
ああ、そうなんだ。勉強になった。
rails もう挫折したので(覚えることあまりに多すぎ)、Sinatra に挑戦しよう。
0099デフォルトの名無しさん2014/12/30(火) 19:20:52.56ID:lUNz8ksh
xwRubyはそう難しくはないが元々設計の古臭いMFCの代替として
作られただけあってRubyらしくない。
どうがんばってもC++の機械翻訳みたいなコードになっちまう。
もっとRubyらしい黒魔術的なGUIライブラリの登場を期待しちまうぜ。
0100デフォルトの名無しさん2014/12/30(火) 19:43:36.78ID:FhLkhhfT
ホントに「全力で」GUIもシームレスにできるオブジェクト指向言語にするとJavaになる
悲しいけれどこれが現実
GUIはやらなければならないことや背負わなければならないことがあまりに多い
GUIを捨てたからこそPerlやPythonやRubyは今のかたちになり得た
0101デフォルトの名無しさん2014/12/30(火) 19:55:13.04ID:+3NH/drr
先生PythonのGUIツールキットは捨てられてません
0102デフォルトの名無しさん2014/12/30(火) 19:55:21.23ID:UE3DpMfR
>>100
java のデスクトップだって半ば以上、死んでますがなwww
swingは死亡だし、javaFXなんぞどこかで使われてる?
cgi (やSinatra)は付属のwebrick 使う限りruby で完結できるし、
簡易のデスクトップGUI になると思うよ。
0103デフォルトの名無しさん2014/12/30(火) 21:27:55.01ID:dxBK7ujR
JavaでGUI作るときのリスナ地獄はお世辞にもスマートとは言えないだろ
そして苦労して作り上げてもあの品質…
Javaのawtやswingの設計が変なだけで、GUIってシングルスレッドでも十分だから
スクリプト言語だからダメってわけじゃない
GUIはどうせRAD必須だから言語の手軽さより静的解析の容易さの方が重要なのと
サーバーと違ってさくっとコード差し替えたいという要件もないから使われないだけ
0104デフォルトの名無しさん2014/12/31(水) 13:04:25.59ID:6ri8I8c2
92です。
アドバイス有難うございました。
とりあえずPython2をやってみようと思います。
0105デフォルトの名無しさん2015/01/01(木) 04:15:45.81ID:i/B8D+Dj
素直にVisual Studio Professional 2013使え
0106デフォルトの名無しさん2015/01/02(金) 13:12:07.71ID:0wQ6/mod
ActiveSctiprRubyとHTAで作れば楽じゃねと考えていた時代は俺の黒歴史。
0107デフォルトの名無しさん2015/01/02(金) 14:01:10.86ID:UoXQYS7H
WindowsでRubyを使うこと自体が地獄だからな
Winなら無理にスクリプト使うよりVC#でも使ったほうが遥かに楽
0108デフォルトの名無しさん2015/01/02(金) 14:22:53.44ID:yFH6oi7y
>>106
初めて知ったときなんて素晴らしいものがあるんだろうと思った
0109デフォルトの名無しさん2015/01/02(金) 15:37:29.99ID:wtvUITab
HTAとかWindows限定じゃん
0110デフォルトの名無しさん2015/01/03(土) 08:29:43.66ID:+Bjd+Vio
Ruby開発者が使わないので「RubySpec」開発終了
http://www.softantenna.com/wp/unknown/ruby-spec-end/

>RubySpecの開発者Brian Shirai氏はブログ記事「Matz’s Ruby Developers Don’t Use
> RubySpec and It’s Hurting Ruby」にてプロジェクトが終了する理由を説明。2014年12月25日に
>リリースされたRuby 2.2.0がRubySpecのテストをパスせず、そればかりか深刻なエラーである
>セグメンテーションフォールトで異常終了すると指摘し、これはMRI (いわゆる本家Ruby)の
>開発者がRubySpecを使ってテストすれば容易に避けられることだとしています。
0111名前は開発中のものです。2015/01/03(土) 12:19:48.94ID:ABCE5tDX
ハァ・・・
いまだにまともに使えるデバッガが見つからない・・・
まぁ趣味で使ってるだけだからprintデバッグでもいいんだけどさ・・・
0112デフォルトの名無しさん2015/01/03(土) 12:29:19.76ID:ZfusUSn5
p 使えよ、p
それで手におえなきゃ pp
0113デフォルトの名無しさん2015/01/03(土) 12:54:00.29ID:ZfusUSn5
うちの jrubyの場合、
sample.rbがあったとして
jruby -r debug sample.rb
でデバッガ立ち上がるよ。頭のj とって
ruby -r debug sample.rb
でデバッガ立ち上がらない?
$ ruby -r debug sample.rb
...
(rdb:1)

のところでhelp でhelp 出るが。
しかし、デバッガいる? めんどいだけだよ。
0114デフォルトの名無しさん2015/01/03(土) 13:16:22.01ID:hr4W0lJF
事後的なデバッガよりも、事前的なテストに比重が移っているんじゃね。
俺は minitest/unit しか使わないけど、プロの人たちが使うテスト環境
が進化している印象があるよ。
0115デフォルトの名無しさん2015/01/03(土) 14:09:49.31ID:ZfusUSn5
>>114
スタブとかモックの仕様をコロコロ変えやがって、
頭にこない?
結局、alias_method とかでメソッド名一時的に付け替えたりしてから、
元の名で中身再定義してテスト、
そのあとメソッド名戻し、とかやったりしてみるけど、
なんなんだよって感じ。
rspec とかも、特定の外国語書かせちゃダメだろっての。
日本語でrspec 書くとかいう話になったら、もう狂ってるとしか。

結局、minitest/unit が言葉に異存してなくて一番いいかなって思うのに、
スタブとかモックとか、ころころ意味もなくどんどんやり方変えて、
いまはもう、メソッド名付け替えでやるヒドイやり方しか分からん。
なんでこんなに意味なく仕様を変えるのか。ぜんぜん分からん。
0116デフォルトの名無しさん2015/01/03(土) 14:23:23.94ID:RGN7nsRn
rakeとrspecでDSLの風体が異なるのも実に気持ち悪い
0117デフォルトの名無しさん2015/01/04(日) 12:03:20.47ID:+rZjO+Yw
RubySpec開発者の外人って何であんなにキレてんの?
0118デフォルトの名無しさん2015/01/04(日) 12:04:00.19ID:4AdveR22
どうやらそういう体質の持ち主らしい
0119デフォルトの名無しさん2015/01/04(日) 12:18:18.48ID:+rZjO+Yw
そうなんだ素なのか
nurseがbrixen許さないとか言ってるから何かと思った
結果として軋轢が減ってハッピーだね
0120デフォルトの名無しさん2015/01/04(日) 14:51:18.14ID:uzz8isay
Rubyプログラミングのオヌヌメ参考書あったらどなたかおしえてくだせえ
0121デフォルトの名無しさん2015/01/04(日) 15:00:07.40ID:IRouHCH+
ないです
0122デフォルトの名無しさん2015/01/04(日) 15:23:09.29ID:rT0F3HRm
>>120

お勧め参考書教えてください、って、一言で言われてもナア。
0123デフォルトの名無しさん2015/01/04(日) 15:49:05.21ID:+rZjO+Yw
レベルが分からんけど本当に初歩ならドットインストールでも見てた方がいいんじゃないかと
0124デフォルトの名無しさん2015/01/04(日) 16:15:39.47ID:gY/dfetX
>>120
「たのしいRuby」
0125デフォルトの名無しさん2015/01/04(日) 18:13:58.34ID:uzz8isay
ありがとナス!
0126デフォルトの名無しさん2015/01/04(日) 20:21:08.34ID:mDqV+MlI
>>117
Rubyが予告無しの仕様可変更とかセグフォ出してるんで、Rubyspecですら分かるレベルのテストをやってないMRIに愛想が尽きたようだ。
俺も今でもRubyは好きだが、最近は仕事ではPythonを勧めてる。
0127デフォルトの名無しさん2015/01/04(日) 20:39:42.07ID:2n2BUP4o
そもそも奴等が、実装に依存した本来いつどう変わってもおかしくない振舞いをチェック
しまくってくれるもんで、MRI実装者としてもRubySpecスルーは苦渋だが仕方ない決断
だったんだが。
0128デフォルトの名無しさん2015/01/04(日) 20:45:01.08ID:x+sstHNq
>>127
それは言い訳でしょて。Java でその言い訳は通らないよ。
意図しようが意図しなかろうが、
明確に宣言した変更部分以外に動作の変更があってはならない。

当たり前の話だ。
0129デフォルトの名無しさん2015/01/04(日) 20:53:34.12ID:+rZjO+Yw
いやJavaの話を持ち出されても困るだろ
他所は他所だ
お前はOracleさんちの子じゃないんだよ
0130デフォルトの名無しさん2015/01/04(日) 20:59:05.28ID:x+sstHNq
>>129
実装次第で動作はどう変わるか分かりませんで、
世間が納得すると思ってるのか?
Ruby を採用した宇宙ロケットはどこへ向かうんだ?
実装に聞いてくれなのか???
0131デフォルトの名無しさん2015/01/04(日) 21:01:42.60ID:+rZjO+Yw
その通りだよ
君はライセンス読んでるの?
嫌ならPythonにでも行けばいいじゃないか
0132デフォルトの名無しさん2015/01/04(日) 21:02:52.49ID:+rZjO+Yw
世間から責められるべきはそんな道具選んだ人間じゃありませんか?
用途も分からない馬鹿の責任まで言語が負うんですか?
すげぇ社会だな
もはや誰も言語なんか作らんよ
0133デフォルトの名無しさん2015/01/04(日) 21:03:28.14ID:2n2BUP4o
文句があるなら今はJISなりISOなりを読んで文句言えばいいだろ。
RubySpecがもしまともなものだったら標準の意味なんて無かっただろうが、
現実ではそうではなかった、というのがRubySpecの現実。
0134デフォルトの名無しさん2015/01/04(日) 21:03:51.15ID:x+sstHNq
>>131
お前、Python使いだろ!
俺はJava 以外は信用せん。話にならん。
0135デフォルトの名無しさん2015/01/04(日) 21:05:01.27ID:+rZjO+Yw
ごめんCPythonもEULAには責任は負わないよって書いてあるね
OracleとやMSと契約してサポート付きのJavaか.NET使ってろってことだ
0136デフォルトの名無しさん2015/01/04(日) 21:07:14.65ID:d+7FYTBT
何が問題なのか初心者にもわかりやすく解説してくれはしませんか
0137デフォルトの名無しさん2015/01/04(日) 21:09:45.87ID:HG6rCP3A
本スレ使えばいいのに
0138デフォルトの名無しさん2015/01/04(日) 21:21:18.51ID:x+sstHNq
Ruby は実装次第で動作がどう変わるか分かりませんって、
そういう言い訳自体が情けなさすぎる。

プラットフォーム自体がJvm という単一環境のJava は特殊かもしれないが、
Java でそんな言い訳したら、フルボッコ間違いなしだ。
そもそも、実装次第で動作がどう変わるか分かりませんって、
具体的にはどういう事例なんだ。それにしても情けない。

どうしても動作が変わるんなら、
動作を変更しますと明確に宣言すればいい話なのに。
0139デフォルトの名無しさん2015/01/04(日) 21:38:12.71ID:x+sstHNq
要するに、
Java ならば互換性テストに通過しない限り、絶対にOKとはならない。

しかし、それがRuby ならば、
互換性テストで不合格となっても、「まあ、実装次第なので、テヘヘ」で
通ったことになってしまうということ。

要するに、互換性テストはなんの意味があるのか全然分からんという話。

それはそんな互換性テストがあるんだと、いま初めて知った。
Java の奴らに聞いてみろ。ひっくり返るだろうよ。
0140デフォルトの名無しさん2015/01/04(日) 21:41:35.75ID:x+sstHNq
Python はどうなってるんだ?
Phthon はもっとマシな状態なのか? それとも、テヘヘですんじまうのか?
0141デフォルトの名無しさん2015/01/04(日) 21:43:08.53ID:x+sstHNq
もはや、仕様がどうこうとかいう次元の問題じゃなく、
プログラミングというものに対する作法とかマナーの問題。
世間をなめてる状態。
0142デフォルトの名無しさん2015/01/04(日) 22:01:32.01ID:2n2BUP4o
だから最初からRubyなんか使うなよという話なんだが。
貴様こそ、世のプロダクトは全て手前の要求を満たすべきとか、
世の中なめすぎてる。
0143デフォルトの名無しさん2015/01/04(日) 22:02:36.75ID:x+sstHNq
なら、はじめから互換性テストなんて
作るなよ。
不合格で通す互換性テストの存在意味ってなによ!
0144デフォルトの名無しさん2015/01/04(日) 22:03:23.27ID:7tz5JoXD
本スレってどこ?
0145デフォルトの名無しさん2015/01/04(日) 22:07:17.85ID:2n2BUP4o
>>143 誰に文句言ってるのか完全にわからなくなってるだろw
0146デフォルトの名無しさん2015/01/04(日) 22:17:29.21ID:NNsAVH+s
明確に文書化されている仕様以外は実装依存でしょ。
当たり前だとおもうけど。
0147デフォルトの名無しさん2015/01/04(日) 22:17:31.27ID:F3GLovba
>>127

×)実装に依存した本来いつどう変わってもおかしくない振舞いをRubySpecがチェックしまくってた
○)MRI開発者が思いつきで仕様変更するのを片っ端からRubySpecがチェックするから都合が悪かった
0148デフォルトの名無しさん2015/01/04(日) 22:17:58.92ID:x+sstHNq
Ruby の現在のありようは、プログラミング界の常識に反している。
仕様の変更を宣言したもの以外は、仕様を変えちゃいけない。

それは出来ないという。
Java の世界でそれは出来ませんと言ったら、クビだろうな。
0149デフォルトの名無しさん2015/01/04(日) 22:40:03.64ID:x+sstHNq
>>146
お前の作ったプログラムは、
気まぐれに毎回違う答えをだすんだろう。
Ruby2.0で計算した結果は、Ruby2.1では違う値をだすかもしれん
ということだぞ。
仕様の変更を宣言したわけでもないのに。
どうなるかは、その時の気まぐれと言われているのだ。
ええかげんにせいと言っているところだ。
0150デフォルトの名無しさん2015/01/04(日) 22:58:38.12ID:ZfOt7GlQ
Rubyの安定板なんぞ誰も安定板と思っとらんだろうし
無理して追っかけなくても良いのでは。
俺んとこはまだ1.9.3だが不満なく使えておる。
ここで騒がれてることは1年後に来る変更の予告ぐらいに思っとるわ。
0151デフォルトの名無しさん2015/01/04(日) 23:01:42.40ID:x+sstHNq
俺は Ruby の互換性テストとは、Javaの互換性テストと
同じようなものと考えていた。
が、その常識はまったく通じないと知った。
Javaプログラマならひっくり返る事態なんだが、それがRubyの普通らしいwww
0152デフォルトの名無しさん2015/01/05(月) 00:21:15.47ID:Y6BCcXgq
当たり前だろう
10年遅れの言語と一緒にするな
0153デフォルトの名無しさん2015/01/05(月) 00:26:12.09ID:Y6BCcXgq
だいたいこいつも何を怒ってんだ
それで都合が悪いなら屁こいて寝てろって言われてんだろ
便秘か?多い日か?
0154デフォルトの名無しさん2015/01/05(月) 01:09:57.84ID:UWxA88jo
ママゴトみたいな開発体制とるのも自由だし
それを見て使う使わない決めるのも自由だし
そんな酷い開発体制じゃ使えないと批評するのも自由ですよ
0155デフォルトの名無しさん2015/01/05(月) 01:35:33.07ID:dcfpz3x0
RubySpecはRubyの「互換性テスト」ではないよ。
Rubyの開発者でもなんでもない人が作ったただのRubyプログラム。

Specという名前で誤解したんだと思うが、
まさにそう誤解させるためにつけられた名前。
極端に言えば、既成事実的にRubyの仕様を掌握しようとした。

RubySpecが終了したってのは、
ぶっちゃけて言えば乗っ取りを断念したというだけ。
0156デフォルトの名無しさん2015/01/05(月) 01:36:35.78ID:dcfpz3x0
RubySpecの作者の人間性については、以下が詳しい。

https://gist.github.com/nateberkopec/11dbcf0ee7f2c08450ea

例の日本語記事に「まとめ」としてリンクされてるやつだけど、
実際のところはRubySpec作者への批判ばかり。
0157デフォルトの名無しさん2015/01/05(月) 02:10:21.80ID:MXjCpp19
もういい。
プログラムに信頼性を求めるものは Rubyは避けろ。
Java が一番。無理なら Pythonでも検討しろ。

それで議論は終了。
0158デフォルトの名無しさん2015/01/05(月) 02:32:50.08ID:3qqCgoQ1
>>138
Pythonも実装依存だよ
実数型も64bitが多いとか、はっきりしない

動作するアーキテクチャが20種類ぐらいあって、
組み込み用もあるし、実装は様々
0159デフォルトの名無しさん2015/01/05(月) 02:59:15.66ID:G38O0HWv
RubySpecを一時期MRIのリリースメンテナが重要視してるようなメッセージを出したせいで
こういう勘違い野郎を生み出してしまったんだろうな
当時のリリースメンテナはMRI界でも黒歴史化されてるYuguiさんだけど
(技術力はあるのかもしれないけど、リリースメンテナとしては失格レベルと断言してもいい人だね)
0160デフォルトの名無しさん2015/01/05(月) 03:24:58.15ID:MXjCpp19
>>159
アホか。そういう次元の問題じゃないだろ。
Java をやってるヤツに聞け。

仕様変更を宣言していない機能をほいほい変更してて、
問題ないよなと。

仰天して絶句するだろうよ。
俺もJava やってるんでな。悪かったな。
0161デフォルトの名無しさん2015/01/05(月) 03:25:43.30ID:MXjCpp19
死んだ方がいいやつら、ばっかりだな。死ね
0162デフォルトの名無しさん2015/01/05(月) 03:27:40.80ID:G38O0HWv
>>160
「問題ないよな」って部分のソースは?

RubySpecで見つけられたバグはMRIに報告されれば直されてるし、MRIは仕様変更をどちらかというと
嫌ってる方なんだが

MRIがRubySpecを受け入れなかったのは別の理由でしょ
0163デフォルトの名無しさん2015/01/05(月) 03:39:59.64ID:MXjCpp19
Java の世界では、変更しますという明確な宣言がない限り、
絶対に動作が変更されることはない。

Ruby の世界では、そのような常識は通用しない。
仕様は変更の宣言なくして、そのときの気分で変更される。

それがいまここにハッキリした。
0164デフォルトの名無しさん2015/01/05(月) 03:41:34.41ID:G38O0HWv
>>163
> それがいまここにハッキリした。

嘘乙

Rubyでも意図しない仕様変更はバグだよ
バグは報告されれば直される
0165デフォルトの名無しさん2015/01/05(月) 06:54:11.15ID:LT7ljLaa
>>156
NokogiriのMacへのインスコで四苦八苦したので
Yorickが作ってるogaってHTML/XMLパーサが楽しみだった(過去形
0166デフォルトの名無しさん2015/01/05(月) 08:01:15.27ID:FjQWap8T
>>163
だから、Javaの世界から出てくんなよチンカス
おまえが存在するだけで世界が一割臭くなるんだよ
0167デフォルトの名無しさん2015/01/05(月) 09:30:47.32ID:gGkKjc+d
サードパーティのライブラリも過去のリリースメンテナも
使うだけ使っといて、用がなくなったら
「問題が多かった。むしろ邪魔だった」と切り捨てる

クールで素敵
0168デフォルトの名無しさん2015/01/05(月) 09:52:43.69ID:3J2GSmZ2
RubySpecについてなら「使うだけ使っといて」という表現は全く外れてるから。
disりたいだけの何も知らないド素人だというバカを晒すだけだよw
0169デフォルトの名無しさん2015/01/05(月) 10:44:58.38ID:OM1ot5X0
1.8くらいからrailsの影響で使い始めたユーザが
rubyの仕様変更っぷりに文句つけまくったから
「ちゃんと仕様チェックしますよー、しかもCRubyだけじゃなくJRuby等の処理系も含めて横断的にですよー」
ってイメージ戦略に利用されたのがRubySpecを。
ただ実際には使ってなかったんだからイメージだけの詐欺だったんだけどね。
0170デフォルトの名無しさん2015/01/05(月) 11:08:12.55ID:dcVDuqIP
そもそもmatzの趣味で始まった言語と、そもそも業務用に始まった言語を一緒くたにされてもなあ…
0171デフォルトの名無しさん2015/01/05(月) 11:19:53.97ID:FjQWap8T
そもそもMRI以外のRuby実装がMRI互換にこだわる必要性は全くない
ライブラリやフレームワークはそれぞれでテストスイートは用意してるものだし、それでパスすればいいわけ
0172デフォルトの名無しさん2015/01/05(月) 13:03:12.11ID:MXjCpp19
いいか、誰も仕様変更してはならないなどとは
言ってないんだからな。

仕様変更するなら、ちゃんと宣言してから変更してくれ、
と言ってるんだ。

だから、仕様変更するといってない部分は変更されないだろうと
期待する。
しかし、そうではなく、まあ、そのへんはテキトーに。という。

納得いくか。アホやろう!!!
0173デフォルトの名無しさん2015/01/05(月) 13:08:59.59ID:ngAfv5DN
おまいの納得なんざ誰にも担保されていない
0174デフォルトの名無しさん2015/01/05(月) 13:13:12.70ID:MXjCpp19
世間の人は、みんな Rubyから離れていくだろう。
俺はJava を使う。偉大なるJava を。
0175デフォルトの名無しさん2015/01/05(月) 13:31:40.62ID:tY3Eiv8l
そもそもRubyにはISO以上の仕様はないからなあ
0176デフォルトの名無しさん2015/01/05(月) 13:35:34.62ID:G38O0HWv
>>172
> しかし、そうではなく、まあ、そのへんはテキトーに。という。
嘘つくな

意図されない仕様変更はバグであり、バグは報告すれば修正される
これが事実
0177デフォルトの名無しさん2015/01/05(月) 14:07:37.89ID:gGkKjc+d
>>175
つまり1.8と1.9以降のどっちかでしか動かないコード書いてるやつは全員
実装依存の未定義コードかいてるアホって事だね
0178デフォルトの名無しさん2015/01/05(月) 14:12:57.56ID:X/XHMwki
実装依存はRubyのプログラミングでは常に言えることだろ
プログラマはMatzの意図を汲み取り、
なるべくその中でも安定してそうな仕様にのみ依存するように注意してコーディングすることが求められる
いかにも日本人らしい言語だね
0179デフォルトの名無しさん2015/01/05(月) 14:18:44.32ID:MXjCpp19
>>175
互換性テストこそが仕様だろうが!
なのに誰も使わないという www

文書の仕様など、後回しでいいから、まとまな互換性テストを作り、
しっかり使え。

Java は天地開闢のころからそうしていたぞ!
0180デフォルトの名無しさん2015/01/05(月) 14:25:36.92ID:MXjCpp19
CRuby の実装こそがRuby言語の仕様だという。
ならばというので、CRuby の動作を互換性テストで規定すると、
それは実装異存だとか抜かし始める。
どっちなのよ。
C言語のコードで作ったRuby の動作が仕様でないってんだなら、
Java で作りなおせや。ドアホ!
0181デフォルトの名無しさん2015/01/05(月) 14:38:07.22ID:MXjCpp19
昔はMatz が、Cのソースには仕様が全部書かれている、
バグまで規定されている、とほざいてたはずだが、
そのCのソースの動作は仕様じゃないんだとよ。
未定義なんだそうだ。
とんだお笑いだ。
0182デフォルトの名無しさん2015/01/05(月) 14:51:07.49ID:E44mn9F+
客から依頼されたシステムの開発に集中したいのに
言語のグラグラに振り回されたくないな
0183デフォルトの名無しさん2015/01/05(月) 14:51:13.91ID:gGkKjc+d
ごく最近も、何の予告も公開された議論もなく
日本人開発者が勝手に後方互換性を壊して、
何処で議論したんだよ勝手に変えんなと外国人に責められてる

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/67215
0184デフォルトの名無しさん2015/01/05(月) 15:41:05.13ID:5EG7YR71
これは酷い
0185デフォルトの名無しさん2015/01/05(月) 16:21:07.74ID:3J2GSmZ2
だったらJavaを使ってればいいのに、としか言いようがないバカを自慢して嬉しいか?
0186デフォルトの名無しさん2015/01/05(月) 16:22:09.65ID:MXjCpp19
java も使ってるよ。なにが問題なんだ。
馬鹿はRuby 使ってるお前だろ。
0187デフォルトの名無しさん2015/01/05(月) 16:49:00.76ID:dcVDuqIP
Rubyはその場でサクッと使
0188デフォルトの名無しさん2015/01/05(月) 16:51:07.63ID:dcVDuqIP
Rubyは昔からその場でサクッと使うツールだからなー
何故か仕事に使いたがる人達が居るけど
0189デフォルトの名無しさん2015/01/05(月) 17:14:52.44ID:3J2GSmZ2
「Javaは現代のCobol」って立派な褒め言葉があるじゃないか。

頭悪いんだから、その世界でおとなしくしてればいいのに、他の世界に手を出して、
結局こういうところで暴れてうさ晴らしするしか面白いことがないんだろうな、
という馬鹿さ加減をバカと言ってるんだが?
0190デフォルトの名無しさん2015/01/05(月) 17:16:20.15ID:MXjCpp19
お前ら、問題が分かってないんだって。
仕様を変えた途端、過去に書いたコードが動かなくなるかもしれない、
て意味なんだぞ。

ネット見てて、スクリプトが置いてあったとする。
それがBash じゃなくて Ruby で書かれてたときのガッカリ感分かるか?
なんでBash なら嬉しくてRuby ならガッカリなのか。
Ruby のコードは動かないことが大半だからだ。
分かるよな?
なんで動かないのか。仕様を変えたからだ。

仕様を変えること自体は、言語の進歩のために必要なことだ。
だから、それに反対するものはいない。
ただ、気まぐれや無意味な変更はやめてくれと言っているのだ。
変更するよ、と宣言してから変えてくれ、というのはそういうことだ。
0191デフォルトの名無しさん2015/01/05(月) 17:18:11.79ID:MXjCpp19
>>189
お前のような態度を、天にツバするような態度というのだ。

プログラミング界の巨人 Java に比べたら、Ruby などうたかたのようなものだ。
0192デフォルトの名無しさん2015/01/05(月) 17:18:22.62ID:RFTM0vSV
そうですか
では次の方どうぞー
0193デフォルトの名無しさん2015/01/05(月) 17:28:28.81ID:obl0akM3
何かの悪ロ言わなきゃ気が済まないのかね
0194デフォルトの名無しさん2015/01/05(月) 17:29:18.68ID:MXjCpp19
悪口って、なんの悪口よ。
事実を書いてるだけだ。
0195デフォルトの名無しさん2015/01/05(月) 17:30:56.98ID:MXjCpp19
Ruby だけ使ってるんなら、まだ許せるんだ。
これがRails も使ってみろ。
誰かを殺したくなるから。
0196デフォルトの名無しさん2015/01/05(月) 17:35:16.10ID:WxDkkAlh
>>176
人を嘘つき呼ばわりしたんだから、
「ゴメンなさい。やっぱりRubyは思い付きで仕様変更するゴミです。嘘つきは僕でした」
って謝らないとダメじゃん
0197デフォルトの名無しさん2015/01/05(月) 17:35:30.02ID:DnfimQcO
161 :デフォルトの名無しさん:2015/01/05(月) 03:25:43.30 ID:MXjCpp19
死んだ方がいいやつら、ばっかりだな。死ね
0198デフォルトの名無しさん2015/01/05(月) 17:35:40.53ID:LT7ljLaa
>>190
後方互換とセキュリティどっちがお好みですか
0199デフォルトの名無しさん2015/01/05(月) 17:36:26.68ID:FjQWap8T
威勢のいいニートだなあ
0200デフォルトの名無しさん2015/01/05(月) 17:37:56.28ID:5EG7YR71
俺も昔パッチレベル新しいの出たから入れたら非互換出たことあるわ
0201デフォルトの名無しさん2015/01/05(月) 17:39:26.11ID:ZLlYuDk8
>>195
ざまあ
さっさと自殺しろよ
0202デフォルトの名無しさん2015/01/05(月) 17:40:53.83ID:3J2GSmZ2
Javaの中でも、ちょっと環境いじっただけで途端に動かなくなるような繊細なシステム作る奴とか
居るけど、そういうのが外に出てくるとこうなるんだろうなw
0203デフォルトの名無しさん2015/01/05(月) 17:42:44.25ID:h4yXwV7R
正直、互換性が無くなるのがデフォすぎて慣れてるって所はある
だからと言って特に困らんがね
0204デフォルトの名無しさん2015/01/05(月) 17:50:45.39ID:MXjCpp19
お前らさぁ、テストの非互換とか頭に来ないのか。
モックとかスタブとか、変わったよなぁ。
ここにも書いたろ。
いちいちどうでもいいこと、ころころ変えやがって。

モックやスタブの正しいやり方、いまどうやるんだ?
alias_method でメソッド名付け替えなら分かるけどよ、

くだらことで、ごちゃごちゃ変えやがってよー。
早く教えろよ。
0205デフォルトの名無しさん2015/01/05(月) 17:54:05.23ID:h4yXwV7R
どうでもいいならどうでもいいじゃねえか
自分で言ってて奇妙な論理だとは思わないか?
0206デフォルトの名無しさん2015/01/05(月) 17:56:02.92ID:MXjCpp19
早く・・、早く教えて。お願いwww
0207デフォルトの名無しさん2015/01/05(月) 17:58:13.24ID:MXjCpp19
要するに、minitest に変わった時、
スタブやモックだけ、以前のが非互換になったんだな。
で、それからやり方知らないwww

いや、知らんでもいいんだけどさ、メソッド名付け替えでやれるからさ、
それはいいけどさ、
腹たたない? いちいちこんなとこで変えやがってよ。もう、ホントに
0208デフォルトの名無しさん2015/01/05(月) 18:02:51.61ID:YzHIHF4l
ID:MXjCpp19 (17/17)
0209デフォルトの名無しさん2015/01/05(月) 18:07:27.99ID:MXjCpp19
いいから、正しいやり方、教えろよ。
なに出し惜しみしてるんだ?
まさか、知らないんじゃないだろうな???

知ってんなら、教えろよ
0210デフォルトの名無しさん2015/01/05(月) 18:17:55.57ID:J4h7NkXr
>>195
そういうのはこちらでどうぞ。
正直RailsはRubyであってRubyじゃないし、さっさと別言語になればいいと思うの。

【RoR】Ruby on Rails Part19
http://kanae.2ch.net/test/read.cgi/php/1409423461/
0211デフォルトの名無しさん2015/01/05(月) 18:22:16.28ID:MXjCpp19
Rails はもういいんだ。あれは捨てた。
仕様変更の嵐にうんざりしたが、あれの問題はそれだけじゃない。
大規模サイトに最適化されてるのかしらんが、
そのやり方をほんの小規模のものでも要求されるんだな。
なんていうか、ほんのちょっとしたことさせるのでも、
戦艦ヤマトに駆逐艦の役回りをさせる感じというか。
Sinatra がよさげだな。
0212デフォルトの名無しさん2015/01/05(月) 21:44:19.99ID:UWxA88jo
yuguiさんの時が一番良かった

今は勘違いしたアホ共が好き勝手にぶっ壊して
非互換なんて当たり前と逆ギレする始末
0213デフォルトの名無しさん2015/01/05(月) 21:53:18.58ID:G38O0HWv
> 非互換なんて当たり前と逆ギレする始末
はいはい、嘘はもうやめようね
今のRubyでも意図しない非互換はバグだから
0214デフォルトの名無しさん2015/01/05(月) 22:04:48.23ID:YRAvaX+S
成瀬某が幅をきかせ始めた頃からさらにおかしくなった
0215デフォルトの名無しさん2015/01/05(月) 22:07:55.36ID:G38O0HWv
もしかして、こいつBrianじゃね?
RubySpecが受け入れらなかったことを根に持ってMRIを中傷しまくるという

まぁ、Brianは嘘まで交えて中傷したりはしないだろうが
0216デフォルトの名無しさん2015/01/05(月) 22:26:58.96ID:UWxA88jo
>>213
>>183の件とか、むしろ意図的に(全く合意を得ずに)非互換入れてるから
うっかりミスよりタチが悪いわ

しかし面白いよな。バグレポートしたら「It's a bug fix.」だけでリジェクトされて、
どんなバグだよって突っ込まれたら全然関係ないバグを持ち出すんだぜ
(ちなみに持ち出したバグってのは、Time.strptime が "%s %z" をパースできるのに DateTime はできないって内容)
そのバグ直すのに弄ったのは DateTime のはずなのに、何で Time.strptime のデフォルトの挙動が変わってるんだよww
頭オカシイだろ。そういうのはbugfixじゃなくて仕様変更っていうんだよ
0217デフォルトの名無しさん2015/01/05(月) 22:29:02.48ID:UWxA88jo
あ、挙動が変わったのはTime.parseだな
でも頭オカシイって結論は一緒
合意も得ずに勝手に変えんな
0218デフォルトの名無しさん2015/01/05(月) 22:29:12.31ID:5EG7YR71
> 今のRubyでも意図しない非互換はバグだから
意図したかどうか分からないのが困るんだよなあ
0219デフォルトの名無しさん2015/01/05(月) 22:44:00.06ID:c9ZlVZT1
>>214
Rubyで時々互換性が壊れることくらい知ってんだろって
メーリングリストに堂々と書いてたなw
0220デフォルトの名無しさん2015/01/05(月) 22:44:03.08ID:Y6BCcXgq
誰の合意を得ろと?お前か?
お前はどこかの国王か?
0221デフォルトの名無しさん2015/01/05(月) 22:50:48.77ID:UWxA88jo
ruby-coreとか作って外人にも公平に間口を広げてるように
見せかけてるけど、アレはただのポーズで
誰の合意も得ずに日本人だけで好き勝手に仕様変更します


これが公式見解なら何の問題もないよ
で、そうなの?
0222デフォルトの名無しさん2015/01/05(月) 22:52:47.81ID:Y6BCcXgq
公式見解じゃなくても何の問題もない
問題なんて何もありはしない
どこぞのアホが勝手に舞い上がって勝手に墜落しただけである
勝手に土に帰れ
0223デフォルトの名無しさん2015/01/05(月) 23:03:24.36ID:UWxA88jo
えー、そこはハッキリしないと大事な事だぞ?

Rubyは一部の特権的日本人だけが思いつきで仕様変更できる言語

これでOKだな?
0224デフォルトの名無しさん2015/01/05(月) 23:04:23.33ID:Y6BCcXgq
その通り
合意なんかしてるのは基本コミッター連中だけだ
他は箸にも棒にもかからない外野だ
砂粒とも思ってない
0225デフォルトの名無しさん2015/01/05(月) 23:06:40.21ID:Y6BCcXgq
だからPythonを選ぶべきだ
0226デフォルトの名無しさん2015/01/05(月) 23:12:47.63ID:oPHJgSMu
>>221
日本在住の外国人さんですか?
日本語がとてもお上手ですね
0227デフォルトの名無しさん2015/01/05(月) 23:17:24.71ID:dcVDuqIP
>>223
「MRIはRuby言語の方言のひとつです」じゃ何か不満なの?
0228デフォルトの名無しさん2015/01/05(月) 23:21:12.02ID:Y6BCcXgq
方言を認めるとユーザーを奪えないから
0229デフォルトの名無しさん2015/01/05(月) 23:42:35.11ID:Y6BCcXgq
あんなもんを作る理由ってRubiniusがデファクトの実装に成り代わるため以外にない
サルに管理させておけるか
コンチネンタルなOSSの流儀でビシッとキメてやるよっていうお節介

互換性が壊れると言えば
島根県CMSがRubyのバージョンアップで壊れたら面白いなあって常々思ってる
RoRだから壊れる確率は結構高いんじゃねえかな
0230デフォルトの名無しさん2015/01/05(月) 23:49:58.55ID:X/XHMwki
そんなもんとっくの昔に壊れてるよ
1年前からRails更新してないんだから
0231デフォルトの名無しさん2015/01/05(月) 23:53:08.93ID:dcVDuqIP
むしろ、MRIの互換性なんてそのままスルーして
他の環境作ったり、他の環境を互換性準拠っつーて盛り上げればいいのに
キレたら終わっちゃうって分からないんだろか
0232デフォルトの名無しさん2015/01/05(月) 23:56:59.80ID:X/XHMwki
今はMRIよりRailsチームの方が力あるから、
Railsを説得して互換実装の方に乗り換えてもらえばあっという間だよ
0233デフォルトの名無しさん2015/01/05(月) 23:57:16.11ID:Y6BCcXgq
なんだ既に壊れてんのか
まあ大元のRubyも1.8だしなあ

あとBrianってアメリカ人だからコンチネンタルは不適切でしたね
アングロアメリカでした
0234デフォルトの名無しさん2015/01/06(火) 07:19:43.77ID:7Rp7KoRa
Pythonは蛇、Rubyは宝石だから、
ほとんどの女性が、Rubyを選ぶ

本屋でもパッと女が来て、「たのしいRuby」を買っていく
一方、Pythonの本棚の前に、女は来ない

それに、Pythonのソースコードは、
男性的でゴツゴツしている

{}があまり無いからか、ぶっきら棒に見える
self,__init__()
など内部構造が見えているのも、粗野な感じ

一方、Rubyは洗練されている感じ
男のPython、女のRuby
0235デフォルトの名無しさん2015/01/06(火) 07:31:55.32ID:p7OGgrn1
Rubyは刑務所で職業訓練として教えていて、特に女性受刑者に好評だって話があったけど、あれどうなったの?
サイバー案件のアウトソージング要員として刑期終了で出所した後でもサイバー的に通用する女Ruby部隊を作るって感じだったけど。
0236デフォルトの名無しさん2015/01/06(火) 08:20:53.72ID:1EPJpbNA
>>233
1.8といえば、もうurabeさんってリリースマネージャやんねーの?
2.3からまた彼がやれば良いのに本人にはメリットないかもしれんけど
0237デフォルトの名無しさん2015/01/06(火) 08:28:56.77ID:Hei5/B5j
SPAM好きなのがPython ■ ベーコン好きなのがRuby
selfが見えるのがPython ■ 政治で揉めるのがRuby
教育に広く使われるなのがPython ■ エロサイトスクレイピング指向言語Ruby
PEPがあるのがPython ■ 別府が近いのが島根
0238デフォルトの名無しさん2015/01/06(火) 10:03:13.08ID:iarVVv2t
{} を使わない主義です。 do, end のみでやってるんだけど Ruby 風では無いのかな?
Python 風で読みやすく感じる。行数は増えるけど。
0239デフォルトの名無しさん2015/01/06(火) 11:51:32.35ID:Kgstyqvm
filter,map,reduceとかどうしてるの?
02402382015/01/06(火) 13:18:23.47ID:iarVVv2t
いつも命令型としての記述しかしてないから do - end で済んでいます。
関数型っぽく書いてないんです。
0241デフォルトの名無しさん2015/01/06(火) 13:24:01.30ID:FRUB2kXN
rubyで関数型っぽく書いても、しょせんはモドキだからね
それで良いと思うよ
0242デフォルトの名無しさん2015/01/06(火) 17:42:05.52ID:juo+bVCy
今更だけど一言だけ言わせろ。
JavaこそメジャーバージョンUPが一番信用出来ない言語じゃねーか。

仕様で固まってる部分だけじゃ性能が微妙過ぎて、
仕様未定義の部分はメジャーバージョンUPの度に挙動変わる確率が高くて
事前に大規模テストしないと安心して更新OK出せないとかアホらしい。

うちはJava1.8対応進めてるけど余所じゃ未だにJava1.6とか1.5でバージョン上げられない
要件だってある現実なのに。
0243デフォルトの名無しさん2015/01/06(火) 18:16:10.79ID:W2F4pWSu
今更だなあ
お前のせいで昨日のアレが召喚されちゃったら責任取ってよね
0244デフォルトの名無しさん2015/01/06(火) 20:19:24.56ID:LdQXg158
>>242
そりゃJavaでは高い信頼性を持つシステムを作るからだよ
書き捨てスクリプト専用のRubyと一緒にしちゃいかん
0245デフォルトの名無しさん2015/01/06(火) 23:12:09.52ID:Q7R46vB5
全くだ
お願いだからJカスは引っ込んでろって
0246デフォルトの名無しさん2015/01/07(水) 00:09:01.98ID:41LSeHIl
>>242
バージョンあげるやつってシステムの目的見えてないよね
上げることが目的になってる
0247デフォルトの名無しさん2015/01/07(水) 01:10:19.80ID:fRApCFQJ
Ruby 2.2.0 リリース
https://www.ruby-lang.org/ja/news/2014/12/25/ruby-2-2-0-released/
0248デフォルトの名無しさん2015/01/07(水) 09:46:36.62ID:B7bGhXQ6
使わなきゃいいだけなのに
変な人
0249デフォルトの名無しさん2015/01/08(木) 13:16:36.84ID:FsXUJliC
ま、思いつきや気まぐれな仕様変更はやめてくれと
いうだけで、これだけの不平不満が吹き出す言語、
それが Ruby の現実。

そのRuby の真実の姿をあぶり出すことができた。
それだけでも、一連の議論は大いに意味があった。

Java は偉大だ。眩しくて光り輝いているな。
0250デフォルトの名無しさん2015/01/08(木) 13:27:32.47ID:BEmVRfK/
またお前か
0251デフォルトの名無しさん2015/01/08(木) 13:28:27.44ID:FsXUJliC
あと、Rails 推しはもう止めた方がいい。
Ruby 本体の上をいく仕様変更の嵐。
それだけではなく、ごく小規模のサイトの構築でさえ、大規模サイトの流儀を要求されるというポリシー上の理不尽。
なにかが根本から間違っている。
コンセプトからみて、Rails よりSinatra が優れていると思えてならない。
Rails推しから Sinatra推しへ転換を図るべきだ。
女性にも広めようと上にあるのを見たが、であればなおさらだ。

前に Rails やろうと思うんですが、どうですかって聞かれたことがあった。
その人のことをいろいろ考えて、俺は PHP を薦めた。
無念だが、その人のためだと思ったから。
0252デフォルトの名無しさん2015/01/08(木) 13:31:03.19ID:FsXUJliC
>>250
お前の責任ある答えを聞きたい。
5年前のコードはへっちゃらで動くことはない言語 Ruby をお前は勧める。
そのようなRuby をお前が勧める理由はなんだ?

それを心ゆくまで述べてみよ。
Ruby の将来はお前にかかっている。期待してるぞ。お前の屁理屈を。
0253デフォルトの名無しさん2015/01/08(木) 13:31:57.35ID:5iJyKn99
うるせえよ
殺すぞ
0254デフォルトの名無しさん2015/01/08(木) 13:34:52.14ID:FsXUJliC
>うるせえよ
>殺すぞ

意訳すると、Java は素晴らしい、となる。
0255デフォルトの名無しさん2015/01/08(木) 15:37:23.40ID:OZuEqed0
嫌なら使わなきゃいいのに
バカなの
0256デフォルトの名無しさん2015/01/08(木) 16:25:14.04ID:FsXUJliC
java 使ってるよ。
なんなの、お前? お前もJava 使え。
0257デフォルトの名無しさん2015/01/08(木) 16:31:29.01ID:OZuEqed0
使わないのに何しにきてるの
バカなの
0258デフォルトの名無しさん2015/01/08(木) 18:20:37.79ID:FsXUJliC
世の中、そんなもんだっての。
大人になれや。
0259デフォルトの名無しさん2015/01/08(木) 18:21:32.87ID:0An2B4E8
個人的にはRubyは大規模なものを作るのに向いた言語ではないと思う
他言語を扱うプログラマが手元でちょこちょこ使うものって感じ
とりあえず作るとか、一人でパパッと小規模のプログラムを書くってのには向いてると思う
アルゴリズムの動作確認したり、プロトタイプ作って試した後にそれを他言語に変換するスクリプト作ってたり

RailsはRubyの上で動作する別言語なのでRailsスレで
0260デフォルトの名無しさん2015/01/08(木) 19:04:55.76ID:g/RxkgEC
Rubyの文脈でRailsを語ってるならこのスレでいいよ
0261デフォルトの名無しさん2015/01/08(木) 19:18:31.79ID:BEmVRfK/
Rubyこそ至高とか言いまくってる人がいるわけでもないのに
非RubyistがわざわざこんなところでRubyを腐し続けるって異常だな
0262デフォルトの名無しさん2015/01/08(木) 19:35:23.31ID:5iJyKn99
特定のプロダクトにキンタマ握られてるとこうなるんだよ
0263デフォルトの名無しさん2015/01/08(木) 19:37:25.44ID:FsXUJliC
最近、Rubyの人気が落ちてきたっていうだろ。
死にいく言語だそうな。
それはたぶんRuby じゃなくてRails がみんなに愛想つかされてきたからだろ。
なぜみんなはRails に愛想つきてきたか。
それは、上でみんな書き尽くされてることで・・・
0264デフォルトの名無しさん2015/01/08(木) 19:52:42.38ID:FsXUJliC
いままでと変わらず Rails推ししてたら、
Ruby も一緒に死ぬぞ。泥船からは逃げろ。
悪いことはいわん。Sinatra 推しに切り替えろ。
みんなのためでもある。苦行のわりに利がないもの。
0265デフォルトの名無しさん2015/01/08(木) 20:02:45.39ID:g/RxkgEC
まったくの別物なのに切替えるとか意味不明すぎる
0266デフォルトの名無しさん2015/01/08(木) 21:21:42.24ID:vJWeyEjb
そもそもRails推しってWebの一部の人たちだけの話でしょ
やめたほうがいいとこんなトコで言われても、あっそう、としか言えないよ
0267デフォルトの名無しさん2015/01/08(木) 21:23:40.45ID:sg4geDub
このスレだとむしろdisの方が多いよねw
Qiitaあたりで叫ぶとよく釣れると思うよ
あそこRailsとマカーしかいないから
0268デフォルトの名無しさん2015/01/08(木) 21:27:25.85ID:FsXUJliC
Sinatra をさ、デフォでRuby に搭載すりゃいいじゃん。
だってさ、死にいく言語とか言われてヤバイと思わん?
俺もRails いじっていたから、見放したくなる気持ちはよく分かる。
PHP とかはるかに簡単だも。それがベストとはいわんけどさ。
0269デフォルトの名無しさん2015/01/08(木) 21:30:58.23ID:Zn9KkZAG
永遠なんてないんだよ
代謝していくだけだ
代謝を恐れたなら、その時が老いた時なのだ
0270デフォルトの名無しさん2015/01/08(木) 21:39:53.96ID:FsXUJliC
まあな、なんでもかんでもJava で書くのがいいんだけどな、
Java もクソ文法でな www
だいたい、ウチのマシンにnetbeans はシンドイ・・・
0271デフォルトの名無しさん2015/01/08(木) 22:45:38.90ID:68t0IsL5
Rubyのバージョンが上がるたびに全部書き直しになったとしても
Javaで書くよりも早く完成するよ
0272デフォルトの名無しさん2015/01/08(木) 22:49:19.72ID:ZIphMHjt
そりゃそんな規模のものをJavaで作るのが間違いだ
Rubyで1000人月とかただの集団自殺
0273デフォルトの名無しさん2015/01/10(土) 09:01:51.29ID:/KNCgu+a
初心者スレで初心者っぽい質問して申し訳ないが
アメリカ夏時間判定するのに、isdstメソッド使ってたらなんか変な結果が出て、
ENV['TZ'] = 'US/Pacific'
p Time.local(1975, 4, 15).isdst # => true
ENV[' TZ '] = nil
wiki/夏時間を見ると「1986年までは現地時間4月最終日曜日午前2時から10月最終日曜日午前2時までの間」
とあるから、1975年4月15日は冬時間だと思うんだが。
wikiの方が間違ってるのかisdstが間違ってるのかどっちだろうか?
rubyのバージョン1.9.2ってのが問題かもしれないがw
0274デフォルトの名無しさん2015/01/10(土) 10:08:23.26ID:YN4LC6Iq
あるべき答えがなにかは知らんが、手元でやってみた。
$ jruby -v
jruby 1.7.18 (1.9.3p551) 2014-12-22 625381c on Java HotSpot(TM) 64-Bit Server VM 1.8.0_25-b17 +jit [linux-amd64]

ENV['TZ'] = 'US/Pacific'
p Time.local(1975, 1, 1).isdst # => true
p Time.local(1975, 2, 1).isdst # => true
p Time.local(1975, 3, 1).isdst # => true
p Time.local(1975, 4, 1).isdst # => true
p Time.local(1975, 5, 1).isdst # => true
p Time.local(1975, 6, 1).isdst # => true
p Time.local(1975, 7, 1).isdst # => true
p Time.local(1975, 8, 1).isdst # => true
p Time.local(1975, 9, 1).isdst # => true
p Time.local(1975, 10, 1).isdst # => true
p Time.local(1975, 11, 1).isdst # => true
p Time.local(1975, 12, 1).isdst # => true
ENV[' TZ '] = nil

# 実行結果
false
false
true
true
true
true
true
true
true
true
false
false
0275デフォルトの名無しさん2015/01/10(土) 11:16:25.70ID:/KNCgu+a
>>274
(1975, 3, 1)がtrueで夏時間になってるのはなんか結果がおかしいですね
自分の環境ではfalseになりました。実行環境に影響されてるのかな?

ruby 1.9.2p0 (2010-08-18 revision 29036) [x64-mswin64_80]
0276デフォルトの名無しさん2015/01/10(土) 11:21:45.84ID:YN4LC6Iq
>>275 自分の環境ではfalseになりました。

$ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

ENV['TZ'] = 'US/Pacific'
p Time.local(1975, 1, 1).isdst
p Time.local(1975, 2, 1).isdst
p Time.local(1975, 3, 1).isdst
p Time.local(1975, 4, 1).isdst
p Time.local(1975, 5, 1).isdst
p Time.local(1975, 6, 1).isdst
p Time.local(1975, 7, 1).isdst
p Time.local(1975, 8, 1).isdst
p Time.local(1975, 9, 1).isdst
p Time.local(1975, 10, 1).isdst
p Time.local(1975, 11, 1).isdst
p Time.local(1975, 12, 1).isdst
ENV[' TZ '] = nil
#
false
false
true
true
true
true
true
true
true
true
false
false
0277デフォルトの名無しさん2015/01/10(土) 11:25:23.66ID:YN4LC6Iq
実装により結果が違うってやつか?

違っちゃダメだろって…
0278デフォルトの名無しさん2015/01/10(土) 12:25:29.21ID:/KNCgu+a
そうか肝心なところの日付入れてみればいいのかw気づくのおそくてすいません
ruby 1.9.2p0 (2010-08-18 revision 29036) [x64-mswin64_80]
ENV['TZ'] = 'US/Pacific'
p Time.local(1975, 4, 5).isdst
p Time.local(1975, 4, 6).isdst
p Time.local(1975, 4, 7).isdst
ENV[' TZ '] = nil
false
false
true
1975年4月の第一日曜日は6日で、第一日曜日で切り替えられてる
Wikiのデータでは夏時間のスタートは
●1986年までは現地時間4月最終日曜日午前2時から
●1986年より、開始日は4月第1日曜日
●2007年から開始日は3月の第2日曜日
wikiが正しいかどうかはわからないが、.isdst の内部では第一日曜日にされてますね
0279デフォルトの名無しさん2015/01/10(土) 12:33:07.62ID:YN4LC6Iq
$ jruby -v
jruby 1.7.18 (1.9.3p551) 2014-12-22 625381c on Java HotSpot(TM) 64-Bit Server VM 1.8.0_25-b17 +jit [linux-amd64]

ENV['TZ'] = 'US/Pacific'
p Time.local(1975, 4, 5).isdst
p Time.local(1975, 4, 6).isdst
p Time.local(1975, 4, 7).isdst
ENV[' TZ '] = nil

# 実行結果
true
true
true

$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

# 実行結果
true
true
true

鬱だ。死のうwww
ruby がというよりもlinux(ubuntu14.04) というのが悪いのん???
0280デフォルトの名無しさん2015/01/11(日) 07:17:02.79ID:v5/BUYYs
やっと2chつながった
>>279
なんで結果に差が出るんでしょうね?
rubyのバージョンによって、.isdstもアップデートされてて内容が違うのかな?
0281デフォルトの名無しさん2015/01/11(日) 09:09:45.14ID:G2IbQ7ek
date_core.c内localtime_rの参照先がシステム依存。
夏時間の判定もそこで行われている。
0282デフォルトの名無しさん2015/01/11(日) 11:25:05.94ID:A1IfSqze
結局、実装依存・環境依存の問題なんだよなぁ。
ruby の仕様を過度に信用せずに、手元でテストをキチンと
組み上げるしかないんだろうな。

あと、このような環境依存のコマンドはむしろ非推奨にした上で、
将来的には廃止した方がいいと思う。
それか、Ruby内でアルゴリズムが完結するように組み直すか。

結局のところ、理由はどうあれ、間違った答え返ってきて、
それで納得する人いないと思う。
0283デフォルトの名無しさん2015/01/11(日) 12:04:00.24ID:I5t5eddk
rubyはウンコだけど、この件は仕方ないだろ
0284デフォルトの名無しさん2015/01/11(日) 12:04:06.90ID:5XIek4ok
>>282
localtime_r を廃止すべきだと?
C言語に文句つけるとは、ずいぶん大きく出ましたね
0285デフォルトの名無しさん2015/01/11(日) 12:08:14.94ID:RxLZDfKE
カシオの腕時計にもサマータイムモードあるけど、なんか複雑でよくわからんな
あれ。日本でやらないのは正解。
0286デフォルトの名無しさん2015/01/11(日) 15:32:50.82ID:aOUO6IlL
>>282
…プッ
0287デフォルトの名無しさん2015/01/11(日) 15:47:02.08ID:A1IfSqze
バグを生み出すのは、お前らのようなヤツなんだろうな。
ちゃんとテスト書いてるか?
テストの仕様の変更に関して質問しても、ここでは誰も答えるヤツがいないんだがwww
0288デフォルトの名無しさん2015/01/11(日) 15:49:27.42ID:A1IfSqze
すまんな。聞くだけヤボだったわ www
0289デフォルトの名無しさん2015/01/11(日) 18:12:30.87ID:VJq3iYCs
はいはいJavaが一番ですね
0290デフォルトの名無しさん2015/01/11(日) 18:12:53.90ID:8wkZhlLx
タイムゾーンで一番精度の高い情報は、

http://www.iana.org/time-zones

確認したところ、
># From Arthur David Olson (2005-08-22):
># Paul has been careful to use the "US" rules only in those locations
># that are part of the United States; this reflects the real scope of
># U.S. government action. So even though the "US" rules have changed
># in the latest release, other countries won't be affected.
>(snip)
>Rule US 1975 only - Feb 23 2:00 1:00 D

TZInfo は、直接このデータからソースを生成しているはず。

確かに、

tz = TZInfo::Timezone.get('US/Pacific')
p tz.period_for_local(Time.local(1975, 2, 22, 12)).dst? #=> false
p tz.period_for_local(Time.local(1975, 2, 23, 12)).dst? #=> true
p tz.period_for_local(Time.local(1975, 2, 24, 12)).dst? #=> true
0291デフォルトの名無しさん2015/01/11(日) 18:54:44.49ID:FurkmZnS
先輩が教えてくれないから煽って聞き出すパターンかな
0292デフォルトの名無しさん2015/01/11(日) 18:59:20.42ID:GhDmFV+h
単に暇を持て余してるだけでは
0293デフォルトの名無しさん2015/01/11(日) 19:11:41.29ID:G2IbQ7ek
Windows版ではwin32.c内systemtime_to_localtime(TIME_ZONE_INFORMATION *tz, SYSTEMTIME *gst, SYSTEMTIME *lst)が
SystemTimeToTzSpecificLocalTimeに依存していることを確認した。
ttp://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724949%28v=vs.85%29.aspx
こいつのバグについては今のところ調査できてない。

>290
TZInfoの扱いもプラットフォームによって違うから注意されたし。
ttp://sugamasao.hatenablog.com/entry/2014/04/13/184137
0294デフォルトの名無しさん2015/01/11(日) 20:31:29.36ID:BkMuWsUG
>>287
自分が書いたロジックのテストは当然書くが
言語が返す値が違うものになるとかそこまでテスト書かないだろ
0295デフォルトの名無しさん2015/01/11(日) 20:37:56.67ID:A1IfSqze
>>294
俺はいつも linux (ubuntu)しか使わないが、
windows で書いたものを linuxに持ち込むという人もいるだろう?
ベースとなるOS が異なると、Rubyの返す結果が異なる
場合があるというのだから、
であれば、自前のテストで確認するしかないのでは???
結果は実装・環境次第という人ばかりなので、仕方ない。
そんな馬鹿なとは思うけど・・・
0296デフォルトの名無しさん2015/01/11(日) 20:46:11.35ID:BkMuWsUG
>>295
今回は事前に気づいたケースだから書けるけど
事前に気づかないケースじゃテスト書きようがないと思うけど
0297デフォルトの名無しさん2015/01/11(日) 21:01:30.54ID:A1IfSqze
>>296
結局、RubySpec の問題に戻るんだよねぇ。
環境や実装の違いなんてことに関わらず、同じ値を返すように
仕様として互換性テストを構築したら、拒否されたという・・・
でも、互換性でチェックしてほしいのはまさにそこなんだけど。
しかし、 RubySpec的やり方の拒否は公式的なものなんでしょ。
自前のテストでそこまでチェックするのがイヤだとなら、お手上げなんじゃ?
0298デフォルトの名無しさん2015/01/11(日) 21:55:17.81ID:XNnfmRhD
確かに環境依存じゃない仕様とテストが必要なのはわかるが
そりゃ外部で勝手に仕様決めつけられてテスト作られても受け入れ拒否するわな
0299デフォルトの名無しさん2015/01/11(日) 22:01:10.17ID:A1IfSqze
結局、Ruby のコアの部分はRuby 自身内で収まるように
ロジックを組むしかないんだと思う。
でないと、外部のライブラリなりなんなりに投げる形になって、
返ってくる結果はそれ次第という話になってしまう。
0300デフォルトの名無しさん2015/01/11(日) 22:04:53.92ID:A1IfSqze
それか、RubySpec的な仕様互換テストを構築して、
誰かが責任もって運用し、プラットフォームに依存しない
テストを実行して、バグをその都度発見できるようにするか…
0301デフォルトの名無しさん2015/01/11(日) 22:13:51.66ID:A1IfSqze
さもなきゃ、
linux(ubuntu)を規範的OS と定め、それ以外はフォークと考え、
規範OS 以外の実行結果は無保証としてしまうか…
これが一番安上がりだが。
0302デフォルトの名無しさん2015/01/11(日) 22:17:59.69ID:BkMuWsUG
それがいいよ。Windowsサーバ指定された時点で
Rubyを選択するやつなんていないでしょ
0303デフォルトの名無しさん2015/01/11(日) 22:32:23.40ID:8e7vlna2
どうせWebでしか使われてないんだからもともとアプリごとに環境固定みたいなもんでしょ
ミドルウェアのバージョン上げたら動作変わるとか日常茶飯事なんだから、些細なことだよ
あくまで「Webなら」な
0304デフォルトの名無しさん2015/01/11(日) 23:03:32.99ID:jQsmpaL2
作業を独立させる(分業)
A | B | C
ABCは完全に独立した組織で、独立していること

AはBに依存し、BはCに依存する。
Aが直接、Cを決定してはいけない

外人が他国語を決めたり、
他国が他国の法律・慣習を決めたり、
他国が他国のオリンピック選手などを選抜してもいけない

中央の官僚が、地方行政を決めてもいけない。
国を道州制とし、決定はなるべく近くで、
物事を見ている人が決める
0305デフォルトの名無しさん2015/01/11(日) 23:13:40.37ID:A1IfSqze
>>304
もういいんだ、その話は。
Ruby にはすでに仕様互換性テストは存在しない。
終わったことだ。
0306デフォルトの名無しさん2015/01/11(日) 23:15:13.03ID:FurkmZnS
302が正解
0307デフォルトの名無しさん2015/01/11(日) 23:18:18.44ID:A1IfSqze
結局、Linux の主要なディストリ上での動作に関してのみ、
結果をチェックするというのが、俺も現実的と思う。
それ以外に、現実的な解決策はないだろうなぁ。
そういう方向で検討してほしい。
0308デフォルトの名無しさん2015/01/11(日) 23:27:05.16ID:8e7vlna2
いやWindows対応って言ってるならWindowsでもさすがにチェックしてるでしょ
テストスイート走らせるだけなんだから大した手間じゃないよ
つまりテストケースが漏れてただけ
0309デフォルトの名無しさん2015/01/11(日) 23:30:33.97ID:A1IfSqze
>>308
違う違う。
どれが仕様として正しいのかの定義がない、という話。
Linux 上の動作が正しく、Windows上のは、合わせたいなら
お好きにどうぞ。それは未定義、という考え方。
0310デフォルトの名無しさん2015/01/11(日) 23:35:19.01ID:8e7vlna2
>>309
定義があったところでそれを保証するのはテストケースに他ならないんだから
結局テスト漏れに帰着するってことだよ
03113102015/01/11(日) 23:47:39.58ID:8e7vlna2
もちろん全てのテストが名文化された仕様に基づいているなら仕様の定義が不足してるとも言えるけど、
Rubyはそうじゃないし、それを求めるのが非現実的である以上、
テストケースを増やせとしか言いようがない。
0312デフォルトの名無しさん2015/01/12(月) 00:30:20.41ID:BRNsR1ni
C言語で環境依存なんだから、どうしようもないだろ
それをRubyで再実装するなんて時間の無駄もいいところだし
0313デフォルトの名無しさん2015/01/12(月) 03:03:48.44ID:KGNTKkPE
よく分からんのだけど OS の差異を言語のせいにしたい人は何でなの
今までもなかったわけじゃないんでしょう?
0314デフォルトの名無しさん2015/01/12(月) 03:26:02.46ID:XKz3buBD
C言語は移植性の高い言語と言われた
Cで書いてあれば、他のマシンでも「動きやすい」と
そのまま動くというわけではない
書き換えなければならないところもあるという話
RubyはC程度の移植性

Java は、他のマシンにもっていくためにチョコチョコ
書き直すようなことは、やめようという言語
"Write once, run anywhere"
でも、Java はコレで犠牲にしている部分があるよね
0315デフォルトの名無しさん2015/01/12(月) 04:24:25.08ID:/MXYzLjY
>"Write once, run anywhere"

そもそもこれが曲がりなりにも形になるのに時間がかかったし、今だって
そんないうほど自慢できる状態じゃない
0316デフォルトの名無しさん2015/01/12(月) 10:16:41.44ID:keLLoj3i
米国夏時間、74と75年がずれてるらしい、
OSの問題だとしたらwindowsアメリカ産OSなのに何やってんだ…
ww.timeanddate.com/time/dst/1972.html
1972 Sunday, 30 April
1973 Sunday, 29 April
1974 Sunday, 6 January
1975 Sunday, 23 February
1976 Sunday, 25 April
1977 Sunday, 24 April
1978 Sunday, 30 April
1979 Sunday, 29 April
1980 Sunday, 27 April
1981 Sunday, 26 April
0317デフォルトの名無しさん2015/01/12(月) 11:08:08.17ID:Il3tkbbb
どっちにしろシェルスクリプトと一緒に使う人間にゃコマンドがまるで違う時点でWindowsとの差異なんてあって当たり前なもののワケで
LinuxとOSX(BSD系)でも標準コマンドの挙動とか微妙に違うからそこも気にするし
0318デフォルトの名無しさん2015/01/12(月) 12:08:37.76ID:tkOOh7Ay
>>313
RubySpecの件で心身を病んだらしいよ

・・・元からの可能性もあるが
0319デフォルトの名無しさん2015/01/12(月) 14:19:49.03ID:PuwpJFVg
>linux(ubuntu)を規範的OS と定め
笑ってしまった
0320デフォルトの名無しさん2015/01/12(月) 14:23:08.78ID:PuwpJFVg
ウソでも、できなくても「Windowsに対応します。サポートします!」といいつづけるべき
0321デフォルトの名無しさん2015/01/12(月) 14:57:52.73ID:tkOOh7Ay
別に嘘には並んでしょう
お前の考える「対応」と、俺の考える「対応」は違うんだ
の一言であらゆる文句は一蹴できる
0322デフォルトの名無しさん2015/01/12(月) 16:32:01.48ID:AB7X7vXD
和暦をプラットフォーム非依存のRuby標準として
米国特有のローカライズなどはgemで対応すれば問題ない
0323デフォルトの名無しさん2015/01/12(月) 17:55:52.60ID:nU3hkfq4
和暦と西暦を相互に変換できるライブラリ無いですか
0324デフォルトの名無しさん2015/01/13(火) 08:22:37.85ID:mo25xfmB
require 'net/http'

だめぽ
0325デフォルトの名無しさん2015/01/13(火) 11:37:21.04ID:dH/0Ok+d
Java はすべての差異を互換性テストで吸収してしまおうという言語だし、
そのコミュニティーも完全にそれを了解事項にしている。

しかし、Ruby も含めてその他の言語はすべて、
その次元には至っていない。それだけのことだ。

Linux での動作だけは死守してくれ。
もはや、それ以上のことは無理だし出来もしないことを望んでも仕方ない。
0326デフォルトの名無しさん2015/01/13(火) 12:05:44.64ID:JztOXwMp
Linuxも一枚岩じゃないんで
いつまでも寝ぼけてんなよチンカスくん
0327デフォルトの名無しさん2015/01/13(火) 12:56:29.31ID:uHQW56BE
はいはいJavaが一番ですね
0328デフォルトの名無しさん2015/01/13(火) 14:20:28.65ID:dH/0Ok+d
もっといえば、利用者が多そうな
ubuntu のLTS だけサポートすればいいんじゃないかな。
mint も派生だし、debian も似たようなもんだし。
RedHat のサポートは、RedHat自身がやるべきでしょ?
それが仕事なんだし、人のメシのタネを取るべきじゃない。
0329デフォルトの名無しさん2015/01/13(火) 16:12:28.68ID:xXiFYeMU
利用者が多いなんて言うとWindowsが対象になってしまう
それにOSチームの仕事は各ソフトの動作をサポートすることじゃないだろ
0330デフォルトの名無しさん2015/01/13(火) 16:24:20.43ID:dH/0Ok+d
linux サポートしなきゃ話にならんだろう。
Winはプロプラじゃないか。
OSS の唯一サポートするOS がプロプラだったら笑い話だろ。
RedHat は金さえ払えばなんでもやるよ。
メシのタネなんだから。
0331デフォルトの名無しさん2015/01/13(火) 16:39:06.88ID:dmdtWWUz
「Debian使ってるよ」
http://www.rubyist.net/~matz/20080219.html
2008-02-19
0332デフォルトの名無しさん2015/01/13(火) 16:45:38.60ID:dH/0Ok+d
debian ならdebian でもいいんじゃないの?
ubuntu は派生じゃないけど、準派生みたいなもんだし。
RedHat は有料なんだからさ、個人じゃ入れるのもままならない。
cent はRedHat のただの後追いコピーだから、
あれにメンテしたところで、次バージョンには反映しないでしょ www
0333デフォルトの名無しさん2015/01/13(火) 18:44:09.72ID:j81RojAW
毎日ハゲ散らかしたところで失った物は帰ってこないっすよハハハ
0334デフォルトの名無しさん2015/01/13(火) 21:23:10.83ID:CPQbXHFj
>>329
パッケージのメンテはディストリビュータの仕事だろ
カーネルとディストリビューションの区別がついてない人?
0335デフォルトの名無しさん2015/01/13(火) 21:37:29.22ID:QfRKSulC
rubyのウンコさに嫌気がさして
debianのメンテナが辞めた事が無かったっけ?
0336デフォルトの名無しさん2015/01/13(火) 21:42:18.61ID:/ApZh3CF
Windowsサーバの仕事が来たら断る
これだけで全て解決するんだからそれ以上考える必要ない
0337デフォルトの名無しさん2015/01/13(火) 21:51:06.88ID:dH/0Ok+d
windows だって、仮想でなんでも入れられるだろ。
だから、 linux だけのサポートでなにも問題はない。
俺は使ったことないがCygwinだってあるだろ。
Cygwinのサポートだってちょっと頑張れば可能かもしれないし。
さらにいえば、win など入れず ubuntu常用で本当はなにも問題ないよ。

だから、Rubyとしては Linux のサポートだけが必要で、
あとはサポート外でいい。win でも仮想でLinux いれりゃいいだけだ。
0338デフォルトの名無しさん2015/01/13(火) 21:53:21.41ID:dH/0Ok+d
>>334 >>335
せっかくOS を一つだけセレクトしてサポートするっていうんだったら、
そのOS では最新の安定版をパッケージとして提供すりゃいいじゃん。
まあ、別にそうしなくてもいいけど。
0339デフォルトの名無しさん2015/01/13(火) 21:56:56.91ID:hvSQliED
まずはMac利用者をRuby界隈から締め出すべき
0340デフォルトの名無しさん2015/01/13(火) 22:00:33.83ID:dH/0Ok+d
>>339
Mac だって Virtualbox動くだろ?
なら、win と同じ扱いでいいよ。サポート外で。
0341デフォルトの名無しさん2015/01/13(火) 22:06:10.90ID:ycL/0qgm
macのサポートは確かにやりづらい。
似ていて微妙に異なるというのが実は一番困るのだと思い知らされる。
同じ理由でBSDも・・・
窓はなんというか取り掛かる前から腹がくくれるというか
バッドノウハウもそれなりに蓄積されてるのでなんとかなる感じ。
0342デフォルトの名無しさん2015/01/13(火) 22:20:52.68ID:dH/0Ok+d
結局、Java 以外の言語なんぞみんなRuby と同じく
互換性などカオスだというのに、口をつぐんでるだけだからな。
Ruby はLinux のdebianか ubuntu だけをサポートします、
あとはwin のruby も macのruby もフォークなので、
有志で勝手にやってください、とハッキリ宣言すれば、
Java の立場には及ばないが他の言語より正直さという点で
数段上だ。
0343デフォルトの名無しさん2015/01/13(火) 23:35:04.34ID:F3k0DSNt
そんな互換性はあってもいいのかもしれないが、別に労力をかけて追求するほどのものでもない
ということだな
0344デフォルトの名無しさん2015/01/14(水) 00:06:13.44ID:pAFniLdU
Effective Rubyが書店に並び始めたがどう?
買う価値ありそう?
0345デフォルトの名無しさん2015/01/14(水) 02:50:19.91ID:fsU+CQX2
この板にIDがあって本当に良かったと思う
0346デフォルトの名無しさん2015/01/14(水) 07:50:31.76ID:0jHyb9lO
あとはゴミ殺害機能があれば完璧
0347デフォルトの名無しさん2015/01/15(木) 02:23:41.29ID:tU5eqjdo
むしろGCがほしい
0348デフォルトの名無しさん2015/01/15(木) 08:25:07.49ID:4e7cSDMB
Rubyにも型が欲しい
0349デフォルトの名無しさん2015/01/16(金) 04:01:08.51ID:Uo0Zlj+1
# 定数は、大文字で始まる
# A〜D
Person = ('A'..'D').to_a
TimeOfP = [1, 2, 5, 10]

# transposeで行列変換
ary = [Person, TimeOfP].transpose

# * で配列の多重代入
# flattenで、配列を平滑化
h = Hash[*ary.flatten]

p h
{"A"=>1, "B"=>2, "C"=>5, "D"=>10}
0350デフォルトの名無しさん2015/01/16(金) 06:25:45.08ID:Uo0Zlj+1
Person = ('A'..'D').to_a

# 4つから2つを選ぶ、組合せ
# combiは、Enumerator
combi = Person.combination(2)

ary3 = combi.collect do |ary2|
ary2.join('+')
end

p ary3
["A+B", "A+C", "A+D", "B+C", "B+D", "C+D"]
0351デフォルトの名無しさん2015/01/16(金) 22:26:16.94ID:lGFhyuso
Rubyはこういうコードはこういう意味になるというより
処理系の実装が現在こうなってるからこう動作するので、帰納的に
こういうコードはこういう意味と考えられる、という言語なので
静的解析が極めて困難
0352デフォルトの名無しさん2015/01/16(金) 23:22:34.62ID:2bPtIKnK
だからこそ、仕様互換性テストを作ろうという話だったが、
Ruby界は全力で拒否ったわけだから、
そういう互換性は諦めるしかない。
しかし、ターゲットのOS を一つに絞るなら、
仕様としての動作の確定は可能だし、メンテも楽だ。
それしか道はない。キチンとした公式見解が求められる。
客観的にみて、debianかubuntuのどちらかしかありえない。
0353デフォルトの名無しさん2015/01/16(金) 23:26:18.32ID:EHV2pid7
↑アホまるだし
よく、生きてられるなぁ
0354デフォルトの名無しさん2015/01/16(金) 23:42:31.52ID:2bPtIKnK
>>353
じゃあ、お前が全OS をメンテしろよ。
0355デフォルトの名無しさん2015/01/17(土) 00:25:48.09ID:OhSrciBg
>>352
特定のOSの特定のディストリビューションの
特定のライブラリの特定のバージョンに依存したテストを書きまくれってこと?
俺がMRIメンバーなら絶対脱退するわw
0356デフォルトの名無しさん2015/01/17(土) 00:39:06.15ID:54e9ps0Z
>>355
二つに一つじゃないのか?
1 全OS 対応のコードを書く。(その保証が互換性テスト)
2 でなきゃ、特定OS にターゲットをしぼり、他のOS はすべて
  フォークであり無保証。

Ruby は2を選ぶしかないだろ。
心配するなって。Javaを除く他の言語は黙ってるだけで、
Ruby と同等かそれ以下なんだから。
0357デフォルトの名無しさん2015/01/17(土) 00:58:55.58ID:OhSrciBg
>>356
細かい挙動は全部その特定OS依存ということにして一切責任を持たないってこと?
それだとOSやライブラリのバージョンアップでいつのまにか挙動が変わっている可能性があるよね
結局君が糾弾してるRubyのいい加減な互換性ポリシーの解決にはなってないように思うけど?
0358デフォルトの名無しさん2015/01/17(土) 01:02:31.67ID:wTJ7pWQH
エサをやらないでください
0359デフォルトの名無しさん2015/01/17(土) 01:31:57.43ID:GVSMjF7o
>>357
仕事が増えて良かったじゃないかw
0360デフォルトの名無しさん2015/01/17(土) 01:35:42.96ID:54e9ps0Z
>>357
linux の主要ディストリのうちの一つをターゲットにする以上の
どんなことが出来ると?
無理じゃん。出来ないことを言うのは無責任だ。
0361デフォルトの名無しさん2015/01/17(土) 01:46:01.93ID:lr/+xWwF
OS依存でもなんでもなくて、そのOS向けに提供されてるCライブラリ依存なんだけどなー
で、RubyとしてはCライブラリのどの機能を使っているかさえ言っていれば後はどうでもいい
世の中のスクリプトの大半はそういうものなんだし
0362デフォルトの名無しさん2015/01/17(土) 01:55:04.37ID:54e9ps0Z
同じことだ。言い逃れにすぎん。
ただし、Java の除く言語はそういうもんだというのはその通り。
0363デフォルトの名無しさん2015/01/17(土) 01:58:03.05ID:KTLYytk1
CライブラリがOS依存だから間違っちゃいない
0364デフォルトの名無しさん2015/01/17(土) 01:59:07.30ID:lr/+xWwF
言い逃れでも何でもなくて、それで用が足りてるんだよ
それ以上のものを目指しているJavaはそういう思想であり、Rubyなどのスクリプト言語は
用が足りてる以上のものにリソースをかけないという思想

思想の問題であり、どっちがいいとか悪いとかはない
0365デフォルトの名無しさん2015/01/17(土) 02:04:38.39ID:KTLYytk1
最近はsupported platformって明記されないんだっけ?
2.0はこんなのあったけど。
ttps://bugs.ruby-lang.org/projects/ruby-trunk/wiki/20SupportedPlatforms
0366デフォルトの名無しさん2015/01/17(土) 04:02:49.01ID:RHwmJIAr
#0〜3 まで再帰 → 0,1,2,3

def go(layer=0)
p layer
return if 3 == layer

layer += 1
go(layer)
end

go()
0367デフォルトの名無しさん2015/01/17(土) 07:03:46.29ID:RHwmJIAr
row_0 = [0, 1, 2]
row_1 = [10, 11]

ary4 = []
# 参照を代入する。ジャグ配列
ary4[0] = row_0
ary4[1] = row_1

row_0[1] = 'A'
p row_0
[0, "A", 2]

p ary4
[[0, "A", 2], [10, 11]]
0368デフォルトの名無しさん2015/01/17(土) 10:52:19.15ID:RHwmJIAr
row_1 = [10, 11]
ary4 = []

これは参照の代入になるけど(同一オブジェクト)、
ary4[0] = row_1

これはすべての要素がコピーされる。
別々のオブジェクト
ary4[1] = row_1[0..1]
0369デフォルトの名無しさん2015/01/17(土) 10:52:43.46ID:8Ci9w5pz
ここは「Ruby 初心者スレッド」であって「あらゆる話題をRubyの仕様互換に持って行くスレッド」ではないんですけど。
スレチだからJavaマンセー君は専用スレッドでも立ててそちらで仕様がない議論でもしていてください。
0370デフォルトの名無しさん2015/01/17(土) 10:55:00.82ID:ZprTe1JK
無駄な忠告だ
従う理由がないだろw
03713682015/01/17(土) 13:23:23.57ID:RHwmJIAr
row_1 = [10, 11]
ary4 = []

これはすべての要素がコピーされる。
別々のオブジェクト。参照のコピーではない
ary4[0] = row_1[0..1]

Pythonなら[0:2]で、0〜2未満をコピーする
x = row_1[0:2]

[:]と開始・終了インデックスを省略すると、
すべての要素をコピーする
x = row_1[:]

Rubyにも、このように簡単に、
すべての要素をコピーする方法がありますか?
0372デフォルトの名無しさん2015/01/17(土) 13:45:41.57ID:v/9DdXFv
row_1 = [10, 11]
x = row_1.dup

Pythonと同じくshallow copyなのでそこは注意
0373デフォルトの名無しさん2015/01/17(土) 19:58:27.07ID:EKnWULGy
dupとcloneの違いはfrozen等を引き継ぐか引き継がないからしいが
そもそもruby界隈でObject#freezeはあまり使われていないような気がするのだが
どうか
0374デフォルトの名無しさん2015/01/17(土) 20:09:48.80ID:OhSrciBg
何の意味もないからな
あるメソッドAの引数にfrozenなBを渡してエラーにならないかどうかは結局Aの実装次第であって、
そもそも破壊されないのがわかってるなら別にfreezeする必要ないっていう
0375デフォルトの名無しさん2015/01/17(土) 20:26:14.62ID:v/9DdXFv
dupとcloneに違いがあるとは知らなかった
オブジェクトの汚染っていう概念も初めて知ったわ
web対応って大変ね
0376デフォルトの名無しさん2015/01/17(土) 20:43:09.46ID:OhSrciBg
いや、いくらセキュリティ機能があろうと、どこの馬の骨とも知れない奴によって入力された文字列
サーバーで実行すること自体絶対にありえないからね?
taintはRuby上で複数のドメインのコードを動かすのを想定した仕組みだけど、
普通はそんなことしないでプロセス単位で扱うののが普通だし
0377デフォルトの名無しさん2015/01/17(土) 21:32:28.17ID:EKnWULGy
なぜあまり使われないのか深く考えたことなかったが
ttp://m.onkey.org/ruby-i-don-t-like-3-object-freeze
こういう問題もあるんだな・・・
たしかにこの挙動はイラっとくる。論理的な一貫性はあるけど
欲しいものと微妙にズレてるというか・・・
俺が欲しいのはものすごく単純なconstなんだけど。
0378デフォルトの名無しさん2015/01/17(土) 22:16:42.97ID:OhSrciBg
メンバを連鎖的にfreezeしてたら全てのオブジェクトをfreezeすることになってしまうからな
RubyでC++のような連鎖的なconstを実装するんならオブジェクトの状態としてfrozenを持たせるんではなくて、
constなメソッド呼び出しの先の全てのスタックフレームにfrozenフラグを立てて
frozenなフレーム内では一時的にレシーバが変更できなくなる仕様にするのが筋かと思う
03793682015/01/18(日) 08:58:17.52ID:64baGbNB
def bb(ary)
ary[0] = 'A'
p ary
end

ary = [1, 2]
bb(ary)

p ary
["A", 2]
["A", 2]

関数の引数に、配列を渡すと、参照渡しになり、
関数の内部で、配列に加えた変更が、
関数の外で定義された配列にも及ぶ(同一の配列)

ary = [1, 2]
bb(ary)

の時に自動的に、配列のすべての要素を、
コピーして渡すことは出来ないか?
つまり、別々の配列となる

bb(&:ary)
こういう簡単な記法はないの?
0380デフォルトの名無しさん2015/01/18(日) 10:01:34.23ID:QxSzEZO/
Marshal.load(Marshal.dump(ary))
0381デフォルトの名無しさん2015/01/18(日) 11:47:12.82ID:g7at9IyQ
>379
最近はrubyでも副作用は嫌われる傾向にあるので、
bbは渡された配列を変更せず新しい配列を返す実装にすべき。
bbの実装が変更できずやむを得ない場合は>380
0382デフォルトの名無しさん2015/01/18(日) 12:12:41.32ID:YQ/T1PKN
>>379のような状況が出てくること自体が理解できない
bbが引数の内容を変更するってことはその変更された結果を後で使うんだろ?
ならコピーして渡したところで意味がないんじゃないの?
もしくはbbが引数を変更しつつまた別の結果を戻り値として返したり別の場所に副作用を起こすような意味不明な仕様なのか?
0383デフォルトの名無しさん2015/01/18(日) 14:22:54.74ID:AMauTogu
いやだからその場合でも
bb(ary.dup)
でいいよ

配列をコピーするというメソッドはあるが記法はない
0384デフォルトの名無しさん2015/01/18(日) 14:52:01.11ID:QxSzEZO/
dupじゃダメ
0385デフォルトの名無しさん2015/01/18(日) 15:02:37.63ID:AMauTogu
浅いコピーなのに気を付ける前提ならdupでいいでしょ
ダメとだけ書いても理解されない
0386デフォルトの名無しさん2015/01/18(日) 16:17:34.94ID:UJDOWW1C
ActiveSupport 突っ込んで Array#deep_dup なら deep copy もできる。
0387デフォルトの名無しさん2015/01/19(月) 00:38:55.11ID:kt81hAib
ちょっとお聞きします
rubyで遊ぶのに適した環境てやっぱりlinuxですか?


winのrubyを触ってて楽しいなと感じていたんですが、gemで蹴られたり、エンコードに癖があったりで
章を進めるにしたがい不便を感じ初めています。
最初からlinuxを選択するべきか悩みましたが
linxについてまるで経験がないので、rubyの前にlinux仕様を覚えなければならない手間の増加に腰が引け・・・winを選択したしだいです。

rubyを始めたばかりなので、「まずrubyの足元」を固めたい。
そのために「ハードルを下げたい」のですが
OSの選択と開発環境について何かアドバイスがあればお願いします。
独学で相談する相手もいないので、ubutuにしようか、winで続けようか、それともCentOs・・悩んでいます

(手違いで2ch.scに投稿したので2ch.netに書き直しです。.scは.net側から読めないため移動しました)
0388デフォルトの名無しさん2015/01/19(月) 00:54:14.54ID:hwzu+AsP
勉強段階ならWindowsでも十分かと。Linuxの方が楽なのは確かだが。
エンコードってそんなに面倒かな?
0389デフォルトの名無しさん2015/01/19(月) 01:05:43.71ID:kt81hAib
返答ありがとうございます
対処法を「探しあてる」までちょっと面倒だったりします。
まだ参考コードを片手に本と画面のにらめっこの段階なので・・・

参考コードをタイプして動かないと時間と精神的に・・・ 
0390デフォルトの名無しさん2015/01/19(月) 01:15:33.96ID:m1sXYci2
プログラミング初心者は日本語やgemに手を出すべきではないのだ
文法に慣れて標準ライブラリをいくつか使えるようになってからで十分
0391デフォルトの名無しさん2015/01/19(月) 01:42:43.59ID:QnWCi45e
エロ画像をまとめて落とすという目的こそが、ruby習得の最短
目的もなく勉強しても身につかない
03923682015/01/19(月) 03:02:48.75ID:aeY3ubQM
>>382
def bb(ary)
ここで配列を変更しながら、何回かbb()を呼ぶ
bb(ary)
end

ハノイの塔・将棋などのゲームの手順などを、
深さ優先のスタックの代わりに、
再帰関数で実装しているので、

個々の関数の中では、配列を変更するのだが、
別々の配列を使う方が、
変更した配列を捨てるだけでよいので、
元に戻す手間が省ける

>>387
漏れはWin8なので、TeraPadで書いて、
ttps://paiza.io/
にコピペして、実行している
0393デフォルトの名無しさん2015/01/19(月) 07:44:53.64ID:eQbtjaRR
このスレにいるくらいだから、当然だけど
もろ初心者ね
0394デフォルトの名無しさん2015/01/19(月) 08:01:08.16ID:UWF/Jaig
どっちが楽とかいう問題じゃなくて
WebがやりたいんだったらRuby云々よりも運用知識の方が重要なくらいだから
当然実際の稼働環境(UNIX系)となるべく似た環境で開発しないと意味がないし、
Winから他へ乗り換える予定もUNIXで何か運用する予定もないならLinuxで開発しても仕方ないだろう
言語なんかたかが道具だよ
0395デフォルトの名無しさん2015/01/19(月) 09:42:39.75ID:aeY3ubQM
Rubyist は、Ruby自体を楽しむ人だから、
Rubyをすること自体が目的

そんな小難しい話はいらない
Let's Ruby!
Ruby, Matz、鳥取・島根 万歳!

ここは初心者スレだから、難しい話をする人は、
もう一つのスレの方でやって
0396デフォルトの名無しさん2015/01/19(月) 10:44:00.79ID:D2Bly1oF
Windows対応を明記してある本を買ってきてそれで勉強したらいいんじゃない?
たとえば『作りながら学ぶRuby入門』は Windows/Mac OS X 対応だったよ。
0397デフォルトの名無しさん2015/01/19(月) 19:14:10.29ID:UWF/Jaig
最近だとWindows対応を謳いながら
VirtualBoxのインストールから始まる本が多いけどなw
0398デフォルトの名無しさん2015/01/19(月) 19:44:38.39ID:m1sXYci2
Windows/Mac/Linuxでの操作やインスコの手順が併記してある本とか
書くのも読むのも苦痛だからな・・・
0399デフォルトの名無しさん2015/01/19(月) 22:45:58.11ID:kJb8u5Xb
WebがやりたいならLinux(CentOS系)で始めろというのは全く同意するが
Windowsでも無価値ではないぞ。俺はShellscript代わりに重宝している。
Rubyとしては邪道な使い方かもしれんがそれでも
PowerShell人口よりは多いだろうよ・・・
0400デフォルトの名無しさん2015/01/20(火) 04:05:02.59ID:ce3GiAbD
str.lines do |line|
f.puts line.chomp!
end

ちょっぷしてぇええ!!
04013682015/01/20(火) 06:11:14.89ID:tR2SZl1M
aa = [1, 2, 3]

x = aa[0..100]
xx = aa[0..-1]

aa[1] = 'B'

p aa #=> [1, "B", 3]
p x #=> [1, 2, 3]
p xx #=> [1, 2, 3]

うおー![0..-1][0..100]など、
終わりのインデックスを、-1か、
最後の要素より、大きい数字を入れたら、
すべての要素が簡単にコピーできる!
0402デフォルトの名無しさん2015/01/20(火) 07:02:00.36ID:quI2Cspp
>>401
それ配列が空だったらエラーになるから一貫性のない頭の悪い方法
0403デフォルトの名無しさん2015/01/20(火) 07:24:19.26ID:q7S0YejK
なるか?
04044022015/01/20(火) 07:36:46.41ID:quI2Cspp
すまん勘違いだわ
頭の悪いのは俺だった
0405デフォルトの名無しさん2015/01/20(火) 07:45:02.30ID:Y4m7VuCx
m9
0406デフォルトの名無しさん2015/01/20(火) 08:14:30.35ID:tR2SZl1M
cc = 1

def bb
cc = 'A'
p cc #=> A
end

bb
p cc #=> 1

Rubyでは内外のccが、別々の変数(スコープ)となる

外側で宣言したccを、簡単に関数の内側で使いたいが、
どうすればよい?
ただし、グローバル変数以外で
0407デフォルトの名無しさん2015/01/20(火) 08:33:36.19ID:quI2Cspp
クラスを使う
簡単じゃないだろうけど避けて通れない道
04084062015/01/20(火) 08:55:45.97ID:tR2SZl1M
>>406 自己レス
cc = 1
# トップレベルで、define_methodを呼び出す
Kernel.send :define_method, :bb do

# def bb
cc = 'A'
p cc #=> A
end

bb
p cc #=> A

def bb の代わりに、
トップレベルで、define_methodを呼び出すと、
Kernel.send :define_method, :bb do

内外のccが、同一の変数(スコープ)となった
0409デフォルトの名無しさん2015/01/20(火) 10:07:56.04ID:mp2703SQ
そんなことするくらいならラムダのほうがまし
cc = 1
bb=->{
cc = 'A'
p cc #=> A
}
bb.call
p cc #=> A
04104062015/01/20(火) 11:21:08.26ID:tR2SZl1M
いや、関数の外側で定義する変数・コンテナが、
たくさんあるのよ

それらをすべて簡単に、関数の内側で使いたい
0411デフォルトの名無しさん2015/01/20(火) 11:54:53.29ID:Y4m7VuCx
この手の奴は放置で見守るに限る
04124062015/01/20(火) 12:47:13.19ID:tR2SZl1M
関数の引数に、配列を渡して変更していたら、はまった!

配列の各要素をコピーしないから、
同一の配列を変更していて、
それに気づくまで、延々とはまった

関数の中で、すべての要素をコピーすればよいのか?

def aa(ary)
xx = ary[0..-1]
end
0413デフォルトの名無しさん2015/01/20(火) 13:33:23.01ID:h23euKpJ
ついさっき同じ質問してたじゃん
ちゃんとレス読めよ
04144062015/01/20(火) 13:47:50.26ID:tR2SZl1M
配列が参照渡しというのを、すぐ忘れてしまう

関数の中で、配列を変更しないように、
気をつけているが、それもすぐに忘れてしまう。
どこかで、代入してしまう

それだけ無意識で、コーディングが速い。
無想の境地。Ruby 恐るべし
0415デフォルトの名無しさん2015/01/20(火) 13:54:47.99ID:M5BHFTcG
ここはお前のブログじゃねえっての
0416デフォルトの名無しさん2015/01/20(火) 15:33:53.92ID:e9cTGLx2
地球環境に配慮して今日中に死ね
04174062015/01/20(火) 17:24:06.78ID:tR2SZl1M
Person_ary = ('A'..'D').to_a
["A", "B", "C", "D"]
["AB", "B", "C", "D"]

ttps://paiza.io/
で実行しているが、p で表示すると、
いつの間にか配列の'A'が、'AB'に変わってしまう。
配列に代入している箇所は無い
環境のバグ?

それにそもそも、大文字で始まる変数名は、
定数じゃないのか?

トップレベルで、define_methodを呼び出して、
関数外で定義した配列を、関数内で使っているから?
さらに、この関数は再帰関数なのです

Kernel.send :define_method, :go do |
per_ary, layer=0, total_time=0 |

元の配列を変更しないように、
すべての要素をコピーして、関数に渡しているのですが、
ary2 = Person_ary[0..-1]
go(ary2)
0418デフォルトの名無しさん2015/01/20(火) 17:25:29.93ID:7ow9yZfB
他のscriptから配列を文字列として引数で渡して、
ruby上で配列として実行したいんですがうまくいきません。何か良い方法はありますか?
0419デフォルトの名無しさん2015/01/20(火) 17:45:03.42ID:q7S0YejK
>>418
ちょっと状況がよくわからない
配列を標準出力に出力するスクリプトがあってそれをRubyスクリプトで受け取りたいのか
それともRubyスクリプトに定義してある配列を他のRubyスクリプトでも使いたいのか
それともそれ以外?
0420デフォルトの名無しさん2015/01/20(火) 17:56:37.98ID:7ow9yZfB
やっぱわかりづらかったですね。すみません。
ruby側で"[[1,2],[3,4]]"という状態で受けた文字列を
そのまま配列として使いたいのですがうまくできません。
04214062015/01/20(火) 18:05:32.81ID:tR2SZl1M
>>417 自己レス
Kernel.send :define_method, :go do |
per_ary, layer=0, total_time=0 |

トップレベルで、define_methodを呼び出すのをやめて、
def go(per_ary, layer=0, total_time=0)

このように普通の関数に戻して、
関数内で使う変数を、すべてグローバル変数に替えたが、
やはり同じ現象が起こる。原因不明
0422デフォルトの名無しさん2015/01/20(火) 18:09:03.35ID:bOdKTSkA
>>417
例えば
ary = ("A".."D").to_a
ary2 = ary.dup
ary2[0] += "B"
だとary2だけ変更されるけど
ary2[0] << "B"
とか
ary2[0].downcase!
だと両方変更される
この時、aryとary2は別の配列オブジェクトだけど、それで参照される要素は同じオブジェクトだから
代入なら一方だけしか変更されないけど、参照されるオブジェクトの破壊的メソッドを呼び出すと両方変更される

定数が定数じゃないのはrubyの仕様
0423デフォルトの名無しさん2015/01/20(火) 18:12:22.71ID:tR2SZl1M
>>420
そのまま変数に代入できないの?
.to_a は?

ary = ('A'..'D').to_a
["A", "B", "C", "D"]
0424デフォルトの名無しさん2015/01/20(火) 18:15:39.95ID:M5BHFTcG
>>420
evalじゃダメなの?
0425デフォルトの名無しさん2015/01/20(火) 18:24:07.45ID:7ow9yZfB
>>424
ありがとうございます。
evalあったんですね(^_^;) あっさりできました。
ずっと#{ }でなんとかするのかと格闘してました。スレ汚しすみませんでした。
04264062015/01/20(火) 18:54:32.80ID:tR2SZl1M
>>417 自己レス
ary2 = $Person_ary[0..-1]
go(ary2)

このgoが再帰関数になっていて、引数に配列を渡していくから、
ずっと同じ配列をいじくっているのかな?

ary2 = $Person_ary[0..-1]

でもこの文で、すべての要素がコピーされて、
ary2と$Person_aryは、別々のオブジェクトにならないの?
04274062015/01/20(火) 19:10:13.93ID:tR2SZl1M
>>426 自己レス
>ary2 = $Person_ary[0..-1]

>でもこの文で、すべての要素がコピーされて、
>ary2と$Person_aryは、別々のオブジェクトにならないの?

object_idは異なっていた
0428デフォルトの名無しさん2015/01/20(火) 19:11:36.56ID:bOdKTSkA
>>427
ary2[0]とPerson_ary[0]のオブジェクトIDを調べてみ
0429デフォルトの名無しさん2015/01/20(火) 19:19:52.78ID:jzLWySUR
>>380、>>386あたりで解決してんじゃん。
答えてもらっても実践しないなら初めから質問なんかしなければいいのに。
04304062015/01/20(火) 19:39:26.27ID:tR2SZl1M
>>427 自己レス
ary2と$Person_aryの、object_idは異なっていたが、

ary2[0]と$Person_ary[0]の、object_idは同じだった!


もう気が狂いそう。爆発します
カタカタ、カタカタ、カタ、ドッカーン!
0431デフォルトの名無しさん2015/01/20(火) 19:48:41.70ID:I5Fz89mC
次書き込んだら殺す
0432デフォルトの名無しさん2015/01/20(火) 19:48:48.59ID:5Fj8tUhx
>>430
>>422の人が丁寧に解説してくれてるだろ
0433デフォルトの名無しさん2015/01/20(火) 19:51:03.94ID:q7S0YejK
>>431
弁護はまかせろ
04344062015/01/20(火) 19:57:22.33ID:tR2SZl1M
>>401
では、aa[1]に代入しても、
配列x,xxは変化しなかったのに、なぜ、
>>430 のような事が起きるの?

aa[1]に代入した瞬間に、
別のオブジェクトが作られるのかな?

aa = [1, 2, 3]

x = aa[0..100]
xx = aa[0..-1]

aa[1] = 'B'

p aa #=> [1, "B", 3]
p x #=> [1, 2, 3]
p xx #=> [1, 2, 3]
0435デフォルトの名無しさん2015/01/20(火) 20:05:02.74ID:5Fj8tUhx
>>434
だから>>422読めっての
04364062015/01/20(火) 20:19:04.50ID:tR2SZl1M
元の配列を変更しないように、
すべての要素をコピーして、関数に渡しているのですが、
Person_ary = ('A'..'D').to_a
ary2 = Person_ary[0..-1]
go(ary2)

def go(per_ary)
go(再帰関数に、また別の配列を渡す)
end

どこで、ary2, per_aryを変更しているのか、
変更箇所が見当たらない

そして知らぬ間に、まるで魔法のように、
Person_aryの'A'が、'AB'に変わってしまう
["A", "B", "C", "D"]
["AB", "B", "C", "D"]
0437デフォルトの名無しさん2015/01/20(火) 20:25:57.00ID:JNlE/+5w
いちいち○○読めとかお前のブログじゃねえとか突っかかってる奴は
首の上にカボチャでも載せてんですか
0438デフォルトの名無しさん2015/01/20(火) 20:28:40.86ID:w3vLPuuc
いやいやID:tR2SZl1Mは擁護できないだろ
答えても無視して同じ質問ダラダラ繰り返すんだから邪魔で仕方がない
0439デフォルトの名無しさん2015/01/20(火) 20:32:23.61ID:7DC6CjZy
>>437
>>349あたりから読んでも同じことが言えるかな?
0440デフォルトの名無しさん2015/01/20(火) 20:35:37.31ID:JNlE/+5w
いやいや、荒らしには触らないなんて基本的なことを理解してないようだから
頭がついてないか空洞なんだと思ったけど違ったか?
0441デフォルトの名無しさん2015/01/20(火) 20:36:27.21ID:7DC6CjZy
はい、そのとおりです。すみませんでした。
0442デフォルトの名無しさん2015/01/20(火) 20:44:23.29ID:q7S0YejK
配列のCoWとか面白い話題なんだけど展開が残念

>>425
念のためだけど外部からの入力にevalしないでね
eval "[1, 2, `del yourfile`]" とかで死ぬから
0443デフォルトの名無しさん2015/01/20(火) 21:24:14.75ID:4I0Y1qEs
require 'yard'
include Math
とするとyardの中にもMathにもlogというメソッドがあるため不具合が生じてしまいました
yardのlogはほとんど使わないしまた使われてもいないのでファイル中のlogを別の名前に置き換えて対処しているのですが、とても良い方法とは思えません
何かうまい方法はないでしょうか?
04444062015/01/20(火) 21:53:24.90ID:tR2SZl1M
$Person_ary = ('A'..'D').to_a
#=> ["A", "B", "C", "D"]

ary2 = $Person_ary[0..-1]
go(ary2)
def go(per_ary)

combi = per_ary.combination(2)
combi.each_with_index do |p_ary, i|
# per_ary[0] → p_ary[0]は同じobject_id

per_0 = p_ary[0]
何でこの代入が(値は'A')、同じオブジェクトやねん!
これぐらい別のオブジェクトにしろよ

$Person_ary[0] → ary2 → per_ary[0]
→ p_ary[0] → per_0
なんと、これらがすべて同じobject_id

per_0 << 'B'

per_0には'A'が入っているが、
最後にこれらがすべて、'AB'に変わってしまう!

ここまですべてが同じオブジェクトだって、誰がわかる?
0445デフォルトの名無しさん2015/01/20(火) 22:03:00.40ID:tR2SZl1M
>>443
その関数だけ、
モジュール名を付けて呼び出せないの?

Math::log
0446デフォルトの名無しさん2015/01/20(火) 22:06:10.20ID:B3TactEM
>>436
恐らく誤って変更してしまっているのは配列ではなく、文字列のほう。
Rubyの文字列は変更可能。そして += と << が等価ではないのもそれに起因する。
「str<<式」はstrが参照する文字列自体を変更する。
「str+=式」はstr+式の新たな文字列を作成し、strが新たな文字列を参照するように変える。
0447デフォルトの名無しさん2015/01/20(火) 22:10:24.86ID:4I0Y1qEs
>>445
require 'foo'
require 'bar'
実際は上のように使っていて、
fooではrequire 'yard'、barではinclude Mathしており
どっちもモジュール名などを付けずに書かれているので困っているのです。
0448デフォルトの名無しさん2015/01/20(火) 22:10:58.55ID:OvbknBRr
rubyとpython両方使ってると今でも
文字列の変更可能性と定数の扱いで混乱しちまう。
0449デフォルトの名無しさん2015/01/20(火) 22:14:39.33ID:q1aCw1+q
>> 444
初心者が嵌りやすいトラップだ。いい勉強になって良かったね

昔ruby trapっていうドキュメントがあったけど無くなっちゃったのか?
04504062015/01/20(火) 22:28:19.59ID:tR2SZl1M
combi = A.combination(2)
combi.each_with_index do |B, i|

C = B[0]

A[0] → B[0] → C

文字列が入っているとして、
これらが同じobject_idなのは、予想できんわ
0451デフォルトの名無しさん2015/01/20(火) 22:33:30.37ID:mp2703SQ
Rubyの変数はすべてCのポインタだとおもっとけばいいんじゃないかな(適当
0452デフォルトの名無しさん2015/01/20(火) 22:35:08.90ID:mp2703SQ
ポインタからポインタに代入してもオブジェクトはコピーされないし
ポインタの配列をコピーしても中身はコピーされないし
ポインタ自体をconstにしても参照先は書き換え可能だし
0453デフォルトの名無しさん2015/01/20(火) 22:45:19.24ID:LYCYgqf6
>>447
YARD が「トップレベル」の名前空間でメソッド log を宣言しているのが問題だね
さらに bar でも「トップレベル」でモジュール Math をインクルードしているから、
名前 log が衝突していると ....
YARD と bar、どちらの作者ともに作品がライブラリとして再利用される事に対する
想像力が欠けていた、あるいは思慮が足りなかったと言うしかない

もしも bar を作ったのが >>447 自身であるなら、
bar 全体を独自のモジュールとして定義し、
その中で Math をインクルードすれば衝突を回避できる(Math.log が優先される)

 module Foo; include Math; .... end

そうでないなら、お手上げだなあ
0454デフォルトの名無しさん2015/01/21(水) 01:22:41.56ID:nNlZ8uj4
  ★★★二度と戦争をしない為に最も確実な方法は、日本が核を持つことである★★★
  http://jbbs.livedoor.jp/study/3729/storage/1069408696.html#82

↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
  この掲示板に優秀な書き込みをして、総額148万円の賞金をゲットしよう!(*^^)v
0455デフォルトの名無しさん2015/01/21(水) 01:57:16.89ID:xWoGAr8y
Array の初期化の仕方がほんっとわからん。
特に2次元で初期化しようと思ってうまく出来た事がない。
いつも結局バカみたいに代入することになる。
0456デフォルトの名無しさん2015/01/21(水) 02:41:54.86ID:/GBHGoCO
分かる
多次元の初期化は手間がかかって困る
0457デフォルトの名無しさん2015/01/21(水) 03:15:12.53ID:qBatZceh
>>455
イテレーター使ってる?
二次元配列を
Array.new(10, Array.new(3))
みたいにやっても駄目
Array.new(10){Array.new(3)}
ならちゃんと二次元配列になる
上の書き方だとArray.new(3)が呼び出されるのは一回だけで、その一つのオブジェクトをすべてが参照してる状態になってる
下だと要素の数分Array.new(3)が呼び出されて、それぞれが別のオブジェクトを参照してる状態になる
0458デフォルトの名無しさん2015/01/21(水) 04:27:38.93ID:Jm/vxooP
$ irb
irb(main):001:0> mtx = Array.new(3) { |y| Array.new(2) { |x| [x, y] } }
=> [[[0, 0], [1, 0]], [[0, 1], [1, 1]], [[0, 2], [1, 2]]]
irb(main):002:0> puts mtx.map { |xs| xs.map {|(x, y)| format("(%d, %d)", x, y )}.join(', ') }.join("&yen;n")
(0, 0), (1, 0)
(0, 1), (1, 1)
(0, 2), (1, 2)
=> nil
irb(main):003:0>
0459デフォルトの名無しさん2015/01/21(水) 11:01:19.39ID:NFFhaRBc
>>442
>念のためだけど外部からの入力にevalしないでね
>eval "[1, 2, `del yourfile`]" とかで死ぬから
ありがとうございます。
そんな高度な事はしてないので問題ないのですが、考えてみると怖い命令ですね。
0460デフォルトの名無しさん2015/01/21(水) 12:30:39.60ID:aA1tn61G
YAML使えばいいんじゃね?
0461デフォルトの名無しさん2015/01/21(水) 21:20:45.16ID:UODHxGjG
YAML.loadはinitializeを経由せずインスタンスを生成する。
ゆえにnilの代わりにカラ配列を使ってるような構造には弱い。
0462デフォルトの名無しさん2015/01/21(水) 23:32:42.08ID:2ayQ13oI
個人的にはArray.newなんてほとんど使わんな
大抵は
(1..n).map{|i|(1..m).map{|j| i+j }}
みたいにmapで作るわ
0463デフォルトの名無しさん2015/01/21(水) 23:46:58.80ID:e6Du7UL/
mapとかfilterとか使うなら事前に配列作っとく必要もなくね
関数型スタイルに近づくと配列をインプレースで更新すること自体あんまりやらなくなるからな
0464デフォルトの名無しさん2015/01/22(木) 23:36:58.70ID:7mvG+vzB
mapとか統一的に使うためにカラ配列にしとくんじゃないのか?
nilだとmethod_missingになっちまうし。
俺はnil?で場合分けする方が特異に感じる。
0465デフォルトの名無しさん2015/01/23(金) 00:28:00.11ID:jEuXrIMX
>>464
そうじゃなくて、使うときに作るんだよ
大抵、事前に配列を初期化する必要があるのは配列作った後で中身を更新する場合だ
0466デフォルトの名無しさん2015/01/23(金) 07:55:08.06ID:0oMxYtZz
>>459
亀だけど、他スクリプトの文字列配列を“任意記号でつなげた単なる文字列”にしといて、受け取る側でsplitする方法もある
多少面倒臭いけどeval乱用しなくて済むと思う
0467デフォルトの名無しさん2015/01/23(金) 08:03:28.83ID:4FZvpJWI
gem使えるならparser#literal_evalみたいなのを使う
ぜひ標準で欲しい
0468デフォルトの名無しさん2015/01/23(金) 10:26:57.08ID:kLOpfBTA
if 条件1
 文 if 条件2
end

if修飾子(後置if)
これでも、文の構造を間違わないのには感心する。
たぶん、if,endの数を数えているのだろう

それに、++,-- のインクリメント・デクリメントが無い。
グローバル変数には、'$'を付ける。
内側のスコープで、外側の変数を使えない

これらにより、ややこしい間違いを防げるなど、
Matzはよく考えているな
0469デフォルトの名無しさん2015/01/23(金) 11:33:14.50ID:jEuXrIMX
そんなもんコンパイラ技術の基本中の基本
初心者向けの本一冊読めば>>468でも作れるよ
0470デフォルトの名無しさん2015/01/23(金) 15:30:18.97ID:rINQxVSH
Rubyガチの初心者レベルが集まってるようなサイトや掲示板って無いでしょうか?

対処として本家メーリングリストを覗いてみたのですが・・ 
お馬鹿な質問してる人はほぼいないので迷惑がかかりそう・・

いまの対処法はサンプルコードを時間をかけて探す・・
その中に理解できないのがコードがあると、さらに積み重なり・・・ それを調べるとどんどんと深みにハマっていき
いったい何を探しているのか・・・ 泥縄式
0471デフォルトの名無しさん2015/01/23(金) 15:36:10.47ID:ca5XUMYE
http://peace.2ch.net/test/read.cgi/tech/1418430552/
0472デフォルトの名無しさん2015/01/23(金) 16:06:21.22ID:3yNzan63
>>470
答えられるかわからないけどためしに質問してみては
0473デフォルトの名無しさん2015/01/23(金) 16:15:03.63ID:uMcR+6pK
>>470
何か作りたいものを決めて、どうやって作るかという観点で学習したほうが速いと思う。
0474デフォルトの名無しさん2015/01/23(金) 17:08:49.68ID:kLOpfBTA
>>470
漏れが今から、初心者としての手本を見せてやろう↓

=begin
〜
〜
=end

ファイルAの中で、=begin,=endで囲まれた部分を、
すべて除いたものを、ファイルBに出力したい

そういうツールある?
無ければ、誰かソースコードを書いて!
お願いしま〜す
0475デフォルトの名無しさん2015/01/23(金) 17:21:36.65ID:3yNzan63
ruby -e'print ARGF.read.sub(/^=begin.*^=end/m, '')' fileA.rb > fileB.rb
04764742015/01/23(金) 17:39:05.42ID:kLOpfBTA
有難うございますた。ペコリ

>>470
ほらね。ものの10分ほどで、
誰かが書いてくれまっしゃろ

ttps://paiza.io/
そしてこれをここにコピペして、実行しますのよ
0477デフォルトの名無しさん2015/01/23(金) 17:45:50.50ID:flsP1yua
作りたいもの作ればいいんじゃね?
コード読むとかまじめ過ぎんよ
0478デフォルトの名無しさん2015/01/24(土) 07:15:10.75ID:CE2XF3sB
64bit Windowsに32bit Rubyを入れているのですが、DevKitはどちらのバージョンを入れればよいのでしょうか?
0479デフォルトの名無しさん2015/01/24(土) 10:28:15.06ID:sa+x1Xzy
正直、ネイティブ拡張が必要になった時点で
pure windowsは諦めてvagrant使うのが一番手っ取り早い
0480デフォルトの名無しさん2015/01/24(土) 17:50:50.26ID:zRrZ/E6b
http://codezine.jp/article/detail/8409

Ruby開発者・まつもとゆきひろ氏の新言語「Streem」のソースコードを読んでみよう! 〜 文法と構造を規定する「lex.l」と「parse.y」
0481デフォルトの名無しさん2015/01/24(土) 22:42:20.52ID:sZsKSyLo
Rubyやめて新言語かよ
とおもったら言語設計の学習向けサンプルか
0482デフォルトの名無しさん2015/01/24(土) 23:03:03.44ID:sa+x1Xzy
Rubyで再起下降パーサ書くとかなら面白いかもしれないが
今更C & yaccとか紹介されてもなあって感じ
こんなもんわざわざMatzが解説しなくてもどの教科書にも載ってるだろ…
0483デフォルトの名無しさん2015/01/24(土) 23:13:51.32ID:4gU3kMxY
言語ヲタクとして後継を育てたいんだろう
0484デフォルトの名無しさん2015/01/24(土) 23:33:26.92ID:sZsKSyLo
このcodezineの記事はMatzの記事じゃないでしょ
Matzのは日経Linuxに載るそうな
0485デフォルトの名無しさん2015/01/24(土) 23:41:25.90ID:uW+Hb/Mt
処理系の作成に使われてる技術や考え方は他でも役立つものばかり
自分は使う側だからと思ってる人も一度はトライすべき

だとわかっていながらやらずに10年が経った
0486デフォルトの名無しさん2015/01/24(土) 23:57:28.38ID:sa+x1Xzy
>>485
考え方には同意するが、勉強目的で処理系を作るなら字句解析や構文解析は手書きするべきだと思う。
他で役立つのって特にその部分だから。
0487デフォルトの名無しさん2015/01/25(日) 00:20:22.56ID:J7dtxD4G
>>486
そうかぁ?
構文解析とか泥臭い部分はライブラリに投げた方が勉強する部分にフォーカスできると思うけどなー
lexとかyaccは実績も超がつくほどあるものなんだし
0488デフォルトの名無しさん2015/01/25(日) 00:29:56.97ID:6mma36Hg
練習課題で作るような簡単なスクリプト言語ならASTができた時点で終わりみたいなもんじゃね
あとはノードに対応する処理を適当に書いていくだけで、それこそ単純作業だわ
ソースコードのパースは再帰とか抽象化とかプログラミングの基礎体力を付けるにはいい練習だよ
0489デフォルトの名無しさん2015/01/25(日) 00:33:47.61ID:J7dtxD4G
>>488
プログラミングと言語設計とは別の話だと思うが
0490デフォルトの名無しさん2015/01/25(日) 00:45:12.52ID:DUp54GVi
お題 Rubyの配列パーサを書け
配列の要素は配列([...])、正の10進数(123)、ダブルクォート文字列("...")に限定
例 [1, 234, [5, "67", []], 8]

30分で解けたらこのスレ卒業
0491デフォルトの名無しさん2015/01/25(日) 14:43:11.53ID:R3Fg53IN
redmineのアップグレードってgem updateじゃできませんよね
なんか簡単にできるほうほうありませんか?
毎回ソースコードをダウンロードして解凍してgemをインストールしないとダメなんでしょうか?
0492デフォルトの名無しさん2015/01/25(日) 17:00:44.18ID:n4z0u1el
そんなに手間か?
公式のSVNリポジトリからチェックアウトするようにしてもいいけど、
実運用でheadを使うのはさすがに危険だから結局バージョンは選ばなきゃいけないので大して手間変わらん
0493デフォルトの名無しさん2015/01/25(日) 18:11:58.87ID:3aXiO/4E
あああそうれいいですね
git pullしたら楽でした
でもgit tagに2.6が含まれていませんでした
githubのredmineのtagを見に行ったら2.6.1まであったのに何故ですかね
0494デフォルトの名無しさん2015/01/25(日) 18:39:45.60ID:KIPmV6lx
windowsでpryをインストールしようとしたら
bad response Not Found 404って出てきてできないんですが
どうしたらいいですが?
0495デフォルトの名無しさん2015/01/25(日) 20:47:42.10ID:6mma36Hg
>>493
公式のSVNリポジトリ使いなよ
gitのはあくまでミラー
0496デフォルトの名無しさん2015/01/26(月) 17:03:01.35ID:5plsOsTa
SVNでいれることにします
ありがとうございました
0497デフォルトの名無しさん2015/01/26(月) 19:42:21.97ID:vPTi7mVl
redmineのガントチャートで週の始まりが月曜からなんですが
これ日曜から始まるようにする設定て何処でするんですか?
0498デフォルトの名無しさん2015/01/26(月) 22:29:09.39ID:BphtuPQw
>>497
https://groups.google.com/forum/#!forum/redmine-users-ja
04994742015/01/27(火) 10:05:23.11ID:giG1hU9r
>>474-476
475のやり方だと、
=begin
〜
=end

〜この部分も、削除されてしまう

=begin
〜
=end

=begin,=end間は(=begin,=endも含めて)削除したいが、
=end,=begin間はそのまま残したい。HELP!
0500デフォルトの名無しさん2015/01/27(火) 11:29:39.64ID:JO7zk1Y+
*を*?にすれば
0501デフォルトの名無しさん2015/01/27(火) 17:05:12.78ID:AnZGR/ca
>>500
「最初のbegin〜endしか削除されません」とか言ってきそう・・・
0502デフォルトの名無しさん2015/01/27(火) 23:03:18.27ID:6gdvwZDa
複数の配列の初期化を、変数の同時代入でやろうとしたら
何か変なんですがこれはどういう現象なんでしょうか?遡って代入されてる?

a = b = 1
a = 3
p a #=>3
p b #=>1 bは弄ってない
p "-----"
a = b = []
a << 3
p a #=>[3]
p b #=>[3] 何も入れてないのに勝手に3入ってる

aとbを逆にしてもaに勝手に3入ります
0503デフォルトの名無しさん2015/01/27(火) 23:34:18.96ID:w1lsmrbK
>>502
一口で言えば、代入演算子(参照先変更)と<<演算子(参照先は変更しない)の違い

>a = b = 1

a と b が 1 という同一のオブジェクトを参照するようにする

>a = 3

a が 3 というオブジェクトを参照するよう変更する

>a = b = []

a と b が新規の、同一の空配列オブジェクトを参照するように変更する

>a << 3

a の参照先オブジェクト(b と同じ配列)に対して << メソッドを、3 を引数として呼び出す
その動作として、a の参照先オブジェクト(b と同じ配列)に 3 という要素が追加される

と言うわけで、勝手には入ってない
0504デフォルトの名無しさん2015/01/27(火) 23:42:27.51ID:/EXITyOc
2つのキーを指定したとき(順不同)に一意の値に決まるハッシュようなデータ構造を作成したいんですが、
例えば、
p a["山田","田中"] #=>8
p a["田中","山田"] #=>8
p a["山田","加藤"] #=>2
のような感じです
どのようにすればいいでしょうか?
0505デフォルトの名無しさん2015/01/27(火) 23:52:53.45ID:ed+BP8Ek
キーをソートすればよい
0506デフォルトの名無しさん2015/01/28(水) 00:01:14.15ID:e5hkyOyG
>>505
ありがとうございます
やっぱりソートしてから引数にとるしか方法は無いんでしょうか…
呼び出したい時に一々ソートするのはスマートで無い気がして…
0507デフォルトの名無しさん2015/01/28(水) 00:36:13.90ID:UCeJVedt
ならクラスにラップすればいい
小手先の実装のスマートさなんかどうでもよくなる
0508デフォルトの名無しさん2015/01/28(水) 00:50:00.54ID:e5hkyOyG
>>507
なるほどそうですね
ソートしてアクセスする構造をクラスでラップして使うことにします
ありがとうございます
0509デフォルトの名無しさん2015/01/28(水) 06:54:30.56ID:PxKHvaRd
>>503
返信遅れましたありがとうございます
代入って単純に引数与えるだけじゃないんですね
配列も"n"と同じようにリテラルぶっ込んでるだけだと思ってたのに複雑だ・・・
05104062015/01/28(水) 09:32:53.14ID:g/K+Ovy5
a=b=c=d=3
Rubyでは、このようにいくら代入しても、コピーが作られず、
単に参照(変数のアドレス)がコピーされるだけだから、
同一のオブジェクトを指す

ここで、文字列の連結に、<< を使うと、
すべての変数が変わってしまう。
+ を使えば別のオブジェクトが作られる

ここで、b=10とすれば初めて、
bは別のオブジェクトとして作られる。Cow(Copy on write)

必要に迫られるまで、なるべく
新たなオブジェクトを作らないようになっているのだろう

オブジェクトの内容そのものを変える、
破壊的なメソッドを呼ぶ際は、同一のオブジェクトは、
すべて変更されてしまうので要注意

漏れも、<< で苦しんだ。この辺を見て
>>434 >>444
0511デフォルトの名無しさん2015/01/28(水) 10:15:58.27ID:PxKHvaRd
初心者の自分が言うのもなんですが
質問するときは原因箇所を絞って簡略化したほうがいいですよ
その経過で解決する事もありますし
05124062015/01/28(水) 11:14:40.77ID:g/K+Ovy5
>>444
にも書いたけど、Rubyのさかのぼり代入は怖い
$a=b=c=d=3

ここで、d << 10 とするだけで、すべての変数が310になる。
この参照の連鎖は順次、
関数の引数に渡していっても、断ち切れない

グローバル変数までさかのぼって、変更されてしまう
0513デフォルトの名無しさん2015/01/28(水) 11:46:52.90ID:H7DQugwd
Rubyの言語仕様は洗練されていない
unlessなんて削除するべきだ
pとかよりもっとわかりやすい名前を付けるべきだ
0514デフォルトの名無しさん2015/01/28(水) 11:54:27.66ID:slxhZiXo
御自由にどうぞ
0515デフォルトの名無しさん2015/01/28(水) 11:55:41.74ID:slxhZiXo
コミッター連中を観察していれば分かるが
彼らは多少頭のネジが緩いんで
0516デフォルトの名無しさん2015/01/28(水) 13:03:50.23ID:g/K+Ovy5
Rubyだと、p, pp

Pythonだと、print, pprint
だから面倒くさい
0517デフォルトの名無しさん2015/01/28(水) 13:12:56.41ID:RMHK3Bx6
洗練されたクラスを作ればいいだけなのに
0518デフォルトの名無しさん2015/01/28(水) 20:51:43.59ID:JcHJzKkl
>>512
さかのぼる、と考えるから破綻するんよ。
変数に入ってるのは、あくまで参照。それだけ頭に入れてれば破綻しない。
0519デフォルトの名無しさん2015/01/28(水) 21:00:02.47ID:JcHJzKkl
copy on write なんて考えたこともないよ

基本的にRubyの変数は「何かを指し示しているだけ」であり「中身は無い」
中身のように見えるものは「名もなき場所にある」
代入という操作をしたとき、変数は別の場所を指すように書き換わる
それ以外の操作は、中身に対して行われる

そんだけだよ
さかのぼり代入なんてことは何もしてない
同じ人を指さしてるのに、別人に見えたらおかしい
0520デフォルトの名無しさん2015/01/28(水) 21:10:51.95ID:ncVbnS0H
ちなみに512に書いてある例は間違ってるから勘違いしないようにね
0521デフォルトの名無しさん2015/01/28(水) 21:38:51.40ID:GG6BgqZu
「さかのぼる」のは ruby の挙動ではなくて、勘違いしている人の認識だよ
0522デフォルトの名無しさん2015/01/28(水) 22:01:28.15ID:93RLbcHP
この子なんの言語から来たんだろうね
ちょっと思いつかない
0523デフォルトの名無しさん2015/01/28(水) 22:05:04.76ID:OirFWuRy
シフト演算子未満なのはわかる
0524デフォルトの名無しさん2015/01/28(水) 22:51:58.62ID:wg9ENB6e
kenokabeか?
0525デフォルトの名無しさん2015/01/28(水) 23:15:29.17ID:93RLbcHP
その名前を出すなってぇ
05264062015/01/29(木) 00:25:02.09ID:iQsoLHwe
>>512
訂正
<< は数値同士だと、左ビットシフト演算で、

文字列同士だと、破壊的な文字列連結になる
0527デフォルトの名無しさん2015/01/29(木) 01:33:39.82ID:3hN9k9gR
変数ってのは風船のヒモを握る手みたいなもの
代入はヒモを握ること
それまで別の風船のヒモを握っていたなら手放すことになる
<< は風船そのものに字を書き加えること
0528デフォルトの名無しさん2015/01/29(木) 03:22:32.34ID:4rYhRek3
b = "base"
puts b

a = " added"
puts a

b << a
puts b

(c = "base") << " added"
puts c

# C:\work>ruby base.rb
# base
#  added
# base added
# base added
0529デフォルトの名無しさん2015/01/29(木) 10:07:40.13ID:GmAMxhIR
&lt;&lt;が破壊的かどうかもオブジェクトによるから風船の例えも微妙に正確じゃないな
Integer#&lt;&lt;は破壊的じゃないから
a=b=3;&nbsp;b&lt;&lt;10
とかやってもaもbも3072にはならない
0530デフォルトの名無しさん2015/01/29(木) 10:11:39.06ID:GmAMxhIR
ム板の人間なら文字参照をそのまま認識できると信じている
0531デフォルトの名無しさん2015/01/29(木) 10:30:49.47ID:3kqkMOuX
まとめ

不用意に連鎖代入 a = b = [] を使わない
変数は箱というよりはむしろ名札なり矢印なり風船のヒモを握る手
オブジェクトそのものを書き換える操作に注意

風船の例えは元ネタがあるのか知らないけどいい例えだと思った
誰も風船掴んでなかったらどこかへ飛んで行ってしまうわけだし
0532デフォルトの名無しさん2015/01/29(木) 19:19:40.18ID:IUSSB121
もういいからブログで書いとき
アンタの解釈した情報もうしわけないが不要だわ
0533デフォルトの名無しさん2015/01/29(木) 20:09:54.90ID:OMwCYHUr
お尋ねします。
簡単なGUIもどきを作ろうと試みているのですが
可能なのかアドバイスをお願いします。

クイズのような問題提示→ユーザー回答→rubyからの解答
を作ると仮定します

1.
メモ帳等のファイルを開いて、問題文を提示
コンソール上で選択し、結果をメモ帳などに表示すると仮定した場合
リロードの手段をどうしたらよいのか・・・ 

2.
リロード問題を回避するため
rubyでhtmlを生成し、問題を提示
javascriptでリロードと選択ボタンとフォーム入力を提示
ファイルに回答番号を保存し、rubyが読み込むのを待つ
この場合、ファイルの読み書きをrubyとjavascriptの双方でするため
干渉して不具合にならないのか・・・

そんなことをせずに
鯖を立ててerubyでやれ・・とかナシでお願いします。

cvs形式で保存し、htmlかメモ帳程度の表示でやりたいのです。
身の丈にあった低レベルの覚える事が少ない環境で学んでいこうかなと・・
でもコンソールは目がチカチカするので・・・そちらもナシの方向でw
0534デフォルトの名無しさん2015/01/29(木) 20:14:04.36ID:bcTkTriT
>>533
コンソールの背景色を白、文字色を黒にしたらいいんじゃね?
あと鯖ってのは別にマシン1台用意したりする必要はないからな?
0535デフォルトの名無しさん2015/01/29(木) 20:18:01.12ID:y6zSBPNz
んなこと言わないけど
ruby要らねえじゃん
0536デフォルトの名無しさん2015/01/29(木) 21:07:53.31ID:3kqkMOuX
>>533
> 身の丈に合った低レベルの覚えることが少ない環境
ならまず1をコンソール(ターミナル)上でやるべきで
次に2をHTTPサーバとブラウザでやるべきかと思う。そのほうがずっと簡単

1は loop { 問題読み込み; 回答読み込み; 答え合わせ; 結果表示 }
2は標準添付のWebrickが使える
0537デフォルトの名無しさん2015/01/29(木) 21:09:13.09ID:zGbE6mz9
問題表示→ユーザ入力待ち→正誤判定して結果出力
ってやりたいってこと?
これをわざわざrubyとHTMLとjsを絡めて実現するなんてそれこそ身の丈に合ってない気がする
GUIにしたいなら全部jsでやりなよ
0538デフォルトの名無しさん2015/01/30(金) 02:45:08.71ID:X9ozRA2k
【宗教】モルモン教が同性愛容認へ [転載禁止](c)2ch.net
http://daily.2ch.net/test/read.cgi/newsplus/1422528823/
0539デフォルトの名無しさん2015/01/30(金) 05:32:55.78ID:mjc4GdHj
Webrickを覚えることにします
ありがとうございました
0540デフォルトの名無しさん2015/01/30(金) 07:31:01.31ID:aVk8cNPy
vi,emacs,Eclipse などでは出来ないの?

HTML,CSS,JSを使うのは面倒
0541デフォルトの名無しさん2015/01/30(金) 07:45:37.27ID:x2QQOjZO
俺はeclipseを起動する方が面倒だ
0542デフォルトの名無しさん2015/01/30(金) 10:38:25.34ID:4AGK3OqT
おぅ、やっぱそうか
0543デフォルトの名無しさん2015/01/30(金) 10:54:29.13ID:bwBigbzQ
ブロックに渡された引数を暗黙的に受け取る変数とかってありませんか?
ary.map{$a**2}
みたいに書けないかということです
0544デフォルトの名無しさん2015/01/30(金) 11:07:09.14ID:bYNQdyK7
ary.map{|a| a ** 2 }
0545デフォルトの名無しさん2015/01/30(金) 11:12:34.31ID:Abjby/dC
>>543
聞いたこと無いね
普通のメソッドの引数でもそんな書き方無いから、ブロックもないでしょ
0546デフォルトの名無しさん2015/01/30(金) 11:32:32.70ID:Abjby/dC
普通のメソッドには全くないわけではなかったな
yieldはそれに近いな
05474742015/01/30(金) 11:33:46.02ID:aVk8cNPy
>>499-501
最長マッチ .*
最短マッチ .*?

最初の1か所だけ置換 sub
すべての箇所を置換 gsub

最終的にこれですべての、=begin =end間を削除できますた
print File.read('File1').gsub(/^=begin.*?^=end/m, '')
0548デフォルトの名無しさん2015/01/30(金) 12:15:45.16ID:aVk8cNPy
count = 0

File.read('fileA').scan(/abc/){|matched| count += 1}

ブロック変数を使わず、
abc にマッチした回数だけを知りたい場合、
このブロック変数を省略できますか?
0549デフォルトの名無しさん2015/01/30(金) 12:21:19.07ID:hVjevdcM
File.read('fileA').scan(/abc/).size
p File.read('fileA').scan(/abc/)
で確認してみるといい
05505482015/01/30(金) 15:23:09.41ID:aVk8cNPy
count = 'aabccababca'.scan(/abc/).size
2

p 'aabccababca'.scan(/abc/)
["abc", "abc"]


ありがとう
ところで、Rubyには変数宣言を強制する、
JSの"use strict"のような、厳格モードはありますか?

var a=0;
0551デフォルトの名無しさん2015/01/30(金) 18:57:53.85ID:gb3cROEI
ないよ
0552デフォルトの名無しさん2015/01/30(金) 20:33:27.30ID:dK03mtQo
>>543
何度か提案はされてはいるが、受け入れられてないね
0553デフォルトの名無しさん2015/01/30(金) 20:46:23.90ID:BzgyBeS/
>>550
RubyはJSと違ってグローバル変数には必ず$付けなきゃいけないから、
「ローカル変数のつもりで代入したらグローバル変数だった」というのがまずありえない
だから変数宣言がなくても問題ないんだよ
JSのvarってブロックの中で使ってもスコープはメソッド全体になってしまうクソ仕様だから、
varの有無は「ローカル変数か、より広域な変数か」を指定する以上の意味はないので
Rubyの変数名で上記2つを区別する方式に比べてJSのvarが何ら安全性に勝るということはない
0554デフォルトの名無しさん2015/01/30(金) 21:59:14.01ID:gb3cROEI
いや、それはおかしい
0555デフォルトの名無しさん2015/01/30(金) 22:24:09.78ID:+5BNGDg8
3行目はギャグかなんかか
0556デフォルトの名無しさん2015/01/30(金) 22:59:32.61ID:3CnRTZyK
乾坤一擲
05575502015/01/31(土) 00:57:27.52ID:uC1xfWdZ
>>553
同じスコープ内で、
1, l(エル)、0, O(オー)などの書き間違いで、

別の変数の宣言になってしまうのを防ぎたい
0558デフォルトの名無しさん2015/01/31(土) 02:13:10.51ID:SZVKn3yT
これだね
まあ宣言と定義が未分明なRubyじゃ100年たっても実装されるか微妙だな
0559デフォルトの名無しさん2015/01/31(土) 06:53:11.40ID:s4+AsH4m
Rubyは技術的負債
0560デフォルトの名無しさん2015/01/31(土) 08:06:56.70ID:Ozkgovrm
>>557
それが問題になるほど巨大なメソッドを書くなアホ
0561デフォルトの名無しさん2015/01/31(土) 09:30:07.21ID:SZVKn3yT
アホはおまえ
コードの長さとは関係ないよ
0562デフォルトの名無しさん2015/01/31(土) 10:24:29.01ID:gojz97z4
数字と文字に色付けたら解決じゃないの
0563デフォルトの名無しさん2015/01/31(土) 10:38:26.24ID:Xj+5RYHD
0, O, 1, lの区別つけたいならプログラミング向けのフォント使うのもいい
0564デフォルトの名無しさん2015/01/31(土) 10:48:20.45ID:bF0SVAwC
キーボードの打ち間違いをそんなに深刻にとらえてるやつにとって
プログラミングっていったい何なんやろな

いにしえのタイプライター打つオバちゃんみたいなモンなんやろか
0565デフォルトの名無しさん2015/01/31(土) 10:52:32.73ID:Ozkgovrm
テスト書かない人なんだろ
0566デフォルトの名無しさん2015/01/31(土) 10:54:54.05ID:gojz97z4
100年の難題が5秒で解決したな
0567デフォルトの名無しさん2015/01/31(土) 10:56:21.22ID:SZVKn3yT
変数名のタイプミスに煩わされずにプログラミングに集中したいんだよ
0568デフォルトの名無しさん2015/01/31(土) 11:05:37.44ID:gojz97z4
同一変数に色つけて検索確認すりゃいんじゃないの
0569デフォルトの名無しさん2015/01/31(土) 11:10:29.97ID:gojz97z4
スニペット入れてたら自動で候補が出るから
自分が理解しやすい変数名にして_1 _2 とか付けなきゃいんじゃない

レビューで変なネーミングが気になるなら最後に置換すりゃいいだけだし
0570デフォルトの名無しさん2015/01/31(土) 11:10:40.58ID:SZVKn3yT
いちいち変数全部にそんなことできるわけないだろ
0571デフォルトの名無しさん2015/01/31(土) 11:16:11.00ID:gojz97z4
書捨てで確認しないタイプの人なのね
0572デフォルトの名無しさん2015/01/31(土) 11:16:37.37ID:29y+W13d
メモ帳やEDLINでプログラミングしてるんですか?
それは止めた方がいいと思います
0573デフォルトの名無しさん2015/01/31(土) 11:18:26.81ID:29y+W13d
Vim/Emacs/ATOMその他モダンなエディタで補完活用してるなら
typoなんかリテラル文字列以外では無縁なのです
活用できるものを活用してないだけでセンスゼロなのです
0574デフォルトの名無しさん2015/01/31(土) 11:45:59.15ID:Hs82A+Y6
rubocop使うといいよ
0575デフォルトの名無しさん2015/01/31(土) 12:09:16.42ID:Xj+5RYHD
rubocopって未定義変数へのアクセスとかも検出してくれたっけ?
ruby-lintってのはしてくれる
0576デフォルトの名無しさん2015/01/31(土) 12:54:23.05ID:iD+tawgu
vim、emacsはもともと使ってるor今後仕事で使うでもなければ新たに覚えるものでもないしな
Rubyで気軽に使えて標準で補完ができるIDE的なものがあればいいのに
それがないから厳格モード的なのがあってもいいと思う

技術的に難しい部分ってあるのかな?
Matzがいらないと思ってるだけかな?
0577デフォルトの名無しさん2015/01/31(土) 13:49:00.77ID:gojz97z4
欲しければ作ればいんじゃない
0578デフォルトの名無しさん2015/01/31(土) 13:59:36.70ID:29y+W13d
作れる人はまともな開発環境使ってるから作る必要性を感じてないでしょうね
なんか力点がおかしいんですよ
もしくは制限プレイとでも言うんですかね
0579デフォルトの名無しさん2015/01/31(土) 14:05:24.47ID:gojz97z4
答えはそこにあるんじゃないの
0580デフォルトの名無しさん2015/01/31(土) 16:19:23.10ID:fH2ezq9N
Emacs+Rubocopとかコーディングしながらチェックしてくれるしな
0581デフォルトの名無しさん2015/01/31(土) 17:13:09.77ID:RulzY4Di
せやかて工藤
0582デフォルトの名無しさん2015/01/31(土) 17:18:51.24ID:Hs82A+Y6
>>575
くれないと思う
が、そもそもundefinedはユニットテスト通らないし
0583デフォルトの名無しさん2015/01/31(土) 17:21:16.06ID:fH2ezq9N
>>582
そうだね
未定義変数への参照は通った瞬間にエラーなのでそこを通るテストを書いただけで検知できるね
代入の方はその後その変数は使われないだろうから、rubocopが検知してくれる
0584デフォルトの名無しさん2015/01/31(土) 18:00:35.57ID:Xj+5RYHD
ユニットテスト書く前提ならこんな話にはならなかったんや!

と思うのでいまどきの入門書書く人はそこらへん留意していただけると嬉しいです
0585デフォルトの名無しさん2015/01/31(土) 18:08:45.92ID:L1WBwZOU
ときどきObject#sendが邪魔に感じる。
なぜ__send__だけにしておかなかったのだろう。
0586デフォルトの名無しさん2015/01/31(土) 18:26:49.34ID:Hs82A+Y6
> 邪魔に感じる。
どういった状況で?
0587デフォルトの名無しさん2015/02/01(日) 15:00:59.60ID:cy2W8bd9
puts 文字列 + 数値、数値 + 文字列では、
数値.to_s が必要だが、
一々面倒なので何とかならないか?


global変数は、すべてのファイルで共通になるが、
そのファイル内だけのglobal変数は無いの?

C言語で言うと、extern, staticの区別
0588デフォルトの名無しさん2015/02/01(日) 15:08:13.07ID:3vNkahG1
>>587
#{...} を使えばいいんじゃね?
0589デフォルトの名無しさん2015/02/01(日) 16:50:47.88ID:lQgEbHmF
Cユーザーならsprintf使っとけ。
0590デフォルトの名無しさん2015/02/01(日) 16:56:53.64ID:XkAsCPXm
>>587
新型のputsを自作すればいい
0591デフォルトの名無しさん2015/02/01(日) 17:13:44.38ID:zDAnvj5f
myputs(a, b)

仕様
aが文字列か数値か判別して、数値なら文字列に変換
bが文字列か数値か判別して、数値なら文字列に変換
a + bを標準出力
0592デフォルトの名無しさん2015/02/01(日) 17:48:23.39ID:cgGRoexe
588か589だな
n = 1
puts "#{n} + 1 = #{n+1}"
puts "%d + 1 = %d" % [n,n+1]
0593デフォルトの名無しさん2015/02/01(日) 18:04:22.58ID:CCPA60Z6
$ irb
irb(main):001:0> def my_puts(*xs); puts xs.map { |x| x.to_s }.join; end
=> :my_puts
irb(main):002:0> my_puts "x = ", 123
x = 123
=> nil
irb(main):003:0>
0594デフォルトの名無しさん2015/02/01(日) 19:07:56.22ID:jb7bJiwh
putsのそういう挙動が当たり前と感じるのなら
むしろString.+をいじった方がいいのでは
0595デフォルトの名無しさん2015/02/01(日) 19:11:56.17ID:idWDCOsc
型のゆるい言語は嫌われます
使いたくもないです
0596デフォルトの名無しさん2015/02/01(日) 19:16:31.23ID:esW6O74B
そもそも全く違うオブジェクトを+で連結したいと考えることがおかしい
他の特定の言語では当然だったかもしれないが、その言語ではない言語では当然ではない

no = 596
puts "このレスは#{no}番目です"
0597デフォルトの名無しさん2015/02/01(日) 19:26:10.02ID:ymu35Jul
あらゆる側面で糞面倒なJavaが文字列とオブジェクトの+連結を認めてるのが一番意外
0598デフォルトの名無しさん2015/02/01(日) 19:30:08.08ID:OM+Gcdnk
Javaみたいな静的言語なら加算なのか文字列連結なのかはコードから明らかだからいいんだよ
動的型だと実行してみるまでどっちの意味になるかわからないからまずいわけ
0599デフォルトの名無しさん2015/02/01(日) 20:18:03.21ID:QmWK2eIJ
オブジェクトテスト用にクラス作っとばいんじゃないの
0600デフォルトの名無しさん2015/02/01(日) 20:27:04.35ID:esW6O74B
>>598
組み込み基本のクラスを使う限りどっちの意味にもならない
irb> 1 + "one"
TypeError: String can't be coerced into Fixnum
from (irb):1:in `+'
irb> "one" + 1
TypeError: no implicit conversion of Fixnum into String
from (irb):2:in `+'
自作クラスの自作メソッドの挙動やto_strの乱用にまでは責任を持てない
0601デフォルトの名無しさん2015/02/01(日) 20:57:21.24ID:j8xgKLPZ
>>587
ファイル所属の変数は無いが
モジュール所属の変数はあるので、ファイル毎にモジュール作れば良い
0602デフォルトの名無しさん2015/02/01(日) 22:17:06.17ID:dK11pYT4
おまえらいつまでRubyみたいな技術的負債使ってんの?
0603デフォルトの名無しさん2015/02/01(日) 22:23:41.26ID:lVVBipUT
パチンカスと一緒です。
つぎ込めば、いつか見返りがある儲けられる、と思い込んでいるのです。
絶対に抜けられません。
0604デフォルトの名無しさん2015/02/01(日) 23:17:13.34ID:3vNkahG1
そう思ってるならこんなスレ来なきゃいいだけなのにね
あぁ、「どうせあの葡萄はすっぱいに決まってる」という寓話を地で演じてるのか
0605デフォルトの名無しさん2015/02/02(月) 06:12:00.34ID:hiXwrLan
暇人が釣れるから来るんだろう
0606デフォルトの名無しさん2015/02/02(月) 07:13:04.85ID:r+Lk9y7y
この前の基地外がRuby使うの止めたら止めようかな
0607デフォルトの名無しさん2015/02/02(月) 08:27:04.62ID:2QTFDeMY
rubyが「楽しいと感じないなら辞めれば良い」のです
楽しいと感じないのにタイプしてるのはバカか仕事なのです

呪うべきは楽しくないのに選択した自分か、仕事を押し付ける上司
それが答えなのです
0608デフォルトの名無しさん2015/02/02(月) 08:36:52.46ID:KT6cnHtO
Railsドカタになって同じような画面を垂れ流してるうちに誰でも楽しく感じなくなるけどね
0609デフォルトの名無しさん2015/02/02(月) 08:40:34.31ID:2QTFDeMY
それ思想が違うし
0610デフォルトの名無しさん2015/02/02(月) 08:42:13.17ID:aWW6SCxB
気づいたときにはゴミの山
泣きながら他の言語で書き直すことになる
0611デフォルトの名無しさん2015/02/02(月) 08:45:32.43ID:2QTFDeMY
目的のためのルート設計をしてないからでしょ
餅は餅屋、何でも出来ると勘違いしてる判断ミスじゃないの
0612デフォルトの名無しさん2015/02/02(月) 09:43:03.46ID:rJw1gGUc
馬鹿には無理
ほんとこれ
0613デフォルトの名無しさん2015/02/02(月) 10:02:26.21ID:eLVqBz1I
Rubyは技術的負債だってはっきりわかんだよね
0614デフォルトの名無しさん2015/02/02(月) 10:54:44.07ID:hvFmtfuf
>>470
おなじ疑問を持ってここに来ました
そういうところ見つかりましたか?
あったら教えてください

ここは流れをみるのがつらい
0615デフォルトの名無しさん2015/02/02(月) 14:02:29.47ID:2QTFDeMY
道具に負債もクソもなし
道具とは最適化を図るための手段であって
目的でもゴールでもない

部分最適化を突き詰めれば道具は細分化し、
さらに各自の手に合う物が求められる
その細分化の一部がrubyに過ぎない

求める者がいればその道具を使い、使いにくければ捨てられるだけだ

個々人に差があるのであれば、道具も応じて違いが生じる
手に馴染めば道具
それが最適化ってもんだよ

好きなもんを選べば良いだけの話だ
0616デフォルトの名無しさん2015/02/02(月) 14:15:15.15ID:dFh+3r/9
>>614
スタック・オーバーフローでRubyタグを選択して
興味ありそうな投稿を読んだり
わからないことを質問してみたりするのはどうかな?
別に超初心者質問でもいいと思うよ
http://ja.stackoverflow.com/
06176142015/02/02(月) 15:59:24.40ID:hvFmtfuf
>>616
ありがとうございます
さっそく質問してきました
06186142015/02/02(月) 16:46:04.23ID:hvFmtfuf
すぐ回答がもらえました
コメントに「ありがとう」は避けてくださいとか
スタックオーバーフローの使い方に馴染むのにも時間がかかりそう
0619デフォルトの名無しさん2015/02/02(月) 17:54:24.83ID:F8krgf3P
Rubyは技術的負債製造装置
道具としてもふさわしくない
0620デフォルトの名無しさん2015/02/02(月) 17:58:55.77ID:w/aGrY+/
なんか古きインターネッツ感を感じるな
まあ技術に真摯とかいう言い訳を盾にストレス解消してるカスよりはいいか
0621デフォルトの名無しさん2015/02/02(月) 18:26:36.59ID:YvYF+i45
> ストレス解消
なにその昭和的解釈
対処上迷惑だから来ないでくれ
0622デフォルトの名無しさん2015/02/02(月) 18:31:29.83ID:y8op27fV
>>618
もうここにはくるなよノシ
0623デフォルトの名無しさん2015/02/02(月) 18:50:05.83ID:V3GmxBlb
例えば、ありがとうを避ける
0624デフォルトの名無しさん2015/02/02(月) 22:57:16.55ID:P9prHaW7
質問です

if文でthenは省略できるそうですが、
一行で書くのでなければthenは省略するのが普通の書き方ですか?
0625デフォルトの名無しさん2015/02/02(月) 23:05:21.29ID:vLsFqgHc
>>624
https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md
0626デフォルトの名無しさん2015/02/03(火) 00:34:40.41ID:zLVytOR3
ライブラリのPStoreってどんな時に使うの?

>データファイルの内容はバイナリになるため、
エディタなどでデータファイルの内容を直接編集することは出来ません。

と書かれているので、CSVのように扱えないし、データベースとしては中途半端に見えるのですが。
0627,,・´∀`・,,)っ-○○○2015/02/03(火) 02:03:48.12ID:ZTQRufFp
RubyのオブジェクトをRubyから読み出しやすい形でファイル保存する
テキストやSQLiteデータベースならたしかに他のアプリからは読み出しやすいかもしれないが
Rubyから読み出すときにいちいち解析が必要だ。
変数の実体が単一のIntegerやStringだったらありがたみは感じないかもしれない。

だがArrayやHash, Classなど複数まとめたデータ構造になると話は変わってくる。

汎用のRDBに保存するにもデータ構造を定義するスキーマが必要だが
Rubyのデータ構造は動的で、配列ひとつとっても、要素ごとに別々のオブジェクト型を持つことができる。
そんなものを汎用のデータベースに保存しようと思ったら手間が大変です。
だからRubyネイティブのデータ構造を保ったまま保存するライブラリが必要なわけ。
0628デフォルトの名無しさん2015/02/03(火) 06:49:11.99ID:Oq2Uxu+K
>>624
一般論としてあんまり省略はしない
なぜならわかりにくいから
「省略が許されているから」という理由で省略したりはしない
一方、省略したほうがわかりやすい場合は省略する
たとえばいくつかの関数的メソッドの引数カッコ()

わかりやすいってなんやねんという話に帰着
0629デフォルトの名無しさん2015/02/03(火) 15:03:34.31ID:kH1e55rk
CというクラスがAというモジュールで使えるようになった特異メソッドをBというモジュールからラップしたいです

module A
def foo
end
end

module B
def foo
#ラップ
super
end
end

class C
extend A
foo
end


これって可能なのでしょうか?
06306292015/02/03(火) 15:54:13.59ID:kH1e55rk
可能でした
0631デフォルトの名無しさん2015/02/03(火) 17:32:14.67ID:jSs0xbxA
while, until, loop には自動的に、
インデックスが渡ってこないのですか?
一々、自分でカウントするのが面倒くさい

while 条件 do |i|
end

i = 0
while 条件
i += 1
end

それと、後判定の構文はありますか?
do
while 条件

do |i|
while 条件
0632デフォルトの名無しさん2015/02/03(火) 19:48:01.54ID:fwrgjvoe
>>631
1. each_with_index
2. begin ... end while
0633デフォルトの名無しさん2015/02/03(火) 22:00:20.05ID:8WdQQTPe
いや普通省略するだろ
0634デフォルトの名無しさん2015/02/03(火) 23:51:10.62ID:bJajSEki
省いてるほうが多い気がする
またこのガイドラインによれば省くべきらしい
https://github.com/bbatsov/ruby-style-guide#no-then
0635,,・´∀`・,,)っ-○○○2015/02/04(水) 02:13:03.76ID:mZ2NyWa4
3項演算子 ? : の代わりに1行で書くときにたまに書く程度だな
あれはC系というよりPascalの文法からの輸入だと思ってるが
0636デフォルトの名無しさん2015/02/04(水) 10:45:02.52ID:iowEZhLp
ハッシュや配列の中身にハッシュや配列があることを検知するにゃどうすればいいんでしょうか

[1,2,3]
[1,2,[3,4]]

{ a: 1, b: 2 }
{ a: 1, b: 2, c: { d: 4 } }

これらを区別したいんですが


この区別をしたいです
0637デフォルトの名無しさん2015/02/04(水) 11:25:54.95ID:o8a0pYfq
none?{|a|Array===a||Hash===a}
0638デフォルトの名無しさん2015/02/04(水) 11:56:45.85ID:gXcODlq6
[1,2,[3,4]] .each{|f|

# p f.class

p f.kind_of?(Array)
}



print "\n"


gg = { a: 1, b: 2, c: { d: 4 } }

gg.each {|h,m|


# p h.class

#p m.class

p m.kind_of?(Hash)
}
0639デフォルトの名無しさん2015/02/04(水) 11:57:42.44ID:gXcODlq6
インデントが滅茶苦茶でワロタ
06406362015/02/04(水) 16:54:44.49ID:iowEZhLp
ありがとうございます
ただ、これで両方ともtrueなのはなぜですか?

{ a:1 }.none? { |v| Hash === value }
{ a:1, b: { c: 2 } }.none? { |v| Hash === value }
0641デフォルトの名無しさん2015/02/04(水) 17:17:03.80ID:XrYBwfOz
ハッシュの時はvがペア配列になるから
06426362015/02/04(水) 17:32:01.21ID:iowEZhLp
みなさんありがとうございました
0643デフォルトの名無しさん2015/02/05(木) 20:18:03.06ID:smQR/Z44
Module#===なんてあったのか
いつもhoge.class <=> Klassとかってしてたから便利だ
0644デフォルトの名無しさん2015/02/05(木) 20:25:21.86ID:jLw4sTHC
===といえばcaseってことでぐぐったらcase「文」って記事が山ほど出てきてげんなりした
0645デフォルトの名無しさん2015/02/05(木) 20:46:47.76ID:Tpxi4Jvu
制御構造caseじゃなんかねえ

ともあれ、Rubyでは文と式はきちんと使い分けることができるので使いわけよう
他人に説明するときはなおさら
0646デフォルトの名無しさん2015/02/05(木) 20:50:01.20ID:2+nUOnq4
それはお前が狭量で視野が狭いからだから
0647デフォルトの名無しさん2015/02/05(木) 21:05:34.07ID:4svq36dE
>>644-645はcaseの値を必ず使ってるのかなw
0648デフォルトの名無しさん2015/02/05(木) 21:16:13.66ID:4svq36dE
セミコロンが必要なC系言語とは違って、Rubyの式は単独で文になることができる
従って、文法上は「case式は式である」というのと同程度には「式は文である」というのも正しい
0649デフォルトの名無しさん2015/02/06(金) 05:12:36.55ID:FeYXODPI
仕様書読め
0650デフォルトの名無しさん2015/02/06(金) 07:12:51.33ID:VJ9IpT0a
全てのcase式は式だが全ての式が文とは限らない
だが少なくともcase式の値を使わなければそれは文そのもの
0651デフォルトの名無しさん2015/02/06(金) 11:36:20.81ID:MMq1EYgo
>>528
EMPTY = ""
puts EMPTY

base = EMPTY
base << " added"
puts base

puts EMPTY
puts "orz"

empty = ""
base = empty
base << " added"
puts base

# C:\work>ruby empty.rb
#
#  added
#  added
# orz
#  added
0652デフォルトの名無しさん2015/02/07(土) 11:23:55.99ID:tuovU1tZ
https通信の時のヘッダ取得したいんですけど
どのようにすれば良いですか?

【sample.rb】
-------------------------------------------------
#! ruby -EWindows-31J
# -*- mode:ruby; coding:Windows-31J -*-
require 'webrick'
require 'webrick/httpproxy'

ProxyHandler = Proc.new(){ |req,res|
puts res.body
}
ProxyServer = WEBrick::HTTPProxyServer.new({})
ProxyServer.start
-------------------------------------------------
0653デフォルトの名無しさん2015/02/07(土) 12:10:13.92ID:tuovU1tZ
言葉足らずでした、webrickで透過型プロキシを実装したいです
0654デフォルトの名無しさん2015/02/07(土) 12:30:30.00ID:PMml+WYK
HTTPならこんな感じだろうけどHTTPSとなると簡単にはいかない気がする

require 'webrick'
require 'webrick/httpproxy'

server = WEBrick::HTTPProxyServer.new(
 ProxyContentHandler: Proc.new{|req, res| p req.header, res.header },
 Port: 8929)
trap('INT'){ server.shutdown }
server.start
0655デフォルトの名無しさん2015/02/07(土) 13:12:14.03ID:uwz1/LFp
ちょっと調べたら、その辺のツールはみんなpythonだな
0656デフォルトの名無しさん2015/02/07(土) 14:10:42.49ID:zogMm8qc
Webrickじゃ無理
ProxyがHTTPS通信を開始するためにはConnectメソッドを処理する必要があるが
Webrickはこれを処理できる仕組みになっていないから

あと、透過型Proxy自体はヘッダーと何の関係もない
たぶんSSLによる暗号化を複合しないとリクエストが分からないから転送しようがないのでは?
と考えたのだと思うが、Proxyはそんなことしない
Connectメソッドによって確立されたトンネルにデータを流すだけ
0657デフォルトの名無しさん2015/02/07(土) 14:41:58.65ID:tuovU1tZ
なるほど。

今自社の開発案件でスマホアプリのHTTPS通信の
解析を行う必要があったんですが、Webrickでは無理という事でしょうか?

単純にmitmproxyと同じ事をrubyで実装したいのですが
その場合どのように行えば良いでしょうか?
0658デフォルトの名無しさん2015/02/07(土) 17:07:04.01ID:zogMm8qc
その場合、ProxyはHTTP Connectの実装だけあればいいので
HTTPとSocketを知っているなら数十行くらいで書けるでしょう

ProxyはConnectで指定されたホストではなく
解析用のホストに接続するようにする

解析用のホストで動くサーバーは普通にWebrickで書いていい
HTTPSを受け付けるようにし、証明書を設定しておくこと

ところで、これは素朴なMITM攻撃の手法であるから
普通のアプリなら証明書検証過程でエラーにされる
したがってmitmproxyで通信を解析できるのは
自分で証明書検証方法を指定できるもの(または検証していないもの)に限られる

Androidは検証漏れのあるアプリが多く
IPAから注意喚起が行われている
0659デフォルトの名無しさん2015/02/07(土) 20:50:36.17ID:tuovU1tZ
>>658
親切に教えて下さってありがとうございました。
どうにか実装したかったんですけど、自分のスキルでは
困難である事がよくわかりました。
0660デフォルトの名無しさん2015/02/09(月) 01:08:14.17ID:lI/ZsD+9
class Hoge
def == (other)
true
end
end

こんなクラスを作って

false == Hoge.new
-> false
Hoge.new == false true
->true

って右辺と左辺を取り替えて評価すると結果が違うんですが、イコールで
結んでいるのに結果が違うのは欠陥じゃないですかね?
0661デフォルトの名無しさん2015/02/09(月) 01:34:42.68ID:xK+TuziD
前者はFalseClass#==後者はHoge#==
結果が同じじゃなくて当たり前
foo(hoge)とhoge(foo)の結果が違うのは欠陥じゃないですかねって言ってるのと同じレベル
0662デフォルトの名無しさん2015/02/09(月) 01:48:07.63ID:nauiaCPK
> false == Hoge.new
> => false

メソッド False#==(other) は自身のクラス TrueClass と引数 other のクラス Hoge が
同値でないから、false を返している

> Hoge.new == false
> =>true

メソッド Hoge#==(other) は(引数 other が何であれ)常に false オブジェクトを
返すよう定義されている

どこにもおかしな振る舞いは見当たらないけど、
もしも「右辺と左辺を取り替えて評価しても結果が同じになる」ことを期待しているならば、
>>660 におけるクラス Hoge の定義が間違っている、と言うしかないね
06636622015/02/09(月) 01:49:40.94ID:nauiaCPK
訂正
X: メソッド False#==(other) は ....
O: メソッド FalseClass#==(other) は ....
06646622015/02/09(月) 01:52:57.92ID:nauiaCPK
訂正、もう一つ
X: .... 自身のクラス TrueClass と ....
O: .... 自身のクラス FalseClass と ....
0665デフォルトの名無しさん2015/02/09(月) 01:58:41.05ID:xK+TuziD
>>662
他にも訂正すべき箇所が2箇所あると思うんだがw
0666デフォルトの名無しさん2015/02/09(月) 14:21:07.56ID:AxVgErBe
日経リナックス3月号のMatzの連載では、
パイプ '|' のような記述で、
マルチスレッド並行処理を行う、
新言語streemを作っている。
ソースコードはgithubにある

libevent, libev, select, epoll
などの関数が出てくる

昨今、CPUのコア数が増えてきたから、
これからは、すべてのコアを使い切ることが求められる

ただし、排他処理に気を使うマルチスレッドよりも、
マルチプロセスの方が、間違いが少ないような気がする
0667デフォルトの名無しさん2015/02/09(月) 16:06:20.11ID:lErY/OJd
どうせRubyみたくすべてのコアを使い切っても他の言語より遅いんだろ
0668デフォルトの名無しさん2015/02/09(月) 17:15:32.39ID:cxy5oANg
そう腐るなよ
0669デフォルトの名無しさん2015/02/09(月) 21:00:23.45ID:sphOw1wN
s = [1,2,3,4,5]
に対し
=> [[1,2],[2,3],[3,4],[4,5]]
=> [[1,2,3],[2,3,4],[3,4,5]]
=> [[1,2,3,4],[2,3,4,5]]
を得るCoolなやつありませんか?
0670デフォルトの名無しさん2015/02/09(月) 21:04:43.91ID:NXlsRYy4
>>669
each_consをうまく使えばできるよ
一発じゃないけど
0671デフォルトの名無しさん2015/02/09(月) 21:13:06.96ID:sphOw1wN
>>670
それだ!ありがとう
0672デフォルトの名無しさん2015/02/10(火) 01:50:57.21ID:tIfgcH5I
複CPUのwindowsの場合、処理を両CPUに分散して、はやくなるようにする書き方って
あるのでしょうか。
タスクマネージャで見ているとexcel VBAだと、両CPUの負荷が同じように上がっているが、
ruby だと片CPUの負荷だけが上がり、もう片方はあまり働いていないようです。
0673デフォルトの名無しさん2015/02/10(火) 02:11:44.78ID:pMPiEmrc
>>672
VBA は COM で部品化されていてそれぞれ別プロセスだから
0674デフォルトの名無しさん2015/02/10(火) 02:33:56.95ID:tIfgcH5I
>>673
ありがとうございます
rubyだとダメなんだ
0675デフォルトの名無しさん2015/02/10(火) 07:03:23.97ID:w6L2FJ5J
そもそもCPUがボトルネックならJavaの百倍遅いのに
頑張ってコア使い切ったところでなあ
0676デフォルトの名無しさん2015/02/11(水) 02:04:55.42ID:hnLG61Dm
100倍は嘘だけどな、せいぜい10倍程度
それでもJavaは使いたくないと思わせるレベルではあるんだが
0677デフォルトの名無しさん2015/02/11(水) 02:54:42.43ID:TLA2PyrC
10倍は明らかに嘘
100倍の方が近い
0678デフォルトの名無しさん2015/02/11(水) 03:19:59.79ID:hnLG61Dm
>>677
じゃ、ベンチ出してみ
10倍の方が正しいのが分かるから
0679デフォルトの名無しさん2015/02/11(水) 03:22:36.75ID:TLA2PyrC
>>678
おまえが出せよ
ちゃんとCPUがボトルネックになっているやつな
0680デフォルトの名無しさん2015/02/11(水) 07:11:34.41ID:XzdqNrda
あと当然JavaにおいてもCPUがボトルネックになっていることが条件だぞ
そうでないとRubyのときの処理中にIO待ち時間が占めていた割合を測っているだけになってしまう
0681デフォルトの名無しさん2015/02/11(水) 09:49:50.21ID:00aeaMNo
マンデルブロ集合を描くベンチマークあたりがCPU使う系の典型
0682デフォルトの名無しさん2015/02/11(水) 10:05:25.00ID:7KIXpa8D
Rubyインタプリタの仕組みについての知識とプログラミングセンスが僅かでもあれば、
直感的に10倍は差が小さすぎると考えてベンチマークを疑うのが普通じゃないかな
0683デフォルトの名無しさん2015/02/11(水) 10:10:42.68ID:r3BddX0b
誰もベンチを張らずにグダグダのまま終わるに100Matz
0684デフォルトの名無しさん2015/02/11(水) 10:12:59.39ID:XzdqNrda
いやWebに上がってるベンチマークだと大抵100倍程度のオーダーになってるじゃん(もちろんCPUバウンド限定な)
10倍の根拠を示すのは>>678の方だ
0685デフォルトの名無しさん2015/02/11(水) 10:15:58.43ID:uxm1HOmW
どっちも信じられないから両方出してくれ

第三者
0686デフォルトの名無しさん2015/02/11(水) 10:30:31.62ID:HV6QGBu9
別に1万倍遅くてもいいぜ
速さが必要な用途にrubyを使った覚えはねえ

低能力者だけ何でもrubyで書いてろよ
0687デフォルトの名無しさん2015/02/11(水) 10:45:07.71ID:v2pXwonN
rubyなんて使っている時点で低能力
0688デフォルトの名無しさん2015/02/11(水) 11:31:06.51ID:x6JgCX17
特定のgemパッケージがインストールされているか調べる方法ありませんか?
gem list | grep パッケージ名
↑これ以外で
0689デフォルトの名無しさん2015/02/11(水) 11:43:03.82ID:HV6QGBu9
ちなみにそれは何で駄目なのか言えよ
提案した方法も同じ理由で駄目とか言われると萎えてチン子切り落としたくなる
0690デフォルトの名無しさん2015/02/11(水) 11:46:44.93ID:r3BddX0b
>>688
gem query -i PACKAGENAME
0691デフォルトの名無しさん2015/02/11(水) 11:56:30.28ID:x6JgCX17
>>689
スクリプトから使いたいからです
>>690
これです
0692デフォルトの名無しさん2015/02/11(水) 12:11:33.44ID:xHvIcpQa
インタラクティブシェル上でrequireでライブラリ名も補完できるものってありませんか?
irbとpryは出ません
0693デフォルトの名無しさん2015/02/11(水) 12:42:44.80ID:cDpEjOcI
str = "10:35快晴66子供12:44く曇り23中年13:20雨05幼児"

#p ary1 = str.slice(/\d\d:\d\d/)
ary2 = str.split(/\d\d:\d\d/)
ary3 = str.split(/(\d\d:\d\d)/)

#ary2.each { |e| p e }



時間を頼りに配列に分割したいのですが

10:35快晴66子供,
12:44曇り23中年,
13:20雨05幼児

どうも上手くいきません。 アドバイスをお願いします
0694デフォルトの名無しさん2015/02/11(水) 13:10:09.11ID:sK01Ui9b
puts ary = str.split(/(?=\d\d:\d\d)/)
0695デフォルトの名無しさん2015/02/11(水) 13:12:07.38ID:73gQVPeZ
str.split(/(?=\d\d:\d\d)/)
これじゃダメか?
0696デフォルトの名無しさん2015/02/11(水) 13:15:52.01ID:73gQVPeZ
すまん、かぶった
06976932015/02/11(水) 15:21:58.95ID:cDpEjOcI
早速の回答ありがとうございます
?=
に関して、資料を探してみてるのですが
正規表現なのでしょうか? それともsplitのオプションなのでしょうか?

一応、手元の資料、(楽しいruby、レシピブック)を参照してるのですが発見できず、
リファレンスをざっと眺めたのですが・・ 

合わせて参考になる図書を紹介して頂けると助かります。
正規表現の本を別途購入した方がよいのかな・・・ ruby関連の。
0698デフォルトの名無しさん2015/02/11(水) 15:32:08.71ID:u2Y4u6H8
>>662
>もしも「右辺と左辺を取り替えて評価しても結果が同じになる」ことを期待しているならば、

代入じゃないんだから、等号の前後で意味が変わるってのは間違いを呼び込みやすい
良くない仕様だと思う。
こういうのに違和感を感じない奴って数学的センスがないんだろうなあ、と思う。
0699デフォルトの名無しさん2015/02/11(水) 15:46:18.57ID:uxm1HOmW
>>697
Rubyにこだわらず正規表現の資料に当たるのがいいと思うよ
(?=〜)は肯定先読み
0700デフォルトの名無しさん2015/02/11(水) 15:52:52.72ID:73gQVPeZ
数学でもランダウ記号なんか扱ってると「=」の前後で意味が変わる
数学的センスとは一体……w
0701デフォルトの名無しさん2015/02/11(水) 15:54:49.91ID:r3BddX0b
>>697
横からだけどこれの「先読み、後読み」のところ
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fregexp.html

詳説正規表現って本が定番で三章ぐらいまで読めば普段使いには十分
0702デフォルトの名無しさん2015/02/11(水) 15:55:06.55ID:73gQVPeZ
>>697
とりあえずこれ読んでおけば良いと思う
ttp://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fregexp.html
0703デフォルトの名無しさん2015/02/11(水) 15:56:45.20ID:73gQVPeZ
すまん、かぶった
0704デフォルトの名無しさん2015/02/11(水) 16:01:09.99ID:sK01Ui9b
>>698
数学的に違和感があっても
Rubyの仕組み的に違和感がない(むしろ全てレシーバのメソッドで統一されてる)

Rubyは数学じゃなくてプログラミング言語だからそんなにおかしな仕様じゃないと思うけど
07056932015/02/11(水) 16:15:37.27ID:cDpEjOcI
URLのその欄を見落としていたようです。失礼しました。
早速読んでみましたが、何となくでしか理解できないので
紹介された書籍を今からポチってきます
皆さん、ありがとう
0706デフォルトの名無しさん2015/02/11(水) 16:25:36.31ID:PYSPfi0Q
ちょっとまってどうせ買うならおれのアフィリンクから買ってくれよ
0707デフォルトの名無しさん2015/02/11(水) 16:50:02.25ID:r3BddX0b
図書館(手遅れ)
0708デフォルトの名無しさん2015/02/11(水) 16:56:43.99ID:sDJf85Ja
>>698
∃f∃g s.t. ¬( o(f) = o(g) ⇔ o(g) = o(f) ).
と言おうとしたら既出だった
0709デフォルトの名無しさん2015/02/11(水) 17:03:48.99ID:X7wVt/Fu
肯定・否定先読みのためだけに、
「詳説正規表現」を買うのか?

漏れなんか、「たのしいRuby」で正規表現を覚えたけど、
ちょっと使うには十分だよ

それ以上のことは、2chの正規表現スレで、聞けばよい。
一々、買わなくてもよいだろう。
もし買うのなら、そいつのリンクから買ってやれ
0710デフォルトの名無しさん2015/02/11(水) 17:06:47.22ID:HV6QGBu9
最後の行だけ言いたかったんと違うか
0711デフォルトの名無しさん2015/02/11(水) 17:54:07.50ID:xOldc4y+
すみません、教えてください(ぐぐったけど分からず)
gem install mysql2
すると
ruby/thread.hが無い
と言われるのですが、
thread.hはどうすればインストールされるのでしょうか?

Debianのaptで
ruby
ruby-dev
は入ってます。(1.9.3)
0712デフォルトの名無しさん2015/02/11(水) 17:58:59.39ID:PYSPfi0Q
githubのmarkdownパーサって何てライブラリですか?
0713デフォルトの名無しさん2015/02/12(木) 07:46:08.52ID:9gMH9uw0
たぶんRedcarpet

>>711
https://github.com/brianmario/mysql2#linux-and-other-unixes
libmysqlclient-devかmysql-devel入れろって書いてあるけど入れた?
0714デフォルトの名無しさん2015/02/12(木) 12:03:09.39ID:gfPr4M9I
何で.newでクラス生成するのに def newって毎回定義しなくていいの?
クラスで定義したメソッドを.なんちゃらで呼び出せますってはずなのに
メソッド作ってもいないnewが使えてしまうのが謎
0715デフォルトの名無しさん2015/02/12(木) 12:11:42.06ID:oLOcoqWq
Class.new

Calls allocate to create a new object of
class's class, then invokes that object's
initialize method, passing it args.
This is the method that ends up getting called whenever
an object is constructed using .new.
0716デフォルトの名無しさん2015/02/12(木) 13:50:20.19ID:pmmZp4nI
z= if 3==4 then 1 else 2 end
puts z # →2
こんなことが出来るのを知った

いままでいちいち
if 3==4 then x=1 else x=2 end
puts x # →2
などとやっていた
0717デフォルトの名無しさん2015/02/12(木) 13:56:04.42ID:oLOcoqWq
それなら三項演算子「?:」を使うとよいよ。
a = 3 == 4 ? 1 : 2
0718デフォルトの名無しさん2015/02/12(木) 14:03:01.16ID:vZuNWRuz
whileやtapもbreakした値を返すので知っておくとごくまれに使うかも
0719デフォルトの名無しさん2015/02/12(木) 14:12:14.17ID:pmmZp4nI
>>717 >>718
ありがとうございます
知らないことアバカン(=多いの熊本語)
0720デフォルトの名無しさん2015/02/12(木) 16:27:53.76ID:qdUt/p4n
>>714
勝手にObjectクラスを継承するから、何も書いてなくてもObjectクラスのメソッドは使える
0721デフォルトの名無しさん2015/02/12(木) 21:01:46.12ID:ACguu+ql
たとえできてもやる奴はクソ
0722デフォルトの名無しさん2015/02/13(金) 00:21:20.42ID:qAadHGJa
>>716
Rubyではifも式だからね
たぶんLISP由来だろう
最近の言語ではScalaもそうだね
0723デフォルトの名無しさん2015/02/13(金) 00:21:39.71ID:CzCNKwo/
Loggerを使ってコンソールとログファイルに同時に出力したいのですが
何かいい方法はないでしょうか?
一応Shell::teeというのを見つけたのですがリファレンスマニュアルが
投げやりな感じで困っています・・・
0724デフォルトの名無しさん2015/02/13(金) 00:28:06.47ID:qAadHGJa
>>723
ログファイルに出しておいて、tail -F でコンソールで見ればいいんじゃない?
0725デフォルトの名無しさん2015/02/13(金) 01:20:51.80ID:SVZa3gOz
>>716(>>719)
if 式だけでなく、 case 式もある

color_num = case color
       when :blue; 0
       when :red; 1
       when :Yellow; 2
       else; -1

これらは「関数型プログラミング」と呼ばれるプログラミング・スタイルのひとつ
詳しくは、以下を参照:
・Rubyによる関数型プログラミング
 http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html

Ruby は「オブジェクト指向な手続き型スクリプト言語」であるけれど、
「関数型プログラミング」にも(他の手続き型言語と比較すれば)極めて適している性質がある
状況に応じて、常識的な「手続き型プログラミング」と簡潔な「関数型プログラミング」とを
自在に使い分けることができるようになることが望ましい
0726デフォルトの名無しさん2015/02/13(金) 02:16:33.14ID:Hocs4IwU
Effective Ruby買ったけどいいね。
このスレみているような人は必読の良書だった。
0727デフォルトの名無しさん2015/02/13(金) 05:54:31.12ID:3tmdVICO
>>725
個人的に一行whenの場合、文の前はthenだな
何つーか、汎用的な文区切りになっちゃうセミコロンより
whenの一部である以上そうとしか解釈されないthenのが安心感あるというか
…まあ、どうせ複数行whenのときはthen書かずに改行しちゃうから同じっちゃ同じか
0728デフォルトの名無しさん2015/02/13(金) 13:42:31.60ID:W6lKBquT
>>725
caseが値を返すのは関数型で必要とされることの多い性質ではあるけど
それ自体は別に関数型でも何でもないぞ
0729デフォルトの名無しさん2015/02/13(金) 23:29:34.48ID:v7o1vyZw
なんでもかんでも式になってる言語はどう整形するか悩むんだよな。
0730デフォルトの名無しさん2015/02/13(金) 23:35:16.88ID:qAadHGJa
>>729
いっそのことLISPぐらいまでいってしまえば、整形はあまり悩まなくてすむのになw
emacs lisp はたまに書くが、整形で悩んだことはほぼない
0731デフォルトの名無しさん2015/02/14(土) 00:12:54.67ID:/i+i2oPj
LISP書きはどうやって括弧の数を間違えずに書くのか
07326932015/02/14(土) 00:27:23.04ID:ng5YU6yI
ぶっちゃけRuby技術者認定試験 て実際どの程度のものなんでしょうか?

趣味の範疇でruby始めたのですが、
独学の悪いくせで好きなものしかやらない・・・ し覚えない・・。 
そこで全体的な知識不足の指標となるかな?
この試験も目指してみようかなと思い立ったしだいです。

別のruby参考資料を買おうか、こっちにしようか悩み中
0733デフォルトの名無しさん2015/02/14(土) 01:07:33.88ID:ISQup94G
やめとけ
広く知識を身につけたいなら基本情報にでも挑戦したほうがRubyプログラミングにおいてもよっぽど役に立つし
Rubyを「使う」スキルが欲しいならRailsでWebサービスでも運営すれば嫌でも身に付く
言語の重箱の隅をつつくのは時間の無駄
0734デフォルトの名無しさん2015/02/14(土) 01:37:38.64ID:4ueOEeTW
特定の言語を自在に使えるようになりたいなら、
変に思えるかもしれないけど他の言語を2つくらい覚えるといいよ
言語の違いなんて大したことではないというのが理解できるとすごく視野が広がる
あんまり特定の言語に執着しないほうがいい
0735デフォルトの名無しさん2015/02/14(土) 10:04:33.41ID:3EPsJ3bR
>>731
エディタの対括弧表示見てりゃ間違えないよ
と言うか、括弧を足したり削ったりするときは
現在カーソル位置でなくてそっち見てるかも
0736デフォルトの名無しさん2015/02/14(土) 13:40:26.34ID:dTMvU3xT
>>728
Rubyのcaseはパターンマッチ(正規表現じゃないぞ)が使えないから、
関数型としては全くもって不足
0737デフォルトの名無しさん2015/02/14(土) 15:28:57.41ID:15MsuvIH
複数の変数を同時にできないだけでパターンマッチはできるでしょう
まあ複数できないことが大きな差かもしれんが
0738デフォルトの名無しさん2015/02/15(日) 10:28:43.99ID:SklWaN/q
Rubyらしい書き方として参考になるライブラリをご存知の方
教えていただけると助かります。
0739デフォルトの名無しさん2015/02/15(日) 10:46:38.75ID:ABT28a22
nokogiriとかああいう普通なのがいいんじゃない
DSLガ〜とかメタプログラミングが〜とか言ってるのは真似しないほうがいい
元々そんな変態言語ではない
0740デフォルトの名無しさん2015/02/15(日) 11:28:16.40ID:SklWaN/q
>>739
ありがとうございます。
Nokogiri読みやすそうなので参考になりそうです。
0741デフォルトの名無しさん2015/02/15(日) 12:50:33.82ID:wv9Dnfvm
>>711
正解でした、ありがとう。
なにしろRubyは始めたばかりで、ドキュメントの在り処も手探りなんですワ。
0742デフォルトの名無しさん2015/02/16(月) 03:56:38.95ID:Zn9bWbFW
Rubyのしくみ、2014

年末に出た外人の翻訳本で、
Rubyの実装系、Ruby1.9のRuby仮想マシンの本。
内容は新しく、Ruby2.0のキーワード引数まで含む

RubyVMは、笹田という日本人が作っていたんだね


2 + 3
2が主体となる数値オブジェクト(レシーバ)
'+'がそのオブジェクトのメソッド
3がそのメソッドの引数

左がオブジェクトで、演算子の左右で、意味が違うんだね。
つまり、関数の糖衣構文

(A + B + C + D).to_s
漏れが、あればよい機能と思うのは、
型の異なるオブジェクトを、幾つかつなげて、
簡単に文字列に変換できるもの
0743デフォルトの名無しさん2015/02/16(月) 04:44:23.59ID:cj2/WV/R
gemをオフラインでインストールしたいのですが、
ダウンロードしたフォルダに.rbばかりで.gemが入っていない場合、
どうすればよいですか?
0744デフォルトの名無しさん2015/02/16(月) 07:44:02.00ID:2rxNb6Sn
>>742
>(A + B + C + D).to_s
>漏れが、あればよい機能と思うのは、
>型の異なるオブジェクトを、幾つかつなげて、
>簡単に文字列に変換できるもの

'%s%s%s%s' % [A, B, C, D]
"#{A}#{B}#{C}#{D}"
0745デフォルトの名無しさん2015/02/16(月) 21:06:14.75ID:/Le2iIgb
>>732
せめて、OracleとLPICにしとけ
07466932015/02/16(月) 23:10:02.23ID:aIhcyWTg
正規表現の自習をしてるのですが
それなりに書けるようになってきたのに、以前として読みが厳しい・・・
自分で書いた正規表現も数日立つと・・読めないこともあったり
なにかコツありますか? 演算子の優先順位みたいなコツあるのかしら
0747デフォルトの名無しさん2015/02/16(月) 23:25:17.19ID:GiwwQ3NF
>>746
フクロウ本ポチったんじゃなかったのか
0748デフォルトの名無しさん2015/02/16(月) 23:32:23.50ID:bsos2N+l
コメント入れればいいんでない
07496932015/02/16(月) 23:34:38.96ID:aIhcyWTg
その節はお世話になりました。
ふくろうはちょっと重い(書きぶり)ので
別冊のドリル解きながらふくろうチラ見してる段階です。
0750デフォルトの名無しさん2015/02/17(火) 00:02:23.67ID:K0RsylMY
自分がつまずいた表現をその都度復習していけば違い将来きちんと読み解くことができるようになると思いますよ。
0751デフォルトの名無しさん2015/02/17(火) 01:22:40.02ID:Jv+uJpkb
>>742
[A, B, C, D].join
0752デフォルトの名無しさん2015/02/18(水) 09:40:42.56ID:49+iv0Kk
SASS専門スレが見当たらなかったのでここで質問させてください。
Windowsでsassをコンパイルすると、"\f012"のような文字を収めた変数が文字化けしたようになります。
変数を使用せずに直接スタイルに記述するとちゃんと"\f012"と出力されます。
私の環境のせいかもしれませんが、バックスラッシュがある文字に原因があるように思えます。
これを解消したいのですが、どうしたら良いでしょうか?
Rubyは1.9.3を使っています。


-- test.ssss
$test : "\f012";
.test {
content : $test;
}

-- compile.bat
set LANG=ja_JP.utf8
cmd /c C:\Ruby193\bin\sass %SCSS%\test.scss:%CSS%\test.css --style compressed --sourcemap=none

出力結果 => .test{content:"?"}   // ←これを content:"\f012" としたい
0753デフォルトの名無しさん2015/02/18(水) 15:17:15.21ID:KMXsePc+
>>752
https://github.com/sass/sass/issues/1395
unquoteを使えばいいらしい

$test1 : \f012;
$test2 : unquote(\f012);
$test11 : unquote('"') + \f012 + '"';
$test22 : unquote('"') + unquote(\f012) + '"';
.test {
content : "\f012";
content : unquote('"') + $test1 + '"';
content : unquote('"') + $test2 + '"';
content : $test11;
content : $test22;
}


文字化けの原因は
$test : "\f012"
をutf16leと解釈されるからみたい
たまらなんなこりゃ
0754デフォルトの名無しさん2015/02/18(水) 18:49:22.02ID:49+iv0Kk
>>753
ありがとうございます!
色々と試行錯誤してたのですが解決できなくて泣きそうでした。
無事に解決できました、本当に感謝です!
0755デフォルトの名無しさん2015/02/19(木) 02:24:04.45ID:lDFiAK4+
" ダブルクォートだと、#{}, \ などのメタ文字が、
特別に解釈されるんでしょ?

' シングルクォートか、ヒアドキュメントを使えば?
0756デフォルトの名無しさん2015/02/19(木) 08:45:11.80ID:oS1fF8P8
>>755
シングルクォートとか関係ない
せめて2つ上のレスくらい読んでから発言しよう
0757デフォルトの名無しさん2015/02/19(木) 11:18:05.36ID:iGdP7Vg9
target = "55 25659565564 56"

reg = /25(?=65)/,
/25(?=65)\d*/,
/(?=65)\d*/


reg.each{|ex|
puts target.match(ex)
}

結果
25
25659565564
659565564
先読みのあとに記述があると
この結果になるのはなぜでしょうか
0758デフォルトの名無しさん2015/02/19(木) 12:57:30.27ID:fdKBoaCS
どこを疑問に思ってるのかよくわからんけど
そのreg3つはそれぞれ以下のような意味だよ

・/25/ただし25まで読み込んだ時点でその先に65が続くもの
・/25\d*/ただし25まで読み込んだ時点でその先に65が続くもの
・/\d*/ただし先頭が65であるもの

先読みした部分は結果には入らないし、読み飛ばされもしない
あとは先読み以外の部分が結果として表示されてる
0759デフォルトの名無しさん2015/02/19(木) 13:32:07.49ID:iGdP7Vg9
/25(?=65)/
結果25で、65が除外されるのは理解できるのですが

/(?=65)\d*/ な場合
65が除外されずに 65....とマッチします

評価として点(・)を用いいます
(?=65)の時点で
25・659565564

25・6595.....
(?=65)の時点で一度65を除外してるが
\dにより 6595が読み込まれるので 65除外のあとから6595がヒットする 2565・95ではなく、25・6595の理由からって意味でしょうか
0760デフォルトの名無しさん2015/02/19(木) 14:10:36.73ID:00AGhhL1
厳密には違うが、除外はするが点は動かないのが先読み
0761デフォルトの名無しさん2015/02/19(木) 14:29:02.05ID:fdKBoaCS
言葉での表現は微妙だけど
たぶん考え方はあってると思うよ
先読みの場合は、点(・)の先に65があることを確認するだけで、点の位置は動かない
なので、その後に\d*とマッチする部分に65が含まれる

だからマッチに使われる(点が進む)ことを除外というのなら、先読みでは除外しないっていうことになると思う
0762デフォルトの名無しさん2015/02/19(木) 16:18:09.18ID:Q7B3YZ4l
http://qiita.com/a_ishidaaa/items/47a8459aa5fe5512871a
ほんとセマンティックバージョニングの意味ねえな
パッチアップデートで壊したわけじゃないだけマシか?
マシって何と比べてマシなんだ(自問)
0763デフォルトの名無しさん2015/02/19(木) 16:20:42.35ID:DC8iLU1G
ファイルを指定された回数だけ、一行ずつ読み込んで
そのあと同じファイルに、読み込んだ行数分を削除したいのですが、何かいい方法ありませんか?

例えば、
hoge.txt
1.れもん
2.いちご
3.りんご
4.ばなな
5.パイナップル

を2行分読み込んで削除

hoge.txt
1.りんご
2.ばなな
3.パイナップル
0764デフォルトの名無しさん2015/02/19(木) 16:43:02.17ID:Xd3keHXW
丸投げはいかんよ
0765デフォルトの名無しさん2015/02/19(木) 16:50:15.33ID:ra0CCNS1
構造上前を詰めるのはそのままじゃ無理なのはわかるべ
各行をリンクや配列にして新たに書くかシークしてまるまるコピーか
0766デフォルトの名無しさん2015/02/19(木) 17:03:30.07ID:00AGhhL1
横だが
>構造上前を詰めるのはそのままじゃ無理なのはわかるべ
ってどういうこと?
0767デフォルトの名無しさん2015/02/19(木) 17:08:06.98ID:ra0CCNS1
後ろを切るのは前の位置動かさないで済むけど、前を詰めるのに後ろを動かさないわけにはいかないって話
0768デフォルトの名無しさん2015/02/19(木) 17:17:55.65ID:00AGhhL1
なるほど、thx!
0769デフォルトの名無しさん2015/02/19(木) 23:24:09.47ID:/rXoqLFu
>>763
https://ideone.com/pyWQL9


実行例:
  $ ruby enum-drop.rb hoge.txt
  3.りんご
  4.ばなな
  5.パイナップル
  $

28行目のメソッド Enumerable#drop(n) を利用することがポイント
  http://docs.ruby-lang.org/ja/2.2.0/method/Enumerable/i/drop.html

なお Enumerable#drop はリターン値として配列(Array オブジェクト)を返すから、
入力データ(の行数)が膨大になるとメモリ効率が悪くなる
この問題は代わりに Enumerator::Lazy#drop(n) を使うと、行単位にオブジェクトが
生産/消費されるようになるから、メモリ効率を改善できる
  http://docs.ruby-lang.org/ja/2.2.0/method/Enumerator=3a=3aLazy/i/drop.html

具体的には、28行目のメソッドチェーンで drop の前に lazy を挿入するだけで終わる:
  ....(前略).... .each_line.lazy.drop(num). ....(後略)....

ただし Enumerator::Lazy は Ruby 2.0 で追加された組込みモジュールだから、
Ruby 1.8/1.9 で利用するなら enumerable-lazy という Gems パッケージが必要になる
0770デフォルトの名無しさん2015/02/20(金) 02:35:25.81ID:2YGngXGF
バグあり注意
0771デフォルトの名無しさん2015/02/20(金) 02:46:11.83ID:EBONnwDB
同じファイルに書き込むのは、ちょっと危険かも?
いったん違うファイルに書いて、
元のファイルを削除してから、renameする方が安全

行1,2,3,4 とあれば、上から順に、1行ずつ処理していく。
行1 → 読み込むだけで、データは捨てる
2 → 同様に捨てる

3 → 書き込む
4 → 書き込む
0772デフォルトの名無しさん2015/02/20(金) 03:04:50.52ID:h4oRuNjd
$ tail -n +3 hoge.txt | tee hoge.txt
$ tail -n +3 hoge.txt | sponge hoge.txt
0773デフォルトの名無しさん2015/02/20(金) 07:53:47.32ID:fEal40kx
こんなどうでもいいことに小細工して満足感以外の何が得られるんだ
0774デフォルトの名無しさん2015/02/20(金) 08:04:39.98ID:Qj8W36XI
rubyのブロックを引数にする関数がよくわかりません。
単に実行するだけのものを定義する時は
def my_func
  yield
end
みたいにしたり&blockというような引数を使うことはわかったのですが
open( "aa.txt", "r" ){ |file|
}

のopen関数のような、他の値も引数にもっていて、ブロックも引数を持っているような関数はどうやって作れば良いのでしょうか
もし良ければ教えて下さい
0775デフォルトの名無しさん2015/02/20(金) 08:11:05.65ID:pk2QnuVc
$ ruby -i -ne 'BEGIN{2.times{gets}}; print' hoge.txt
0776デフォルトの名無しさん2015/02/20(金) 08:26:35.79ID:KoZ8UZGe
>>774
普通にmy_funcf(普通の引数)にするだけ
ブロック引数は暗黙的に渡るので引数として明示的に宣言する必要はない
0777デフォルトの名無しさん2015/02/20(金) 09:40:29.75ID:2q5bsCKh
>>776
ありがとうございます。
さっそくためしてみます!
0778デフォルトの名無しさん2015/02/20(金) 13:47:34.06ID:NRgYnesQ
>>769
PythonスレになぜかRubyコード投下してたときも同じだったが
関数化して書くのならちゃんとFile.closeするかcloseが必要ないようにしなよ
再利用したときにハマるよ
0779デフォルトの名無しさん2015/02/20(金) 17:58:04.38ID:NOsWQdQa
>>769じゃないけど、File.openってブロック渡さないとcloseしないんだな
なんか変な動きするなーって思ってたらこれが原因だったわ
ためになった
07807692015/02/20(金) 19:50:56.52ID:8OUkX7Zl
>>778
指摘ありがとん
ということで、訂正してみた

https://ideone.com/0IemVC
0781デフォルトの名無しさん2015/02/21(土) 11:19:24.57ID:zv91iaBv
str_ary = File.read('File1').scan(/^=begin.*^=end/m)

# CR・CRLF 改行を、LF 改行に置き換える
str = str_ary[0].encode(:universal_newline => true)

str.each_line do |line|

end

漏れはこんな風に、File.read で、
1行ずつ処理しているが、なぜ、File.open を使うの?
0782デフォルトの名無しさん2015/02/21(土) 11:57:28.42ID:YnThFa9S
メモリ効率とか
メモリ所要量がファイルサイズに依存しないとか
小っさい小っさいファイルしか使わないんなら気にしなくていいよ
0783デフォルトの名無しさん2015/02/21(土) 15:44:56.37ID:K/x//vvW
メモリ圧迫するほど膨大なデータになったら自然とSQL使うんじゃないの?
0784デフォルトの名無しさん2015/02/21(土) 16:20:01.62ID:kawK2KK0
2~3GBのテキストファイルとかあるところにはある
そういうのは分割しろとは思うがDBに入れるべきかといわれるとそうじゃないと思う
0785デフォルトの名無しさん2015/02/21(土) 16:37:36.72ID:1ts2mUR/
そういう巨大なファイルを扱う用事ができたら、そのときに考えればいいよ
この程度の用事にメモリ効率とか考える方が時間の無駄

いまある用事に対してできることを最小限の労力でやるのが一番
「こういう用事もあるかも」を考えて設計するのは愚の骨頂、とDHHあたりも言ってた気がする
0786デフォルトの名無しさん2015/02/21(土) 17:05:47.11ID:T2DgAzdT
MacのRubyでVPKファイルが作りたいのですが、やり方が全く分かりません…
Ruby以前にコマンドやそういったものに関しても初心者で、このVpkツールをインストールするだけで一週間ほどかかりました…
VPKファイルフォーマットのパーサー
https://github.com/kimoto/vpk
本来Linux用に作られたものらしいのですが、Macでも使用できるとツールの作者が書いていました
まずVPKファイルの生成よりも展開のほうが簡単かと思い、試しにデスクトップにVPKファイルを置いて
require 'vpk'を書いてエンターを押すと-bash: require: command not foundと出ました
これは別に入力する必要のないものなのでしょうか?
続いてVPK::VPKFile.new("./path_to.vpk").extract_to("./")をやってみましたが
MacName:Desktop UserName$ VPK::VPKFile.new("./Users/UserName/Desktop/test.vpk ")を実行すると
-bash: syntax error near unexpected token `" /Users/UserName/Desktop/test.vpk "'と出て駄目でした
ちなみに、このツールを作った人は日本人でどのように使うかも日本語で説明しています

VPKファイルの展開
require 'vpk'
vpk = VPK::VPKFile.new("./VPKのパス.vpk")
vpk.extract_to("./どこに解凍するか")

VPKファイルをディレクトリから生成する
require 'vpk'
vpk = VPK::VPKFile.archive("./ディレクトリのパス")
vpk.write_to("./生成後のVPKのパス")

ここまで書かれていてまだ理解できません…誰か馬鹿にも分かるように説明して下さるかたいらっしゃいませんか…
0787デフォルトの名無しさん2015/02/21(土) 17:28:20.44ID:sa43Zcnr
>>786
require 'vpk'
VPK::VPKFile.new(ARGV[0]).extract_to("./")

と書いたファイルをvpktest.rbって名前でデスクトップに保存したらターミナルを起動して

$ cd Desktop
$ ruby vpktest.rb test.vpk

とかする(もちろんtest.vpkがDesktopにあるのが前提)
できればRubyとBashの入門書を一冊ずつ入手して勉強したほうがいい
0788デフォルトの名無しさん2015/02/21(土) 17:31:41.15ID:sa43Zcnr
ここまで書いてREADMEの一番最後に気がついた
Rubyスクリプト書かなくてもターミナルから次でいけるらいし
$ vpk -x ~/Desktop/test.vpk
0789デフォルトの名無しさん2015/02/21(土) 18:09:59.96ID:T2DgAzdT
レスありがとうございます…!vpktest.rbを作成して保存後
$ cd Desktop
$ ruby vpktest.rb test.vpk
をするとvpktest.rb:1: syntax error, unexpected $undefined, expecting '}'
{\rtf1\ansi\ansicpg932\cocoartf1187\cocoasubrtf400
^
と出ました
$ vpk -x ~/Desktop/test.vpkのほうは
/Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:162:in `extract_to': undefined method `write' for File:Class (NoMethodError)
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:156:in `each'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:156:in `extract_to'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/bin/vpk:40
from /usr/bin/vpk:23:in `load'
from /usr/bin/vpk:23
これは成功してたのでしょうか…!? しかし展開後のフォルダのようなものはデスクトップに見当たりませんでした
787さんがおっしゃるように、最初に本を買って勉強しようと思います
それでも分からなかったらまた質問しにきます
ありがとうございました
0790デフォルトの名無しさん2015/02/21(土) 18:50:52.11ID:lQiGN8ke
>>789
パスの概念が分かってないようだから
gemを使って入れたらいいのでは?

$ sudo gem install vpk
// $ gem install vpk
$ mkdir -p ~/tmp/vpktest
$ cd ~/tmp/vpktest
$ mkdir hoge
$ touch hoge/testfile_{01..5}.txt
$ ls hoge
testfile_01.txt testfile_02.txt testfile_03.txt testfile_04.txt testfile_05.txt
$ vpk -c hoge
compressed hoge -> hoge.vpk
$ mkdir hoge_out && cd hoge_out
$ vpk -x ../hoge.vpk
extracted!: ../hoge.vpk

$ sudo gem uninstall vpk
$ gem uninstall vpk
0791デフォルトの名無しさん2015/02/21(土) 19:01:34.99ID:sa43Zcnr
>>789
それはおそらくライブラリ側でtest.vpkに対応できなくてエラーを吐いてる
そのライブラリのリリース後にフォーマットが変更されたりしてない?
test.vpkか他のvpkファイルをうpしてもらえれば調べてみるけど
0792デフォルトの名無しさん2015/02/21(土) 19:21:53.03ID:T2DgAzdT
>>790
ありがとうございます!
vpkツールのインストールはgemを使って入れました、後は教えてもらった通りにやってみましたが未知の世界すぎて…
MacName:~ UserName$ mkdir -p ~/tmp/vpktest
MacName:~ UserName$ cd ~tmp/vpktest
-bash: cd: ~tmp/vpktest: No such file or directory
MacName:~ UserName$ mkdir hoge
MacName:~ UserName$ touch hoge/testfile_{01..5}.txt
MacName:~ UserName$ ls hoge
testfile_1.txt testfile_2.txt testfile_3.txt testfile_4.txt testfile_5.txt
MacName:~UserName$ vpk -c hoge
compressed hoge -> hoge.vpk
/Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:178:in `archive': undefined method `binread' for File:Class (NoMethodError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:39:in `find'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:38:in `catch'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/find.rb:38:in `find'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/lib/vpk.rb:174:in `archive'
from /Library/Ruby/Gems/1.8/gems/vpk-0.0.2/bin/vpk:31
from /usr/bin/vpk:23:in `load'
from /usr/bin/vpk:23
0793デフォルトの名無しさん2015/02/21(土) 19:27:58.61ID:T2DgAzdT
規制で一つのレスに書ききれませんでした
MacName:~ UserName$ mkdir hoge_out && cd hoge_out
MacName:hoge_out UserName$ vpk -x ../hoge.vpk
not found specified file: ../hoge.vpk
MacName:hoge_out UserName$ vpk -x ../hoge.vpk
not found specified file: ../hoge.vpk
MacName:hoge_out UserName$ extracted!: ../hoge.vpk
-bash: : unrecognized history modifier
この文字列を保存しておいて、後でゆっくりどういうことか調べてみようと思います

>>791
ライブラリのリリース後にフォーマットが変更というのがよく分かりませんでした…すみません
このVPKツール自体2012年あたりに作られたものみたいなので、バージョンが古くて対応していないということもあるのかもしれません
ファイルはこれです
元々はvocalizev8.vpkというL4D2というゲーム用ファイルを、分かりやすいようにtest.vpkに名前だけ変えたものです
http://www1.axfc.net/u/3416997
0794デフォルトの名無しさん2015/02/21(土) 19:50:06.41ID:sa43Zcnr
>>793
うpしてもらったファイルは問題なく解凍できるみたい
RubyよりもBashの使い方勉強したほうがいいと思う
Amazonでシェルスクリプトで検索するとそれ系の本が出てくる

$ ls
test.vpk test.vpk.zip
$ vpk -x test.vpk
extracted!: test.vpk
$ ls
addonimage.jpg addoninfo.txt scripts test.vpk test.vpk.zip

$ irb
irb(main):001:0> require 'vpk'
=> true
irb(main):002:0> VPK::VPKFile.new('./test.vpk').extract_to('testdir')
[Ctrl+D]
$ ls testdir
addonimage.jpg addoninfo.txt scripts
0795デフォルトの名無しさん2015/02/21(土) 20:08:10.84ID:T2DgAzdT
>>794
わざわざ試してくれたんですか…ありがとうございます
Bashを先に学んだ方がいいのですね、頑張って勉強します

他の方も親切に教えてくださってありがとうございました
0796デフォルトの名無しさん2015/02/21(土) 21:00:28.05ID:sa43Zcnr
>>795
勉強するなら手始めにこことかよさそう(ぐぐったら出てきた)
http://www.pxt.jp/ja/diary/article/292/
がんばってねー
0797デフォルトの名無しさん2015/02/21(土) 23:01:02.82ID:sa43Zcnr
>>795
>>792でFile.binread(Ruby1.9から)ってメソッドがないって言われてるので
Rubyのバージョン上げたらあっさり動くかも
0798デフォルトの名無しさん2015/02/22(日) 04:25:07.65ID:HpFGsXnK
端末(ターミナル、WindowsではコマンドプロンプトやPowerShell)
やコマンドの基本を学ぶ

端末で、pwd(positioning working directory)コマンドを実行すると、
今自分がいる(着目している)ディレクトリ(フォルダ)を表示する

端末を開くとたいてい、そのユーザのホームディレクトリから始まる
ディレクトリのパスが、~/ (チルダ)から始まっていたら、
それはそのユーザのホームディレクトリと同じ。
Linuxでは、/home/ユーザ名/ と同じ

パスには、/ (root)から始まる絶対パスと、相対パスがある
./ は相対パスで今自分がいるディレクトリ
../ は相対パスで今自分がいるディレクトリの親ディレクトリ(1階層上)

cd を使うと、今自分がいる場所を変えられる(移動できる)

コマンドを実行する際は、半角空白区切りで、
コマンド名 -オプション コマンドの引数

オプションは、- が付くことが多い。
コマンドの引数の内容に、半角空白を使っているが、
別個の引数と解釈されたくないのなら、
ダブル・シングルクォーテーションで引数を囲むと、
1つの引数とみなされる
"a b c", 'a b c'

たのしいRuby、2013、第4版を読む
0799デフォルトの名無しさん2015/02/22(日) 08:22:39.59ID:4QR1V68p
(正規表現における\bについて教えてください)
\bは単語境界を指しており、\wと\Wの隙間であると説明がありました。
\wは[a-zA-Z09_]  \Wは[^a-zA-Z09_]  なので\Wに\sが含まれます。

ニュアンスとして隙間は\sであるとの表現かな?とも思うのですが
そうであれば\bは\sの変種,何がどう違うのかピンときませんでした

string = "j abc C"
\s(abc)\s
\b(abc)\b の使い方で

「」abc「」   注「」は空白表現
abc

の結果が出ました。

1)\bは\sの「」を抜いたもの,それが「」とabcの隙間って意味でしょうか? 
「」・abc →  ・が\bであり
「」abc  →  「」が\s
であるって理解で正しいでしょうか?

2)\wと\Wの隙間とは 英数字と英数字以外の隙間

では
str = 太郎abc C で実験した結果 .... なし
太郎・abc になるかと期待したのですが・・

疑問
\wと\Wの隙間 ... 単に 前に\s相当の空白があるのが条件であるならば
「\w と \W」 の隙間の表現が理解できません。

          
0800デフォルトの名無しさん2015/02/22(日) 08:49:50.33ID:vZEo6Gpi
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2fregexp.html
>単語を成す文字、成さない文字の定義はエンコードによって 異なります。
0801デフォルトの名無しさん2015/02/22(日) 09:29:53.07ID:vZEo6Gpi
>\bは\sの「」を抜いたもの
'@abc{'.match(/\babc\b/) #=> #<MatchData "abc">
\sとはまったくの別物
0802デフォルトの名無しさん2015/02/22(日) 09:45:25.54ID:JLUSIAF5
>>799
/^foo$/ における\nの役割が\Wに変わっただけって考えれば理解できないかな?
0803デフォルトの名無しさん2015/02/22(日) 11:18:14.91ID:E5S/oWCJ
すきま
irb> 'Larry Guido Nocchi'.gsub(/¥b/, '+')
=> "+Larry+ +Guido+ +Nocchi+"
0804デフォルトの名無しさん2015/02/22(日) 11:43:43.92ID:E5S/oWCJ
>>798
pwdのpはprint
0805デフォルトの名無しさん2015/02/22(日) 12:41:40.52ID:JLUSIAF5
"positioning working directory"でググったら22件全部日本のサイト
元凶はWikipediaだなw
0806デフォルトの名無しさん2015/02/22(日) 16:24:18.83ID:PdWqOzTz
Present Working Directory やなかったんか
0807デフォルトの名無しさん2015/02/22(日) 16:30:10.94ID:tq8+HI3u
こういうのにこそ要出典を貼ってやるべきだなw
0808デフォルトの名無しさん2015/02/23(月) 02:20:47.22ID:OtsoZsN/
100人程度のプログラミングに明るくない人を含む小さいコミュニティ内で(オープン・ソースの)Rubyで作ったWindowsのexeファイルを配布しようと思っています。
配布後に(私の支持の下)個々人の要望にかなった変更が行えるようにexeファイル自体は
require_relative 'hoge'
のみから作り、同梱のhoge.rbを自由に編集できるようにしようと思っているのですが、これっておかしいでしょうか? こういう場合、普通だったらこうするよみたいな意見があればお聞かせ願います。
今まで他人に公開するといった機会がなかったのでこの辺のさじ加減がさっぱりわかりません。
0809デフォルトの名無しさん2015/02/23(月) 02:48:05.91ID:n+U4e1Dx
明るい人達はgitで管理して
明るくない人向けにWSH(VBS)で配布
0810デフォルトの名無しさん2015/02/23(月) 05:58:52.55ID:2dcX2lQG
exeで配る時点で普通じゃないので好きにしろとしか
Rubyなら普通はWebだよ
0811デフォルトの名無しさん2015/02/23(月) 22:37:30.98ID:gGy05t/r
nokogiriのインストールがどうしてもできません
インストールしようとするとこのような↓エラーがでるのですがどう
対処したら良いですか?ちなみにrubyはRuby 2.0.0-p598を使用しています

エラー
C:\Users\rock111\Downloads>gem install nokogiri-1.6.1-x86-mingw32.gem
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.5.0)
0812デフォルトの名無しさん2015/02/23(月) 22:52:41.89ID:cY48eAod
>>811
gem install nokogiriは試した?
gem list mini_portileするとどうなる?
0813デフォルトの名無しさん2015/02/23(月) 22:58:43.39ID:gGy05t/r
>>812
指示のとおりやってみました
結果は以下のようになりました


C:\Users\rock111\Downloads>gem install nokogiri
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.5.0)

C:\Users\rock111\Downloads>gem list mini_portile

*** LOCAL GEMS ***
0814デフォルトの名無しさん2015/02/23(月) 23:15:26.57ID:8Nm5wO4G
gem install mini_portile
0815デフォルトの名無しさん2015/02/23(月) 23:42:06.22ID:cY48eAod
>>813
gem install mini_portileしたら
https://rubygems.org/downloads/nokogiri-1.6.6.2-x86-mingw32.gem
をダウンロードして
gem install --local nokogiri-1.6.1-x86-mingw32.gem

それでうまくいかなかったらちょっとわからない
0816デフォルトの名無しさん2015/02/23(月) 23:43:40.34ID:cY48eAod
ごめんミスった。次に訂正
gem install --local nokogiri-1.6.6.2-x86-mingw32.gem
要は落としてきたgemファイルのパスを指定して
0817デフォルトの名無しさん2015/02/23(月) 23:50:36.48ID:gGy05t/r
>>816
こういう結果になりました。アドバイスありがとうございました
後は自分で考えて見ます。。。

C:\Users\rock111\Downloads>gem install mini_portile
ERROR: Could not find a valid gem 'mini_portile' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect retur
ned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (
https://rubygems.org/latest_specs.4.8.gz)

C:\Users\rock111\Downloads>gem install --local nokogiri-1.6.6.2-x86-mingw32.gem
ERROR: While executing gem ... (Gem::DependencyError)
Unable to resolve dependencies: nokogiri requires mini_portile (~> 0.6.0)
0818デフォルトの名無しさん2015/02/23(月) 23:56:49.59ID:cY48eAod
>>817
https://gist.github.com/luislavena/f064211759ee0f806c88#installing-using-update-packages-new
0819デフォルトの名無しさん2015/02/24(火) 04:55:39.99ID:hwXyjfLa
ary = []; ary[2] = []
ary[2][3] = [1, 2]

上なら突然でも設定できるのだが、
突然に下のようにすると、エラーで追加できない
ary[2][3] << [1, 2]

ary[2][i]で、iが5, 10など突然に、
ランダムなインデックスに、
次々と追加していくには、どうするの?

設定ではなく、iが同じ場合には、追加していきたい
08208192015/02/24(火) 05:20:13.18ID:hwXyjfLa
自己レス
ary = []; ary[2] = []

いったん、空配列で初期化した後なら、追加できる
ary[2][3] = []
ary[2][3] << [1, 2]

ary[2][i]で、iが5, 10など突然に、
ランダムなインデックスに、
次々と追加していくには、どうするの?

最初の1回目だけは、空配列で初期化して、
2回目以降は初期化せずに、追加のみしていきたい
0821デフォルトの名無しさん2015/02/24(火) 05:36:48.05ID:2T0G4BSR
まんまリファレンスにあるよ
0822デフォルトの名無しさん2015/02/24(火) 06:48:53.58ID:hwXyjfLa
日本語で、ログインなし、添付ファイルも読み込める
ttps://paiza.io

print RUBY_VERSION

2.2 になっている
08238192015/02/24(火) 07:04:42.78ID:hwXyjfLa
自己レス
ary = []; ary[2] = []

いったん空配列で初期化した後なら、追加できる
ary[2][3] = []
ary[2][3] << [1, 2]

一方、初期化する前は、nil だから、<< メソッドを呼べない

つまり、空配列とnilは、異なる扱い
0824デフォルトの名無しさん2015/02/24(火) 09:33:24.04ID:ztCGtY4P
fetch
0825デフォルトの名無しさん2015/02/24(火) 11:04:07.70ID:YPtW8awo
またこいつか
0826デフォルトの名無しさん2015/02/24(火) 11:18:02.66ID:CiqLyyCO
そもそも配列初期化とか言ってる時点でRuby学ぶ気も何もないのですよ
0827デフォルトの名無しさん2015/02/24(火) 11:41:50.94ID:2y9qGJ70
「Rubyによるデザインパターン」を買ったった
届くの楽しみ・・・ しかし絶版本中古しか買えなかったわ 高いよ
0828デフォルトの名無しさん2015/02/24(火) 20:23:26.10ID:+pjYUFm3
これからrubyでクローラーを開発しようと思うのですが
初心者におすすめのエディタってありますか?
いまのとこサクラエディタを考えてますが・・・
0829デフォルトの名無しさん2015/02/24(火) 20:35:47.29ID:wMWkMGk+
Atom
開発者向けじゃない普通のエディタに比べると複雑に感じるかもしれないが、
操作自体は普通でviやemacsのように熟練を要するものではない
0830デフォルトの名無しさん2015/02/24(火) 20:36:34.72ID:9OYj7FQ2
いつも使ってるエディタ一択
それがないなら適当にフリーのエディタ(サクラでよい)使ってみて気に入らなきゃ別のを探せばよい
0831デフォルトの名無しさん2015/02/24(火) 20:38:04.38ID:2T0G4BSR
初心者ならRubyMineとかのIDEがいいんじゃないの
0832デフォルトの名無しさん2015/02/24(火) 20:39:49.43ID:+pjYUFm3
アドバイスありがとうございます。
プログラミングはsasとかMQLとかしかやったことないので
自前のエディタないんですよね。
atom使ってみます。ありがとうございます。
0833デフォルトの名無しさん2015/02/24(火) 20:52:02.57ID:xSG7hOYt
>>809-810
どうもありがとうございます。
VBSについて調べてみることにします。
0834デフォルトの名無しさん2015/02/24(火) 21:01:21.70ID:uqCdmZ4l
Atom&クローラーとか、すぐにWindowsを捨てたくなるコースだなw
WindowsでRubyを使い続けたいなら、
あまり新しいものや周りに目を向けずにこういうもんだと思って地道に使うのが吉
0835デフォルトの名無しさん2015/02/24(火) 21:12:23.56ID:2y9qGJ70
sublime textが簡単かな
emacsるびきち本にお布施払って信者になる道もある

winは茨の道に同感
三ヶ月以内にwin捨ててると思う
どうしてもクローラーのお手軽GUIがいいならmacって道もあるんじゃないの
linuxだと無料だけど・・w
0836デフォルトの名無しさん2015/02/24(火) 22:22:04.69ID:C9vda/HG
Ruby捨てればいい
技術的負債だし
0837デフォルトの名無しさん2015/02/25(水) 01:37:03.71ID:e/Qay/4t
'-12345-12-123-' に対して
「-」で挟まれた部分が最小となるような正規表現って書けますでしょうか?
/-\w*?-/だと-12345-にマッチしますが、
-12-にマッチするようなものが欲しいんですけど。
0838デフォルトの名無しさん2015/02/25(水) 02:08:59.82ID:UWnGWlrp
無理です
0839デフォルトの名無しさん2015/02/25(水) 02:32:48.94ID:e/Qay/4t
>>838
ありがとうございます。
.scan(/\d+/).sort_by{|i| i.length}
で代用することにします。
0840デフォルトの名無しさん2015/02/25(水) 02:47:40.94ID:lwlbnzFN
なんでわざわざソートするん?
0841デフォルトの名無しさん2015/02/25(水) 03:05:36.04ID:e/Qay/4t
>>840
ありゃりゃ、確かに。
min_byで十分ですね。
0842デフォルトの名無しさん2015/02/25(水) 07:45:32.49ID:lwlbnzFN
長さが同じならどれでもいいのん?
0843デフォルトの名無しさん2015/02/25(水) 08:24:49.99ID:e/Qay/4t
>>842
はい、最短のものがいくつかあったときは先の方にあったもので大丈夫です。
0844デフォルトの名無しさん2015/02/25(水) 08:45:30.40ID:AHECRfew
reg = /\d+(?=-)/
arry = '-12345-12-123-'.scan(reg)
p arry.min

#puts "-#{arry.min}-"
0845デフォルトの名無しさん2015/02/25(水) 08:55:13.44ID:e/Qay/4t
>>844
初めに挙げた例が悪くて恐縮なのですが
任意の文字列に対して、ハイフンで挟まれた文字列の長さが最短になるような挙動を期待していたので
これだとちょっとマズいです。
0846デフォルトの名無しさん2015/02/25(水) 08:55:34.29ID:AHECRfew
順番が大事なら配列番号をハッシュにし、ソートすれば
配列のデータのバラつきを集計できる
0847デフォルトの名無しさん2015/02/25(水) 08:59:03.50ID:AHECRfew
\wで文字列の長さならlengthじゃないの]
08488192015/02/25(水) 09:09:27.71ID:4HjDfert
>>819-823
ary = []; ary[2] = []

結局、要素がnilなら、nil要素には追加できないため、
空配列で初期化した後に、追加する。
こういうやり方でいいの?

ary[2][3] = [] if !ary[2][3]
ary[2][3] << [1, 2]

>>828
漏れはWin8にも対応しているので、
寺尾さんのTeraPadを使っている
0849デフォルトの名無しさん2015/02/25(水) 09:18:28.42ID:e/Qay/4t
>>847
そうですね。
>>841のように目下のところは次のようにすることにしました。
.scan(/\d+/).min_by{|i| i.length}
0850デフォルトの名無しさん2015/02/25(水) 09:20:57.88ID:KXtTFTSD
ary[2][3] ||= [[1, 2]]
0851デフォルトの名無しさん2015/02/25(水) 09:39:45.36ID:g5n/F/bU
bool値についてなんだけど

> true &amp;&amp; false
false
> true || false
true

になる理由がわからない
わかる人教えてください
0852デフォルトの名無しさん2015/02/25(水) 09:42:20.61ID:g5n/F/bU
>>851なんか文字化けしてしまった
2行目は
> true && false
です
0853デフォルトの名無しさん2015/02/25(水) 09:46:55.35ID:AHECRfew
つ ベン図
0854デフォルトの名無しさん2015/02/25(水) 10:15:06.04ID:4HjDfert
|| はOR

0 OR 0 → 0
0 OR 1 → 1
1 OR 0 → 1
1 OR 1 → 1

どちらか一方が真なら、真となる。
結果が偽となるのは、入力がともに偽の場合だけ
0855デフォルトの名無しさん2015/02/25(水) 10:28:48.23ID:4HjDfert
&& はAND

0 AND 0 → 0
0 AND 1 → 0
1 AND 0 → 0
1 AND 1 → 1

どちらか一方が偽なら、偽となる。
結果が真となるのは、入力がともに真の場合だけ
0856デフォルトの名無しさん2015/02/25(水) 10:31:31.93ID:AHECRfew
電球 -- スイッチ
|
|
スイッチ

電球が点灯するのはどれか
と同じ内容
0857デフォルトの名無しさん2015/02/25(水) 10:35:14.91ID:AHECRfew
S -- 電球 -- S ( S どちらでも

S  
| ---- 電球  ( S 2個 点灯
S
0858デフォルトの名無しさん2015/02/25(水) 10:42:29.54ID:e/Qay/4t
理由がわからないといわれても、>>854-855のように定めたから、としか言いようがないんだよね
たとえ多値理論であろうと同じで、その論理の根幹をなす部分だからね
0859デフォルトの名無しさん2015/02/25(水) 11:04:35.81ID:e/Qay/4t
つまり、「1+1=2」の証明だったらがんばれば出来るけど(厳密にはトートロジーなんだけど)
&&や||は証明以前の、「&&や||はこういう風に定義して始めていこう」っていうスタート地点だから
残念ながら覚えるしかない。(XORやIMPから導けるけどそれじゃ意味がないからね)
覚えるにあたっては、日常言語からの類推から>>857などのように考えてみると良いと思う。
0860デフォルトの名無しさん2015/02/25(水) 12:52:04.46ID:J7BSNQ3u
「ならば」は今だに納得できた気がしない
0861デフォルトの名無しさん2015/02/25(水) 17:11:45.61ID:AHECRfew
スイッチと電球買ってきて
配線つなぎ変えてボタンパチパチしてたら体で覚える
2進数だし
0862デフォルトの名無しさん2015/02/25(水) 21:03:34.70ID:g5n/F/bU
なるほど
みなさん教えてくれてありがとう
0863デフォルトの名無しさん2015/02/25(水) 22:58:14.23ID:0p0IDwyy
電球厨はほんとに昔からいなくならないよね
そろそろ絶滅してもいいと思うんだが
回路の動作自体が自明ではない(回路とスイッチの定義問題に置き換えただけ)ということを何故か理解できない
0864デフォルトの名無しさん2015/02/25(水) 23:00:32.52ID:rRy1+utq
教えてください。
ドコモメールで未読のメールを転送しているのですが、処理後に既読にする際にエラーが出ます。
具体的には
imap.store(ids, '+FLAGS', [:Seen])
の部分で
/usr/lib/ruby/1.9.1/net/imap.rb:1141:in `get_tagged_response': store failed (Net::IMAP::NoResponseError)
と出ます。
原因がわかればお願いします。
0865デフォルトの名無しさん2015/02/26(木) 02:17:30.42ID:o1bjypl8
svnで入れたredmineのバージョンを2.6から3.0にアップグレードしたいんですが
http://www.redmine.org/projects/redmine/wiki/RedmineUpgradeをみて
svn update
bundle updateをしても3.0に上がるどころか2.6の最新にアップグレードされました
どうやってアップグレードするんですか?
0866デフォルトの名無しさん2015/02/26(木) 02:39:49.14ID:ukhMPz9x
rubyに回路の自明かどうかがの証明必要なのかw
0867デフォルトの名無しさん2015/02/26(木) 02:49:14.00ID:TYC1vclc
>>443-453
Ruby2.0では、Module#prepend (先頭に追加)で、
メソッド探索の際の、継承チェーンの順番を変えられる

module A
f()
end

class B
f()

# include A
prepend A
end

A,Bに同名のメソッド、f()があるとき、
B.f()を呼ぶと、include A では、B.f()が呼ばれるが、
prepend A だと、A.f()が呼ばれる
0868デフォルトの名無しさん2015/02/26(木) 18:12:44.88ID:efkBDVlo
Ruby1.9.3のサポートが終了にともない
VerUpのRubyを再インストール(Win8.1x64)しようと考えています
Ruby2.2系を選んだ場合、不都合はおきないでしょうか
又、妥当なVerはいつと考えれば良いでしょうか
ご教授下さい。 宜しくお願いします。
0869デフォルトの名無しさん2015/02/26(木) 19:30:31.84ID:Hqc0hAXx
再インストールって何だい
両方入れて試せばいいだけじゃん
0870デフォルトの名無しさん2015/02/26(木) 21:12:05.08ID:Zl1401DB
Windowsの時点で不都合しかないからこの機会にLinuxかMacに乗り換えたら?
0871デフォルトの名無しさん2015/02/26(木) 23:13:33.88ID:H+zP2m+j
後方互換の話じゃないのか?
それともrubyはWinとlinuxでも互換性が無かったりするのか?
0872デフォルトの名無しさん2015/02/26(木) 23:22:41.86ID:3SZexjMK
コードは頑張れば共通にできなくもないけど、やり方の互換性は全くと言っていいほど無いわな
msysやCygwinが必要な時点で不都合極まりない
0873デフォルトの名無しさん2015/02/26(木) 23:34:55.05ID:Zl1401DB
今時はcygwinやらmsysやら使うより仮想マシンで本物のUNIXを動かせばいいよ
個人的には開発用のLinuxサーバーを立ててSSHがお勧めだけど
0874デフォルトの名無しさん2015/02/27(金) 05:22:17.24ID:PNxpeXH7
ary = [[1], [2, 9], [1, 2, 3]]

# 配列を結合。重複なし
res_ary = ary.inject(:|)

p res_ary => [1, 2, 9, 3]

Array.inject(:|)
うぉー、めっちゃ便利!
0875デフォルトの名無しさん2015/02/27(金) 08:23:31.06ID:oFuiO+pq
.flatten.uniq
の方が分かりやすくないかそれ
0876デフォルトの名無しさん2015/02/27(金) 09:54:27.45ID:RzxKPtwm
コードの中に顔文字がいるんだが選手権で優勝を狙えるレベル
0877デフォルトの名無しさん2015/02/27(金) 10:25:57.70ID:n2hPkGda
rubyによるデザインパターン ラスオルセン
これ良い本だった
全部は把握しきれてないけど毎日少しづつ反芻しながら消化していこうかな
ある程度終わったらMatzのコードの未来を買いに行こうと思う
0878デフォルトの名無しさん2015/02/27(金) 11:12:44.34ID:PNxpeXH7
ARY = [1,2,3]

def func
num = ARY[0]
end

ttps://paiza.io
RUBY_VERSION 2.2 でプログラミングしてますが、

関数外で定義した、グローバルではない定数が、
関数内のスコープで使えるのだが、最初から使えたっけ?

>877
Rubyのしくみ、2014
Ruby1.9のRuby仮想マシンを説明した本はいかが?
0879デフォルトの名無しさん2015/02/27(金) 12:27:34.40ID:QkugUeYG
お前は本読む前にリファレンスをまず読め
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fvariables.html#const
0880デフォルトの名無しさん2015/02/27(金) 21:53:00.68ID:vbRXIhSV
初歩的なのですが以下のプログラムを実行したら
以下のエラーが出ますどうしたらよいでしょうか?
ちなみにrubyのバージョンは2.1です

プログラム
print("KCODE=", $KCODE);
エラー
warning: variable $KCODE is no longer effective
0881デフォルトの名無しさん2015/02/27(金) 22:06:02.51ID:n2hPkGda
http://hamamuratakuo.blog61.fc2.com/?mode=m&;no=805
0882デフォルトの名無しさん2015/02/27(金) 22:27:12.72ID:vbRXIhSV
>>881
ありがとうございます
0883デフォルトの名無しさん2015/02/28(土) 11:11:48.02ID:wH9OCIcm
以下のように二元連立一次方程式を解くプログラムを書いたのですが、何か問題はありますでしょうか?
https://ideone.com/GwDNWM
0884デフォルトの名無しさん2015/02/28(土) 11:26:07.11ID:BgScRhfi
一次方程式を行列式で解いていいのは小学生まで
matrixモジュールを使いましょう
0885デフォルトの名無しさん2015/02/28(土) 11:55:15.16ID:0XiMknGf
x = (x == x.abs) ? x.abs : x
y = (y == y.abs) ? y.abs : y
これ何したいの
0886デフォルトの名無しさん2015/02/28(土) 19:16:08.25ID:IHV+CD5O
>>885
==やabsで何かやってるのかもしれないw
0887デフォルトの名無しさん2015/02/28(土) 21:59:33.88ID:2CXIROWH
初歩的ですが以下のプログラムを実行しても”\n”で改行が
できませんどうしたらよいでしょうか?

プログラム
print(("こんにちは\nお元気ですか"), "\n")
print(("こんにちは\nお元気ですか"), "\n")

結果
こんにちは\nお元気ですか\nこんにちは\nお元気ですか\n
0888デフォルトの名無しさん2015/02/28(土) 22:44:19.09ID:6MRbMFB/
>>887
環境は?とくにOS
0889デフォルトの名無しさん2015/02/28(土) 22:46:15.33ID:wIOQnSZg
htmlってオチ?
0890デフォルトの名無しさん2015/02/28(土) 23:04:38.46ID:wH9OCIcm
>>885
ググったら0が解のときに-がつくことがあるみたいなことが報告されてたので、念のため。
0891デフォルトの名無しさん2015/02/28(土) 23:12:19.06ID:2CXIROWH
>>888
windows7です
rubyはバージョン2.1
0892デフォルトの名無しさん2015/02/28(土) 23:15:44.83ID:pM+RKKwV
>>890
x = x.abs
でいいのでは?
0893デフォルトの名無しさん2015/02/28(土) 23:55:15.91ID:6MRbMFB/
>>891
ごめんすぐにはわからない。以下の手順を試してくれる?

1. >>887のコードをhoge.rbに保存
2. 次のコードをhd.rbって名前で保存してhoge.rbのあるフォルダに置く
puts ARGF.read.bytes.map{|c|'%02X' % c}.each_slice(16).map{|ary| ary.join(' ') }
3. コマンドプロンプトから次のように実行
C:¥hd.rbとhoge.rbのあるフォルダ> ruby hd.rb hoge.rb
0894デフォルトの名無しさん2015/02/28(土) 23:56:55.29ID:6MRbMFB/
あと使ってるエディタと実行環境(コマンドプロンプトとかEclipseとかRubyMineとか)も書いてほしい
0895デフォルトの名無しさん2015/03/01(日) 00:20:59.67ID:/quXJ0y4
バックスラッシュ (\x5C) でなく円記号 (\xA5) になってんだろう。
0896デフォルトの名無しさん2015/03/01(日) 00:49:57.79ID:8He3Ckgj
>>893
>>895
解決しましたありがとうございました
原因はたぶん>>895だったと思います
コピペしてたプログラムを自分で書き直したら
ちゃんと改行できました
0897デフォルトの名無しさん2015/03/01(日) 01:50:50.75ID:0lBNnzFD
RoR以外でもRubyを使ってたユーザーが
だんだんとPythonに流れていってる気がする
0898デフォルトの名無しさん2015/03/01(日) 01:55:18.50ID:Z+lfbyup
気質が違うんじゃね?とも思うけど。
それってトレンドを追いかける層じゃないの
0899デフォルトの名無しさん2015/03/01(日) 02:26:59.22ID:1cXWH4jo
>>892
0だけマイナスを外したいんじゃない?
0900デフォルトの名無しさん2015/03/01(日) 02:38:06.70ID:vUz0ZLJI
coe[0]*coe[4] - coe[1]*coe[3]を三回も計算しているから俺ならこうする。
unless (denom = coe[0]*coe[4] - coe[1]*coe[3]).zero?
 x = (coe[2]*coe[4] - coe[1]*coe[5])/denom
 y = (coe[0]*coe[5] - coe[2]*coe[3])/denom

あとputs "%.3f %.3f"%[x, y]って書くな。
-0はなったこと無いからわからん。
0901デフォルトの名無しさん2015/03/01(日) 02:39:47.66ID:ciqMShcX
>>899
誤解してた
ありがとう
0902デフォルトの名無しさん2015/03/01(日) 02:47:46.19ID:vUz0ZLJI
puts -0.0 #=> -0.0
ってなったわ。なるほど。
puts -0.0+0 #=> 0.0
これでもいけるみたい。
0903デフォルトの名無しさん2015/03/01(日) 02:56:02.92ID:ciqMShcX
>>902
awkかよw
0904デフォルトの名無しさん2015/03/01(日) 03:08:40.08ID:ewolcDIQ
>>900
>>902
なるほど、計算量減らせますね。
ところでputsのところはなぜだめなんでしょう?
0905デフォルトの名無しさん2015/03/01(日) 03:18:04.07ID:ciqMShcX
>>904
http://ja.wikipedia.org/wiki/%E2%88%920
らしいよ
0906デフォルトの名無しさん2015/03/01(日) 03:19:22.20ID:vUz0ZLJI
>>904
"%.3f"%[x] + " " + "%.3f"%[y]は
String#%とString#+を2回ずつやってるから
"%.3f %.3f"%[x, y]ってやった方が早いよ。読み易いし(個人的に)。
あと例の部分は
x = x.abs if x.zero?
とかってした方が分かり易いような。
0907デフォルトの名無しさん2015/03/01(日) 05:06:33.52ID:1B6jpH8l
Array#empty? は ==[]よりも速いので存在意義が分かるんですが
Numeric#zero?(Fixnum#zero?) と Numeric#nonzero? は ==0よりもだいぶ遅いんですが、これらの使いどころってどういう場面でしょう?
0908デフォルトの名無しさん2015/03/01(日) 05:18:05.10ID:ciqMShcX
チェインはできるね
0909デフォルトの名無しさん2015/03/01(日) 07:06:52.31ID:pZeLnU6y
>>907
速度=存在意義だとするとそもそもゲロ遅いRubyの存在意義は無い
コードの見易さの問題
0910デフォルトの名無しさん2015/03/01(日) 08:16:56.62ID:ewolcDIQ
>>905
>>906
ありがとう
確かにその方が良いかも。
0911デフォルトの名無しさん2015/03/01(日) 21:22:33.57ID:4MmbhF/I
複数の引数(文字列)を一つずつ取り出して
それを条件によって出力するメソッドってどう定義すればいいのかな?
def hello(a,b)
みたいな感じで始めてaが条件にマッチしたらxを出力
bが条件にマッチしたらyを出力、って感じでa,b両方出力するやつを書きたい
0912デフォルトの名無しさん2015/03/01(日) 21:25:12.38ID:pZeLnU6y
puts x if 条件(a)
puts y if 条件(b)
0913デフォルトの名無しさん2015/03/01(日) 21:31:21.20ID:4MmbhF/I
こんな簡単なことだったのか...
ありがとう...
0914デフォルトの名無しさん2015/03/02(月) 00:07:14.99ID:oT97RUxu
ruby -e '%@5Z;R[YJ^;Y8>ZXX&amp;FXX&amp;^XX&amp;9XX*(@::unpack(?u)::each &amp;method(:puts)'
0915デフォルトの名無しさん2015/03/02(月) 00:11:34.49ID:oT97RUxu
2chのクソURLエスケープのせいで台無しだわ
ruby -e 'puts %@5Z;R[YJ^;Y8>ZXX&FXX&^XX&9XX*(@::gsub(/&/, "&"[0])::unpack(?u)'
0916デフォルトの名無しさん2015/03/02(月) 07:37:37.94ID:inbvIq+5
演算子を調べたい時はどうすればいいんでしょうか
=== とか ||= とか >> とか
検索ワードが単純すぎるのかリファレンスマニュアルで検索できません
0917デフォルトの名無しさん2015/03/02(月) 07:53:55.50ID:R5NgJSqu
演算子とかで調べればいいんじゃないの
0918デフォルトの名無しさん2015/03/02(月) 23:02:30.62ID:wVZtgmYG
if foo && bar && zoo && ...
 hoge
end
条件部分が長くなって読みにくくなってしまうことがあるんですが
いい方法は無いでしょうかね?
0919デフォルトの名無しさん2015/03/03(火) 00:07:11.81ID:zVvpeWzV
コメント書いとけばいいんじゃない
0920デフォルトの名無しさん2015/03/03(火) 00:11:35.52ID:vR9EUcuj
foo = true
bar = true
zoo = true

b = true
unless foo
 b = false
end

unless bar
 b = false
end

unless zoo
 b = false
end

if b
 p foo
 p bar
 p zoo
end
0921デフォルトの名無しさん2015/03/03(火) 00:25:06.51ID:zwt6IiMP
>>918
自分なら、以下のようにコードの論理構造に沿って
改行とインデントを挿入して書く
  if (
    foo &&
    bar &&
    ...
  )
    hoge
  end
たとえば、もし foo や bar が一行に収まらないほど長くなっても同じ
  if (
    (
      foo_1 +
      foo_2
    ) && (
      bar(
        param1,
        param2
      )
    ) && (
      ...
    )
  )
    hoge
  end
コーディング規約の一貫性が大切だと思う
0922デフォルトの名無しさん2015/03/03(火) 00:28:27.47ID:rb+ajjEU
foo && bar && zoo && ... だけ別式
09239212015/03/03(火) 00:34:20.64ID:zwt6IiMP
あるいは、式 foo や bar が「すべて && で結合されている」ならば、
組み込みメソッド Enumerable#all? を使うとより単純になる
http://docs.ruby-lang.org/ja/2.2.0/class/Enumerable.html#I_ALL--3F

  if [
    foo,
    bar.
    zoo
  ].all?
    hoge
  end

もし「すべて || で結合されている」ならば、Enumerable#any? を使う
http://docs.ruby-lang.org/ja/2.2.0/class/Enumerable.html#I_ANY--3F

  if [
    foo,
    bar.
    zoo
  ].any?
    hoge
  end
0924デフォルトの名無しさん2015/03/03(火) 02:01:03.10ID:ZJqo3Jjw
>>919-923
どうもありがとうございます!
どの意見もとてもためになりました。
0925デフォルトの名無しさん2015/03/03(火) 09:43:04.98ID:rb+ajjEU
http://news.mynavi.jp/articles/2015/03/03/atlassian_06/

アトラシアンCo-CEOとRuby開発者まつもと氏が見るソフトウェアの今後 [2015/03/03]
0926デフォルトの名無しさん2015/03/05(木) 02:42:45.93ID:X+jzIOn3
ruby2.1.5でのWebrickの改行について質問です。
File.writeで保存したデータを見ると改行がCRLFになっていることがあるんですが
元の内容(res.body)を確認してみると該当箇所がLFであることが結構な頻度であります。
inspectで見てみても\nだけになっています。
これは一体どういうことが起こっているのでしょうか?

handler = proc{|req, res|
p res.body.match(/\r\n/)
File.write("log", res.body)
}

config = {
BindAddress: hoge,
Port: hogehoge,
ProxyContentHandler: handler
}

WEBrick::HTTPProxyServer.new(config).start
0927デフォルトの名無しさん2015/03/05(木) 18:34:28.01ID:C3m5LJXP
ruby talk ml の話なんだけどさ、minitest-bonus-assertions のアナウンスがあった。
wiki とか markdown とか、html を生成する表記法っていろいろあるけど、この表記法ってナニ?

* continuous integration: <{img src="https://travis-ci.org/halostatue/minitest-bonus-assertions.png"; /}[https://travis-ci.org/halostatue/minitest-bonus-assertions]>

Additional assertions for {Minitest}[https://github.com/seattlerb/minitest].
0928デフォルトの名無しさん2015/03/05(木) 19:25:12.04ID:nZIZZ25g
a = [1,2,3,4,5,1,2]
p a.inject(Hash.new{[]}){|map, x| map[x] += [x]; map} #1
p a.inject(Hash.new{[]}){|map, x| map[x].concat([x]); map} #2
p a.inject(Hash.new{[]}){|map, x| map[x] << x; map} #3
p a += [100]
p a.concat([101])
p a << 102

実行結果
{1=>[1, 1], 2=>[2, 2], 3=>[3], 4=>[4], 5=>[5]}
{}
{}
[1, 2, 3, 4, 5, 1, 2, 100]
[1, 2, 3, 4, 5, 1, 2, 100, 101]
[1, 2, 3, 4, 5, 1, 2, 100, 101, 102]

質問
なぜ、#2や#3が#1のような結果を出してくれないのでしょう?
ruby 2.0.0p598です
0929デフォルトの名無しさん2015/03/05(木) 19:44:28.85ID:Bj74d4BH
Hash.newのブロックは戻り値を決めるだけで
勝手にはキーに登録してくれないから
ちゃんとキーに登録するように書けば#1と同じようになる

p a.inject(Hash.new{|h,k|h[k]=[]}){|map, x| map[x].concat([x]); map} #2
p a.inject(Hash.new{|h,k|h[k]=[]}){|map, x| map[x] << x; map} #3
0930デフォルトの名無しさん2015/03/05(木) 20:16:34.95ID:PnPYgYXw
>>929
> Hash.newのブロックは戻り値を決めるだけで
> 勝手にはキーに登録してくれないから

即レスありがとうございます!
おわあああああ!!!
勝手にキー登録されるもんだと勝手に思い込んでた!!

map[x] = map[x] + [x]になるから
Hash#=[]=とArray#+ってことになるのか
Array#[]=を呼んでるつもりだったけどもw
0931デフォルトの名無しさん2015/03/05(木) 20:18:26.70ID:p3Fl2hJL
ぐじゃぐじゃ訂正

Hash#[]=とArray#+ってことになるのか
Array#+=を呼んでるつもりだったけども
0932デフォルトの名無しさん2015/03/05(木) 21:15:27.06ID:xYJzrRgD
関数型っぽいカッコいいコードのつもりだろうけど、
injectのブロックの中でオブジェクトの中身を書き換えるなんて関数型信者にぶん殴られるぞ
0933デフォルトの名無しさん2015/03/05(木) 21:31:45.65ID:Bj74d4BH
p Hash[a.group_by{|i|i}]
これでいっすか
0934デフォルトの名無しさん2015/03/05(木) 21:44:38.63ID:Bj74d4BH
933みたいな{|i|i}っていうブロックって
省略したり何か別の自身であることを直接示す書き方ってありますか?
==0じゃなくて.zero?にするのと同じように
自身を返すメソッドってあったらそれを指定したいイメージだけどないよね
0935デフォルトの名無しさん2015/03/05(木) 21:51:49.84ID:sljD0ZJl
>>932
>injectのブロックの中でオブジェクトの中身を書き換えるなんて関数型信者にぶん殴られるぞ
心理的抵抗があるんだよな
0936デフォルトの名無しさん2015/03/06(金) 07:45:11.48ID:m+byGEX+
>>934
Object#itself
[1,2,3,1].group_by(&:itself)
0937デフォルトの名無しさん2015/03/06(金) 08:02:28.91ID:qwFgbeNs
>>936
2.2で新しく入ったのか
知らなかったありがとう!
0938デフォルトの名無しさん2015/03/06(金) 16:05:00.89ID:r9/Lx2G5
昔「JavaからRubyへ」って本があったけど、今はその逆
0939デフォルトの名無しさん2015/03/06(金) 20:22:30.99ID:PQkPUtV7
さすがにJavaには今更戻れないよね
ま、Scalaあたりかな
0940デフォルトの名無しさん2015/03/06(金) 21:55:01.26ID:me7M4fm7
そもそものそもそもとしてJavaとRubyは全く被らなかったのだ
多大な犠牲と火傷を払って、やっと(本来Rubyが不要な人たちに)理解された
静かで退屈で幸せな日々が戻ってくる
0941デフォルトの名無しさん2015/03/06(金) 22:11:20.59ID:qwFgbeNs
Scalaは文法がRubyに近いからRuby使いには書きやすい
でもJavaのライブラリをどうしても使いたい人でもなければ特にScalaを使う理由はない
0942デフォルトの名無しさん2015/03/06(金) 22:42:58.00ID:PQkPUtV7
>>940
なんでもかんでもJavaで片付けようとしてた人たちにRubyという選択肢もあるよ、という
ことを知らしめることができたのはいいことだね
今までは他のまともな選択肢としてはPHPぐらいしかなかったのだから
0943デフォルトの名無しさん2015/03/06(金) 23:03:28.14ID:r9/Lx2G5
Rubyは技術的負債
0944デフォルトの名無しさん2015/03/06(金) 23:25:40.73ID:vO+G6CJH
負債連呼の人の粘着っぷりがいいね
0945デフォルトの名無しさん2015/03/06(金) 23:50:22.70ID:bYz+Y5q2
Ruby installer 2.2.1の不具合が修正されたようだ
情弱には助かるぜ
0946デフォルトの名無しさん2015/03/07(土) 11:46:38.09ID:UbZLtcdC
>>933
group_byなんてあったのか
1.8.6を長く使ってたのでその存在に気付けなかった
これってモロにSQL由来なのかな?
0947デフォルトの名無しさん2015/03/07(土) 11:52:18.96ID:MlGEwDRl
いや直接的にはC#のLINQ由来
0948デフォルトの名無しさん2015/03/07(土) 15:02:53.80ID:MaguiqUS
代わりにpartitionの存在意義が希薄になってしまった
0949デフォルトの名無しさん2015/03/07(土) 19:13:00.81ID:54pgo+OO
Rubyで書いたプログラムは
後で泣きながら他の言語で書き直す羽目になる
0950デフォルトの名無しさん2015/03/07(土) 19:49:45.23ID:MlGEwDRl
わざわざ他の言語に書き直すほどの価値を作れたんなら既に大成功だろ
0951デフォルトの名無しさん2015/03/07(土) 20:21:39.13ID:sKPR5r8d
書捨てのプロトタイプ組むのに向いてるからなw
構造だけ練って書き換えるのは賢い使い方
0952デフォルトの名無しさん2015/03/07(土) 21:02:48.61ID:XVcFmamb
そうそう、書き捨てでもいいから素早く作れるところがメリット
書き直すハメになるまで育つビジネスなんてそうそうないんだから、育った後に考えればいいこと
その前に書き直しのことを考えるのはただの「捕らぬ狸の皮算用」ですな
0953デフォルトの名無しさん2015/03/07(土) 21:19:11.20ID:sKPR5r8d
今どきならどうせWebタイプか自家用PCの書捨てコードっしょ
法人ならクライアントの指名で選択権なんてないんだしw

ある程度儲かるなら鯖との兼ね合いで結局リニューアルで書き換えになるんだしw
0954デフォルトの名無しさん2015/03/07(土) 21:23:37.05ID:54pgo+OO
素早く作れるというのも昔の話
今はメリット皆無
0955デフォルトの名無しさん2015/03/07(土) 21:27:19.66ID:XVcFmamb
>>954
残念だなぁ、君の希望通りに世の中が推移してなくてw
0956デフォルトの名無しさん2015/03/07(土) 22:04:30.14ID:54pgo+OO
世界の賢い人たちはみんなRubyから去っている
0957デフォルトの名無しさん2015/03/07(土) 22:09:25.40ID:XVcFmamb
>>955
残念だなぁ、君の希望通りに世の中が推移してなくてw
0958デフォルトの名無しさん2015/03/07(土) 22:16:11.89ID:zDrJhe3l
こんなところでしかRubyの文句を言えないのだとすれば同情の余地はある
0959デフォルトの名無しさん2015/03/07(土) 23:31:19.46ID:5/MzqEvw
書き捨てのプロトタイプならMEANで十分だよね。
導入、運用、改修ならWordPressで済んでしまうし。
いままで、夢をありがとう
0960デフォルトの名無しさん2015/03/08(日) 00:03:05.33ID:OIrWM5if
WordPress wwwwwwwwwww
0961デフォルトの名無しさん2015/03/08(日) 00:30:29.13ID:yzx/IE4z
>>959
そこはNだけでいい
0962デフォルトの名無しさん2015/03/08(日) 01:15:00.39ID:jl3+9tmL
>>926
よく覚えていないが、RubyVMの中では、
改行コードは、\n で統一されている

外部環境 → RubyVM → 外部環境

外部環境がWindowsなら、
\r\n → \n → \r\n
0963デフォルトの名無しさん2015/03/08(日) 05:05:20.61ID:dB2moAQV
>>962
確かに、Webrickなぞ使わなくともFile.writeとかFile.readを使うことで状況が再現できました。
どうもありがとうございます。
0964デフォルトの名無しさん2015/03/08(日) 17:40:33.34ID:nkTbr3EU
全くの初心者です。
Rubyの勉強の仕方を教えて下さい。
0965デフォルトの名無しさん2015/03/08(日) 18:12:55.61ID:srsOwzq5
Rubyは勉強するものではありません。使うものです。
まずは目的を教えて下さい。
無いなら諦めて下さい。
0966デフォルトの名無しさん2015/03/08(日) 21:40:22.77ID:fg6UZd+E
勉強したい、という目的だってあっていいと思うけどね

まずは「Ruby 入門」でぐぐってその中からいくつか読んでみたらいいんじゃないかな
0967デフォルトの名無しさん2015/03/08(日) 21:51:14.87ID:OIrWM5if
「たのしいruby」を買ってきて
暇を見て読んでタイプするだけ
理解したらタイプ、難しかったらググってタイプ
「作りながら学ぶruby入門」を買ってきてタイプ
改造して手直ししながら運用できるようになれば
初心入門者卒業

そっから先はlinuxとかrailsとかsqlとか色々複合的な知識が必要になる
0968デフォルトの名無しさん2015/03/09(月) 04:26:57.37ID:i5vehHCW
とりあえずこれやればいいんじゃね
http://tryruby.org/
0969デフォルトの名無しさん2015/03/09(月) 08:01:24.40ID:Wd5OU0nX
とりあえずタイプして、それを改造し
自分のコードが動くことが楽しいと感じ、モチベを維持できてたら
いつの間にか初心者卒業してる

最初は効率よくとか、人より早くとか考えない
失敗しないと身につかないスキルがあるから失敗も大事
0970デフォルトの名無しさん2015/03/09(月) 17:26:12.01ID:vIhT64TY
Pythonはインデント一つで、のし上がった言語。
for a, b in コンテナ
 ここで、a, bを使う

一方、Rubyはブロック一つで、のし上がった言語。
コンテナ do |a, b|
 ここで、a, bを使う
end

この右側に、| | で囲むアイデアが、世界を驚かせ、
多くの人が、Rubyを神と崇める

Python, Rubyはほとんど同じなのだが、
本を読む順番は、「たのしいRuby」をみっちり読んだ後に、
「みんなのPython」を読めば、一石二鳥!
1+1=2 ではなく、1.4 程度で、両方の言語を学べる(エコ学習)
0971デフォルトの名無しさん2015/03/09(月) 20:31:37.23ID:3H3hf/iH
Rubyのブロックは良いアイデアだけどメソッドの引数でしか使えないのが極めて不便で、
特に関数型的に使いたい人たちには大不評だけどな
そもそもPythonとRubyがほとんど同じだとか言ってる時点でブロックの何が嬉しいのか全く理解してなさそうだけど
0972デフォルトの名無しさん2015/03/09(月) 20:34:26.51ID:LVVJpWoE
>>971
横からだけど、ブロックの何が嬉しいの?
Procのインスタンスと比較して、みたいな話?
0973デフォルトの名無しさん2015/03/09(月) 20:48:29.93ID:3H3hf/iH
>>972
「コールバックを自然に書ける」に尽きる
Javaだと
readFile(new ReadFileCallback() {
 void callback(string content) {
  use(content); }
 }
);
こうなるのが、JavaScriptだと
readFile(function(content) { use(content); });
となり、Rubyなら
read_file do |content|
 use content
end
となる
他のはいかにもハック感があるのに対し、Rubyはあたかも言語組み込みのループ構文のように見えるのが特徴だね
Pythonのlambdaは副作用書くのに使うようなものではないので省く
0974デフォルトの名無しさん2015/03/09(月) 21:21:46.21ID:4fC/PUC7
今からでもブロック=無名関数のリテラルってことに変更できないのかね
そうすると今の引数の仕組みとかがうまくいかなくなるのか
0975デフォルトの名無しさん2015/03/09(月) 21:59:44.32ID:2o+rbul/
そりゃもう無理だよ。
ブロックの引数の仕組み、や return の理解があやしければ lambda を使おう
0976デフォルトの名無しさん2015/03/09(月) 22:52:00.21ID:T6nKbDrg
proc, block, lambda, functionの違いなんてなくても
javascriptの連中はOSぐらい書いちゃうんだよ?
優れた言語のはずなのに悲しいよね。
0977デフォルトの名無しさん2015/03/10(火) 01:49:25.31ID:Z23I42wA
悲しいのは OS 作る技術力がない人(俺含め)であって
言語は関係ないな
0978デフォルトの名無しさん2015/03/10(火) 01:50:17.49ID:Z23I42wA
悲しいのは OS 作る技術力がない人(俺含め)であって
言語は関係ないな
0979デフォルトの名無しさん2015/03/10(火) 05:38:41.64ID:mQZ0aY7i
Rubyのソースコードを暗号化するソフトウエア「RubyEncoder 2.2」販売開始

http://news.mynavi.jp/news/2015/03/09/204/
0980デフォルトの名無しさん2015/03/10(火) 06:45:43.86ID:ZyX65yHp
>>974
て言うか、Rubyに >>971 的な意味で無名関数は無いので
やるならそこにも手を入れないといけないが、そうすると
「関数とはある種のメソッドのことである」
「メソッドは必ずどこかのオブジェクトに所属しなければならない」
「インスタンス変数は必ずメソッドを経由でアクセスしなければならない」
ってポリシーにも波及してくるからね
0981デフォルトの名無しさん2015/03/10(火) 12:26:29.09ID:YcE4vHSD
ラムダとしてはいちいち引数や式を括弧で囲まなきゃいけないのも鬱陶しいよね
->表記も無理がありすぎる
0982デフォルトの名無しさん2015/03/10(火) 21:36:18.82ID:4EFpqRHU
クソ初心者で申し訳ないですが質問させてください。
とあるスクリプト(RBファイル)なんですが、制作者のサイトからダウンロードしたものはちゃんと実行できるのに、中身をコピーして新規に作ったRBファイルだと実行できません。解決法を教えてください。

Ruby1.9.3.-p551

WindowsVistaSP2

サクラエディタ2.1.1.4
0983デフォルトの名無しさん2015/03/10(火) 21:44:31.64ID:3P4ym/J5
エンコーディングが違うんじゃない?
0984デフォルトの名無しさん2015/03/10(火) 21:52:42.78ID:4EFpqRHU
>>983
エンコーディング…
ググってきます。゚(゚´Д`゚)゚。
0985デフォルトの名無しさん2015/03/10(火) 22:03:31.56ID:3P4ym/J5
例えば元のファイルがUTF-8なのにそれをShitt-JISで保存してしまうとうまく行かないことがある
コピーしたファイルに対してruby -Ka ファイル名 とか ruby -Ks ファイル名 とかってしてもうまく行くかも知れないよ
0986デフォルトの名無しさん2015/03/10(火) 23:55:57.09ID:6ILv8fjj
>>985
ありがとうございます!
今度は別の問題が発生してくじけそうです。゚(゚´Д`゚)゚。
0987デフォルトの名無しさん2015/03/11(水) 00:12:17.31ID:XtiAka4m
トラブルを乗り越えるとスキルが身につくよ
0988デフォルトの名無しさん2015/03/11(水) 00:19:43.44ID:409Xxc8o
×スキル
⚪︎バッドノウハウ
0989デフォルトの名無しさん2015/03/11(水) 00:30:43.30ID:XtiAka4m
はしかみたいなもんで
一度は経験しとかないとね
09909862015/03/11(水) 01:39:26.18ID:MLKxjfw5
正直、何が分からないのか分からない状態に陥っております。

コマンドプロンプトで実行しても、エラーが出てしまい出力できません。

http://imgur.com/8Ioq7PK.jpg
これはスクリプト制作者のブログに貼られた画像で、出力成功したものです。

http://imgur.com/EzDr6SI.png
そしてこれが私自身が操作したもので、出力できずにいます。

何が原因でしょうか?
0991デフォルトの名無しさん2015/03/11(水) 02:29:09.33ID:Vrr9zXxI
よくわかんないけど107行目の「if work.size &gt; 1」を
「if true」か「if false」にして試してみてはいかが
0992デフォルトの名無しさん2015/03/11(水) 02:31:08.69ID:Vrr9zXxI
ああ、ミスミス
「 if work.size < 1」に直せばうまく行くと思うよ
0993デフォルトの名無しさん2015/03/11(水) 02:31:24.12ID:GxyWGyaM
>>990
107行目に定義されていないメソッドまたは変数のgtってのがあるよって書いてあるし、元のソースコードとそこらへん比べてみたらどうだろう
0994デフォルトの名無しさん2015/03/11(水) 02:32:12.62ID:Vrr9zXxI
連投すまん
「if work.size > 1」の間違いだわ
これは作者のミスだね
09959862015/03/11(水) 02:39:06.07ID:MLKxjfw5
>>991-994
うわぁ!できました!
皆さん本当にありがとうございます!
感謝しきれません!
0996デフォルトの名無しさん2015/03/11(水) 08:11:12.43ID:hyga96Fu
>994
エスパー乙。

コードの意味も分からずにコピペして動かしてたわけだ。

>995
今回はHTMLにエスケープされたような文字列でエラーになってたから994はエスパー出来たけど、質問するならコピペしたソースのURLかせめてソースの断片くらいは示しなさいよ。
0997デフォルトの名無しさん2015/03/11(水) 09:17:02.12ID:NkBCbaPC
gtって言うのを見るに、コピペしたときに大なり記号がHTMLの特殊文字に書き変わっちゃったんじゃねーの
09989862015/03/11(水) 09:55:05.10ID:MLKxjfw5
>>996
わかりました!
また壁にぶつかったときはお世話になるかもしれません。その時はよろしくお願い致します!
ありがとうございます!
0999デフォルトの名無しさん2015/03/11(水) 12:51:49.32ID:Wt/f1P/G
>>996
それが出来ないのが初心者
1000デフォルトの名無しさん2015/03/11(水) 16:17:49.24ID:cFDo18bs
とどめだ!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。