トップページ⇒tech
995コメント369KB

Ruby 初心者スレッド Part 55

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2014/06/21(土) 23:39:44.94ID:rKd1VvW8
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

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

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん2014/06/21(土) 23:40:40.82ID:z7G+00JR
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                         霊長類研究所
0003デフォルトの名無しさん2014/06/21(土) 23:57:21.14ID:nSPSSkcc
>>1乙
0004デフォルトの名無しさん2014/06/22(日) 00:02:10.62ID:P/6Lf536
>>前1000
.NET3.5向けにビルドしたものは
マニフェストファイルで.NET4.5での動作を許可するよう指定すれば.NET4.5上で動く
デフォルトで動かないのはMSのクソ厳格な互換性ポリシー(.NETは業務向けだからね)によるもので、
普通の基準でいえば完全な互換性がある
0005デフォルトの名無しさん2014/06/22(日) 01:13:10.71ID:upDz43Y5
>>997
>自分が調べた結果では
>Win7は.NET Framework2.0/3.0/3.5が入っている
>Win8は.NET Framework4.5が入っていて.NET Framework3.5は無効化されている

Win7向けにビルドしたC#アプリを素のWin8へインストールして実行しようとすると、
.NET Frameworkのバージョン不一致で起動すらできないってこと?
そうだとしたらWindowsは糞だけど、信じられんな
OSXならCocoaフレームワークが2つ前くらい迄なら、平気で実行できるのに
0006前10002014/06/22(日) 18:36:27.68ID:ZfkThsTa
>>4
情報ありがとう、そういうことなんだね....
元質問者さんの目的であれば、マニフェストファイルを修正して
差し替えた改変版の IronRuby とスクリプトを irpack でexe化すれば、
解決できる可能性はありそうだ

MSの互換性ポリシーに関しては、それが業務向けであるということなら、
妥当な方針だと言わざるをえない(中途半端に動くよりもベターだから)

とはいえ、OSX上での開発がC++/CarbonからObjC/Cocoaへ完全移行したように、
WidowsでもC++/Win32からC#/.Netへ移行したものだと思い込んでいたけど、
Win8の時代に至っても一般のデスクトップアプリ開発ではC++/Win32が必須なんだね
業務アプリではない元質問者さんが、IronRuby の採用そのものに抵抗を感じるのも分かる
0007デフォルトの名無しさん2014/06/22(日) 19:08:05.07ID:kD+jIMJ8
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
0008デフォルトの名無しさん2014/06/22(日) 21:40:35.61ID:LFA4ujmd
発狂して終了か
0009前スレ9662014/06/22(日) 23:19:35.65ID:95RLu5vG
>>4をみてIronRuby 1.1.3を試してみました
.NET Frameworkのバージョン以前に.起動の遅さとRubyコードの実行の遅さが気になります
手近なコードを走らせてみましたが.NET Framework 4.5.1でIronRuby 1.1.3が走り出すまで
3秒強くらいかかります。.NET Framework 3.5だと6秒くらいかかります
さらにコードが実行完了するまで4秒くらいかかります。コードの実行時間は
.NET Framework 4.5.1でも.NET Framework 3.5でも大差ないようです
同じコードをRuby 2.1.2で実行するとコードの実行に0.1秒強くらい(起動は一瞬)なので
ちょっと遅いとかそういうレベルではない感じです
JRubyも同じくはかってみましたがJRuby 1.7.12が起動するまでに5秒くらい、コードの実行完了
に2秒弱くらいでした
VM実装の処理系だと遅いのはさけられなさそうですね。これだと1.8の方がまだ速そうです

Rubyから.NET Frameworkのクラスを呼び出すようなラッパーがあれば・・・っとググって見ると
Ruby/.NET Bridgeなるものがあったらしい?(今は消滅?)。使えるレベルのラッパーがあれば
本家の高速性と豊富な.NETのクラス群を使えて良いとこ取りが出来そうですが

う〜む・・・Rubyで行くならRuby 1.8.7+wxRuby 0.6.0でお茶を濁すしかないのか・・・
RubyにこだわらないならPython+wxPythonやC# for VC#2008EXあたりになるのかな

#計測に使ったコードはStringにconcatしまくる系の物です
0010デフォルトの名無しさん2014/06/22(日) 23:19:40.68ID:jnseZCAU
互換性ポリシー弄れば動くっつてんのにそこからC++/Win32必須なんだねとか意味不
端っから自分の妄想した結論以外は受け付ける気がないでしょ
0011デフォルトの名無しさん2014/06/23(月) 01:29:19.73ID:LLEITqEE
なんで違う人に絡んでるのか
0012デフォルトの名無しさん2014/06/23(月) 03:34:48.43ID:owP8nPZ4
wxPythonおぬぬぬ
0013デフォルトの名無しさん2014/06/23(月) 20:00:51.23ID:Jv1bdWLq
ところでRubyって何の役に立つの?
0014デフォルトの名無しさん2014/06/23(月) 20:13:31.25ID:9imRHr/V
>>13
コンピュータに命令することができます。
0015デフォルトの名無しさん2014/06/23(月) 22:15:43.67ID:BINMcHFB
人に命令するの上手くなったほうが100倍マシだな
0016デフォルトの名無しさん2014/06/23(月) 23:03:36.19ID:7NlEu9GA
命令を聞いてくれる相手を探すのが先だな。
0017デフォルトの名無しさん2014/06/23(月) 23:51:44.83ID:owP8nPZ4
金
0018デフォルトの名無しさん2014/06/23(月) 23:57:28.82ID:s879JP9J
リファレンスマニュアルのインスタンス変数のところに
attr_accessorの使用例がほしいな
外部からインスタンス変数を参照する方法って何かあったよなと
リファレンスマニュアルとにらめっこすること数十分。メソッド定義の
ところにattr_accessorの使用例が載っているのを見つけて一件落着した
0019,,・´∀`・,,)っ-○○○2014/06/24(火) 00:09:30.84ID:xHFmkiJx
instance_variable_get / instance_variable_setの使い方覚えておくと
自前でアクセサ定義するときに助けになりますよ
0020デフォルトの名無しさん2014/06/24(火) 07:58:05.88ID:1kTNOLbu
ソースのエンコーディング(たとえばsijis)を指定した状態で
str.concat "\xff\xff\xff\xff"
と書くとデータ列によってCompatibilityErrorが起きる場合がありますが
これを防ぐ方法はありますか?
str.concat [0xffffffff].pack("V")
と書けば同じ結果を得られますが↑の書き方よりかなり遅いです
0021デフォルトの名無しさん2014/06/24(火) 11:06:05.40ID:VrH3d8m/
ジャップまた負けたのかwwww
0022デフォルトの名無しさん2014/06/24(火) 18:47:07.86ID:r/Uvv29G
>>20
str.concat "\xff\xff\xff\xff".force_encoding(str.encoding)
ではどうだろうか?
0023デフォルトの名無しさん2014/06/24(火) 19:47:53.32ID:c5+BSms2
>>20
文字列をバイト列として扱う場合はエンコーディングをASCII-8BITに揃えるがよろし
0024デフォルトの名無しさん2014/06/24(火) 21:06:26.58ID:3Daegd5r
バグっぽいの見つけた。
p(
1
2
) #=> syntax error ←分かる

p((
1
2
)) #=> 2 ←分かる

p (
1
2
) #=> syntax error ←2個目のコードの引数の括弧を省略した形だから2になるはず
0025デフォルトの名無しさん2014/06/24(火) 21:39:43.41ID:c5+BSms2
>>24
メソッド名とカッコの間にはスペースが許されているので、一番上と同じように解釈される
よって syntax error
0026デフォルトの名無しさん2014/06/24(火) 22:43:47.80ID:3Daegd5r
引数が2個以上あるメソッドだとスペース挿むとエラーになるけどそれは
0027デフォルトの名無しさん2014/06/25(水) 09:01:04.56ID:jzzlw1ru
p (( 1 2 )) # => syntax error
p (( 1
2 )) # => 2

また負けたのかwwwwwwwwwwwww
0028デフォルトの名無しさん2014/06/25(水) 14:42:21.47ID:A2jEgt78
>>27
p (( 1
2 )) # => 2
これは
p (( 1; 2 )) # => 2
と同じ

>>25
irb(main):001:0> p(1,2)
1
2
=> [1, 2]
irb(main):002:0> p (1,2)
SyntaxError: (irb):2: syntax error, unexpected ',', expecting ')'
0029202014/06/25(水) 19:32:24.84ID:y7Yol2H5
>>22-23
ありがとうございます。両方とも問題なく動くようです
ascii-8bitの指定はRuby 1.8相当の動作という認識で
良いのかな?
0030デフォルトの名無しさん2014/06/28(土) 14:23:12.83ID:Vb0rbHjb
ifで条件にマッチした場合に使うライブラリを呼ぶ直前でrequireをしたら
「requireはソースコードの上の方でやるもんだ」
って言われました。

使うかどうか分からないのにとりあえずrequireするのっておかしくないですか?
gemの依存関係はgemspecに書いてるし、そのソースコードでどんなライブラリが使われているか一覧することに何のメリットがあるんですか?
知りたければgrep requireすればいいですよね?
って言ったら怒られました。
よくわかりません。
0031デフォルトの名無しさん2014/06/28(土) 17:48:20.84ID:Ik80dgEP
ケース・バイ・ケースだけど、どうしても動的に require しなければいけない理由がない限りは
ソースの上の方でやっておいた方が見通しはよくなるね
0032デフォルトの名無しさん2014/06/28(土) 18:02:41.94ID:MBrErHLJ
慣習
0033デフォルトの名無しさん2014/06/28(土) 18:11:58.34ID:JCL+UsP9
>>30
そのライブラリの依存関係をgemspecで必須と明示してあるなら、
その仕様(specificationに従って、単純にファイルの先頭で require すべき
ある特定の「条件にマッチした場合」に限るという実装(implementation)は、
ライブラリが必須であるという仕様に違反している
0034デフォルトの名無しさん2014/06/28(土) 20:27:57.09ID:Vb0rbHjb
>>31
どうしてもってわけでもないけど、
コマンド叩いてすぐに処理結果が欲しいコマンドツールの類いだとrequireすると遅くならない?
RoRとか立ちあげっぱなプログラムならまだ許容できるけど。
>>33
よくわからんけど、そうすると、
例えばhttpサーバのライブラリがあるとして、
http_server -versionってバージョン表示させるだけでspec.add_dependencyのgemを全部requireしてるのですか?
0035デフォルトの名無しさん2014/06/28(土) 22:47:38.23ID:JCL+UsP9
> コマンド叩いてすぐに処理結果が欲しいコマンドツールの類いだとrequireすると遅くならない?

いや、requireの実行時間が問題になるようなRubyアプリケーションは、ほとんど存在しない
もしアプリケーションの起動時間が気になるほど遅いのであれば、まず性能測定をすべき
多くの状況下では require 以外の処理、たとえばサーバへの接続待ちや
大量のデータファイル読み込み等がボトルネックになっているはず

> http_server -versionってバージョン表示させるだけでspec.add_dependencyのgemを全部requireしてるのですか?

そうだよ、実行時に必須なライブラリはサーバ起動時にすべてrequireする
逆に、必須ではなく条件に応じて必要になるライブラリは spec.add_dependency せず、
サーバ起動後に特定の「条件にマッチした場合」に require する
たとえばプラグインのようなオプション・ライブラリは、設定ファイルで指定された場合、
あるいはプラグイン・ディレクトリにライブラリが存在する場合にだけ require する
0036デフォルトの名無しさん2014/06/29(日) 01:12:28.28ID:fkqTTz9x
たとえばwatirだとnewした後に色々とrequireされてる
最初のrequire"watir"で必要以上のクラス定義までやってない

こうすべきだみたいなのをしつこくいう奴は一種の精神病か高2病みたいなもん
絶対に正しいソースコードの書き方なんてものはないのに
0037デフォルトの名無しさん2014/06/29(日) 02:19:09.05ID:+CIKJ6ui
>>35
例えばrails -vしても明らかに必要最低限のスクリプトしかrequireしてないわけだが、
これもやっぱり>>33的には違反してるね。
屁がでそうになってきた。
0038デフォルトの名無しさん2014/06/29(日) 11:01:30.37ID:Jxhjl2/k
Railsはオートロードのための仕組みを持ってるので、そもそもrequireを書く必要がない
0039デフォルトの名無しさん2014/06/29(日) 11:56:13.78ID:cjgiIXv/
>>37
Rails級の巨大フレームワークを開発するプロジェクトは、ごくまれな特殊ケース

一般的なRubyアプリケーション/ライブラリ開発プロジェクトの場合:
・動的な require が必要なケースは、組込みの Kernel.#autoload を使う
・つまり「(必須ライブラリを)単純にファイルの先頭で require する」(>>33)が
 「(必須ライブラリを)単純にファイルの先頭で autoload する」に代わるだけ

Railsフレームワーク上でのアプリケーション開発プロジェクトの場合:
・開発中(development)では頻繁にRailsの再起動を繰り返すので、
 アプリケーションは遅延ロード(lazy loading)される --> デフォルトの動作
・本番運用時(production)では、
 アプリケーションは単純に(=貪欲に)ロード(eager loading)される
・ただし、もしも常に(=本番運用時でも)遅延ロードさせたい必須ライブラリがあるなら、
 メソッド ActiveSupport.on_load のブロック引数内で明示的に require する

>>30のような、if文を使った条件判定による動的な require は推奨されない
一般的なプロジェクトはもちろん、たとえRailsアプリケーション開発であっても
0040デフォルトの名無しさん2014/06/30(月) 02:08:57.29ID:BzHZeElB
推奨されない(キリッ)
0041デフォルトの名無しさん2014/06/30(月) 15:42:59.39ID:qlWBcG3y
thorで半角スペースを含む引数ってどうすんの?
普通に
--foo='bar baz'
ってやると
--foo=bar
baz
ってバラされちゃうんだけど
0042デフォルトの名無しさん2014/06/30(月) 16:14:43.24ID:9mB1LZ3w
エスケープ
0043,,・´∀`・,,)っ-○○○2014/06/30(月) 20:23:55.18ID:la/ujWVd
条件分岐でインスタンスの動作変えたいならポリモーフィズムで実現すべきだろ
0044デフォルトの名無しさん2014/07/01(火) 11:24:36.03ID:WApzAG0A
Mechanizeとかだと最初のrequireがかなり重い
実はあれIDN対応のライブラリを読んでて無駄に重い
国際化ドメイン名なんて99%の人間には不要なのだが
0045デフォルトの名無しさん2014/07/05(土) 03:05:10.71ID:FujCrvNA
C言語厨が作るライブラリは規則規則ってなっててそうなる
0046デフォルトの名無しさん2014/07/05(土) 09:38:00.53ID:eW5SdgQ8
どこかでRuby使いの人が「PHPは関数が多くて覚えきれない」とコメントしているのを読んだんですけどRubyってそんなに関数が少ないんですか?
逆に関数が少ないと困ったりしないのかと不安になるのですが。
0047デフォルトの名無しさん2014/07/05(土) 09:42:51.16ID:MbZ2I/h/
ヒント: namespace
0048デフォルトの名無しさん2014/07/05(土) 10:08:09.40ID:gQAWVLid
ちょっとだけ違う名前のよく似た(しかも長い)関数が成立経緯上仕方なくうまく整理できずにバラバラに存在するため、
Rubyのように本当の最初からクラスやモジュールがあってそこに整理され(最悪でも詰め込まれて)いるライブラリと比べると、
どうしても存在レベルで冗長でわかりにくく間違いやすい印象が否めない

というような程度の意味だろう
本当に記憶に支障があるという話ではない
0049デフォルトの名無しさん2014/07/05(土) 10:21:12.46ID:MxOk5d7i
>>46
たとえば、文字列と配列の長さを取得する場合

Ruby:
string.length
array.length

PHP:
strlen($string)
count($array)

たとえば、文字列と配列を逆順にする場合

Ruby:
string.reverse
array.reverse

PHP:
strrev($string)
array_reverse($array)

確かにPHPのを覚える自信は、俺にはない
0050デフォルトの名無しさん2014/07/05(土) 10:21:28.25ID:6PKoBQqR
整理されてれば覚えなくてもだいたいドキュメントですぐ探せるからな
0051デフォルトの名無しさん2014/07/05(土) 10:37:30.05ID:MbZ2I/h/
sprintf
wsprintf
sprintf_s
_sprintf_l
_swprintf_l
__swprintf_l

確かに覚えられん
0052デフォルトの名無しさん2014/07/05(土) 12:27:47.54ID:mPq5qhEh
数年前にwxrubyで書いたアプリを手直ししようと思ったんだけど、
web上のドキュメント的なものが一切なくなってて困ってます
知らない間に滅んだ?
0053デフォルトの名無しさん2014/07/05(土) 12:38:25.10ID:5PqNKKxq
>>52
Webではないデスクトップ向けGUIツールキットは、
どれも寂しい/厳しい状況みたいだね
Mac限定なら MacRuby、Unix系限定なら Ruby-GNOME3 を選べるけど、
Windows系やマルチプラットフォーム系はどれもこれもメンテされていない

>>4-9 および前スレ終盤あたりも参照
0054デフォルトの名無しさん2014/07/05(土) 13:21:17.02ID:eW5SdgQ8
みなさんありがとうございます。
似たような動きをする関数なのに無駄に細分化されていて面倒だって事なんですね。
確かに文字列も配列も同じ関数(メソッドでしたっけ?)で操作出来たほうが直感的に書けますね。
やはりPHPからは移行した方が良さそうですね。
日本製だから日本語の不具合なんかも起こりにくいだろうし。
0055デフォルトの名無しさん2014/07/05(土) 14:00:29.85ID:mPq5qhEh
>>53
丁度似た悩みの方がいらしたんですね
参考に色々試してみます ありがとうございました

本当に滅びつつあったとは凹む
0056デフォルトの名無しさん2014/07/05(土) 14:02:51.25ID:MbZ2I/h/
Ruby は Web 用言語(キリッ
0057デフォルトの名無しさん2014/07/05(土) 14:03:50.21ID:5PqNKKxq
>>54
ちなみに Python の場合

長さを取得:
len(string)
len(array)

# len(x) は関数だから、string.len() や array.len() とは書けない

逆順にする:
# string.reverse() ==> 文字列は不変オブジェクトなので反転できずエラー
array.reverse()

# Python のreverse() メソッドは、操作対象を破壊的に操作する(sort() も同様)
# Ruby であれば、非破壊な Array#reverse と破壊的な Array#reverse! という
# 二種類のメソッドが組込みで提供される

Python の一貫性の無さと比較すれば、
・オブジェクト指向言語である Ruby は、オブジェクトへのメソッドとというスタイルで
 統一されたプログラミング・インターフェイスを楽しめる
・非破壊メソッドが提供されているので、メソッド・チェーンを使った
 流れるような関数型プログラミングを楽しめる
0058デフォルトの名無しさん2014/07/05(土) 16:01:37.65ID:AM2aRkfD
Rubyの直交性の高さになれているとほかの言語はストレスがたまる
0059デフォルトの名無しさん2014/07/05(土) 16:59:56.26ID:6PKoBQqR
Rubyはそんなに直交性高くないと思うぞ
Javaのライブラリとか直交性が過剰なのはすげえ使いづらい
Rubyは客観的な直交性よりも、ユースケースを想定して
一緒に使うものが近くにくるようにまとめてある感じがする
どっちかというと.NETに似てるかな
0060デフォルトの名無しさん2014/07/05(土) 18:33:03.23ID:pJl1PMF0
今時、Ruby使うとか、どんだけニワカ
0061デフォルトの名無しさん2014/07/05(土) 18:53:37.70ID:lUrjnl8F
プログラミングを始めようと思った時
PHPが良いよって知り合いに言われて
どれどれと思って検索したら
「あっ(これはちかづいちゃいけない)」って思って
そいで近所の先生にきいたら
HSPとかすぐに動くのができていいよって言われて
どれどれと思って検索したら
「あっ(これはちかづいちゃいけない)」って思って
そのあとRubyを始めた
0062デフォルトの名無しさん2014/07/05(土) 18:55:26.27ID:5PqNKKxq
>>58,59
直交性という言葉は堅苦しいので、
「驚き最小の原則」と呼ばれることがあるね
ただし、Wikipediaによれば Matz が
この原則を設計哲学に採用したことはないそうな
0063デフォルトの名無しさん2014/07/05(土) 20:56:37.25ID:eW5SdgQ8
>>57
Pythonとの違いを教えて頂けて助かりました。どちらにしようか迷っていたので。
表示速度が遅いとGoogleから冷遇されやすいというのが頭にあって「遅い」と言われ続けていたRubyには不安で手を出せなかったんです。最近物凄く速くなったと聞いて真面目に検討していました。
例示していただいたコードみたいに統一感があるのは初心者としては取っ付きやすそうです。
0064デフォルトの名無しさん2014/07/05(土) 21:10:42.13ID:lUrjnl8F
(´・ω・`)最近暇だ…
(´・ω・`)RoR秋田…
0065デフォルトの名無しさん2014/07/05(土) 22:17:07.92ID:gQAWVLid
なんだろう、なんかもやもやする
0066デフォルトの名無しさん2014/07/05(土) 23:37:16.48ID:ZoUg1MJx
小日帝国で大麻が合法化されないなら
ゲートウェイランゲージRubyは違法化されるべきニダ
0067デフォルトの名無しさん2014/07/06(日) 01:20:26.14ID:P2yVj5Pd
>>49
うえーん reverse なんてあったんだ、知らなかった
0068デフォルトの名無しさん2014/07/06(日) 01:28:14.97ID:+YGfR2l7
arr.compact
arr.compact!
上は元の配列を変更しないけど、
下は元の配列を変更する(破壊的なメソッド)

Matzは人間がボトルネックになることを知っているから、
なるべくルールを明確にして、
覚えることを減らそうとしたのだろう
0069デフォルトの名無しさん2014/07/06(日) 01:53:09.63ID:YqH0gfGj
!付きメソッドの重要性は昔より低下している気がするな
昔は結構速度差があったから!で済むときは!を使った方が
速かったけど、最近はその差がだいぶ縮まった

そういやPythonやJavaScript向けにRuby似の標準クラス
ライブラリとかあったらすごく使いたいと思う
0070デフォルトの名無しさん2014/07/06(日) 06:13:16.56ID:qu0eEdBG
>>68
!ついてなくても破壊的なの結構あるよね

はい論破
0071デフォルトの名無しさん2014/07/06(日) 07:31:07.09ID:hw7hO+cc
!はできるのに!?はだめなのはどうして?
変数名に!とか?はだめなのはどうして?
変数名の最初の文字に数字が駄目なのはどうして?
0072デフォルトの名無しさん2014/07/06(日) 11:48:59.33ID:BCJIA2if
破壊的なものに!を付けるんじゃなく、!ありなし2バージョン設ける場合は
より注意が必要なほうを!付きにする、というのがもともとのお約束。

Railsだと、!ありなし2バージョンある場合、!ありは失敗時に例外を投げる、
!なしは偽を返すみたいになってたかな。
0073デフォルトの名無しさん2014/07/06(日) 11:58:02.96ID:bJUCx13z
そもそもルールでもないし文法でもないからなメスッド名末尾の ! や ? は
アンダースコアと同じで、便利に使ってもらって構わない
(その使い方が他の人にとっても便利かどうかは保証しないが)
0074デフォルトの名無しさん2014/07/06(日) 12:03:33.80ID:GKoC5bbZ
>>71
0xff
0075デフォルトの名無しさん2014/07/06(日) 12:32:08.87ID:bJUCx13z
変数名とかの先頭に数字が使えないのは
「そっちのほうが余計なこと考えなくて速く内部処理できるので、伝統的に人間側に我慢してもらっている」
という程度の回答しかない

全角イコールの=でも変数代入できれば便利かもしれないし、
全角空白と半角空白を同一視すれば初心者に優しいかもしれないが、
処理系はたったそれだけのためにアホみたいに遅くなる
なので誰もやらない

それと似たようなもんだ
0076デフォルトの名無しさん2014/07/06(日) 12:38:59.42ID:JQNQW/rx
>>75
そんなパージングの速度なんかたかがしれてるよ
単純に需要がないからやってないだけ

変数名の最初に数字が使えないのは、数値リテラルと区別するためだよ
0077デフォルトの名無しさん2014/07/06(日) 14:12:09.10ID:bJUCx13z
>>76
変数名の先頭に数字使えないプログラミング言語は掃いて捨てるほどあるけど、
どれも揃って需要がないから足並み揃えてやってないんですか?
0078デフォルトの名無しさん2014/07/06(日) 14:20:25.72ID:hw7hO+cc
!?とかつかいたいんだけど
破壊的にお問い合わせする場合とか
0079デフォルトの名無しさん2014/07/06(日) 14:54:18.29ID:Vjzww54e
お前なんで他の言語巻き込んで話を一般化しようとしてるの?
0080デフォルトの名無しさん2014/07/06(日) 14:55:10.41ID:JQNQW/rx
>>77
そうだよ

Lispなんかは数字が先頭でも大丈夫じゃなかったかな
0081デフォルトの名無しさん2014/07/06(日) 15:12:17.13ID:UgKQDcKg
010 == 8
0082デフォルトの名無しさん2014/07/06(日) 21:55:00.85ID:Nj41+MNM
>>69
>そういやPythonやJavaScript向けにRuby似の標準クラス
>ライブラリとかあったらすごく使いたいと思う

JavaScript だと Underscore.js とういライブラリが相当品になるね
Ruby の Enumerable 提供メソッドと比較すると
JavaScript の標準ライブラリは貧弱だけど(map/select/inject相当しかない)、
これを Underscore.js が補ってくれる
この Underscore.js とDOM操作ライブラリである jQuery の組合せが、
今時の一般的な JavaScript プログラミングらしい

Python に関しては、よく知らんけど実現不可能じゃないかと思う
>>57では書いていなかったけど、Rubyのブロックに相当する
Python のラムダ式には、その本体に式しか書けない(=文が書けない)という
関数型プログラミングにとっては致命的な制限がある
この制限によって、Ruby や JavaScript と比較するとメソッド・チェーンの
簡潔さや表現力が著しく劣る(はっきり言って使い物にならない ....)
関数型も部分的には導入したけど、あくまで手続き型プログラミングが主体である、
というのが Python の設計哲学なので、それを受け入れるしかない
0083デフォルトの名無しさん2014/07/07(月) 13:56:06.17ID:x3+FWwz1
win7でRubyインストールしたんだけど、
コマンドプロンプトではgemコマンドも実行できるのにgithub入ってるpowershell.exe上だとgemがコマンドレットになる
どうすればいい?
0084デフォルトの名無しさん2014/07/07(月) 16:56:05.67ID:SPqafUmZ
サーバー開発用なら仮想マシンにLinux入れろ
Win環境での作業に使うスクリプトならPythonへ行け
0085デフォルトの名無しさん2014/07/07(月) 18:19:53.12ID:tDx8Ub5T
_人人人人人人人人_
> 突然のPython <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
0086デフォルトの名無しさん2014/07/07(月) 19:08:17.84ID:RBOB+lfi
Bundlerでnokogiri入れようとしてるんですが、
packaged librariesを使ったビルドって最近のMacで何時間くらいかかるものなんでしょうか?

ちなみに当方の環境はMacBook Pro 15inch Ratina (2013)です。
OSはMavericksです。
目安もなくただ待つの辛いっす(´・ω・`) packaged librariesでビルド成功した人いたら所要時間教えて下さい。
0087862014/07/07(月) 19:48:06.65ID:RBOB+lfi
ようやく終わった…。
約2時間というところでした。上手く行ってよかった…。
お騒がせしました(´・ω・`)
0088デフォルトの名無しさん2014/07/07(月) 21:31:59.62ID:mALYvw5d
>>83
ならばコマンドプロンプト上で実行すればいいんじゃないの?
もしUNIX相当の操作性が欲しいなら、Cygwin や GnuWin 等で
bash のEXE版を導入するのが手っ取り早い方法

もしどうしてもPowerShell環境を前提にしたいなら、
この板の専用スレで質問したほうがいいと思う
PowerShell からすれば Gems も単なるコマンドの一つにすぎないんだから
0089デフォルトの名無しさん2014/07/08(火) 02:23:11.91ID:gmDQAblm
(´・ω・`)ルビー究めたらモテる?
0090デフォルトの名無しさん2014/07/08(火) 10:42:52.19ID:it1DuFz/
>>88
ありがとうございます。
PowerShellをそもそも理解していなくて、確かにcmdでコマンド打っていけばいいんですね。
githubのgitShellがPowerShellでのリモート接続?みたいになってて、わけわからなかった

Cygwin、GnuWin勉強になりました。
0091デフォルトの名無しさん2014/07/09(水) 02:38:35.03ID:Mc0pdBnn
powershellは入力補完も効くし、
処理の結果を、オブジェクトで扱える

デバッグ環境なら、powershellと同じフォルダにある、
powershell_iseを使えばよい
コマンドを画面で指定できる

-WhatIf で実行せずに、結果を見れる
0092デフォルトの名無しさん2014/07/09(水) 10:15:07.54ID:7mAKqlSH
RT >84

>>89
Python の方がモテる
0093デフォルトの名無しさん2014/07/09(水) 10:34:32.06ID:Gd8+EGXP
>>92
RTってw
ここはツイッターじゃねえんだよ
あとPythonの方がモテるってデータよこせ
昨日別のスレで根拠もなくPythonのシェア80%とかほざいたバカがいたが
お前は違うよなぁ?
0094デフォルトの名無しさん2014/07/09(水) 21:16:51.49ID:upQsnXcW
Python利用者はおっぱい好きが多い
0095デフォルトの名無しさん2014/07/10(木) 09:17:42.80ID:bTs9rCAT
概ね、型がStringのオブジェクトに対して
メソッドを定義したいのですがその際、
Stringを継承する以外の方法はあるでしょうか
影響範囲を狭めたくて。
0096952014/07/10(木) 09:19:22.09ID:bTs9rCAT
>>95
ごめんなさい、重要なことが書きもれていました。
メソッドチェーンができるようなメソッドを定義したいです。
0097デフォルトの名無しさん2014/07/10(木) 10:36:07.22ID:b/HkBDRx
必要なメソッドだけString型に委譲とか
でもStringを継承しないことによって影響範囲が狭まるのか?
継承元がほぼ不変といっていいなら対して差がないんじゃないか
0098デフォルトの名無しさん2014/07/10(木) 10:46:05.37ID:K4xUSUJb
基本クラス本体に勝手にメソッド追加するような奴は死んでいいよ
そして全滅するActiveなんとか

そのStringオブジェクトがひとつくらいしかなくて、他への影響が心配なのなら、
メソッド入れたモジュールつくって、自作文字列オブジェクト単体にがちょんとくっつけるといい
0099デフォルトの名無しさん2014/07/10(木) 10:54:25.59ID:K4xUSUJb
irb> module MyString; attr_accessor :author; end
irb> str = "Gimmick!"
irb> str.extend(MyString)
irb> str.author = "俺俺"
irb> puts str.author
俺俺
0100デフォルトの名無しさん2014/07/10(木) 22:12:15.29ID:42BTLfYF
windowsでgetsを使ったらどうも文字数が254文字くらいまでしか入力できないんだけど
そういうもんなの?
0101デフォルトの名無しさん2014/07/10(木) 22:19:12.89ID:fp5I0Zvk
いいえ
0102デフォルトの名無しさん2014/07/11(金) 01:08:57.98ID:O/mv0f8o
自己解決しました
rubyinstallerとかいうのでインストールしたのが悪かったっぽい

バグ?
0103デフォルトの名無しさん2014/07/11(金) 01:36:26.58ID:gdJsXwWR
バグだったら何か問題があるのかね?

ってくらいWindowsはかなり見放されてる印象
0104デフォルトの名無しさん2014/07/11(金) 02:16:33.74ID:Mxpl8CKX
linuxも酷いもんだよ。
0105デフォルトの名無しさん2014/07/11(金) 15:57:23.04ID:AtibPlU5
rbenv install 2.1.2でルビー2.1.2をインストールしようとしてるんだけど、
Installing ruby-2.1.2...のままもう1時間くらい経過してる。
こんなに時間がかかるのはおかしくないの?
ちゃんとインストールが進んでるのか何か確認方法はない?
0106デフォルトの名無しさん2014/07/11(金) 16:14:35.16ID:gnwgBFCI
ディスクの残り容量が減ってるかどうか見るのもありだけど
おそらく gems のダウソに時間がかかってるパターンなので
容量が変化しないままだんまりの可能性が高い
つまり放っておくといつのまにかダウンロード終わるから気長に待て
0107デフォルトの名無しさん2014/07/11(金) 16:15:58.79ID:gnwgBFCI
暇だったらここでも読んでて
http://www.slideshare.net/znzjp/rubygems
0108デフォルトの名無しさん2014/07/11(金) 16:18:57.15ID:AtibPlU5
>>106>>107
ありがとう
0109デフォルトの名無しさん2014/07/11(金) 18:25:47.30ID:AtibPlU5
ちょうど今、
Installed ruby-2.1.2 to /Users/ttomo/.rbenv/versions/2.1.2
と出てインストールが終わりますた
インストールに要した時間は2時間半ほど
かかるもんだね・・・
0110デフォルトの名無しさん2014/07/11(金) 18:29:40.28ID:AtibPlU5
訂正 3時間半ですた
0111952014/07/11(金) 23:03:34.33ID:aUe3n0ai
>97-99

回答azs!
モジュールかーなるほど。
0112デフォルトの名無しさん2014/07/12(土) 03:10:58.15ID:hZ9DjkyP
gemsは糞
0113デフォルトの名無しさん2014/07/12(土) 04:33:10.46ID:RUmdKNHy
SinatraとActiverecordを使う時に便利に活用出来そうな参考書を何冊か教えて下さい。Nginxの設定方法なんかもあると助かります。
0114デフォルトの名無しさん2014/07/12(土) 09:11:31.68ID:uOtl6yha
Sinatraはほとんどないね。O'reillyの入門Sinatraぐらいじゃないか
ActiveRecordはRails本からつまみ食いするしかなさそう
nginxはそこら中にあるから適当に選べ
0115デフォルトの名無しさん2014/07/12(土) 14:45:19.65ID:x0cGe7WX
Sinatraを使うくらいなら最初からRoRを使えば良い
コントローラかモデルが1〜2個までがせいぜいの使いどころ
ARが必要になったらそれはもうRoRの案件
0116,,・´∀`・,,)っ-○○○2014/07/12(土) 21:27:32.12ID:7ywFD7/R
Railsでscaffoldから作ると楽だからね
ArelなしでOR条件くらい使いたいぜ。
SQLの部分文字列直にたたくってのは抜きで
0117デフォルトの名無しさん2014/07/13(日) 01:31:28.39ID:/jPIFi1F
>>113
本当にActiveRecord が使いたいの? Sequel のほうが合ってるんじゃない?
0118デフォルトの名無しさん2014/07/13(日) 01:46:09.11ID:MZ7WZ/da
LinuxMint13にダウンロードしたRuby2.1.2を入れました、
$ make
したら、警告が2つ出ました。
iseq.c: 関数 ‘iseq_load’ 内:
iseq.c:540:2: 警告: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

compiling handle.c
compiling cptr.c
cptr.c: 関数 ‘rb_dlptr_inspect’ 内:
cptr.c:392:10: 警告: 使用されない変数 ‘str’ です [-Wunused-variable]

これ以外の異常はなくインストールできましたが、問題ないんでしょうか?
0119デフォルトの名無しさん2014/07/13(日) 01:59:43.15ID:gfKEp18x
CのWarningなんて気にすることはない
他のソフトウェアでもガバガバでるものだ
0120デフォルトの名無しさん2014/07/13(日) 08:34:30.23ID:pCB2HMHj
出ることが「わかって」いる警告をなんで直さないんですか、というのは結構深淵な問題ででしてですね…
0121デフォルトの名無しさん2014/07/13(日) 08:36:53.55ID:g8Ou8aAJ
ソース納品したら
警告出るんですけど
って苦情言ってくる客を思い出した
0122デフォルトの名無しさん2014/07/13(日) 11:32:33.70ID:pCB2HMHj
>>121
その苦情は正しい
コンパイル時の警告は
その記述が不完全であり、今はたまたま動作しているのかもしれないが
近い未来に必ずやバグや不具合や修正困難性の原因遠因となろう
ということをまさに文字通り警告しているものだから

唯一の問題はそんな未来が来ないかもしれないということだけだぬ用途的製品寿命的に
契約で縛っとくべきっすな
0123デフォルトの名無しさん2014/07/17(木) 05:25:09.39ID:T/tQ8OHK
A(){
 変数a
 return B(){}
}

クロージャって、Aの内側にある関数Bを呼ぶと、
Bから見て外側にある変数aが、なぜか使える。
つまり、Aの環境ごと保存していること

これは、どういう時に使うの?
0124デフォルトの名無しさん2014/07/17(木) 05:53:56.38ID:Cd0nud4+
>>121
保守で食ってますからね
と言えばいい
0125デフォルトの名無しさん2014/07/17(木) 07:12:32.40ID:qRzp09G7
>>123
Ruby的例で言えば

a = 1
[1,2,3].each {|i| puts i + a }

この場合、each というメソッドの中でその外側にある変数 a が使える
0126デフォルトの名無しさん2014/07/17(木) 07:42:24.22ID:Cd0nud4+
>>123
うーん
JavaScriptやらLuaなどのClassの代替手段として
上位値を使ったイディオムがうんぬんってのはあるけど
スレ違いだなw
0127デフォルトの名無しさん2014/07/18(金) 13:20:19.63ID:ZlrEmABu
$i = 0
while true
  $iを使って何かする
  sleep 一日寝る
  $i += 1
end

こういう構造のスクリプトをcronなどから一日一回呼び出して即終了するスクリプトに書き直すと
変数の状態をpstoreとかで全部保存、復旧する必要が出てきて面倒なんですが
そういうのを支援してくれるうまいやり方って無いものですかね
スクリプトのレジューム機能的なもの
0128デフォルトの名無しさん2014/07/18(金) 14:54:12.99ID:9vc2upx2
>>127
>変数の状態をpstoreとかで全部保存、復旧する必要が出てきて面倒なんですが
普通はファイルに設定を保存して終了し、次回起動時に読み込む
この世のほぼ全てのプログラムはそのように動作している

つまりどんなプログラムなのか把握できてないのね
保存と読み込みが面倒なのではなく、必要な変数かどうかを調べるのが面倒
0129デフォルトの名無しさん2014/07/18(金) 14:56:18.98ID:9vc2upx2
回答忘れてた

>>127
そんなん、現状鑑みるなら元のスクリプト動かすのでいいんじゃないのん
わざわざ「よくわからないRuby」なんかで書き直す必要性を感じない
0130デフォルトの名無しさん2014/07/18(金) 18:47:30.96ID:9k7OCpHX
VM上で動かせばいいよ。レジュームとかはVM任せにできる。
0131デフォルトの名無しさん2014/07/19(土) 22:26:03.80ID:YDMzLIag
madeleine 使えば。
0132デフォルトの名無しさん2014/07/20(日) 19:37:04.60ID:jDI27gQ2
最近、FreeBSD10環境でRuby2.1.0を入れたのですが、
Emacsのinf-rubyでirbを立ち上げると入力行がエコーバックされるように
なってしまいました。
以前のバージョンでは入力行はエコーバックされず実行結果だけの表示
だったと思うのですが、
原因と解決策をご存知の方おりませんか?
0133デフォルトの名無しさん2014/07/20(日) 23:58:13.27ID:BWtO9PBt
全く調べてもいないけどreadlinesがうんたらかんたら
0134デフォルトの名無しさん2014/07/21(月) 01:10:13.39ID:15AfdAD4
>>132
http://takuya-1st.hatenablog.jp/entry/20110717/1310890039
0135デフォルトの名無しさん2014/07/22(火) 20:19:49.75ID:E9EuZoOu
入力xに対して、3つの値を返すeuclidという関数があったとして

[x, y, z] = euclid(x)

のようにデータを代入する方法はないでしょか?
今のところ、

data = euclid(x)
x = data[0]
y = data[1]
z = data[2]

と書いています
もうちょっとわかりやすい書き方があれば教えて下さい
0136デフォルトの名無しさん2014/07/22(火) 20:24:38.12ID:RgZSUrOG
x,y,z=[1,2,3]
0137デフォルトの名無しさん2014/07/22(火) 20:51:15.29ID:E9EuZoOu
>>136
[]括弧がいらないだけでできたんですね
教えて下さりありがとうございます
0138デフォルトの名無しさん2014/07/23(水) 01:47:58.13ID:C1MAaOhX
start = Time.now
puts start - Time.now



これの結果が0.052003だった場合、0.05秒、つまり50ミリ秒ということですか?
0139デフォルトの名無しさん2014/07/23(水) 02:02:06.43ID:vbN86xg+
>>138
http://docs.ruby-lang.org/ja/2.1.0/method/Time/i/=2d.html
0140デフォルトの名無しさん2014/07/24(木) 22:48:33.94ID:QzlnANU7
ruby始めたいんですが、テスト実行する時は毎回コマンドプロンプトでcd打ち込んでしこしこやるもんですか?
0141デフォルトの名無しさん2014/07/24(木) 22:53:34.81ID:mk/qqxYw
RubyはUNIX系のOSで使うもんだからコマンド使うのは当然
0142デフォルトの名無しさん2014/07/24(木) 23:23:04.40ID:TORgOaiD
>>140
OSX(Mac) なら、Finder 上のフォルダをターミナル画面へドロップすると、
そのフォルダの UNIX ディレクトリパスが入力される
だから、ターミナルでは cd とだけ打てばいい

あと Linux や OSX 等を含む UNIX の対話環境だと、シェルがディレクトリ名や
ファイル名を補完してくれるから、プロジェクトの構成が整理されていれば
先頭の数文字を打って後はシェルの補完に頼ることができる
だからタイピングが苦手でも、環境に慣れればそれほど苦痛とは感じなくなる(はず)
0143デフォルトの名無しさん2014/07/25(金) 00:24:45.92ID:M5DbZg9u
現在作って実行してみたいスクリプトは1つしかないだろうし、
1つしかないってことはそれが入ってるディレクトリは1つだけだろうし、
rubyコマンドに指定するファイル名も1つだけのはずである

つまり1回だけコマンドプロンプトを起動してファイル置き場に1回だけ移動して
ファイル編集したあと1回だけファイル名をrubyコマンドの引数に入力して実行すればいい
どれも1回だけだ
もういちど実行したい場合はコマンドプロンプトのヒストリ機能で呼び出してEnterすればよろしい
キーボードの上矢印で順番に出てくる

下手にマウスとか使おうとすると煩雑で死ぬのでキーボード使うこと
0144デフォルトの名無しさん2014/07/25(金) 00:40:14.11ID:mPXiIZE+
>>140
楽をしたいだけなら実行までできるIDEを使えば。

楽をするための苦労を厭わないなら、簡単にcdとかできる、しなくてもいい方法を考えたら。
いい勉強になるだろう。
0145デフォルトの名無しさん2014/07/25(金) 01:28:52.03ID:c73V3zd5
>>140
Windowsもコマンドプロンプトにフォルダをドロップすると
フルパスが入力されるので>>142と同じようなことができる

Rubyスクリプトを置くディレクトリで開くコマンドプロンプトの
ショートカットを作るとか、バッチでディレクトリ移動するという
手もある
0146デフォルトの名無しさん2014/07/25(金) 11:39:04.68ID:3IqFdEs5
俺はcmd起動するときの最初のパスが既にソースコードまとめてあるディレクトリになってる
言語問わずそこで作業
ちゃんと開発する時は普通に別ディレクトリで
0147デフォルトの名無しさん2014/07/25(金) 12:14:05.15ID:Yo6Sfo//
>>140
最近のウィンドウズ知らないけどコマンドプロンプトが
「処理終了したら閉じる」という設定になっているのでは?
閉じる設定でなければ毎回cdしなくてもいけるんじゃないかな
0148デフォルトの名無しさん2014/07/25(金) 12:18:27.19ID:WLh8J9pC
ダブルクリックしてるの鴨試練
0149デフォルトの名無しさん2014/07/25(金) 12:37:18.84ID:LKOgwVhO
使ってるエディタからコマンドプロンプトを起動すれば
編集中のファイルのパスを作業ディレクトリとして
コマンドプロンプトを起動してくれると思う
0150デフォルトの名無しさん2014/07/25(金) 13:11:43.10ID:hJipNkKC
Windowsなんだけどクソ便利なんだけどあまり知られていない機能なんだけど
エクスプローラで任意のフォルダ開いでのアドレスバーにcmdって打ち込むと
そのフォルダに移動した状態でコマンドプロンプトが開く
0151デフォルトの名無しさん2014/07/25(金) 13:13:04.77ID:hJipNkKC
別にcmdに限らずパスの通ったコマンドならなんでもいけるから
直接irbとか打ち込んでもok
0152デフォルトの名無しさん2014/07/25(金) 13:27:45.66ID:WLh8J9pC
>>150
ほんとだ
知らなかった
ありがとう
2ちゃんもたまには役に立つんだぬ
0153デフォルトの名無しさん2014/07/25(金) 13:29:21.50ID:WLh8J9pC
>>151
そのディレクトリで管理者権限で cmd 立ち上げられませんか?
0154デフォルトの名無しさん2014/07/25(金) 13:29:59.63ID:WLh8J9pC
ctrl+enter でもなんか起きるな
0155デフォルトの名無しさん2014/07/25(金) 13:31:44.65ID:WLh8J9pC
ruby と撃ち込んで ctrl+enter
0156デフォルトの名無しさん2014/07/25(金) 13:39:26.35ID:mmV7Js8i
MAKEFILEのあるフォルダで make とか打つとかっこいいな
0157デフォルトの名無しさん2014/07/25(金) 13:48:34.63ID:WLh8J9pC
pythonw は何も起きない
0158デフォルトの名無しさん2014/07/25(金) 13:49:32.42ID:WLh8J9pC
git push とかも可能か
0159デフォルトの名無しさん2014/07/25(金) 14:46:56.21ID:9RAl771B
うんち
0160片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/07/25(金) 16:01:49.83ID:Snct3h9B
def f a,b
a = b
end

x = 1
y = 2
f x,y
p x,y #=>1,2

関数fの中でxを書き換えたいんだが、どうすんねん?
0161デフォルトの名無しさん2014/07/25(金) 16:55:52.79ID:5HeCUYeT
>>160
・配列に入れて渡し、配列を書き換える
・インスタンス変数ならば、オブジェクトごと渡して変更メソッドを呼ばせる
・そのメソッドがその場でしか使わないのであれば、ブロックにして外の変数を書き換える(ブロック突入前に存在しなければ初期値を入れておく)
・変更するくらいなら、戻り値として返す

Cと違って、多重代入もあるし配列だってHashだって戻せるんだから
無理して書き換える必要性は無く、返せば良いと思うぞ
01621232014/07/25(金) 18:20:34.37ID:7iMP+P1B
>>123-126
A(){
 変数a
 return B(){}
}

結局、クロージャ・ラムダ・匿名クラスなどは、
色々難しい名前を付けたが、クラスなんだよな

クラスAには、メンバ変数a, メンバ関数Bがあるだけ
0163デフォルトの名無しさん2014/07/26(土) 02:02:24.33ID:8QVtVKLI
ジャン・クロード・バンダム?(難聴
0164デフォルトの名無しさん2014/07/26(土) 02:46:01.98ID:zIbYZCVC
rubyとrubywのどちらで起動されたかをスクリプト側から判断するのってどうやるの?
0165デフォルトの名無しさん2014/07/26(土) 03:08:33.22ID:2fRRiDMt
argv[0]
0166デフォルトの名無しさん2014/07/26(土) 17:21:34.64ID:L52INrm9
Windows限定の話か?なら
WindowsAPIのGetModuleFilenameを叩くのが一番確実だ。
0167デフォルトの名無しさん2014/07/26(土) 18:07:18.57ID:2fRRiDMt
驚き最小の法則ω
0168デフォルトの名無しさん2014/07/26(土) 22:26:20.20ID:c/LX3X4p
Rubyは例外的なルールや非直感的な制限がとても多く、
驚き最小の原則なるものとは真逆を行く言語だよ
驚き最小ってPythonみたいなののことを言うんだよ
0169デフォルトの名無しさん2014/07/26(土) 22:40:13.26ID:+1COesfI
>>168

>>57
0170デフォルトの名無しさん2014/07/27(日) 01:09:12.69ID:YDU+iIQK
つーか驚き最小の法則なんてもう何年も使われていないし
0171デフォルトの名無しさん2014/07/27(日) 01:13:04.51ID:yFRKgWmm
二重の意味で頓珍漢な発言してて>>168ってほんと恥ずかしいな
0172デフォルトの名無しさん2014/07/27(日) 13:35:49.37ID:UMDAGQ8D
                         /       \
                       /     _    _ ',
                        _|     / ・ ヽ /・ ヽi
                        {       し―J し‐ J|
                        >‐ 、 「 ̄匚} ̄匚lい
             ,  -―‐< ̄ ̄ ̄ ̄\____    } }
            / ̄ ̄\___ `ヽ   /´  ハ   \//
          /         `ヽ |    |ニニニニ ′
            |    y         | |___j⌒ヽ
            |    |         7 |____/厶ノ
          \  ヘ         �h ∧_/
.             ヽ  ヽ       l_/
               ハ   ',     |`ヽ
          (__}__レ ――┴ァ′
.            Y⌒V⌒ヾヽ ー-|
            ! !   | { ー}
.            ヽ_ヽ_ヽ_〉‐''´
0173デフォルトの名無しさん2014/07/30(水) 21:35:33.47ID:ucnjA6/+
・Pythonを書き始める前に見るべきTips - Qiita
  http://qiita.com/icoxfog417/items/e8f97a6acad07903b5b0
  Pythonは何かとトラップが多い言語で、
  引っかかるとなんてゴミ言語と感じてしまうことが少なからずある

要するに Python への批判記事である訳だけど、
この記事の視点を Ruby に当てはめてみよう

・ファイルのエンコードを宣言する必要がある
 Ruby => Ruby 1.9 でこのゴミ仕様が取り込まれて危うかったけど、
  Ruby 2.0 ではデフォが UTF-8(Unicode) になってゴミを排除できた

・文字列には通常の文字列とユニコード文字列がある
 Ruby => Ruby では最初から(少なくとも Ruby 1.4 の時代から)一般的な文字列は
  多言語化に対応した String クラス、ただ一つだけしか存在していません

・割り算の結果がfloat型にならない
 Ruby => 「強い型付け」による動的型付け言語である Ruby からすれば、
  この指摘そのものが規約違反であって、1 / 3 は 0 で 3 / 2 は 1 になるのが自然であり、
  もしfloat型が必要であれば、たとえば 1.to_f / 3 のように明示的に型変換すべきと考えます

  おそらく著者は「弱い型付け」による動的型付け言語である JavaScript の経験が
  長いのでこのような不満を感じたのでしょう、JavaScript は Python 3 と同じ結果になります
    js> 1/3
    0.3333333333333333
    js> 3/2
    1.5
  そして、Python 3 は「弱い型付け」に向かって変化したのですから、
  次の Python 4 では、おそらく以下のような実行結果へと仕様改訂されることでしょう(棒
    >>> "A"+1
    'A1'
(長いので、一旦ここで切る)
0174デフォルトの名無しさん2014/07/30(水) 21:54:15.22ID:cG7xMHTs
それ書いた人の「強い型付け」「弱い型付け」の定義が間違ってる
0175デフォルトの名無しさん2014/07/30(水) 22:17:39.92ID:+YSZmqYf
演算子を適用した結果の型がどうなるかは演算子の仕様の問題に過ぎず
型付けの強い弱いは関係ない
演算の自動リフトや型変換なんてC系の言語では普通にあることで
動的型言語ではそのルールの適用をコンパイル時ではなく実行時の型に応じて動的に行ってるだけ
また、JavaScriptに整数型は仕様上ない
0176デフォルトの名無しさん2014/07/30(水) 22:45:41.48ID:+YSZmqYf
演算による自動型変換が問題になりうるのは、次の両方を満たす場合だ。
・オペランドや結果の型が静的に決まらない
・オペランドの型によって演算子の意味が変わる
例えば、JavaScriptは実行してみなければ+が加算になるのか文字列連結になるのか分からないでしょ。
そういう性質を便宜的に「型付けが弱い」と表現することがある。
その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。
0177デフォルトの名無しさん2014/07/30(水) 23:33:27.95ID:cG7xMHTs
> 便宜的に「型付けが弱い」と表現することがある。

ない。きちんと意味が定義されてる言葉を俺様意味付けして使うな。

> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。

デタラメな足場の上からの観点ですね。
0178デフォルトの名無しさん2014/07/30(水) 23:43:44.39ID:ucnjA6/+
・新スタイルクラスと旧スタイルクラスがある
 Ruby => CLOS や Smalltalk と同様な動的型付け/動的メソッド束縛方式の
  オブジェクト指向言語として設計されたRubyのクラス定義スタイルは、
  最初から(少なくとも Ruby 1.4 の時代から)変更がありません

  Python に関しては、もともと手続き型言語として設計されたものに後から
  オブジェクト指向を付け足す際、開発チームの「オブジェクト指向への理解不足」によって
  静的型付け/静的メソッド束縛言語のオブジェクト指向を導入したという「過ち」がありました
  結果として、リフレクションを多用する最近のメタプログラミング・スタイルに追従できず、
  旧スタイルを排除して新スタイルに「改めざるをえなかった」のだと思われます

・コンストラクタ(と思われるもの)が2つある
 Ruby => 最初からオブジェクト指向言語として設計された Ruby では、
  コンストラクタは Class.new、イニシャライザは Object#initialize と
  明確に区別されていますから、「可読性に劣る Python 」のような混乱はありません

・PrivateやProtectedがない
 Ruby => Ruby にはメソッドの可視性を指定する private や protected があります
  (ただし、個人的にはこれら可視性を宣言するよりも、public メソッドの名前の
   前(または前後に) '_' あるいは '__' を付けるスタイルを好みます )
  また Ruby には名前の先頭に付ける '_' や '__' について、言語としての「強制」は無く、
  命名スタイルはプログラマの判断に委ねられています

・メソッドの第一引数が予約されている
 Ruby ==> 最初からオブジェクト指向言語としている Ruby では、(コードが self だらけに
  なってしまう)「Python のような冗長で可読性に劣る規約の強制」はありません
  Smalltalk と同様に、メソッド呼び出し先として自身を「明示したい時にだけ」
  疑似変数 self を、親クラスを「明示したい時にだけ」疑似変数 super を書くだけです

(まだ続くが、次で終わる予定)
01791732014/07/30(水) 23:55:37.21ID:ucnjA6/+
書き忘れたけど、>>178 は >>173 の続きです
0180デフォルトの名無しさん2014/07/31(木) 00:06:25.30ID:I9wcB7pD
何でRubyで可視性使わないんだ?
擬似privateで実質protectedの特殊形、なprivateはともかく
protectedとpublicは普通に使うと思うんだが…
0181デフォルトの名無しさん2014/07/31(木) 00:41:24.92ID:IjpkEocs
>>180
これがやってること見ればわかるだろ、愚問
01821732014/07/31(木) 01:25:29.27ID:h0+6R2oI
(>>178 の続き)
・メソッドのオーバーロードができない
 Ruby => (Python や JavaScript と同様に)動的型付け言語である Ruby では、
  引数のデータ型を実行時に判別(イントロスペクション)できるので、
  メソッドのオーバロード(多重定義)は「必須ではない」と思います

・ファイルで名称空間が切られる
 Ruby => Ruby ではモジュール宣言を使って名前空間が切られますから、
  ファイルと名前空間との一致という「規則を強制する Python」とは異なり、
  名前空間というプログラムの階層的な論理構造と、ファイル/ディレクトリという
  プログラムの階層的な物理構造をプログラマが自由自在に表現できます

・for文にindexがない
 Ruby => これも >>173 にある「割り算の結果」の項目と同様に、著者がC言語風の
  indexを伴うfor文がある JavaScript の経験が長いので、不満に感じるのだと思われます
  Ruby だと、index を伴う反復を以下のように書きます
    list.each_with_index do |index, value|
      puts "index:" + index.to_s
    end
  また Ruby 1.9 からは Enumerator オブジェクトとメソッド with_index が追加されたので、
  関数型プログラミングのスタイルでコードを書くこともできるようになりました
    puts list.each.with_index.map { |index, value| "index:" + index.to_s }

・配列/リストの長さはlenでとる
 Ruby => 最初からオブジェクト指向言語として設計されているので、
  配列の長さを求めるにはメソッド Array#length を使って list.length と書けます
  これについては、すでに >>57 で解説しているので、ここでの詳細は省略します

(これで終わり、ここまでの連投カキコに対するレスは、明日になる)
0183デフォルトの名無しさん2014/07/31(木) 01:33:39.66ID:YSTj81JP
Rubyのアクセス制御は継承が絡まないから考え方がシンプルだと思うけどな
01841732014/07/31(木) 21:19:14.83ID:h0+6R2oI
>>174
間違っていると思うなら、具体的な説明を
感情的な反発だけでは、自ら敗北を認めたのと同じ
01851732014/07/31(木) 21:59:08.98ID:h0+6R2oI
>>175
まず「JavaScriptに整数型は仕様上ない」という指摘は正しい
(ボケへの的確なツッコミが嬉しい)
ただし、それ以外の部分はメチャクチャだね

> 演算子を適用した結果の型がどうなるかは演算子の仕様の問題に過ぎず
> 型付けの強い弱いは関係ない

演算子(= 関数 or メソッド)の適用結果のデータ型が曖昧である事を許容する言語は、
曖昧なデータ型を禁止する言語と比較して「型付けが弱い」と呼ばれる

たとえばC言語では戻り値が「ある(オブジェクトへのポインタ) または NULL」という仕様の
関数定義を許すけど、ML や Haskell のような型付けに厳格な言語では型エラーとして
定義できず、代わりに直和型(ML ならOption型、Haskell ならばMaybe型)を使う
この対比のケースだと、C は ML や Haskell よりも「型付けが弱い」となる

つまり、データ型に関する仕様の曖昧さを認めるか否かという言語の設計方針は、
「型付けの強さ弱さ」を決める要因の一つである、ってこと

> 演算の自動リフトや型変換なんてC系の言語では普通にあることで

そういった「暗黙の型変換(implicit conversion)」あるいは「型強制(coercion)」と
呼ばれる仕掛けはプログラミングを楽にする効果がある一方で、
その多用は型検査の能力を阻害する悪影響がある
だから、それらを許可しない型付けに厳格な言語との対比として、
C言語系は「型付けが弱い」と呼ばれる
01861732014/07/31(木) 22:43:50.19ID:h0+6R2oI
>>176
>演算による自動型変換が問題になりうるのは、次の両方を満たす場合だ。

発想の方向性は正しいと思うから、思考をもう一歩先に進めよう
言い換えると、「型が静的に決まらない」や「型によって演算子の意味が変わる」といった
要因は、どのような効果を導くのか?を考えてみよう、ってこと

その答えは、プログラマの(データ型に関する)誤り(=エラー)を見逃す可能性を増やす、
簡潔に言えば「型検査の能力を阻害する」ってこと
たとえば JavaScript のコード "A"+1 は、プログラマが "A1" が返る事を意図していたなら
正当で簡潔なコードだけど、もしもうっかり "1" をタイプミスしたとしたら
JavaScript処理系はミスの検出を見逃して最終的に予期しないバグとなる可能性がある

この「プログラマの表現力への制約を極力減らしつつ強力な型検査能力を提供する」ことは、
型体系(type system)の研究における重要な動機の一つになっている

> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が
>「型付けが強い」と考えることもできる。

上で述べたように、型付けの強さ弱さとは、一般には型検査能力の程度を指す
(ただし「型検査」そのものが広い概念を指す曖昧な言葉であることに注意が必要)
このような「1.0/3と1/3で結果が同じになる」という、計算結果の同値性が
型付けの強さ弱さを決めるなどという珍説は、これまで見たことも聞いたことも無い

型付けの強さ弱さに関しては、Wikipedia に良くまとめてあるので、勉強されることを勧める
・Strong and weak typing - Wikipedia, the free encyclopedia
 http://en.wikipedia.org/wiki/Strong_and_weak_typing
0187デフォルトの名無しさん2014/07/31(木) 23:09:22.53ID:cjUptmKw
Javaなどの静的言語では一般的な"A"+1がRubyやPythonでなぜ許されないのかわかってる?
実行時まで動作や結果の型が決まらない曖昧さを避けるためだよ。
静的言語では曖昧さは残らないから問題ないわけ。
結果の型が曖昧であることをなるべく許容しないのであれば
「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。
01881732014/07/31(木) 23:18:05.47ID:h0+6R2oI
>>180
おそらくコードの可読性というか視認性が要因だろね
メソッド名の頭に '_' または '__' が付いていれば、
「それは public じゃないから触っちゃ嫌よ」あるいは
「もし使いたいなら事前に仕様を十分に確認してね」
といったコードの意図が一目でわかる

また、1つクラス定義をできるだけ小さくしようとする
小クラス主義で設計することを考えているから、
スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
そのメソッドの外部からの利用を(protectedで)禁止するのが
望ましいというケースがほとんど無い(ちょっと思いつかない)
というのも理由かもしれない

最後に、実行前に違反を検出できないアクセス制御に
いったい何の価値があるの?という率直な疑問もあったりする
これはアクセス制御という発想が全く存在しない Smalltalk の影響を
受けているからではないかと思う

とはいえ、こうして指摘される迄、何も疑問に感じていなかった訳だから、
可視性(アクセス制御)の活用も今後は見直すかもしれない
01891872014/07/31(木) 23:39:16.07ID:cjUptmKw
>>187はRubyが劣っていると言いたいわけじゃない。
1.0/3と1/3で結果が変わるのは多態性として考えれば当然。
この問題に限っては、Rubyは型検査の能力を犠牲にして
オブジェクト指向言語としての一貫性を重視しているということだ。>>185の理屈に従えばね。
01901732014/07/31(木) 23:54:45.04ID:h0+6R2oI
>>187
>結果の型が曖昧であることをなるべく許容しないのであれば
>「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。

もしも Python 3 に「演算子の左辺の型に関わらず結果値の型は一つに決まるべき」
という設計方針/哲学があり、それを演算子 / に適用して「左辺が整数と小数の
いずれでも計算値は小数を返すのが(曖昧さが無いから)正しい」としたのなら、
その主張の正当性を認めよう
  >>> 1/2
  0.5
  >>> 1.0/2
  0.5


では次にもう一つの演算子 // について試してみよう
  >>> 1//2
  0
  >>> 1.0//2
  0.0
あれ、おかしいな?左辺の型によって戻り値が整数になったり小数になったりしている
もしかすると、Python には一貫した設計方針/哲学なんて高尚なものは存在せず、
演算子の種類によってコロコロ方針を変える(大人の汚い)やりかたが正しいと考えているのかな?
01911732014/08/01(金) 00:01:31.80ID:3wJnlar9
>>189
つまり >>190 を前提とすれば、
「オブジェクト指向言語ではない Python では一貫性を重視しない」
ってこと?

まあ Python の一貫性の無さは >>57 でも指摘しているし、
Python に慣れてしまうと、設計方針の一貫性なんてものは
気にすべきでは無い些細な事柄なのかもしれないね
01921872014/08/01(金) 06:46:07.72ID:J39fVXGB
>>190
だから言語そのものの優劣を主張してるわけじゃないって言ってるだろ煩い奴だな
元はといえば演算子の仕様一つで型付けが強い弱いだのと決め付けようとしたのは自分自身でしょ
主張の矛盾を指摘してるだけ
0193デフォルトの名無しさん2014/08/01(金) 07:03:34.19ID:pb6Sjbuz
PythonはPEPの存在がありがたかった。
開発ポリシーやサポート期間が明文化されていないってのは
採用にあたっての大きな障害になるからな。
言語設計の些末なんぞ経営者や顧客にとっては何の魅力もない。
0194デフォルトの名無しさん2014/08/01(金) 07:05:32.23ID:EwadhP/C
今日も暑いな
0195デフォルトの名無しさん2014/08/01(金) 07:11:54.53ID:VcCQb1qo
うんこ我慢中
というか出そうなのに出ない
0196デフォルトの名無しさん2014/08/01(金) 10:29:41.65ID:wXpsznL9
> 型付けの強さ弱さに関しては、Wikipedia に良くまとめてあるので、勉強されることを勧める
> ・Strong and weak typing - Wikipedia, the free encyclopedia
>  http://en.wikipedia.org/wiki/Strong_and_weak_typing

日本語版の「型システム」の記事のほうが正確に書いてあるね。
正確な定義と、編集者の主観とかによる内容が怪しげな議論が、きっちり分けてある。
そっちで正しい勉強をされることを勧める。
0197デフォルトの名無しさん2014/08/01(金) 15:14:38.77ID:YS2dfwIg
超初心者です
OSXでdxrubyを使うためにdxruby_sdl導入したいのですが英語に疎すぎてgithubに書いてある説明がよく分かりません
少しだけでも手をお貸しください
01981732014/08/01(金) 21:43:31.89ID:3wJnlar9
>>189
> 1.0/3と1/3で結果が変わるのは多態性として考えれば当然。

たしかに(型付けの強弱よりも)多態性で解釈するのが、
Ruby では素直というか自然な発想ですね

しかしながら、

> この問題に限っては、Rubyは型検査の能力を犠牲にして
> オブジェクト指向言語としての一貫性を重視しているということだ。>>185の理屈に従えばね。

という箇所に関しては、結果が変わる現象を多態性で説明できてしまうのですから、
この演算子の左辺に着目するケースに限れば、
「型検査の能力を犠牲にしている」という指摘は間違いであると考えます

型検査(つまり型付けの強弱)が問題になるのは、
「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」という演算子の右辺に着目するケースです
Ruby の数値系クラスでは、(単なる型判定ではなく)「型強制(coerce)アーキテクチャ」と呼ばれる
設計方針に従った一貫したインターフェイスを提供していますが、
(>>185 の最終段落で述べたように)型強制には型検査の能力を阻害する悪影響があります

したがって、もし犠牲という言葉を強調したかったのであれば、
「今回のケースは無関係であるが、1.0 / 3.0 と 1.0 / 3 で結果が同じになるケースでは、
 Rubyは型検査の能力を犠牲にして型強制の利点を重視している」という指摘が正しいと言えます

なお、型検査の能力を犠牲にしているとはいえ、「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」のは
Python も同じなのですから、動的型付け言語である Ruby の設計方針としては妥当な判断でしょう
01991732014/08/01(金) 21:51:58.88ID:3wJnlar9
>>192
>>190 では、型付けの強弱について頓珍漢な我流解釈をしていた >>175,176 と
同一人物であると早合点し、>>189 の多態性という言葉を十分に検討しないまま
即レスしていました
冷静に考えると、ここは Ruby スレなのですから、>>190 はスレ違いなレスでした
気分を悪くさせて申し訳ありません
0200デフォルトの名無しさん2014/08/01(金) 22:08:57.71ID:02heIdPz
rubyだと良い感じのCGUIツールないって話がスレの最初の方に書いてあったけど、
高級スクリプト言語(?)で使える、マルチプラットフォームのGUIツールキットで一番よいのはなんでそ?
0201デフォルトの名無しさん2014/08/01(金) 22:09:39.65ID:3wJnlar9
>>197
超初心者という甘えで有識者にエスパーを期待しようとしても
ムリゲーだよ

どこがどう分からないかを説明しなければ、
誰もアドバイスできないと思う
たとえば

  「..... をしようとして ..... ではないかと考え、
   ..... という結果を期待して ..... を試してみたけど、
   ..... というエラーメッセージが返されて失敗しました」

といった文章を書いてみよう
0202デフォルトの名無しさん2014/08/01(金) 22:53:02.21ID:7R/51h0c
>>200
gtkでいいんじゃないの。
0203デフォルトの名無しさん2014/08/01(金) 23:13:00.33ID:YS2dfwIg
>>201
ご指摘ありがとうございます。以後気を付けます。
まずhttps://github.com/takaokouji/dxruby_sdlのREADME.mdを見ながら
ターミナルでSDLとSGEのインストール?を試みました。
SDLは問題なく完了し、次にSGEをインストールするとき8行目の[make]コマンドを実行しようとすると
fatal error: 'freetype/freetype.h' というエラーが発生しました。
なのでfreetypeというものをダウンロード?すれば良いのかと思い、
http://freetype.sourceforge.net/index2.html
ここでダウンロードしてもう一度コマンドを打ちなおしたのですが結果変わらず失敗しました。
0204デフォルトの名無しさん2014/08/02(土) 00:15:20.50ID:UBZX0AEK
>>203
すべてをソースからビルドしようとしているみたいだけど、
普通は「パッケージ管理システム」という仕組みを利用する
OSX なら、Homebrew (または MacPorts)になる
 (1) GitHub 等で公開されるオープンソース・プロジェクトでは、
  まず最初に作者様がソースからビルドする手順を公開する
 (2) そしてプロジェクトの提供するソフトウェアに人気が出て
  インストールを試す人が増えてくると、ソースからのビルドは面倒なので
  有志の誰かさんが Homebrew のようなシステムで扱えるように
  パッケージを作って登録する
 (3) そうすると、以降はインストールを試そうとする多くの人達が幸せになる
だから、まずは Homebrew を調べて基本操作ができるようになるまで慣れるのが先決
新Mac板に Homebrew 専用スレがあるので、そちらを頼ることも考えよう

なお、"sdl sge ruby mac" でググると、こんなブログ記事が見つかった
・noanoa 日々の日記 : Mac に Ruby/SDL、rsdl、SGE を入れて、MyGame ゲームライブラリを動かす
 http://blog.livedoor.jp/noanoa07/archives/1919322.html
この記事でも Homebrew を使っている
他の記事でもいいし、とにかく作業に着手する前に
ネットで情報収集する感覚を身につけたほうがいいと思う

少なくとも FreeType は有名なライブラリなので、
Homebrew を含む大半のパッケージ管理システムでも利用できる
あと SDL と SDL周辺ライブラリも公式パッケージが利用できるみたい
そして SGE には非公式パッケージが存在するような情報があるね(->Homebrewスレへ Go!!)
 
0205デフォルトの名無しさん2014/08/02(土) 00:21:35.21ID:Q0DxGqPm
Integer.methods.each do |name|
if name =~ /\?/
p name
end
end

Integerクラスのメソッドで?が付いている物を取り出すプログラムです。
これは配列の中で正規表現に一致するデータを取り出したいのですが。
もっとスマートに描けないでしょうか?
0206デフォルトの名無しさん2014/08/02(土) 00:41:59.29ID:PqERPQ+S
とりあえず、なにをどう小細工しても
「コレクションを最初から最後まで見て、マッチするものをなんらかの手段でひとつずつ探している」
であることはどうにもならない
たとえなにか「カッコイイ」メソッドがあったとしても、やってることは同じである
ということで
puts Integer.methods.find_all{ |x| x =~ /\?/ }
0207デフォルトの名無しさん2014/08/02(土) 01:01:31.31ID:k+09BHkd
キモい実装を目指すなら
p Integer.methods.select(&/\?/.method(:=~))
0208デフォルトの名無しさん2014/08/02(土) 01:15:53.60ID:sO72E4hr
method の引数になんか泳いでて最高にキモいです(賛辞)
0209デフォルトの名無しさん2014/08/02(土) 01:30:11.06ID:fLjR5gdB
正規表現で行頭にマッチしたいんけど、
入力文字列の改行コードが¥rとか¥nとか¥r¥nとか色々あるんだけど、
正規表現のアンカーの^って行頭にマッチすると言っても¥nで判定してるから
¥rとかでマッチしてくれないよね

改行コードのバリエーションごとの処理は自分でやらなきゃいけないの?
それとも改行コードといえば¥nがデフォとかそういうこと?
0210デフォルトの名無しさん2014/08/02(土) 01:48:07.49ID:qRelH0Iu
fatal errorだけじゃ、原因がわからん

makeする時に、もっと詳細を表示する、
オプションを付けて、やり直せ
0211デフォルトの名無しさん2014/08/02(土) 02:04:35.51ID:qRelH0Iu
>>209
JavaScriptの正規表現では、
改行が\r\n、\nのどちらでも結果は同じになるけど

通常は気にしなくてもいいと思う
0212デフォルトの名無しさん2014/08/02(土) 02:18:58.04ID:LjQ2kKfu
>>202
見てみたら簡単なのはこれで大丈夫そうですね・・・
ダサいのはマルチ環境だから贅沢言えないか
02132112014/08/02(土) 02:21:00.11ID:qRelH0Iu
あっ、改行が\rは、Mac OS9以前だね
それは知らない
0214デフォルトの名無しさん2014/08/02(土) 02:58:10.97ID:PqERPQ+S
>>209
改行コードではない
改行文字だ

文字だ

ただの文字だ

以上
0215デフォルトの名無しさん2014/08/02(土) 03:30:01.16ID:fLjR5gdB
>>214
0x0Dと0x0Aって言えばよかったのかェ
0216デフォルトの名無しさん2014/08/02(土) 08:09:12.14ID:gDjKnomp
'\r' は '\x0d' であることが保証されてるけど
'\n' は '\x0d\x0a' だったり '\x0a' だったりするのは
どうしてなぜ?
0217デフォルトの名無しさん2014/08/02(土) 08:11:05.08ID:u0m+qxIa
>>212
よいの定義を先にはっきりしとけよ。
0218デフォルトの名無しさん2014/08/02(土) 08:43:56.31ID:bMAcdfxk
もしかして:binmode
0219デフォルトの名無しさん2014/08/02(土) 11:07:24.06ID:+3sKWHZp
$ ruby --version
ruby 1.9.3p545 (2014-02-24) [i386-cygwin]

の環境で

p Time.now

したときに

2014-08-02 10:51:50 +73956

と出力されます.この +73956 とは何でしょうか?
これ邪魔なので出力させたくないのですが方法はありますでしょうか?
0220デフォルトの名無しさん2014/08/02(土) 12:04:41.50ID:gDjKnomp
microsecond
0221デフォルトの名無しさん2014/08/02(土) 19:14:45.58ID:mjAOYCs+
>>219
Time#inspectを上書き
0222デフォルトの名無しさん2014/08/02(土) 21:52:37.10ID:k+09BHkd
面倒でも毎回strftime呼んだほうがいい
0223デフォルトの名無しさん2014/08/02(土) 22:01:30.81ID:UBZX0AEK
>>219
Time.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す

>>221 の言うように inspect を上書きするなら、以下のように定義する

class Time
  def inspect
    self.to_s.each_char.take(19).join
  end
end

実行例:
irb(main):001:0> class Time; def inspect; self.to_s.each_char.take(19).join; end; end
=> :inspect
irb(main):002:0> Time.now
=> 2014-08-02 21:58:27
irb(main):011:0>

ただし標準クラスの振る舞い(仕様)を変更するのだから、
むやみに用いるべきではない
0224デフォルトの名無しさん2014/08/02(土) 22:06:02.20ID:GQoYmdoX
こ汚ねぇと思いました
0225デフォルトの名無しさん2014/08/02(土) 22:12:10.95ID:rVz3fll6
Ruby初心者です。一つ質問していいですか?

Rubyには、JavaでいうところのTomcatみたいな
「アプリケーションサーバー」のようなものってありますか?
0226デフォルトの名無しさん2014/08/02(土) 22:16:48.29ID:GQoYmdoX
jrubyで使えるじゃん
0227デフォルトの名無しさん2014/08/02(土) 22:21:39.66ID:rVz3fll6
そんなソフトがあるんですね
勉強になりました。
ありがとうございました。
0228デフォルトの名無しさん2014/08/02(土) 22:39:34.17ID:UBZX0AEK
>>225
標準ライブラリの WEBrick を使うと、
Java でいうサーブレットは簡単に書ける
・Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > webrickライブラリ
 http://docs.ruby-lang.org/ja/2.1.0/library/webrick.html
リクエストされたURLに対応したファイルを読むだけの
サーブレット(ファイル・ハンドラと言う)も最初から用意されているから、
簡易Webサーバ(httpd)は超簡単に書ける

もっと手軽にWebサービスを書くのなら、
Sinatra というサードパーティ製のライブラリもある
"ruby sinatra 入門" あたりでググると解説が見つかる

なお、本格的なWebサービス開発を考えているなら、
Ruby on Rails を検討したほうがいいと思う
0229デフォルトの名無しさん2014/08/03(日) 06:53:33.60ID:P9e0hA8O
>>205
p Integer.methods.grep(/\?/)
0230デフォルトの名無しさん2014/08/03(日) 09:57:56.78ID:saA9+Ea3
>>219
Rubyのpはそのオブジェクトのinspectメソッドというものを呼び出している
inspectは「検査する」「(刑事などが)詳細に調べる」という意味で、
このメソッドはそのオブジェクトの内容を文字として表示するための情報源として使う
たとえばTimeオブジェクトは"2014-08-03 09:41:57 +0900"のような文字列として存在しているわけではなく、
「なんかよくわかんないけど変数とかメソッドとか入ったバイナリみたいなやつ」として存在している
これを直接画面表示しようとするとしんどいので、画面に表示するときにどう表示するかをオブジェクトのクラス製作者が適度に設定している

次、Rubyのpメソッドは前述のようにinspectを呼び出している
pメソッドはデバッグ用メソッドで、スクリプト作成中などにオブジェクトの内容を確かめるために使用される

オ ブ ジ ェ ク ト を 第 三 者 ユ ー ザ ー に 表 示 す る た め の メ ソ ッ ド で は な い

ので、もしオブジェクト内容を綺麗に表示させる必要があるのなら、
(存在すれば)整形メソッドを利用し、文字列を自前で作ってputs等を使用「しなければならない」
いまだに「pは画面表示用のメソッド」「pはputsの省略形」という解説をしてる本やサイトがあるが、燃やして捨ててしまってよい
Timeオブジェクトを特定の書式で表示したい場合は>>222

irb> puts Time.now.strftime('%Y-%m-%d %H:%M:%S')
2014-08-03 09:53:28
0231デフォルトの名無しさん2014/08/03(日) 14:20:20.23ID:T59meZIw
ISO format って
2014-08-03T09:53:28
という風にTが入るのはなぜ?
0232デフォルトの名無しさん2014/08/03(日) 14:25:58.16ID:Uv66z7PH
>>231
ISO8601か。数字が続くと区切りにくいし、スペースはいろんなとこで区切り記号として使われているからじゃないか。スラッシュやハイフンも日時ではいろんな使われ方してるし。
0233デフォルトの名無しさん2014/08/03(日) 15:04:32.71ID:saA9+Ea3
>>231
プログラム的にわかりやすくてギリギリ可視性もあっていいじゃないか
ちなみにこれもエンドユーザーに直接表示することを目的とはしていない
これをそのまま見せようとするのではなく、自力でどうにかすること
0234デフォルトの名無しさん2014/08/03(日) 23:38:11.96ID:PzxowcJB
webサービスでユーザーネームとパスワードをユーザー側にcookieみたいな感じで保存させて自動ログイン機能を実装することはできませんか?

user = "ユーザー名"
password = "パスワード"
みたいな感じで、変数の値を保存させておき次回アクセスがあったらそれを代入させるイメージです。

本来はデータベースなりに保存するのでしょうがあくまでユーザー側に保存させるようにしたいです。
0235デフォルトの名無しさん2014/08/04(月) 01:09:54.00ID:VTkOlU1X
そういうのはセッションでやるんじゃないの
0236デフォルトの名無しさん2014/08/04(月) 03:21:57.60ID:tnMe/Qjc
>>234
できるけど、そんなサイト行きたくない。場合によっては悪質なサイトとして晒すレベル。
0237デフォルトの名無しさん2014/08/04(月) 03:40:50.26ID:Q/8i57D8
>>235
セッションでやってるんですけどうまく行かないんです。
有効期限も指定してて、firefoxからcookieも見れるのに何故かいつの間にかデータが読み込めなくなってるんですよ。
0238デフォルトの名無しさん2014/08/04(月) 03:44:49.65ID:Q/8i57D8
>>236
そこまでですか…

ちなみに理由はどうしてですか
ほとんどファイルサイズないしcookieは色んな所に保存されてるから大丈夫かと思ったんですけどセキュリティ的な問題ですか?
考えてみたんですけどこれくらいしか浮かばなかったのでよければ教えて欲しいです。
0239デフォルトの名無しさん2014/08/04(月) 03:46:00.08ID:hIaMhHwR
>>234
そのままやると問題が多すぎる。おそらく、期待としてはCookieStoreが近いと思う
0240デフォルトの名無しさん2014/08/04(月) 04:13:20.27ID:vzBGIwJJ
OAuth2.0
0241デフォルトの名無しさん2014/08/04(月) 04:48:08.48ID:tnMe/Qjc
>>238
セキュリティ上の問題。
それならHTTP digest認証使ったりブラウザに覚えさせた方がまだいい。
他の人が言っているのはセッションキーを使い捨てパスワードとして利用するのと同じ意味になる。
セッションジャックよりパスワードを盗まれる方が被害が大きい。
02422192014/08/04(月) 17:03:31.26ID:mXRA9UCQ
219です.
>>220, >>221, >>222, >>223, >>230 他皆さん
ありがとうございました.大変勉強になりました.

>>223 にある
Time.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す

で対応することにしました.
0243デフォルトの名無しさん2014/08/04(月) 21:26:58.70ID:Q/8i57D8
Rack::Session::Cookieというものを見つけたのでこのページを参考にしながらこんな感じにやったのですがうまく行きませんでした。

http://d.hatena.ne.jp/shokai/20110324/1300999147

#Rack::Session::Cookie有効
use Rack::Session::Cookie,
:expire_after => 60*60*24*7,
:secret => '適当な文字列'

#代入するとき
session[:user] = 'username'

#読み出すとき
if defined?(session[:user])
user = session[:user]
end

ブラウザ終了がログイン状態が切れるきっかけというわけでもなく時間が立つと切れてます。
0244デフォルトの名無しさん2014/08/04(月) 21:42:32.94ID:6Tzsw3VW
>>242
ないわw
0245デフォルトの名無しさん2014/08/04(月) 23:57:26.06ID:XPxSUeR/
小学生から楽しむ Rubyプログラミング
http://www.amazon.co.jp/dp/B00LUKIEGG/
0246デフォルトの名無しさん2014/08/05(火) 00:27:04.52ID:Rp7Uk6zW
>>244
同意。あァァァんまりだァァアァ。
なんでprivateはあるのにsealedは導入しなかったruby。
0247デフォルトの名無しさん2014/08/05(火) 00:36:33.25ID:mOOeWZK0
>privateはあるのに
ないよ
よく調べろ
0248デフォルトの名無しさん2014/08/05(火) 01:03:45.06ID:52ECpDfa
小中学生にRuby教えて行ったらスレもこうなるっつうのはバカでもわかる
満足かね?
せめてRuby1年生は先生ごっこやめよ
0249デフォルトの名無しさん2014/08/05(火) 10:33:07.90ID:xop66pug
>>243
それで生のCookieの値はどうなってたの?
0250デフォルトの名無しさん2014/08/05(火) 16:52:55.87ID:n5rHoHG6
>>249
生のcookieの値というのはfirefoxの「prefenances」>「history」>「show cookie」からcookieを見た時にHostとかPathとかいくつか項目があるところのContentってところに書いてる値をそのまま書けばいいのでしょうか?


あと、他のサイトのcookieはどんな感じになってるのかと思い見てみたところHostという項目がない代わりにDomainがあるサイトがあります。
HostとDomainが両方ともあるというサイトは見かけなかったのですがこれらの違いは何なのでしょうか?

僕のサイトだとHostでした
0251デフォルトの名無しさん2014/08/05(火) 17:14:48.30ID:9+BWU5QF
>>250
Contentとは別に有効期限ってのがないかな?その値はどうなってるのか。
その値が正しければruby(rack)というよりブラウザ側の問題では?
ブラウザのcookie保存期間の設定は正しく設定されていないとか?
0252デフォルトの名無しさん2014/08/05(火) 18:13:26.87ID:n5rHoHG6
>>251
expiresの値は2014年09月04日 16時40分35秒になってます。
コードでも一ヶ月後に設定してたので多分有効期限の設定はうまく行ってると思います。

うまく行かない時もcookie自体は残っているので削除されてるって線は薄そうです。
とりあえず、firefoxでやってたので他のブラウザでも試してみます。
現状なんでうまく行かないのかもわからない状態なので…
0253デフォルトの名無しさん2014/08/05(火) 18:45:34.68ID:9+BWU5QF
>>252
あら、cookie残ってるのね。
他のブラウザでも同様であればコード側に原因があるかも。
>>243にある参考ページのサンプルコードがシンプルだから、
そのコードで動作確認してみては?
0254デフォルトの名無しさん2014/08/06(水) 04:13:53.68ID:/o/64fuk
use Rack::Session::Cookie,
:key => 'rack.session',
:domain => '.の後にdomain',
:path => '/',
:expire_after => 2592000,
:secret => '適当な文字列'

これでやったのですがうまく行きませんでした。
逆にうまく行く時はなんでうまく行くのかと思いキャッシュ消したりとかもやってみたんですが関係無いようでキャッシュを消してもcookieを読み込める時は読み込めて読み込めない時は読み込めないようです。

herokuで動かしてるのですがもしかしたらherokuの設定がうまく行ってないみたいな可能性とかはありませんか?
###### WARNING:
No Procfile detected, using the default web server (webrick)
警告出てたんですが問題なさそうだったので無視してましたし
config.ruにuse Rack::Session::Cookieを書いてるサイトもあったので僕の勝手な憶測ですが

現在のconfig.ruの中身
require './app'
run Sinatra::Application

原因自体つかめていない状態なのでそれを特定する方法の手がかりだけでも知りたいです
0255デフォルトの名無しさん2014/08/06(水) 04:17:39.98ID:/o/64fuk
警告は
この内容のProcfileを追加したら消えました。
web: bundle exec rackup config.ru -p $PORT
0256デフォルトの名無しさん2014/08/06(水) 07:07:48.40ID:9mmp63by
Firefoxにクッキーマネージャとか入れて確認してみるのがいいと思うな
0257デフォルトの名無しさん2014/08/06(水) 07:50:16.81ID:im7I2Tzq
> 原因自体つかめていない状態なのでそれを特定する方法の手がかりだけでも知りたいです

herokuとかの環境の情報は始めから出した方が良いと思うよ。
あとローカル開発環境では正しい動作だったのかとか。
問題の切り分けがしづらくて遠回りしてしまう。

herokuでは「use Rack::Session::Cookie」と
「enable :sessions」を同時につかうなみたいな記事あったけど
そのあたりは大丈夫?
0258デフォルトの名無しさん2014/08/06(水) 12:44:14.10ID:/o/64fuk
>>257
すいません。
環境等先に書いておくべきでした。

えーっと
ブラウザで動くsinatraアプリでweb apiをoauth認証をして使ってtumblr用のサイトを作っているのですがローカルだとあらかじめ入手しておいた自分用のアカウントのキーを定数でおいています。
なのでローカルだと連携アプリを許可するみたいなページを出してoauth認証させる部分を省いて開発しています。
oauth認証の過程がないのでcookieの処理もローカルのものには有りません。

herokuにあげたものがうまく動かないのはcookie周りの処理だけで他はoauth認証とcookieの処理がないローカル版と僕が見たところ同じ動きをしてると思います。

oauth認証の情報が保存されないだけでアカウントがどうこうということはないですけど、こんな状態なのでanalyticsで自分以外の人が来てないと確認しながらやっているのですがanalyticsが残すcookieはうまく動作してそうな感じです。

herokuは無料プランで、アドオンなどは入れていません。
enable :sessionsは大丈夫だと思います
0259デフォルトの名無しさん2014/08/06(水) 18:33:58.71ID:vbe86AaJ
>>258
読み込める時と読み込めない時があるようなので
oauth認証のタイムアウトとか考えられるけど
herokuはログにエラーは出すのかね。
02601732014/08/06(水) 22:43:28.11ID:9w14YIgy
>>180
>>188 では、ナゼ可視性(=protected や private の宣言)を使わない
スタイルを好む(個人的な)理由を書いた
その理由の中では:
> スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
> そのメソッドの外部からの利用を(protectedで)禁止するのが
> 望ましいというケースがほとんど無い(ちょっと思いつかない)
などと書いていたけど、それが間違いだったことに気付いた

ここ数日、標準ライブラリの Ripper.lex を使って、Ruby の
ソースコード解析ツールでの利用を想定した字句解析コードを書いていたのだけど、
試しに protected と private を使ってみたところ割とイイ感じになった
どうやら可視性に関しては、自分の食わず嫌いだったらしい....
  http://play.island.ac/codepaste/code?id=1583

他人から指摘されるまで気付かなかった自分が恥ずかしいけど、
まずは指摘してくれたことに対して礼を言う、ありがとん
02612112014/08/07(木) 00:41:38.32ID:QaqdPvt4
>>209-216
IO(入出力)クラスによると、
Windowsで改行、\r\nを読み込むと、
Rubyインタプリタ内で、\nに変換されて、
またWindowsに出力される時に、\r\nに変換される

つまりRuby内では、\nで統一されている
0262デフォルトの名無しさん2014/08/07(木) 01:54:36.56ID:UzLKIx83
¥r¥nが¥nで統一されてるとして
¥rはどして¥nに統一されてないのん?
0263デフォルトの名無しさん2014/08/07(木) 02:34:40.65ID:EqoC26iF
そもそもCRLFとLFの変換ってのは元はWindows(と言うかその前身のMS-DOS)の仕様だからなあ
Unixにはそんな仕様は無い

そして、DOSにそれをする必要があったのは自身の改行がCRLFで
C言語はUnix生まれのため改行がLFだったこと
これをMSは、オープン時にテキストモードかバイナリモードかを指定させ
テキストモードならCRLFとLFを変換する、とした

どちらもCRのみ(これは昔のMacの作法)とは関係がないので何もされない
0264デフォルトの名無しさん2014/08/07(木) 03:05:13.96ID:Os4j55OX
FTPにもテキストモードとバイナリーモードがあるしな
0265デフォルトの名無しさん2014/08/07(木) 04:51:50.32ID:mGC1aKkA
>>256
クッキーマネージャーはアドオン名でしょうか?
使いかたは自分で調べるのでどの項目や何を見ればいいのかがわからないので良ければ教えてくださいますか?

>>259
500番エラーが出てます
dashboardは投稿一覧みたいのを表示するページでこれは失敗した時のログです。
***は伏せ字です

2014-08-06T19:20:03.092865+00:00 heroku[router]: at=info method=GET path="/dashboard" host=*** request_id=62a8b28e-c1a0-4667-9127-988f2de7f579 fwd=*** dyno=web.1 connect=2ms service=181ms status=500 bytes=1235

うまく行ったときは200番がちゃんと帰ってきてます。


そこで、試しにoauthの情報を定数でおいているローカルの方のファイルをoauthの情報を書かずに実行すると似たようなエラーが帰ってきて
NoMethodError - undefined method `[]' for nil:NilClass:
となりました

heroku logsにも似たようなものが出てたのでやはりうまいことcookeから情報が読めてないのではという気がします
2014-08-06T19:20:03.077945+00:00 app[web.1]: NoMethodError - undefined method `[]' for nil:NilClass:

案の定クッキーはfirefoxから確認できたので何が理由かはわかりませんが何らかの理由で時間が経つとcookieから情報が読めなくなるみたいです。
0266デフォルトの名無しさん2014/08/07(木) 05:14:08.90ID:mGC1aKkA
あれ?
operaからも動作確認しようと思ってサイト開いたらどうもfirefoxとログインアカウントの情報が共有されてるみたいです。
firefoxからしかoauth認証(アカウントAで認証)してないのにoperaでも同じアカウント(アカウントAの情報)の情報で出てくる。
逆にoperaから別のアカウント(アカウントB)を認証してfirefoxで開いた時もfirefoxから許可してないのに別のアカウント(アカウントB)の情報で出てくる。

同一LAN上のタブレットから開いてもそうなりました。

意味がわからない…
0267デフォルトの名無しさん2014/08/07(木) 05:22:45.89ID:mGC1aKkA
>>266
すいません取り乱しました

そもそも、これがセッションの正しい挙動だったんですね。
sinatraがデフォルトでセッションをクッキーに保存しているというだけで別にセッションはクッキーを使うためのものではないって解釈でいいんですかね?
0268デフォルトの名無しさん2014/08/07(木) 11:27:41.97ID:qMfbyumE
>>265
cookieが読み込めないというより
500が帰ってきているから結果的にcookieが読み込めていないってことだよね。
firefoxでcookieが見れるというのは前回成功した時のcookieが見えているだけじゃないかな。
0269デフォルトの名無しさん2014/08/08(金) 00:35:31.80ID:fc9o1pZf
>>267
多分解決しました。
どうもクッキーの設定とsinatraのコードそのものの両方が間違ってたみたいでsinatraのコードダメ元で変えてみたら普段ならheroku にデプロイした後は確実にエラーが出るのですがちゃんと通り、半日ほど立ちましたがさっきもログインが持続していることを確認できました。

体系的な知識がなくかなり手こずりましたが皆様のおかげで解決出来ました。
0270デフォルトの名無しさん2014/08/09(土) 01:57:37.69ID:hZJQ1zja
セッション22
0271デフォルトの名無しさん2014/08/10(日) 00:10:35.94ID:Npb/3Qru
突然すみません

Selenium Webdriver、chromeにて
とあるサイトの画像URLを取得、テキストに追記で書き出ししようと色々と調べたのですが全く分からず困っています。


<div class="hoge">
<img src="http://hoge.jpg"; alt=""></div>

htmlは上記、xpathは/hoge/imgと仮定します


open("hoge.txt", "a"){|f|

output = driver.find_element(:xpath, '/hoge/img')

f.puts "#{output.text}"

}


のように書いてみたもののテキストに改行しか出力されない状態です
0272デフォルトの名無しさん2014/08/10(日) 00:30:45.65ID:zlJil821
それはどうでもいい
それを書く前に15個くらいスクリプトを作ったはずだ
それは動作したのかどうか言え

もしいきなりそれを作ろうとしたのならあらゆる点で間違っている
いきなり別荘を建てようとするな
まず釘打ってみたり床で組み立ててみたり本棚作ってみたり犬小屋作ってみたりしろ
その経験はひとつも無駄にならない
0273デフォルトの名無しさん2014/08/10(日) 01:14:37.49ID:Npb/3Qru
>>272
画面上にテキスト表示されている物はきちんと書き出されました
それで画像urlを取得しようと沢山調べ考えたんですが

今日はもう寝て先程見つけた下を参考にnokogiriにチャレンジしてみようかと
http://d.hatena.ne.jp/toyoshi/touch/20101109/1289294545

ちょっとnokogiri駆使してみたんですが上手く行かなかったような
0274,,・´∀`・,,)っ-○○○2014/08/10(日) 01:30:50.99ID:ObwJkVu+
>>272は名言だな 基本って大事ホント
0275デフォルトの名無しさん2014/08/10(日) 08:37:49.11ID:frgBbTF3
かーぺんた
0276デフォルトの名無しさん2014/08/10(日) 09:57:44.18ID:aTEKyeJh
http://www.buzzword.jp/img/face10.png
0277デフォルトの名無しさん2014/08/10(日) 11:18:40.68ID:TxwgTDO4
sublime text 3でruby使う上でやっとくべき設定やプラグイン教えて。
取り敢えずjapanize(メニュー日本語化)とConvertToUTF8(sjis文字化け対策)は入れました。
0278デフォルトの名無しさん2014/08/10(日) 15:06:43.67ID:zOHM5qWJ
>>277
やっとくべき設定?
まずその2つをアンインストールするんだ。
0279デフォルトの名無しさん2014/08/10(日) 17:01:06.03ID:DcfkR93x
>>277
エディタ固有の質問は専用スレあるんだから
そっちで聞いたほうがいい
0280デフォルトの名無しさん2014/08/12(火) 12:59:00.63ID:nam2SDUx
true, false が代入されている boolean 変数 flg に対して
printf で書式指定をするには何を使うのでしょうか?つまり,
printf( "%?", flg )
の ??? には何を指定するのでしょうか?
0281デフォルトの名無しさん2014/08/12(火) 13:24:35.57ID:ACV8I0vK
irb(main):001:0> format "%s", true
=> "true"
02822802014/08/12(火) 19:19:53.75ID:x7JUkwZI
>>281 できました。ありがとうございます。
0283デフォルトの名無しさん2014/08/12(火) 19:31:50.15ID:PU4N0EB0
Javaだとインタフェースとか抽象メソッドで「継承する時はこのメソッドを実装してね」って明示できるけど
Rubyでそう言う事したい場合ってドキュメントでカバーするの?
「ポリモーフィズムしたいからこのメソッドはもっとけ」みたいなの
0284,,・´∀`・,,)っ-○○○2014/08/12(火) 20:28:53.57ID:fcVldYYC
そういうお堅い言語じゃない。
実行中にメソッド追加したり削除したりできるくらいだから当然
言語レベルとしてはない。

だがやれんこともない。
http://qiita.com/akisute3@github/items/66bf766166eda2b84a03

Rails的にはテストコードでカバーかね
メソッドが定義されているかはdefined?で確認することができる。
0285デフォルトの名無しさん2014/08/12(火) 22:29:22.75ID:NtdaG8qe
>>283
上書きしないと例外投げるだけのメソッド作っとく。
0286デフォルトの名無しさん2014/08/12(火) 23:31:37.25ID:kLOI0Uws
>「継承する時はこのメソッドを実装してね」
その考え方がキモい、ということにはなってる

いや常識的に考えて○○ができなきゃオブジェクト指向じゃないだろ、というものの大半は
単に特定の言語、ぶっちゃけJavaとC++、のローカル仕様だったりする
RubyでJavaをやるのはやめようぜ、Rubyなんだし
0287デフォルトの名無しさん2014/08/12(火) 23:41:51.41ID:x9ZUxVMu
動的言語なんだから実行時にエラー出しときゃいいんだよ。
0288デフォルトの名無しさん2014/08/12(火) 23:51:26.48ID:okDd+6G6
その考え方はもう古い
スクリプトといえども型名等明示できるものは明示できるようにして
ヒューマンエラーを未然に防げるようにしておくのがトレンド
というわけでRuby3はその方向に進化してくれ
0289デフォルトの名無しさん2014/08/13(水) 00:23:51.87ID:KN2EsXN5
>>286
残念だけど、「その考え方」は Smalltalk の時代から「よくある言い方」、
いわゆる「イディオム」の一つとして普通に存在している
ちなみに Smalltalk では、>>285 の表現を借りると:

 上書きしないと subclassResponsibility メッセージを
 投げるだけのメソッド作っとく。

になり、これを Ruby で言い直せば:

 上書きしないと例外 SubclassResponsibility を
 発生させる(raise する)だけのメソッド作っとく。

になる

さて >>286 に限らず、C++/Java のような静的OOPしか知らない人が
「OO設計の概念は C++/Java から生まれた」みたいな
硬直した発想をしがちなのはナゼなんだろうか?
0290デフォルトの名無しさん2014/08/13(水) 01:06:25.32ID:OCtuWZt1
いろんなスレで無理やりSmalltalkの話題切り出すのやめてくれ
まじでうっとおしい
0291デフォルトの名無しさん2014/08/13(水) 01:09:46.40ID:lr+rlGxM
>>289
被害妄想じゃない?
286のレスからはそうは読み取れないな
硬直した発想だとか言うけど
起源主張して褒められたいという発想自体が
まさにソレじゃね
0292デフォルトの名無しさん2014/08/13(水) 01:11:07.57ID:TCL9mbxJ
>>289
僕が初めてオブジェクト志向言語を触ったのはjava/c++だったから! って人が多いから。
Ruby なら、そういう用途に使うために NotImplementedError が組み込みであるから、それを使ってくれというのが言語としてのスタンスってだけの話だと思う。
0293デフォルトの名無しさん2014/08/13(水) 01:16:16.87ID:0XAF0Eso
どんな言語だろうと自分の開発手法に足りないものがあったら、実現手段を考えるだけ。
0294,,・´∀`・,,)っ-○○○2014/08/13(水) 01:34:10.05ID:K9qjufdc
method_missing + eval
02952892014/08/13(水) 02:31:29.89ID:KN2EsXN5
>>288,293
「無いのなら作ってしまえホトトギス」ということで、
属性の宣言 attr_reader 等と似た抽象メソッド宣言 abstract_method を書いてみた

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

abstract_method の使い方は:
・attr_reader 等と同様に、クラス定義内で abstract_method を呼ぶ
・引数は、メソッド名をキー、メソッド引数の個数を値とするハッシュを渡す
・例:abstract_method :foo => 1 # 抽象メソッド foo を宣言


>>290
わざわざ動的OOP言語である Ruby スレで C++/Java との話題を切り出す、
しかも無知に起因すると思われる間違った情報(>>286)をまき散らすのも勘弁願いたい
02962892014/08/13(水) 02:43:24.62ID:KN2EsXN5
>>295 のコードについて、94行目から間違いがあったので訂正

・訂正前
 94 # 具象メソッド
 95 def foo(message)
 96   format "I am a %s.", self.class
 97 end

・訂正後
 94 # 具象メソッドを利用するメソッド
 95 def foo(message)
 96   format "I am a %s.", message
 97 end

訂正した結果として、実行例も "I am a FOO." になる
02972892014/08/13(水) 03:01:19.57ID:KN2EsXN5
>>291
抽象クラス/抽象メソッドという概念を使いたくない、という
主張だけなら、特に気にしなかった
個人のプログラミングスタイルなんだから他人がとやかく言うべきじゃないし、
Ruby はそういった(良い意味で「お気楽な」)スタイルも許容する認める言語だから

でも >>286 は自分の主張を周囲に押しつけようとし、
しかもその主張の根拠「JavaとC++、のローカル仕様」が間違っているから
厳しい口調になった

言いたかったのは、それだけだ
0298デフォルトの名無しさん2014/08/13(水) 04:30:45.53ID:lr+rlGxM
>>297
面白いなw
> 自分の主張を周囲に押しつけようとし
ってのがまさに
> 「継承する時はこのメソッドを実装してね」
これじゃないか。
普通に読み取れば
言語ごとに色が有るんだから
多様性を楽しもうぜってのが286のレスでしょ。
どう読み取ればそうなるんだよ
0299,,・´∀`・,,)っ-○○○2014/08/13(水) 07:57:49.27ID:K9qjufdc
大ヒント

class Parent
 def self.inherited(child)
  child.class_eval do
    # ここでなんか処理
  end
 end
end

C++やJavaで純粋仮想関数使いたい意図はわかるが
「ヒャッハー!コンパイル通さないぜ!」やるだけでOO設計やった
気になるのはいかがなものかと。

  return 0;

やるだけの関数定義してもシンボル名さえあってれば通っちゃうわけだよね。
お前それでいいのか?
03002892014/08/13(水) 11:44:01.65ID:KN2EsXN5
>>286 の真意はカキコした本人にしか分からないから横に置くとしても、
たしかに面白いな

・Enumerable モジュールを include する時はメソッド each を実装してね
・Comparable モジュールを include する時はメソッド <=> を実装してね
・あるクラスをハッシュのキーとして扱う時はメソッド eql? と hash を実装してね
・AcriveRecord::Base を継承する時は、DB上に同名のテーブルを定義し、
 type というカラムを設けてね

Ruby プログラミングではありふれた決まり事のいくつかだけど、
これらも >>298 には「おしつけ」になるんだろうなぁ.....
うん、たしかに面白い
0301デフォルトの名無しさん2014/08/13(水) 13:03:40.66ID:XU9wPxJn
>>280
flg=true;flg.to_s
0302デフォルトの名無しさん2014/08/13(水) 13:33:34.15ID:TBkS3gli
foo:true ←よい
foo:1 ←よい
foo:'bar' ←よい

foo: :bar ←なんかださい
0303デフォルトの名無しさん2014/08/13(水) 14:47:53.87ID:s6AcBQ2c
library yamlについて質問です。
YAML.dumpで書き出したときに先頭がマルチバイト文字
だと自動的に""で囲まれるようですがこれは確定した仕様なんでしょうか?
ドキュメントに一切記述がなくて不安です。
0304デフォルトの名無しさん2014/08/13(水) 15:06:48.24ID:KN2EsXN5
>>303
この話かな?

・Ruby1.9.2で日本語を含むYAMLを出力する時、バイナリ文字列化されないようにする
 http://keijinsonyaban.blogspot.jp/2010/10/ruby192yaml.html
03052802014/08/13(水) 15:38:20.34ID:hIUx5GQv
>>301 さんくす。
03063032014/08/13(水) 16:32:59.37ID:s6AcBQ2c
>>304
そんな感じです。こちらの環境はwindows版2.0でPsychも有効になっているようですが
require 'yaml'
jp = 'あいうえお'
puts(YAML.dump(jp))
#--- "あいうえお"
en = 'abcde'
puts(YAML.dump(en))
#--- abcde
#...
となって日本語のほうだけダブルクォーテーションで囲まれてしまいます。
確定した仕様なら大した問題はないのですがいろいろ調べてると2,3年混乱
が続いたライブラリのようで不安になってきました。使わないほうがいいのでしょうか?
0307デフォルトの名無しさん2014/08/13(水) 16:45:24.76ID:9nXT2NBI
君子危うきに近寄らず
03082892014/08/13(水) 21:39:49.42ID:KN2EsXN5
>>295-296 の抽象メソッド宣言コードについて、これの具体的な
使用例として「2次元クラフィック向けの四角形クラス」を書いてみた

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

これは姉妹スレ「Rubyについて Part49」の #771,772-774 で書いていた
コードを改造母体にして、抽象メソッド宣言やその他の変更を加えたものです
参考まで
03092892014/08/13(水) 22:40:38.72ID:KN2EsXN5
Ruby における抽象クラス/抽象メソッドの話題はググるといくつか見つかる
今さら調べてみると、海外でも似たような議論をしている

・Abstract Method in Ruby - Stack Overflow
 http://stackoverflow.com/questions/6792428/abstract-method-in-ruby

 ここでも基本は「具象クラスで抽象メソッドが未定義であれば例外を投げる」だけど、
 >>289 と同様に Smalltalk ではそれを SubclassResponsibility と呼ぶという
 レスが付き、それと類似のコードが提案されている

また、>>295 では抽象メソッド宣言コードを自作してみたけど、
同じ事を考えていた人は海外にもいた

・Creating an Abstract Method | zenspider.com
 http://www.zenspider.com/Languages/Ruby/Cookbook/ClassesAndObjects/AbstractMethod.html

 >>295 では組込みクラス Module に宣言メソッドを追加していたけど、
 こちらの実装では宣言クラス Abstract を定義しクラスメソッド Abstract.method として
 抽象メソッドを宣言する API 仕様になっているみたいだ
 例えば、任意のクラス定義内で Abstract.method :foo と書く
0310デフォルトの名無しさん2014/08/13(水) 22:54:28.35ID:KN2EsXN5
>>306
YAML は使ったことがないのでよく分からんけど、
公式仕様書では最初のドラフト版である 1.0 の時点で
ダブルクォーテーションで囲まれた文字列が定義され、
最新版の 1.2 でも仕様定義に変更はなく安定しているみたいだね
・YAML&#xA0;Ain’t&#xA0;Markup&#xA0;Language&#xA0;(YAML) Version&#xA0;1.2
 http://yaml.org/spec/1.2/spec.html#id2760844
 この仕様書の例 "Example 2.17. Quoted Scalars" が該当する箇所

後はライブラリにおける仕様の実装品質を検討することになる
・もし品質が保証された他の手段(他のYAML実装やJSON/XML仕様)が
 存在しているなら採用を検討する、あるいは
・とりあえず何か問題が起こるまでは標準ライブラリの利用を継続する

ぶっちゃけた話、どちらを選ぶのが適切かはケースバイケースだから、
後は >>306 自ら最終判断を下すしかないと思う
0311デフォルトの名無しさん2014/08/14(木) 03:58:05.93ID:+2zwhmMM
馬鹿には無理
0312デフォルトの名無しさん2014/08/14(木) 07:51:44.38ID:/Ffu3gb/
ふぇぇ・・・
0313デフォルトの名無しさん2014/08/15(金) 04:49:13.30ID:MB8edIwX
URI.parse('file://foo.txt').open
ってできなくて不便なんすけど
ruby2.1でもまだfileに対応してないんスね
0314デフォルトの名無しさん2014/08/15(金) 05:36:59.12ID:5MJoVvaB
>> "a\nb\nc\n".split("\n")
=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n"){|i| puts i}
=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n").each{|i| puts i}
a
b
c
=> ["a", "b", "c"]
>>

2行目のeachつけ忘れでエラーでないんだけど
Arrayに直接ブロックをぶら下げると何が起こるの?
0315デフォルトの名無しさん2014/08/15(金) 06:18:06.78ID:11xv4jXV
その二番目の例で split は渡されたブロックを処理せずに単に捨ててる
0316デフォルトの名無しさん2014/08/15(金) 08:26:41.72ID:2ipN4K8/
「ブロック処理は定義されていませんエラー」というのはRubyのデフォルトにはない
irb> 'abc'.upcase
=> "ABC"
irb> 'abc'.upcase{|x| foo}
=> "ABC"
0317デフォルトの名無しさん2014/08/16(土) 18:49:31.04ID:ur+z2lZs
Programming Ruby 1.9&2.0 の翻訳本は出ないのかな?
原書は2013年5月に出版されたようだけど。
0318デフォルトの名無しさん2014/08/16(土) 19:08:17.04ID:pCqm9jUF
Programming Ruby 2.1 が出版されてから
翻訳を検討し始めるのではないかと思われ

Ruby 2.2 リリースとの熾烈な競争になるなぁ(棒
0319デフォルトの名無しさん2014/08/16(土) 19:14:06.94ID:jGqbtnFx
翻訳版といら要らんよね
0320デフォルトの名無しさん2014/08/16(土) 21:15:40.19ID:jGqbtnFx
if foo = 1 || foo == 2 || foo == 3
 bar
end
をもちっとコンパクトに書けんかの

if [1, 2, 3].include?(foo)
 bar
end
だとなんかイモい

case foo
when 1, 2, 3
 bar
end
もなんかイモい

if foo is 1 || 2 || 3
 bar
end
とかかけたらな
0321デフォルトの名無しさん2014/08/16(土) 21:43:07.02ID:pCqm9jUF
>>320
コードの可読性が数学における表記法との類似性を指すのであれば:
>> if [1, 2, 3].include?(foo)
が最も類似していると思う

もしコンパクトさを最重要視したいのなら、
Ruby では識別子に UTF-8 文字が利用できるから、
以下のコードを書けばいい

irb(main):001:0> module Enumerable; alias ∈ include?; end
=> nil
irb(main):002:0> [1, 2, 3].∈ 2
=> true
irb(main):003:0> [1, 2, 3].∈ 4
=> false
irb(main):004:0>
(2ch では「∈」という文字が化けている可能性が高いけど、
 これは「ある要素が集合に含まれているか」を表す数学の記号)
0322デフォルトの名無しさん2014/08/16(土) 21:51:29.58ID:A0O6xtGz
>> if [1, 2, 3].include?(foo)
はRuby的ではないだろ
論理的に合っててシンプルならいいってのはPythonっぽいわ
0323デフォルトの名無しさん2014/08/16(土) 22:06:29.30ID:pCqm9jUF
>>322
>>321 では「数学的表記との類似性」という視点でコードを示したわけで、
これが「Ruby的」とは一言も書いていない
だから一体、何に対して過敏に反応しているのか、わけがわからんな

「Ruby的」とか「Rubyっぽい」というのは、>>320 の前半3つの書き方、
そのどれでも受け入れ、その中からどれを選択するかはプログラマに
任せるという「寛容な設計哲学」にある(と、個人的には考える)

これの「Rubyらしさ」は、常にプログラマへ「論理的に合っててシンプルならいい」を
強要する Python とは対照的だね
0324デフォルトの名無しさん2014/08/16(土) 22:09:16.80ID:xeQ2qkm2
fall throughが欲しいなぁと思うことがある
0325デフォルトの名無しさん2014/08/16(土) 22:13:46.44ID:ur+z2lZs
>>323
もっとコードをしっかり読もうよ。
元のコードの一行目はなんか変じゃない?
0326デフォルトの名無しさん2014/08/16(土) 22:17:39.81ID:pCqm9jUF
>>325
typo をいちいち揚げ足取りするほど野暮じゃないんで....
0327デフォルトの名無しさん2014/08/16(土) 22:23:52.88ID:ur+z2lZs
if foo<4
bar
end
foo∈Nなら
0328デフォルトの名無しさん2014/08/16(土) 23:21:02.64ID:xeQ2qkm2
>>322
pythonだねw
0329デフォルトの名無しさん2014/08/17(日) 11:50:17.42ID:C1vhwMQl
こういう書き方ができないわけでもない。推奨はしないが。
class Fixnum
 def is(f)
  f.call(self)
 end
end
def one_of(*them)
 return them.first.method(:include?) if them.size == 1
 them.method(:include?)
end

foo = 5
bar if foo.is one_of 1,3,5,7
bar if foo.is one_of [1,3,5,7]
bar if foo.is one_of 1..7
0330デフォルトの名無しさん2014/08/17(日) 16:28:19.29ID:v7smLqH2
http://guides.rubyonrails.org/active_support_core_extensions.html#in-questionmark
0331デフォルトの名無しさん2014/08/17(日) 18:27:16.73ID:F9qolS48
ユーザーのソースコードスキャンして
100人が同じような実装書いたら自動でオリジナルに反映されるクラウド型言語にすれば
車輪の再開発も最小限に抑えられるのに
0332デフォルトの名無しさん2014/08/17(日) 19:21:09.40ID:Ot0PKOG+
車輪の再発明がなかったらRails使ってるような人間はほとんど失業するよ
0333デフォルトの名無しさん2014/08/17(日) 19:51:54.11ID:sI1u/7Zz
あんただけです
0334デフォルトの名無しさん2014/08/17(日) 20:12:47.24ID:wn4TLg6+
>>331
100アカウント作る作業が捗りますね。
0335デフォルトの名無しさん2014/08/18(月) 18:39:08.27ID:MNhNsEMr
文字列の変数に\nや\tを追加するにはどうすればいいのでしょうか?

str = String.new
str << "hello"
str << "\n"
str << "world"
p str

とやると、 "hello\nworld" が出力されてしまいます
<< の代わりに + を試してみたり、クオーテーションマークを変更してみたのですが上手く行きませんでした
ご存じの方がいらっしゃったら教えて下さい
0336デフォルトの名無しさん2014/08/18(月) 18:55:10.29ID:RYTp3JkD
>>335
pではなくprintやputsを使う
0337デフォルトの名無しさん2014/08/18(月) 19:07:53.97ID:MNhNsEMr
>>336
ああ、ほんとだ!
pやputs、printの微妙な違いを理解していませんでした
教えて下さりありがとうございます!
0338デフォルトの名無しさん2014/08/18(月) 21:43:14.89ID:DSQRQPi5
正規表現について何か方法があれば教えてほしいです
文字列から以下のようにscanすると、1回目のマッチで先頭の12111を消費してしまうので
残りは2111となってマッチせず、戻り値は1要素になります
"121112111".scan(/1+21+/) #=> ["12111"]

元の文字列の中で、以下のように正規表現に当てはまるすべてのパターンを抽出したいとき
簡単にできる方法はあるでしょうか?
"121112111".??? /1+21+/ #=> ["12111","1112111"]

その後文字数を数えたりしたいので、先読みだけでは期待通りになりませんでした
"121112111".scan(/1+2(?=1+)/) #=> ["12", "1112"]
0339デフォルトの名無しさん2014/08/18(月) 22:12:57.28ID:fWx8XBuA
>>338

irb(main):001:0> xs = "121112111"
=> "121112111"
irb(main):002:0> (0..(xs.size - 1)).map { |i| xs[i, xs.size - i].scan /1+21+/ }.flatten.uniq
=> ["12111", "1112111", "112111"]
irb(main):003:0>
0340デフォルトの名無しさん2014/08/18(月) 22:16:57.84ID:8phCtYDa
>>338
メソッド1つでやる方法はない
ループ回してやるぐらいだろう
0341デフォルトの名無しさん2014/08/18(月) 22:50:50.95ID:DSQRQPi5
>>339,340
ありがとうございます
やっぱり単純な方法はなさそうですね
今回に限っては以下のように対処することにしました
"121112111".gsub(/1+/){"#$& #$&"}.scan(/1+21+/)
=> ["12111", "1112111"]
0342デフォルトの名無しさん2014/08/18(月) 23:07:32.88ID:kHWBbVG2
"121112111".scan(/(?=(1+21+))/).flatten #=> ["12111", "1112111", "112111", "12111"]
0343デフォルトの名無しさん2014/08/19(火) 22:06:10.54ID:4T9lOZln
オンメモリで処理しきれないような大量の1と2が入り混じった
文字列を処理するお題が「次」に出るに違いない・・・そう、これは
ブラフだ。きっと010001000に置き換えてビット演算で効率のいい
アルゴリズムを考えないと解けないようにできているんだ・・・!
0344デフォルトの名無しさん2014/08/20(水) 23:56:22.60ID:Hb2EFkIX
if [email protected]?
 @list.each do |e|
  e.foo
 end
end
って書くののなんかダサいから、
nil.to_aで[]が返るのを使って、
@list.to_a.each do |foo|
  foo.xxx
end
ってするのはどうかな?
to_aだけだと@listがnilの可能性がある事を示せなくて紛らわしいかな?
0345デフォルトの名無しさん2014/08/20(水) 23:59:39.84ID:Hb2EFkIX
@list.to_a.each do |e|
  e.foo
end
だった。
0346デフォルトの名無しさん2014/08/21(木) 00:45:52.00ID:im1RGGTy
>>344
Array(@list).each

という書き方はよく使うね
0347デフォルトの名無しさん2014/08/21(木) 02:06:12.53ID:x7AE9dcj
>>344
「引数(orインスタンス変数)は配列互換。途中でエラーになるんでよろしく」とマニュアルに太字で書いておく

いやわりとマジで
メソッドに外部から投げ入れるオブジェクトのクラスがナニかというのを徹底するのは人間の仕事
0348デフォルトの名無しさん2014/08/21(木) 02:08:32.65ID:Rf32jxet
>>347
動的型付け言語は大変だな。
0349デフォルトの名無しさん2014/08/21(木) 02:18:40.09ID:x7AE9dcj
まあどうあれ、あまり愉快ではない

def hoge(arg)
arg.each do |e|

と書いた時点で「いや待てよargが配列じゃなかったらどうしよう、ちょっと変わったHashの可能性もあるよな、よし対処しよう」と考え

   な い

というのは、直感やおもてなしのココロ(って何)には反する
0350デフォルトの名無しさん2014/08/21(木) 13:02:24.41ID:cuQAWRrR
sinatra使ってます。
Postデータのエンコードとバリデーションをしたいのですが
良いライブラリはありますでしょうか
0351デフォルトの名無しさん2014/08/21(木) 17:35:17.83ID:yvxtVK3I
>>349
その例の場合は

def hoge(*args)

にしちゃうかな、配列が複数ある場合は無理だけど…
0352デフォルトの名無しさん2014/08/21(木) 21:32:48.95ID:JmIsso9r
>>344,345
> って書くののなんかダサいから、

どうやら Ruby の作者も「if [email protected]?」はダサいと感じていたみたいで、
結果として「unless @list.nil?」という珍しい文法が Ruby に追加された
同様にして「while [email protected]?」もダサいので「until @list.nil?」も追加された


> to_aだけだと@listがnilの可能性がある事を示せなくて紛らわしいかな?

@list の値が nil のケース(=リストそのものが存在していないケース)と
@listi の値が空リストであるケース、それぞれによって処理を分岐させたいのなら、
この nil.to_a というコードは問題になる

ただ、今回の例(>>344)では両者のケースに対して同じ処理を期待しているように見えるから、
たとえば:
  if (! @list.nil?) && (! @list.empty?)
あるいは:
  unless @list.nil? || @list.empty?
と書くよりも、nil.to_a のほうが好ましいと思う
(よくある言い回し、いわゆる Ruby のイディオムの一つになれる可能性がある)
0353デフォルトの名無しさん2014/08/22(金) 21:34:40.30ID:QtCUYHT3
>>348
JavaやC#にだってぬるぽあるやん
0354デフォルトの名無しさん2014/08/22(金) 23:33:54.15ID:IRypyqt/
非nilであることをinitializeの実装だけでは保証できないのが難しいところだ。
0355デフォルトの名無しさん2014/08/23(土) 00:51:47.76ID:T0CaKeKd
return if @list.blank?
@list.each(&:foo)

じゃないの???
0356デフォルトの名無しさん2014/08/23(土) 01:34:51.41ID:2/26ZChg
@list.try.each{}
が標準でできればなぁ

request for: Object#try
https://bugs.ruby-lang.org/issues/1122
0357デフォルトの名無しさん2014/08/23(土) 02:24:04.01ID:WQrXNI9l
使いたい人は activesupport を使えばいいんだから、別にいいんじゃね?
0358デフォルトの名無しさん2014/08/23(土) 14:44:18.03ID:9MV2WjBq
AIZU ONLINE JUDGEの0021について
以下の回答ではWrong Answerとなってしまうのですが
おかしいor考慮不足な点がなにかわかりません
わかる方ご指摘をお願いしたいです
問題文に記載されたサンプル入出力は満たしています

問題:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0021&;lang=jp
Wrong Answer回答:http://ideone.com/Cl6B6n
回答の内容
2直線の傾き(i,j)を計算し一致すれば
(ただし実数なのでその差が相対誤差(大きいほう*イプシロン)、絶対誤差(イプシロン)より小さければ)
平行と判断する
(イプシロンは1e-10と置く)
0359デフォルトの名無しさん2014/08/23(土) 14:55:59.25ID:WQrXNI9l
>>358
ゼロ除算が考慮されていない
0360デフォルトの名無しさん2014/08/23(土) 15:08:18.23ID:9MV2WjBq
>>359
おう・・・ご指摘通りでした
0除算考慮したらAcceptされました、ありがとうございます!

誤差がおかしいのかとか難しく考えすぎてた・・・
0361デフォルトの名無しさん2014/08/23(土) 16:39:10.31ID:0NcmejrN
a
0362デフォルトの名無しさん2014/08/23(土) 16:47:31.24ID:0NcmejrN
http://imgur.com/UbPYGCx

rbenvでバージョン切り替えが出来ないんだけど、誰かわかる?
rbenv globalコマンドとruby -vコマンドで表示されるバージョンが違うってどゆこと?
バスの設定はしてある。
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
0363デフォルトの名無しさん2014/08/23(土) 17:13:00.67ID:WQrXNI9l
>>362
環境変数 RBENV_VERSION かカレントディレクトリに .ruby-version があるかどっちかじゃね?
0364デフォルトの名無しさん2014/08/23(土) 19:35:20.67ID:1h2qyd6w
rubyから.shを起動させたいのですが、どうすれば起動できますか?
0365デフォルトの名無しさん2014/08/23(土) 20:35:05.17ID:WQrXNI9l
>>364
system
0366デフォルトの名無しさん2014/08/24(日) 00:11:04.95ID:6OMWvQqo
>>365
result =で起動できました!

それと上で起動させたスクリプトを時間がきたら停止させるようにしたいんだけど、
resultで起動させつつその下の命令も実行させるようにってできますか?
0367デフォルトの名無しさん2014/08/24(日) 00:26:45.54ID:hXFtc1r+
>>366
spawn 使え
0368デフォルトの名無しさん2014/08/24(日) 09:00:55.94ID:/FddapLM
aに何か値が入ってるとして
if foo()!=0 then
a=foo()
end
をfoo()を2回呼ばずに書く方法無い?
b=foo()してbを2回使うはあるけどもっとスッキリしたので
0369デフォルトの名無しさん2014/08/24(日) 09:17:31.10ID:joOkqJea
0!=b=foo&&a=b
0370デフォルトの名無しさん2014/08/24(日) 09:21:15.73ID:joOkqJea
うわあ優先順位おかしかった
(b=foo)!=0&&a=b
0371デフォルトの名無しさん2014/08/24(日) 11:13:18.14ID:XmfYikUF
foo()の戻り値が Numeric なら

 a = foo.nonzero? || a

かな
0372デフォルトの名無しさん2014/08/24(日) 11:17:59.94ID:mc0xcEhs
>>368
a += foo
0373デフォルトの名無しさん2014/08/24(日) 13:24:10.87ID:EYMdVqe7
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無
0374デフォルトの名無しさん2014/08/24(日) 16:21:51.74ID:joOkqJea
Rubyにはjavascript,VBA,Pythonなどにあるwith構文と似た構文、もしくは別の方法はないでしょうか?
Timeクラスメソッドを何度も使う箇所があり、特定範囲だけTimeを省略できたらなあと考えています

こんな感じのことがしたい
with(Time){
a=now
b=at(gm(・・)+gm(・・)+a)
・・・
}
0375デフォルトの名無しさん2014/08/24(日) 17:16:02.45ID:67kLGJdT
>>374
省略したいのがモジュールであれば;
  include TooLongNamedModule
によって、現在の名前空間内では TooLongNamedModule 指定が不要になる
ただし、残念ながらクラスは include できないので、省略もできない

さらに書籍「JavaScript: The Good Parts」では
with 構文が「悪いパーツ」の一つとして挙げられているように、
それら言語でも with 構文の多用はバッド・ノウハウだから避けるべき

同様に Ruby でも include 宣言は Mix-in の用途にも使われ、
コードを一見しただけでは二つの用途(=プログラマの意図)が判別できないので、
名前空間の省略を目的とした include 宣言は、できるだけ避けるべきだろう

タイプ数を減らしコードを簡潔にしたいという目的を解決する手段であれば、
Ruby では「悪いパーツ」である with 構文の代わりに、別名(シノニム)を使える
  M = TooLongNamedModule
  C = TooLongNamedClass
これで、TooLongNamedClass.method の代わりに C.method と短く書けるし、
include や with 構文のような弊害は無い(=「悪いパーツ」ではない)

なお、>>374 のコードは(モジュールあるいはクラス等の定数ではなく)変数を
省略して書けることを想定しているみたいだけど、これも Ruby では書けない
その代わり、Object#tap { |obj| .... } を使って、たとえば以下のように書ける
  T = Time
  T.now.tap do |a|
    .... # 処理時間を計測したいコード
    b = T.now
    processing_time = b - a
    ....
  end
こちらもブロック(無名クロージャ)を利用しているので、with 構文のような弊害は無い
0376デフォルトの名無しさん2014/08/24(日) 17:38:36.03ID:kokV6yFV
>>374
Mailのnewを参考にすれば良さげだけど、
こういうことをやる汎用的なライブラリは知らない。
http://q.hatena.ne.jp/1406363383
0377デフォルトの名無しさん2014/08/24(日) 18:52:40.24ID:1zGm5FNX
def with(obj, &blk)
obj.instance_eval(&blk)
obj
end

arr = with [] do
push 1
push 2
end

p arr #=> [1, 2]
0378デフォルトの名無しさん2014/08/24(日) 20:49:03.78ID:joOkqJea
>>375-377
解説や参考になる例ありがとうございます
今回はその場だけでできる対処にとどめて
t=Timeとしてt.xxxの呼び出しにしておくことにしました

>>377なるほどたしかにそんな定義でできますね
目から鱗でした
0379デフォルトの名無しさん2014/08/24(日) 23:09:56.22ID:/FddapLM
>>370,371
ありがとうありがとう
0380デフォルトの名無しさん2014/08/25(月) 13:17:00.42ID:QP4jkvqW
馬鹿には無理
0381デフォルトの名無しさん2014/08/26(火) 23:45:43.15ID:fg6dDNl2
俺はevalとかmethod_missingに対する本能的な警戒心を解くことはできなかった。
0382デフォルトの名無しさん2014/08/27(水) 00:09:38.37ID:PsKPXBAp
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww
ニーィップwwwww ニーィップwwwww ニーィップwwwww ニーィップwwwww 
ニ˝ィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィwwwwwwwwwwwwwwwwwwww
0383デフォルトの名無しさん2014/08/28(木) 20:52:39.51ID:bYpjcPNQ
ハッシュ配列で整数値をキーに使っているんですが、これを効率よくできますか?
効率よくする方法があれば知りたいです。
0384デフォルトの名無しさん2014/08/28(木) 21:24:30.26ID:wD312MD5
効率って何? それがどうなれば「よくした」ことになるの?
曲がりなりにもプログラマなら言葉は正確に
0385デフォルトの名無しさん2014/08/29(金) 00:06:45.17ID:8OnVWPNr
まず、「ハッシュ配列」なんてRubyには無いし
0386デフォルトの名無しさん2014/08/29(金) 02:30:57.57ID:YhQ421pd
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
http://www.amazon.co.jp/dp/4797380357/

面白そう。
るびきちさんの本は評判良いのが多いし。
0387デフォルトの名無しさん2014/08/29(金) 06:26:08.48ID:4v1OcElJ
ム板にいる時点でプログラマ扱いする奴って未だに減らないよな
本職が集まるのはマ板のほうだろ、と
こっちは職業関係なく技術全般
0388デフォルトの名無しさん2014/08/29(金) 06:31:20.33ID:zbAMrUw4
>>387
誰も職業プログラマとは言ってないだろう
上流SEだろうが学生だろうが自然科学研究者だろうがそこら辺の事務員だろうが
プログラム書いてる時はプログラマだよ
0389デフォルトの名無しさん2014/08/29(金) 06:43:24.73ID:4v1OcElJ
日本人全員ねとうよ
0390デフォルトの名無しさん2014/08/29(金) 08:41:28.12ID:JuyS8Rqx
またトットリのニップが暴れてるのかw
0391デフォルトの名無しさん2014/08/29(金) 18:00:04.04ID:y0wlLGq8
ニシトットリニップw
0392デフォルトの名無しさん2014/09/01(月) 00:22:32.67ID:peTXbjy9
「日本人」なんて括りを使ってる時点で民族主義者だろう
0393デフォルトの名無しさん2014/09/01(月) 00:40:05.34ID:0L11GGiJ
Rubyではじめるシステムトレード
http://www.amazon.co.jp/dp/B00K388BNC/
やすっぽい感じの本だが、意外と入門書として良書かなと思った。
0394デフォルトの名無しさん2014/09/01(月) 07:53:41.50ID:zQucGkuf
ステマステマステマ〜
ステマをクリると〜
アタマアタマアタマ〜
アタマがクルう〜
0395デフォルトの名無しさん2014/09/01(月) 09:41:40.66ID:8W5kaaXl
1.
クラスのメンバ変数の個々のインスタンスに別々のヘルプを出す
機能を付けたいのですが,どの様にすれば良いでしょうか?
というか,Array クラスに個々のインスタンス向けのヘルプを追加出来ますか?
2.
クラスのメンバ関数にもヘルプを出す機能を付けたいのですが,
どの様にすればよいでしょうか?

class A
 attr_accessor :a, :b
 def initialize
  @a = ArrayDerivedClass.new
  @b = ArrayDerivedClass.new

  @a と @b の配列の値の設定
 end

 def func()
  関数についてのヘルプはどの様に設定できるのか...
 end
end

a = A.new
a.a.set_help( "文字列のヘルプ" )
a.b.set_help( "文字列のヘルプ" )
a.func.set_help( "文字列のヘルプ" )
a.a.show_help
a.b.show_help
a.b.show_help
0396デフォルトの名無しさん2014/09/01(月) 09:44:27.91ID:8W5kaaXl
最後の行は間違いでした.
a.func.show_help

関数については A のインスタンス毎にヘルプを出す意味は
無いかもしれませんので,クラス共通で良いです.
0397デフォルトの名無しさん2014/09/01(月) 11:09:27.77ID:gUv8HVAQ
Rubyにメンバ変数やメンバ関数はありません

これは言葉尻の問題ではなく、基礎的な統合的な学習を行なっていないということを示唆します
つまり、あれこれやるには基礎知識が不足していてまだ早過ぎます
0398デフォルトの名無しさん2014/09/01(月) 11:18:30.35ID:8W5kaaXl
すみません.勉強が足りていないのは認めますが,,,
そこをなんとか...
0399デフォルトの名無しさん2014/09/01(月) 12:38:51.58ID:gUv8HVAQ
うっせーバカ氏ね

ヘルプが欲しいというのは誰がどういうときにどんなヘルプを欲しいのだろうか
ヘルプが欲しいときときにわざわざスクリプトを書き換えてスクリプト本体を実行するのだろうか
それは一体いつどこに表示されるのだろうか

ああもう面倒くさい、マニュアルと呼ぶ

スクリプト作成中にメソッドのマニュアルが欲しいときにスクリプトの一部を書き換えて実環境で実行して
マニュアルテキストをアプリケーション画面に表示させるなんてことは絶対にない
つまり、マニュアルが知りたいときというのはなにか別途標準入力と標準出力に相当するものがある環境なはずだ
具体的にはirbとか、Ruby実行と全然関係ないWebブラウザとかテキストビューアとか、いっそIDEに相当するものとか
そういう外部環境からマニュアル要求を実行させてそういう外部環境に表示させるのが妥当
たとえばRdoc、たとえばYARD

class C
# すごいメソッド
# @return [String] すごい結果を文字列で返す
def mes
'Yay!'
end
end
0400デフォルトの名無しさん2014/09/01(月) 13:07:15.79ID:MGwyWz7V
有難うございます.

説明が足りませんでしたが,
irb にてプログラム作成者のプログラムを利用者に実行してもらい,
利用者がよくわからない作成者のプログラムの内部実装に使われる
各変数の役割りを伝えたいと考えています.

プログラム自身は何をするのかおおよそは分かっていても
他人のプログラムの実装アルゴリズムはよくわからないので,
irb にてプログラムを実行しつつ,プログラムの動作については,
最初に new されて取得した変数について show_help とすれば
そのクラスにてサポートされている関数ならびに動作を示すことができ,

そこで示された各関数についてもそれぞれ show_help とすれば
内部実装のおおよそのアルゴリズムがしめされ,
そこで利用されている変数についても show_help とすれば,
その変数の定義方法と利用方法が示されれば良いと考えています.
そうすれば,irb 上で変数のアクセス方法を理解しながら
irb 上で変数変更等をしつつ内部動作をフォロー出来るのでは無いかと考えています.

RDoc, YARD について調べてみます.
0401デフォルトの名無しさん2014/09/01(月) 18:13:38.30ID:ufbPbDzE
>>400
ソース中にドキュメントをきちんと書いていれば、利用者に irb じゃなくて pry を使って貰えば済む
0402デフォルトの名無しさん2014/09/01(月) 20:19:30.95ID:y5nx9Flo
>>400のお手盛りのなんだかを使わされる人たちがしんそこ可哀想でならない
そんな人間が存在しないことを願いたい
0403デフォルトの名無しさん2014/09/01(月) 23:41:01.86ID:FYOTBzBE
>>401
pry というのがあるのですか〜。
インスタンスごとにヘルプを付ける機能もあるのでしょうか。
詳しく調べてみます。もちろん
自分で自己流のものを作るより皆に認められている
方法を使うほうが良いと思ってます。

>>402
それは認めます。w

メタオブジェクトプログラミングで
クラスのインスタンス毎やメンバ関数(C++用語ですが)に自己説明型の
なんらかのヘルプ機能を付けることぐらい朝飯前なのかと思ってましたが、
その前にそんなものが必要でないということですね。お騒がせしました。
0404デフォルトの名無しさん2014/09/02(火) 03:11:26.77ID:77EG12Xs
>自己説明型の
違う

あなたにはプログラミング一般およびRuby固有の知識も理解も全く欠けていることがよくわかった
あなたのやることは全て間違っている
何もやるな
0405デフォルトの名無しさん2014/09/02(火) 06:19:05.88ID:tKEpbnMp
いやじゃあ Ruby でも docstring したいんじゃああ
ということなんだろうなきっと
0406デフォルトの名無しさん2014/09/02(火) 09:42:48.05ID:d4GudW4x
メンバ変数はないとか怒ってるバカがいてワロタ
プログラマってほんと嫌な人種だな
0407デフォルトの名無しさん2014/09/02(火) 12:50:14.57ID:9bYbyMSc
>>400
インテリセンスはどうでしょうか?
関数、変数のコメントなどを使われている個所でマウスポインタを持っていくだけで
表示します。
構文上の誤りは、その場で下線が付きます。
呼び出し先、呼び出し元を一覧できます。
0408デフォルトの名無しさん2014/09/02(火) 12:55:28.14ID:9bYbyMSc
Rubyには必要ないので、C++でやってはどうでしょうか。
どのようなものでもC++には必要とする人が居ます。
0409デフォルトの名無しさん2014/09/03(水) 00:00:03.11ID:UsrF22+E
「gem」 はどうやってgemパッケージを管理しているのかわかりません
rbenvでrubyバージョンを管理しているのですが、gem installや gem listコマンドはその環境ごとにしっかりgemを管理してくれています
gemコマンドとは独立のはずのrbenvでのrubyバージョン渡り歩きに、「gem」はどうして対応できているのでしょうか
0410デフォルトの名無しさん2014/09/03(水) 03:09:55.11ID:vIx21Y4j
>>409
~/.rbenv以下のディレクトリ構成を見ると分かるがそれぞれの環境ごとにディレクトリが分かれていてその中にgemが導入されていたはず。
0411デフォルトの名無しさん2014/09/03(水) 12:46:07.97ID:UsrF22+E
>>410
rbenvが勝手に作ったディレクトリの場所を「gem」がどうやって知っているのかがわからないのです・・・
0412デフォルトの名無しさん2014/09/03(水) 13:37:07.00ID:HoPhs46K
>>411
あなたがgemを起動している時に使っているgemはrbenvによって生成されたgemコマンドへのラッパです。
ラッパによって各.rbenv/versions/[VERSION]/bin/gem が呼び出され、呼び出されたgemは各versionのroot以下の事しか把握していません。
0413デフォルトの名無しさん2014/09/03(水) 13:50:23.85ID:vIx21Y4j
>>411
~/.rbenv/shimsのなかのファイル(ruby,gem,etc...)を見るとスクリプトになっており、PATHの先頭付近に追加されてるのでここから呼ばれる。
(which gem)
ざっと目を通した感じだと、カレントディレクトリに.rbenv-versionまたは.ruby-versionがあればそこから、なければ~/.rbenv/versionの値が参照され、それをもとにどのディレクトリから呼び出すかを決める。
つまり、環境ごとに呼び出されるgem本体が違う。
0414デフォルトの名無しさん2014/09/03(水) 15:54:57.09ID:UsrF22+E
>>412,413
gemコマンドをあラップしていたのですね。理解しました
ありがとうございます
0415デフォルトの名無しさん2014/09/04(木) 15:57:10.66ID:OIDeHqM9
Ruby(Watir)でieの通知バーを制御する方法はありませんか?
0416デフォルトの名無しさん2014/09/07(日) 05:52:26.74ID:dbFvupeQ
rubyのunitテストって、一番のお薦めのソフトって何ですか?
javaではjunitとjmockit使ってました。
0417デフォルトの名無しさん2014/09/07(日) 07:49:20.91ID:KNwhARCn
rails標準のかrspec
0418デフォルトの名無しさん2014/09/07(日) 12:42:48.08ID:82AeVD3A
>>416
標準でついてくるminitest
使い方は、Junitそのまま。
0419デフォルトの名無しさん2014/09/09(火) 11:23:12.23ID:5uq9Q4bu
>>406
C++にインスタンス変数がないのと同様、Rubyにはメンバ変数はない
メンバ変数はC++の専門用語およびC++に根付いた特殊な概念であって、オブジェクト指向固有の呼び名ではない

特定のオブジェクト指向言語の方言をオブジェクト指向全般で通用するものだと勘違いする現象は時々みられるが、
学習上も定義上も傍から見てても恥ずかしく意味がないので、気をつけるといい

稀に「その言語の用語」で説明しないサイトや書籍が現れるが、所詮その程度で害悪しか撒かないのでとっとと燃やしてしまえ
0420デフォルトの名無しさん2014/09/09(火) 12:34:04.23ID:xwHNZTBE
インスタンス変数とクラス変数
まとめて呼ぶときに、メンバ変数って呼ばれても特に変な感じはしないけどな。
単純にメンバというと、メソッドも含まれるわけで。
0421デフォルトの名無しさん2014/09/09(火) 21:54:00.76ID:QKhHrQUh
php -r "$a=1; echo $a;"
phpみたいにrubyでコマンドラインからコードを引数で渡して実行する方法を教えてください
0422デフォルトの名無しさん2014/09/09(火) 22:25:23.49ID:jlMM873/
>>421
-e
0423デフォルトの名無しさん2014/09/09(火) 22:36:29.41ID:dRW5L+4V
>>422
ありがとうございます。
0424デフォルトの名無しさん2014/09/10(水) 00:04:50.55ID:ysKE+Qj1
WindowsのRuby Installerで最新版Rubyインストールして、それはうまくいった
んだけど、gem install nokogiriとやるとエラーになってうまくいかないのはなぜ?
フェッチは100%まで行くけど、undefined method `[]‘ for nil:NilClassみたいな
エラーがでて止まっちゃう。
もうイライラしまくりんぐ。
0425デフォルトの名無しさん2014/09/10(水) 00:51:41.65ID:3fyaXQX9
>>424
v8かnods.jsが必要とか?
0426デフォルトの名無しさん2014/09/10(水) 01:52:04.32ID:pTBoSvxK
Windowsを諦める。
0427デフォルトの名無しさん2014/09/10(水) 01:57:57.88ID:U67N92ow
だが待って欲しい。Macでもnokogirinのインストールは鬼門だ。
0428デフォルトの名無しさん2014/09/10(水) 02:17:43.27ID:Kk1nHIci
>>424
devkit入ってる?
0429デフォルトの名無しさん2014/09/10(水) 08:59:47.29ID:av5QsdtA
だが待って欲しい。そもそもrubyのインストールは鬼門だ。
0430デフォルトの名無しさん2014/09/10(水) 09:44:20.33ID:hXO3q56q
choco はどうなんだろう
windows でもコマンドライン数行でインスコ説明完了な時代になってるんだろうか
0431デフォルトの名無しさん2014/09/10(水) 09:52:33.54ID:4LqmTc+v
なぜお金を払ってまでwindowsなどという苦行を続けるのか
0432デフォルトの名無しさん2014/09/10(水) 17:04:55.22ID:EEeqkt2a
サイトつくったとこないけどなんとなくraisについての本読んでいます
ルーティング、もろもろの再利用、アクティブレコードあたりは便利だと思ったのですが、
特にビューヘルパーとかhtmlを別の名前にしましたみたいなものが多くありません?それメソッド使わずに普通に書いたほうがみやすいしわかりやすいのではというものが多いと思いました.経験者からするとどうなのでしょうか
0433デフォルトの名無しさん2014/09/10(水) 17:06:51.83ID:/KH51cxp
そうだよ
0434デフォルトの名無しさん2014/09/10(水) 20:33:38.43ID:lzotv2Nx
そんな回りくどく書くより俺が直接書いたほうが早いし速いしわかりやすい
いやもうまったくその通り
そんな回りくどく書くより俺が直接書いたほうが(俺にとって)早いし(俺にとって)速いし(俺にとって)わかりやすい
いやもうまったくその通り
0435デフォルトの名無しさん2014/09/10(水) 21:29:35.68ID:MIzNsnl2
>>432
Railsに関する質問や相談なら
WebProg板に専用スレがあるから、
そちらへ逝きなされ
0436デフォルトの名無しさん2014/09/10(水) 21:34:17.56ID:x7jt4/gl
>>432
単純なTagHelperについてはそのとおりかもしれない
しかしFormBuilderは他にも色々やってくれる(nameやvalueを適切に入れてくれる)ので
生のHTMLを書くよりは書きやすいと思う
0437デフォルトの名無しさん2014/09/11(木) 00:19:27.00ID:lctgDj8v
最近gemって一発インストールできない不完全なの増えたよな
こういうのって地味に大事というか、初心者離れを加速させちゃうんじゃないかと
いう気がする。
メンテする奴もやる気がなくなってきている、コミュニティとして煮詰まってきちゃったんだと思うけど。

もっとしっかりやれ。まあ俺は何もしないけど。
0438デフォルトの名無しさん2014/09/11(木) 00:46:47.82ID:SzkLW3l3
返信どもです
0439デフォルトの名無しさん2014/09/11(木) 07:26:43.55ID:IFETaxJc
>>437
たとえば?
0440デフォルトの名無しさん2014/09/11(木) 09:13:29.79ID:1Qd2Os77
こういう口だけ偉そうに出して「俺は何もしない」とドヤ顔するクズが一番いらねえな
0441デフォルトの名無しさん2014/09/11(木) 10:16:40.23ID:qpyAR3PI
>>437=>>440
0442デフォルトの名無しさん2014/09/11(木) 14:52:29.61ID:xQfGfu/o
Rubyコミュニティはドヤ顔するクズが多すぎるよな。
はやくPythonやJavaScript系に乗り換えた方がいい。
0443デフォルトの名無しさん2014/09/11(木) 15:05:01.07ID:1Qd2Os77
Python側も「日本製のプログラム言語がいけすかねえ」なんて理由でやってくる連中はお断りだろ
ドヤ顔するクズと同じぐらい有害
0444デフォルトの名無しさん2014/09/11(木) 19:50:23.40ID:WdQgW6yP
>>442
>はやくPythonやJavaScript系に乗り換えた方がいい。

ついつい本音が出てしまったねw

アンチが乱入して暴れるのはRuby関連スレの恒例だな
まあ、それだけ他のスクリプト言語プログラマからすれば、
Ruby が気になって気になって夜も眠れないんだろうなぁ(棒
0445デフォルトの名無しさん2014/09/11(木) 22:42:45.70ID:/K7dGRs5
Node.jsなんて、既にオワコン期に入ってるじゃん。
Rubyもだけど。
0446デフォルトの名無しさん2014/09/12(金) 00:34:42.81ID:OuSEN9ev
もうみんな疲れちゃったのかな
0447デフォルトの名無しさん2014/09/12(金) 00:40:48.66ID:/jOX3V4W
railsで大きく知名度を上げたんで、ruby2になったここで、言語やライブラリに時間をかけるのではなくて、rubyのキラーアプリを一つ出すといいんじゃないですかね
ruby2の言語仕様や改良はひとまず休憩して、周辺のgemをよりモダンにしたりhtml guiを洗練させたりとか、dbつけてruby platformと密着にさせるとか
0448デフォルトの名無しさん2014/09/12(金) 08:19:58.62ID:vSDiSYyP
node.jsはみんな秋田漢字だ
0449デフォルトの名無しさん2014/09/12(金) 09:11:38.07ID:XdsfP9FI
確たる根拠もないのにあれはオワコンこれはオワコンって書き散らすレスは無視で
0450デフォルトの名無しさん2014/09/12(金) 11:07:14.97ID:RiRNscWF
Ruby やrails やってる人はみんなそれなりに疲れる。

マジで。 心折れそうな時とかあるし。 頑張ってるけど。
0451デフォルトの名無しさん2014/09/12(金) 11:08:21.68ID:RiRNscWF
> Ruby やrails やってる人はみんなそれなりに疲れる

すまん、誤字

Ruby やrails やってる人はみんなそれなりに疲れてる。
0452デフォルトの名無しさん2014/09/12(金) 12:06:47.25ID:97za8FFX
rubyで何か勉強になるもの作りたいんだけどいい題材ない?
0453デフォルトの名無しさん2014/09/12(金) 18:00:08.39ID:ZWZJ98Tr
http://judge.u-aizu.ac.jp/onlinejudge/
0454デフォルトの名無しさん2014/09/12(金) 18:00:33.59ID:ZWZJ98Tr
http://tenka1-2014-final-open.contest.atcoder.jp/
0455デフォルトの名無しさん2014/09/13(土) 11:44:06.43ID:Xnt2R8P3
イテレータ内で、レシーバに要素を追加(や削除など変更)した場合の動作って決まってるんでしょうか?

下記のように要素追加した場合は、途中で追加した要素まで含めてイテレートしてくれました
a=[1,2,3,4]
c=0
a.each{|i|
print i
a<<i if(c+=1)%2==0
}
↓
1234244
0456デフォルトの名無しさん2014/09/13(土) 11:50:18.03ID:EgQD9V/2
それでいいよ
0457デフォルトの名無しさん2014/09/13(土) 12:37:57.18ID:O7s7l3Vq
エロサイトスクレイピングしろ
0458デフォルトの名無しさん2014/09/13(土) 23:31:21.22ID:NaPTFTNe
>>452
自分から作りたいものがなんもないのならRubyのことは忘れて街に出よう3連休だ
「銃を手に入れたんだけどなんでもいいので撃ってみたいですどうすればいいですか」的な目的見失った感じのは勘弁
0459デフォルトの名無しさん2014/09/14(日) 03:17:49.08ID:HYioYToX
>>458
作りたいものだの目標だの言う人間が多すぎると思うんだけど。
プログラミング言語に興味をもって何か勉強してみたいと思ったからとりあえず色々と取り組んでみて、その中でやりたいことを見つける方針じゃだめなの?
0460デフォルトの名無しさん2014/09/14(日) 04:12:36.10ID:LAThkisw
作りたいものが目的じゃなくて
プログラミング自体が目的なら
それでいいんじゃない?

獣の喩えは適切じゃないね
0461デフォルトの名無しさん2014/09/14(日) 06:05:30.20ID:VdLJmbOR
獣の喩えってなに?
0462デフォルトの名無しさん2014/09/14(日) 08:28:07.47ID:VxA609sk
作りたいものが目的でやれるのなんてWebくらいだね
他のは手段を目的に出来ない限りとてもじゃないけど労力に見合わない
0463デフォルトの名無しさん2014/09/14(日) 08:37:41.07ID:3TnczO87
何作ればいいかわかんねという人のために課題をいくつかでっちあげてみた
ほぼ易しいものから難しいもの順

* 摂氏と華氏の相互変換
* 指定したディレクトリの中にあるファイル名を列挙
* 日米英仏独の現在時刻を表示
* FLAC を MP3 に変換(もちろん flac や lame など使用可)
* iTunes のストアで売れてるらしいアプリのタイトルを列挙
https://itunes.apple.com/jp/rss/topgrossingapplications/limit=10/xml
* 画像ファイル(JPEG/GIF/PNG のいずれか)の本当の拡張子を判別
* おかいものリスト(追加、編集、削除、個別表示、一覧表示、ソート等)
* エロサイトスクレイピング
0464デフォルトの名無しさん2014/09/14(日) 09:22:02.58ID:PAZT5dFk
1)縦横のそれぞれの列に1〜6の数字が1つずつ入ります(ここは数独と同じ)
2)マス目にあらかじめ入っている(数字)は太線で囲まれたブロックに入る数字の合計を表しています
3)太線で囲まれたブロックの中には同じ数字が入ることもあります

┏━━┳━━┳━━┳━━┯━━┳━━┓
┃(3) ┃(4) ┃(13)┃(5) │  ┃(8) ┃
┠──┣━━┫──┣━━┳━━┫──┨
┃  ┃(7) ┃  ┃(1) ┃(7) ┃  ┃
┣━━┫──┃──┣━━┫──┣━━┫
┃(11)┃  ┃  ┃(7) ┃  ┃(6) ┃
┠──┣━━┻━━┫──┣━━┻━━┫
┃  ┃(6) │  ┃  ┃(6) │  ┃
┣━━┻━━┳━━┻━━╋━━┳━━┫
┃(9) │  ┃(6) │  ┃(4) ┃(3) ┃
┣━━┳━━┻━━┳━━┻━━┫──┨
┃(4) ┃(5) │  ┃(11)│  ┃  ┃
┗━━┻━━┷━━┻━━┷━━┻━━┛

これを解くプログラムを ruby でおながいします
(たぶんずれるので等幅フォントのエディタにコピペで見てください)
0465デフォルトの名無しさん2014/09/14(日) 10:00:09.59ID:HYioYToX
>>463
エロサイトスクレイピングをしれっと入れるなよ!
0466デフォルトの名無しさん2014/09/14(日) 11:50:34.01ID:KPgHSz1I
初心者の気持ちを忘れてしまったオッサンのオナニーにつきあう必要はないよ
外から渡された目的のよくわからない『課題』をやることほど、摩耗してしまうものはない
本当に興味を持てる回数は最初の1回程度なんだから、そんなものに使い潰してしまうのは大損だ

やりたいものだけやりなさい
やりたいものがないなら一旦離れなさい
パソコンを使っていれば、プログラミングできそうな機会というのは必ずやってきます
0467デフォルトの名無しさん2014/09/14(日) 11:56:11.45ID:E5aokUpH
コンサルの勉強して問題発見手法を身に着ければいいよ。
0468デフォルトの名無しさん2014/09/14(日) 14:27:29.68ID:eKNmfx5B
自分がPCでやることを補助する何かを作ると
自分で使うことになって改造とかもやる気が出ると思う
たとえばプログラミングするエディタを拡張する何かを作ろうとしてみたり
ネットサーフィンに便利な自分用サイトを作ってみたり
エロサイトスクレイピングしてみたり

パズルを解くようにプログラミングするお題が欲しいだけなら会津オンラインジャッジだな

(rubyじゃないけどダウンロード補助ツールを数年前に自分で書いて今も使ってるわ)Oo。.(´-`
0469デフォルトの名無しさん2014/09/14(日) 15:53:16.12ID:HYioYToX
>>468
たとえばエディタの拡張機能を作りたいと思っても、どこから始めていいかわからない場合はどうすればいいかな?
とりあえず調べるなどして他を参考にしつつって感じでいいのかな?
一応文法とかは大丈夫だと思うんだけど。。
0470デフォルトの名無しさん2014/09/14(日) 16:12:54.97ID:VxA609sk
>>469
そりゃ他の人のを真似するんだよ
でもそういう特定のアプリに強く依存したものはバッドノウハウが身に付くだけだから初心者の勉強には相応しくない
0471デフォルトの名無しさん2014/09/14(日) 16:16:57.97ID:DRyo//L5
https://www.youtube.com/watch?v=-Lfwp2B04GU
0472デフォルトの名無しさん2014/09/14(日) 16:21:10.62ID:eKNmfx5B
ごめん、例えばといいつつエディタはあんまりいい例じゃなかったかもしれんわ
エディタの拡張方法を調べる必要があるしRubyが入り込む余地が少ないかも

具体的な例としては、ソースを解析する何かを作るとして、
(まずRuby関係ないところなのでめんどいが)
大抵のエディタは拡張機能で外部プログラムを呼べるようになってるから
そこからRubyに標準入力に編集中の内容を渡すようにする

それができたら初めてRubyで変数抽出とかコールツリー作るとかやりたいことをやる
解析までしなくても、全行をuniq.sortして出力するスクリプトとか作っておくとたまに使ってるわ
アウトプットは標準出力をエディタに表示するくらいしかないかも
0473デフォルトの名無しさん2014/09/14(日) 18:57:34.47ID:VLz5e6gt
>>455
遅レスになるけど、
「イテレータで列挙している間にイテレータを破壊的に操作した時の振る舞い」
の仕様は定義されておらず、動作は不定になる
これは Ruby 固有の仕様ではなく、たとえば Java のイテレータも同じ
Ruby の場合は、イテレータで定義されている each メソッドの実装によって、
破壊的操作(たとえば要素の追加や削除)を含めて列挙したり列挙しなかったりする

だから列挙中での破壊的操作はコードの可読性を大きく損ねるから、避けるべき
0474デフォルトの名無しさん2014/09/14(日) 21:25:52.32ID:HYioYToX
>>470
>>472
なるほど…言語による向き/不向きの問題でもあるのかな。

自分でやってみたいと考えたのはTwitter関係だとかgmailをいじるだとか、そこらへんだけどこっちもやはり初心者には厳しいか。
0475デフォルトの名無しさん2014/09/14(日) 21:36:25.69ID:lfdT4fPA
rubyは慣れれば破壊的メソッドや副作用を使わなくなり関数言語的になっていく。
個人的にはイテレーション中はfreezeする仕様でも良かったと思う。
0476デフォルトの名無しさん2014/09/14(日) 21:38:11.09ID:VxA609sk
Rubyはクラスが基本的にミュータブル前提だから関数型には向いてない
0477デフォルトの名無しさん2014/09/15(月) 23:43:37.52ID:qXx696JR
rubyと正規表現に関する質問です

p array = "1日2時間3分4秒".split(/(\d+?[日|時間|分|秒])/)
を行うと、
["", "1日", "", "2時", "間", "3分", "", "4秒"]
になり、1.""が作られてしまう、2.「時間」が分解されてしまうため悩んでいます

["1日", "2時間", "3分", "4秒"]
とするにはどう修正すればよいでしょうか?

おねがいします
0478デフォルトの名無しさん2014/09/16(火) 00:09:09.95ID:rwPnUpsn
>>477
[日|時間|分|秒]は、日時間分秒|のどれかの文字ってことでしょ。グルーピングは丸括弧で。
ただし、splitはそれも結果に入ってくるんだっけ。数値以外の繰り返しじゃダメなの。
0479デフォルトの名無しさん2014/09/16(火) 00:20:02.61ID:+Ut5bl5+
>>477
$ irb
irb(main):001:0> "1日2時間3分4秒" =~ /(&yen;d+)日(&yen;d+)時間(&yen;d+)分(&yen;d+)秒/
=> 0
irb(main):002:0> [$1 + '日', $2 + '時間', $3 + '分', $4 + '秒']
=> ["1日", "2時間", "3分", "4秒"]
irb(main):003:0>
0480デフォルトの名無しさん2014/09/16(火) 01:16:09.80ID:ZVUC/mC5
>>477です
>>478,479さん、教えていただきありがとうございました

splitは決められた記号とかでStringを分割するためのメソッドですよね
こういうのはそのまま正規表現で書かなきゃいけないのに、splitが万能な思い込みがあって勘違いをしてました

アドバイスやGoogle先生を参考に書きなおして、なんとか上手く行きました

> p "1日2時間3分4秒".scan(/((\d+?)(日|時間|分|秒))/).map { |s| s[0] }
["1日", "2時間", "3分", "4秒"]

教えて下さりありがとうございました
0481デフォルトの名無しさん2014/09/16(火) 01:44:31.07ID:h14rBBnh
>>479
OK林檎厨は氏ね
\と&yen;の区別のつかないお可哀想な林檎厨は氏ね

端末が悪いんだけどさ
0482デフォルトの名無しさん2014/09/16(火) 12:28:01.31ID:hd4XZYur
変数名を変数を使って定義することはできませんか?

foo = "bar"
foo = "hoge"

のようにするとfooにbarが代入された後それをhogeで上書きすることになりますが、fooにbarを代入した後fooの中身のbarをhogeの変数名にして、
bar = "hoge"
という変数が作りたいです。
0483デフォルトの名無しさん2014/09/16(火) 12:35:51.91ID:4hbcghNr
>>477
p array1 = "1日2時間3分4秒".split(/(?=\d+(?:日|時間|分|秒))/) #数字+単位の直前で分割
p array2 = "1日2時間3分4秒".split(/(?<=日|時間|分|秒)/) #単位の直後で分割
p array3 = "1日2時間3分4秒".scan(/\d+(?:日|時間|分|秒)/) #数字+単位を抽出

#「正規表現リテラル =~ 文字列」の場合だけ作動する名前つきグルーピングをローカル変数に設定する微妙な機能
/(?<day>\d+日)(?<hour>\d+時間)(?<min>\d+分)(?<sec>\d+秒)/ =~ "1日2時間3分4秒"
p [day,hour,min,sec]
p last_match
0484デフォルトの名無しさん2014/09/16(火) 12:42:50.87ID:4hbcghNr
>>476
向くも向かないも
関数型っぽい書き方をするってだけの話なんで
簡潔に記述できるのならそれでいいじゃない

本物の関数型と違って
Cのメソッドだけですむなら速くなったり
余計にオブジェクト生成したりして逆に遅くなったりするかもしれないけど
0485デフォルトの名無しさん2014/09/16(火) 21:54:00.55ID:rOfVI/V/
↓のYAMLファイルを
---
[d1, d2]
---
- x1
- x2
...
names : [test, test2]
emails: {main: [email protected], sub: [email protected]}
↓のスクリプトでパース使用としたところ
require 'yaml'
File.open('sample.yml') do |io|
YAML.load_documents(io) do |d|
p d
end
end

↓のエラーが出ました。
/Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:373:in `parse': (<unknown>): did not find expected <document start> at line 1 column 1 (Psych::SyntaxError)
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:373:in `parse_stream'
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:456:in `load_stream'
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/deprecated.rb:29:in `load_documents'
from parse.rb:4:in `block in <main>'
from parse.rb:3:in `open'
from parse.rb:3:in `<main>'
「...」をコメントアウトしたところ、きちんとパースできたのですがなぜ、「...」が入るとエラーが発生するか全くわかりません。
どなたかご存知の方がいらっしゃればぜひ教えていただきたく。。
環境ですが、OSはOS X 10.9、rubyのバージョンは2.1.2p95です。
よろしくお願いします。
0486デフォルトの名無しさん2014/09/16(火) 22:32:15.86ID:UfZMMld+
... のあとに --- がないから驚かれてるんじゃない?
0487デフォルトの名無しさん2014/09/16(火) 22:40:56.77ID:0yIjZIb5
>>484
>>475は副作用を使わないのが関数型だと言っているから>>476の突っ込みは妥当
コレクション操作にラムダ使って宣言的に書いたりするのは
今時の言語ではRubyに限らず全く珍しくないし
0488デフォルトの名無しさん2014/09/16(火) 22:55:01.92ID:qqfxAbb8
>>485
...以降は無視される と思ってるのかもしれんがたぶん違う
あくまで1ドキュメント読み込むYAML.loadの場合はドキュメントの終了までしか読み込まないから無視されてるように見えるだけ

load_streamはストリーム全体(複数ドキュメント)を読み込む
...はそのドキュメントが終了したことを示す記号
なので直後にはドキュメント開始の記述がないとパースエラーになる
ドキュメントの開始は(%YAMLとかのディレクティブの後に)---で、その間に許されてる記述は空行か...だけっぽいね
0489デフォルトの名無しさん2014/09/16(火) 23:08:20.53ID:+Ut5bl5+
>>487
>>>476の突っ込みは妥当

もしも「Lisp は(関数型言語ではなく)手続き型言語である」という
仮説が正しければ、妥当だね

実際、世の中には「純粋関数型言語にあらずんば関数型言語にあらず」という、
いわゆる「ハスケラ」という人達がいて、彼らはそう主張している
おそらく >>476 や >>487 はハスケラ症の患者さんなんだと思われる

  >366 名前: デフォルトの名無しさん Mail: sage 投稿日: 2011/10/26(水) 12:25:43.06
  >>>365
  >それはハスケラ特有の症例で、心の病の一つ
  >
  >ハスケルという言語を使っていると、世の中のあらゆる事柄すべてが
  >ハスケルを中心に廻っているように見えるらしい
  >従って、あらゆる関数型言語は静的実行かつ静的型付けでなければならないし、
  >遅延評価が常識であり、一切の副作用は認めようとしない
  >
  >ハスケラにとって関数型言語とはハスケルのことであり、
  >その窓から見える世界が彼らのすべて

あとツッコミを入れると、
> コレクション操作にラムダ使って宣言的に書いたりするのは
> 今時の言語ではRubyに限らず全く珍しくないし

一般にRuby コミュニティで「ラムダ」とは、組み込み関数の Kernel#lambda { .... }、いわゆる関数オブジェクトを指す
そしてコレクション操作だと「ブロックを使って宣言的に書く」というふうに表現する
ブロックはラムダ式の構文糖という些細な工夫でしかないけれど、
ブロックがあるおかげで関数型プログラミングのコードを(ブロック構文が無い言語と比較すると)簡潔に書ける
         (逆にブロックを使わず明示的にラムダ lambda { ... } が必要になるケースはほとんどない)
これもまた、Ruby が(他のスクリプト言語と比較して)関数型プログラミングに適しているという理由の一つになる
0490デフォルトの名無しさん2014/09/16(火) 23:52:05.60ID:rOfVI/V/
>>486
... の後に --- を入れたところ、エラーは発生しませんでした!

>>488
YAMLファイルを下記のようにして、スクリプトをYAML.load_fileで処理を行ったところ
... の部分まで評価されました!
- d1
- d2
- d3
...
- d4

お二人共ありがとうございました!
すごく勉強になりました!
0491デフォルトの名無しさん2014/09/17(水) 02:00:04.30ID:B5vXdL5P
>>482
またお前か。Hash を使えば?
foo = Hash.new
foo["bar"] = "hoge"
または、foo = {"bar" => "hoge"}

barがSymbol なら、foo = {bar: "hoge"}
bar = :hoge

Symbolとは、識別子に使うラベルをオブジェクトにしたもの
0492デフォルトの名無しさん2014/09/17(水) 03:43:25.15ID:OF7t35vf
。oO(barを作った後どうやって使うんだろう)
0493デフォルトの名無しさん2014/09/17(水) 17:15:09.22ID:or6PO8CM
中国製pcにマルウェア、米国レノボ使用禁止なお日本では販売
http://awabi.2ch.net/test/read.cgi/news4plusd/1410895382/
0494デフォルトの名無しさん2014/09/18(木) 00:44:22.54ID:mtGMypIE
>>477です
>>483
> p array3 = "1日2時間3分4秒".scan(/\d+(?:日|時間|分|秒)/) #数字+単位を抽出
求めていたのはまさにこれです!
ありがとうございます!

「?:」の書き方はググってもなかなか理解できませんでしたが、すごく強力ですね
他の書き方も含め、たいへん勉強になりました
アドバイスしていただきありがとうございました
0495デフォルトの名無しさん2014/09/18(木) 21:27:04.44ID:im6XLLWp
>>491
>> またお前か。
?多分違う人だと思います。

それはさておき、回答有難うございます。
ハッシュでやってみます。
0496デフォルトの名無しさん2014/09/19(金) 01:35:30.84ID:Y6OdBODf
え? >>941でいいの?
いったい何がやりたかったのか...?
0497デフォルトの名無しさん2014/09/19(金) 02:31:51.15ID:HyAusHv8
結局大規模はJava一択という結論か
0498デフォルトの名無しさん2014/09/19(金) 09:11:37.59ID:/ZlJUhOE
(a+b)*(c+d)-e
逆ポーランド記法に変換したい
0499デフォルトの名無しさん2014/09/19(金) 09:19:12.31ID:OJCIiOtw
a b + c d + * e -
0500デフォルトの名無しさん2014/09/19(金) 10:50:32.58ID:SNqHawTK
>>496
ヒント:自演
0501デフォルトの名無しさん2014/09/19(金) 12:22:00.17ID:IEBJm2pX
じぶんも初心者だけど、
>Symbolとは、識別子に使うラベルをオブジェクトにしたもの
の説明は、合っているのか?
0502デフォルトの名無しさん2014/09/19(金) 12:32:39.90ID:9nFtEcDJ
foo[:bar] = "hoge"
foo = {:bar => "hoge"}
でハマる
0503デフォルトの名無しさん2014/09/19(金) 20:32:12.22ID:PiEEbsAh
>>498
本格的にやるならRacc使うのがいいかも
0504デフォルトの名無しさん2014/09/19(金) 23:55:28.02ID:T5wmPk5I
>>498
http://ideone.com/CWP5Vg
0505デフォルトの名無しさん2014/09/20(土) 08:01:45.32ID:2AptYtlc
>>504
ありがとうございます!
0506デフォルトの名無しさん2014/09/20(土) 08:12:13.25ID:QLH+ZR2V
逆ポーランド記法って

5+4-3 この式なら
543-+ なのか。
54+3- ずっとこうだと思ってた・・・///
0507デフォルトの名無しさん2014/09/20(土) 08:44:51.69ID:p579UTgt
54+3-
が正しい
0508デフォルトの名無しさん2014/09/20(土) 09:39:56.12ID:+CrzR0fG
ほんとだ
ちゃんと優先度つけたうえで直してみた
http://ideone.com/u8Ebfn
0509デフォルトの名無しさん2014/09/20(土) 10:37:56.97ID:F4RvXBbT
他の言語ではいろんな箇所で使用する文字列の場合に

String FOO = "foo";

のように定数を作ってまとめておく、とかやってたんですが、Ruby の場合は Symbol 使ってればいちいち定数を定義したりはしない、という認識で合ってますか?
それとも

FOO = :foo

みたいな感じで Symbol も複数箇所で使うなら定数化しておいたほうが良かったりしますか?
0510デフォルトの名無しさん2014/09/20(土) 10:52:54.90ID:+CrzR0fG
入出力用の文字列だったら定数で定義しておいたほうがいい
他言語でも定義しておく理由って変更があったとき修正箇所を少なくするためでしょ

シンボルはC言語のenumや#defineで作ったラベル名みたいな役割
その場合はその値に意味はないので定義しておく必要はない

と思ってるけどどうなんでしょ
0511デフォルトの名無しさん2014/09/20(土) 11:08:48.42ID:yzKVnral
同じ symbol を複数個所で定義しているとき
値が同じことは保証されてる?
0512デフォルトの名無しさん2014/09/20(土) 11:15:01.34ID:w39e/cxT
>>511
されてる
0513デフォルトの名無しさん2014/09/20(土) 11:19:07.92ID:Fiyj9EA+
なんでこれ毎回言わなければならないんだろうとちょっと思う
参考書や解説で言わないんだろうか
そんな参考書や解説サイトは捨ててしまえ窓開けてポイだ

>>509
Rubyは基本すべてオブジェクトであり、内部的オブジェクト置き場に厳然として「置か」れていて「動か」ない
で、すべての変数はオブジェクトにぺたんと貼られたただのラベルだ
もし「変数は箱のようなもので…」とか言ってるRubyの解説があったらいますぐ燃やせ
で、オブジェクト自体は移動されず、変数名変更は単にラベルの追加なので、
var1 = "foo"
CONST = var1
とやっても文字列オブジェクトが2つになったりはしない。"var"という固定のオブジェクトにラベルが2枚貼られるだけ
irb> var1 = "foo"
irb> p var1.object_id
-596605568
irb> CONST = var1
irb> p CONST.object_id
-596605568 # 一緒
irb> p CONST
"foo"
つまり、いちどどっかでオブジェクトを作った場合、それに参照可能なスコープの変数がついている限り、
それをどこから呼んでも消えたりはしない
つまり、スコープに気をつけている限り、定数で「固定化」させておく必要がない
じゃあなんで定数があるのかというとクラス内外からCLASS::CONSTのように大文字で呼べるとカッコイイからだ!(わりとマジ)

シンボルはちょっと特殊で、呼び名とオブジェクトIDがひとまとめになってる
ハッシュ入り配列とか、同じ見かけでオブジェクトIDの違う文字列を何百個も生成するのは無駄っぽい気がして蕁麻疹が出るような人が使う

[{"title" => "BOOK1", "price" => 1200}, {"title" => "BOOK2", "price" => 800}, ...]
だと "title" という文字列オブジェクトが配列要素の数だけ生成されてしまうので
[{:title => "BOOK1", :price => 1200}, {:title => "BOOK2", :price => 800}, ...]
とキーをシンボルにすると「タイトル」に関してはオブジェクトが1個で済む、みたいな話
0514デフォルトの名無しさん2014/09/20(土) 11:49:12.14ID:GbFNl7YA
後者でもいいじゃなくて後者じゃなきゃならない
0515デフォルトの名無しさん2014/09/20(土) 22:47:50.29ID:lCrKyNEm
>>482
foo='bar'
じゃなくて
foo='@bar'
なら
eval("#{foo}='hoge'")
p @bar #=> "hoge"
0516デフォルトの名無しさん2014/09/20(土) 23:31:15.19ID:Om5aQ121
C, Java, Perl が解ってる人向けの ruby 学習サイト、どこがいい?
0517デフォルトの名無しさん2014/09/20(土) 23:33:09.44ID:U6pDraTi
>>513
>[{"title" => "BOOK1", "price" => 1200},
>{"title" => "BOOK2", "price" => 800}, ...]
>だと "title" という文字列オブジェクトが、
>配列要素の数だけ生成されてしまうので

こんな非効率なことをするかな?
もし本当なら、シンボルを使わないと大変なことになる!
0518デフォルトの名無しさん2014/09/20(土) 23:46:46.17ID:U6pDraTi
>>516
たのしいRuby、第4版、2013

この本を買って、20時間で十分できるようになる
0519デフォルトの名無しさん2014/09/21(日) 00:11:57.30ID:GWO0XyTs
>>518
ありがと。
0520デフォルトの名無しさん2014/09/21(日) 00:27:09.27ID:WGiJkvuD
>>517
実用上は問題はない

こんな微小な文字列の保持数が問題になるような規模のデータをデータベースじゃなくコレクションで表現しようとするのなら、
文字列以外の部分、検索とか列挙とかそのへんが先に破綻する

まさかと思うがリテラルで書くわけではない
0521デフォルトの名無しさん2014/09/21(日) 06:37:38.36ID:WGiJkvuD
む
0522デフォルトの名無しさん2014/09/21(日) 19:57:12.73ID:htYINMDv
どんなに不正確で評判悪くてもGoogleでは「Ruby 入門」あたりで上位に来るからな
すくなくとも最初だけはリアル書籍が無難だと思う
0523デフォルトの名無しさん2014/09/21(日) 20:42:01.34ID:0KJk1NSh
EgoProwlってアプリ?が使ってみたくて、ド初心者ながら調べてやっと実行してみたんですが、

egoprowl:61:in `initialize': undefined method `key?' for ["Application", "Twitter"]:Array (NoMethodError)
from egoprowl:685:in `new'
from egoprowl:685:in `block in <main>'
from egoprowl:684:in `each'
from egoprowl:684:in `<main>'

というエラーが出て使えません…
yml以外は弄らずに実行したんですが、Twitterの仕様変更で使えなくなったのか、
何か弄らないと使えないものなのか、分かりません
環境は Rumix(1.9.3) Windowsです。。
0524デフォルトの名無しさん2014/09/21(日) 22:11:57.50ID:AJStoUCj
RubyでCGIを書いてHTMLの<img>タグから呼び出しているのですが、LoadErrorが発生してしまいます。
問題のコードは次のとおりです。

require 'rubygems'
require 'RMagick' #←この行が問題

print "Content-type: image/gif\n\n"
open("hoge.gif", "rb"){|hoge| print(hoge.read) }

サーバにsshで入ってコマンドラインで実行する分には特に問題無く動くのですが、HTTP経由で呼び出すと動きません。
どういった原因が考えられるでしょうか。お願いします。
0525デフォルトの名無しさん2014/09/21(日) 22:27:22.07ID:POp695WM
>>524
シェルで環境変数消してやってみたら。
0526デフォルトの名無しさん2014/09/21(日) 22:50:30.28ID:AJStoUCj
>>525
ありがとうございます。
環境変数GEM_HOMEが正しく設定されていなかったようです。
0527デフォルトの名無しさん2014/09/21(日) 22:53:37.94ID:9m2mBLrL
>>524
以下のCGIプログラムを実行してみる

print "Content-type: text/plain&yen;n&yen;n"
p $LOAD_PATH
0528デフォルトの名無しさん2014/09/21(日) 22:54:17.64ID:q4aLc9F7
>>523
いじった YAML がたぶんおかしい
例えばハッシュを期待してるところに配列指定してるとか
require 'yaml'
p YAML.load_file(configfile)
とかして調べてみて
05295272014/09/21(日) 23:14:28.45ID:9m2mBLrL
リロードするんだった...orz
0530デフォルトの名無しさん2014/09/22(月) 15:16:56.38ID:KNrUDz/6
ちまちまテキストエディタでプログラミングの練習してるんですが
どういうタイミングで統合開発環境を導入するのが適切でしょうか
0531デフォルトの名無しさん2014/09/22(月) 15:19:06.99ID:xorcTHrm
なければなしで問題ない
0532デフォルトの名無しさん2014/09/22(月) 15:57:56.64ID:1Qvd4ihP
IDE使ってたけど、結局テキストエディタに戻ってるわ。
0533デフォルトの名無しさん2014/09/23(火) 03:07:12.39ID:BCdHmEgh
>>528
ありがとうございます!
何故か一文字消えてました…
0534デフォルトの名無しさん2014/09/23(火) 17:51:19.68ID:miRT+bCi
pryを試してみようと思って
Ruby-2.1.2-p95 Microsoft Installer Package(2014-5-08 revision 45877改)入れて
gem install pry でインストールしたんだけど起動しようとすると
win32consoleのバージョンがおかしいとかエラーが出て起動できない
0535デフォルトの名無しさん2014/09/23(火) 17:53:51.18ID:R40YBrw8
そうですか
書き込みありがとうございます
次の方どうぞ
0536デフォルトの名無しさん2014/09/24(水) 02:14:09.44ID:Z6uf6PR9
会社のPCはうまくいったのにおかしいなと思いつつ
Ruby Installerも入れて試してみたらこっちはpryが動いた
0537デフォルトの名無しさん2014/09/24(水) 11:11:32.11ID:JaI0d9II
クラスのインスタンス変数の クラスをどうしても制限、指定したいとき (true or falseとか)、代入メソッド書き換える以外に何か方法ある?
そもそもそんなことしない?
0538デフォルトの名無しさん2014/09/24(水) 11:13:26.84ID:y/ivUGFr
インスタンス変数の型束縛
0539デフォルトの名無しさん2014/09/24(水) 19:32:08.36ID:D01/L6XM
>>537
マニュアルにでっかい字で書いとく

めちゃくちゃ一般的には、trueオブジェクトやfalseオブジェクトとの内部比較分岐はしてはいけない
× if @var == true then ...
○ if @var then ...
nil のときと false のときで動作変えたいとか nil のときと [] のときで動作変えたいとかそんなことは「してはいけない」し
指定されたオブジェクト以外をユーザーが代入するかもしれないとかはいちいち考えてはいけない
例外が出て落ちれば充分
例外が出ずに終了すれば及第点
変なオブジェクトで変な動作になっても自己責任

実際問題として、モックのようなオブジェクトを使いたい場合がよくある
「たかが」変数や引数を綿密なクラスチェックでがんじがらめに縛られるとたいへん不便
自分の敷いたレール以外を許さないのならJavaでやれやカスが、とか文句言いたくなる
0540デフォルトの名無しさん2014/09/24(水) 21:42:52.25ID:zzs5VNXT
やっぱそんなことしないんですねー
分かりました
0541デフォルトの名無しさん2014/09/26(金) 08:10:51.24ID:IheVza1r
MUST NOTというよりはSHOULDレベルでは
0542デフォルトの名無しさん2014/09/27(土) 02:38:41.07ID:k4QoHySE
やれってことか
0543デフォルトの名無しさん2014/09/27(土) 11:28:13.77ID:wa8RbSiE
>>539
>自分の敷いたレール以外を許さないのならJavaでやれやカスが、とか文句言いたくなる
これはおかしい。rubyでは型よりも命名規則でレールを敷くことが多いが
どちらが良いかはどのようなフレームワークを作ろうとしているかによる。
0544デフォルトの名無しさん2014/09/29(月) 12:39:09.55ID:1eoAu9jp
rubyのfalse nilの両方が負になるのは、明らかにrubyの闇
配列とかハッシュ内でfalseも使ってコードかいてるとハマるって程じゃないけど
>>539のいってるような
@var == false とか書きたくなるよ
0545デフォルトの名無しさん2014/09/29(月) 12:47:07.12ID:sAVGRibI
「負」ってなんだよ、
JavaScriptの用語で言うところの「falsy valueである」ってことを言いたいんだろうけど。

この程度のことも正確に表現できない奴が「闇」とかちゃんちゃらおかしい。
0546デフォルトの名無しさん2014/09/29(月) 12:52:57.33ID:PkV280SH
x 負
o 偽

どうせ負論理か何かと間違えたんだろ
0547デフォルトの名無しさん2014/09/29(月) 13:46:53.16ID:mH0hN6se
そもそもRubyでfalse trueってどういうときに使うの?
普段使わないからnilと混ざることもなくはまったことがない
0548デフォルトの名無しさん2014/09/29(月) 14:54:58.84ID:GOwFfu+y
nilは未定義やメソッドの返り血として返す値がない場合に使うし、
falseは偽であることを明確にしたい場合に使っているな
それとnil falseを区別したい場合はobj.nil?があるんだから
それ使えばいいんじゃないかな
0549デフォルトの名無しさん2014/09/29(月) 19:03:52.12ID:0qyZ7Y3Q
ひぃー返り血
0550デフォルトの名無しさん2014/09/29(月) 19:52:46.04ID:ir6Np6gb
>>547
メソッドの戻り値として使う
foo? の戻り値が true か false みたいな感じ
yardとかで説明で書かれるところのBoolean

もちろんnilとfalse以外のオブジェクトは全部真だから、理屈上はfoo自体の結果を返してもよい
ただ、これやるとマニュアル書くのめんどいしget_foo_valueみたいなのの代わりに使うアホが出るしなによりirbでめっつァ不便
良い例:
irb> obj.foo?
true
悪い例:
irb> obj.foo?
#<MyFooObject:0xb7c0dcc8 @val1=#<AnotherObject ...>
@val2=なんか長いすっごい長いデータ @content=[] @userdata1=nil @userdata2=nil @userdata3=nil >

「def foo?; !!@foo; end」って書くのカッコ悪いとかいうくだらない理由で
@fooを直接返しちゃうダメな感じの製作者がいるが真似してはいけません
0551デフォルトの名無しさん2014/09/29(月) 20:42:29.30ID:WcW3+aLQ
>>550
1.nonzero?
0552デフォルトの名無しさん2014/09/29(月) 22:56:25.00ID:Kh9spxWx
超巨大なCSVを作成したいです。
したみたいにすると、CSVに必要な行がすべてメモリに乗るようでめっちゃスワップします。
少しずつ書き込む方法ってないでしょうか?

CSV.open(filename, 'w') do |line|
menbers.each{|menber|
line << menber.to_array
}
0553デフォルトの名無しさん2014/09/30(火) 00:56:07.65ID:Gbi7LNU3
ありますよ
0554デフォルトの名無しさん2014/09/30(火) 02:17:48.38ID:8M9GxsYT
初歩的な部分ですがフィールド配列の外部参照がよく分かりません。
@array = Array.new
と宣言してある外部クラスをインスタンス化して
ins.array[0]=10 等とアクセスしようとしてるのですが、
undefined method `[]' for nil:NilClass (NoMethodError)と出ます。
何が間違っているのでしょうか?
0555デフォルトの名無しさん2014/09/30(火) 02:30:15.47ID:Ogo7WMyz
ソース貼ってみ
0556デフォルトの名無しさん2014/09/30(火) 02:56:18.12ID:4TmfBnqZ
>>552
一般的にファイルは、一度に全部を読み込まない
一度に全部を読み込むと、
クラッカーに大きいファイルを送りつけられて、
システムダウンさせられてしまう

4KBなどの小さいバッファを使って、
ファイルから小刻みに読み込みながら処理する
動画や音楽の再生などはそう

IOオブジェクトの、read(size)で読み込むサイズを指定できる
他にも、1文字ずつ、1byteずつ、1行ずつ処理するとか
0557デフォルトの名無しさん2014/09/30(火) 03:14:45.25ID:8M9GxsYT
>>555

class ClassA
@array = Array.new
attr_accessor:array
end

instance = ClassA.new()
instance.array[0]=10
puts(instance.array[0])
とアクセスを確認するだけの単純なものです
同じクラスの以下のコードは普通に表示されるのですが
array2=Array.new
array2[0]=10
puts(array2[0])
0558デフォルトの名無しさん2014/09/30(火) 03:21:26.11ID:MXlztEU0
>>545
死ね
>>546 真偽の 偽のこといった
0559デフォルトの名無しさん2014/09/30(火) 03:46:11.59ID:1IRD/DgB
http://docs.ruby-lang.org/ja/2.1.0/class/WEBrick=3a=3aConfig.html
この辺
ハッシュでfalseとnilを使い分けてる

こういうのを真似して自分で関数作ったりすると引数とったメソッド野中では
こんなことになりかねない

if @var.nil?
nilの処理
elsif @var
trueの処理
else
falseの処理
end

さらにfalseを優先して書きたい場合こうなっててもおかしくない

if @var == false
falseの処理
else
それ以外
end

こういうのがあるから、未定義だったらnilなのにデフォルトはfalseですとかやってるメソッドは
その引数がnilとfalseで同じ挙動なのか違うのか確証がない

同じだったらそもそもfalse使うなって思うけど
0560デフォルトの名無しさん2014/09/30(火) 03:59:49.80ID:Ogo7WMyz
>>557
http://ref.xaio.jp/ruby/classes/module/attr_accessor
これ見りゃわからないかな?
0561デフォルトの名無しさん2014/09/30(火) 05:09:52.18ID:LJ2oQclU
>>554
Rubyにはフィールドはない
あなたにそれをフィールドだと教えた悪い参考書や参考サイトを使ってるようだから全部捨てろ
とりあえず話はそれから
0562デフォルトの名無しさん2014/09/30(火) 05:15:08.37ID:4TmfBnqZ
>>557
>@array = Array.new
変数名に、arrayなどの既存の名前を使わない方がよい
arr に変えるよ

@arr = Array.new
Array.newだけなら、要素数0
p arr で表示してみ

@arr = Array.new(3)
これなら、要素数3
p arr で表示してみ

Array.new を参照
0563デフォルトの名無しさん2014/09/30(火) 06:08:26.11ID:3C5m2+5+
>>552
members のサイズはどのくらい? 超巨大だったりしない?
0564デフォルトの名無しさん2014/09/30(火) 07:08:13.41ID:uzsgHcDm
>>557
class ClassA
@array = Array.new # <- ここが間違い

これだと @array は「ClassA」というオブジェクトのインスタンス変数になる
君が欲しいのは「ClassAのインスタンス」というオブジェクトのインスタンス変数だろう

class ClassA
def initialize
@array = Array.new
end

とすれば解決するはず
0565デフォルトの名無しさん2014/09/30(火) 07:35:27.09ID:Gbi7LNU3
は?
0566デフォルトの名無しさん2014/09/30(火) 10:08:03.27ID:UKkIwkr4
>>557
あれ?ってなって確かめたら上のレスの通りだった
ttp://ideone.com/9AXpGD
スコープに注意
0567デフォルトの名無しさん2014/09/30(火) 14:58:07.85ID:8M9GxsYT
>>564
ああ、なるほど上手く動きました。
rubyではインスタンス変数として使うなら
def initializeに書いたりする必要があるんですね。

質問なのですが、「ClassA」というオブジェクトのインスタンス変数、
というのはクラス変数とどう違うのでしょうか?
0568デフォルトの名無しさん2014/09/30(火) 15:01:48.64ID:JjKI4EMd
インスタンスは、異なる値で複数存在可能
0569デフォルトの名無しさん2014/09/30(火) 15:19:36.61ID:KHlaSvzj
>>567
ttp://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fvariables.html#class
>クラス変数はクラス自身のインスタンス変数とは以下の点で異なります。
>・サブクラスから参照/代入が可能
>・インスタンスメソッドから参照/代入が可能
0570デフォルトの名無しさん2014/09/30(火) 15:36:45.31ID:8M9GxsYT
>>569
参照範囲で使い分ける感じですかね。
教えていただきありがとうございました。
0571デフォルトの名無しさん2014/09/30(火) 20:39:00.96ID:JU1j3mFE
ガチ小中学生に煽られて、ガチ小中学生に教えたり、教わったりするスレになってるけど大丈夫?
こういうところに大人がもしも未だに混ざってるならオワコンですよ
0572デフォルトの名無しさん2014/09/30(火) 21:13:32.58ID:m29MN2Ah
>>571
ネットに限らず情報というものは
相手の肩書にとらわれず
内容を各々判断するものだ
それが出来なら朝日新聞でも読んでればいい
0573デフォルトの名無しさん2014/10/01(水) 00:41:57.59ID:zzunZpfz
お子様は親父がボーナスで買ったPC-9800でBASICを嗜むものだろう。
0574デフォルトの名無しさん2014/10/01(水) 11:27:38.11ID:OJSGbkdS
フムフムヌクヌクアプアアみたいな奴だな
0575デフォルトの名無しさん2014/10/02(木) 19:02:32.09ID:EmIzxk1A
File.delete(@temp) if File.exist?(@temp)
の部分で`exist?': can't convert nil into String (TypeError)
というエラーが出てしまうのですが、解決方法がわかりません。

ubuntu14.04
ruby1.9.3p484です
0576デフォルトの名無しさん2014/10/02(木) 19:26:18.52ID:Nbqny9/i
まずはエラーの内容を翻訳してみようー
0577デフォルトの名無しさん2014/10/03(金) 00:22:46.82ID:8ZCfX4zK
「存在する?」:
皆無をストリング(TypeError)に変換することができません。
0578デフォルトの名無しさん2014/10/03(金) 00:29:30.66ID:i0V0nK+8
>File.delete(@temp) if File.exist?(@temp)
>の部分で`exist?': can't convert nil into String (TypeError)
nil型を、String型に変換できない(型エラー)のかな?
@tempに値が何も入っていないのでは?

File.delete(@temp) if File.exist?(@temp)
この行の前に、
p @temp してみ。nilになってる?

Rubyを全然、わかっていないのなら、
たのしいRuby、第4版、2013
を読んでから、プログラミングした方が速い
0579デフォルトの名無しさん2014/10/03(金) 07:22:21.94ID:d+M1zPQO
> nil型を、String型に変換できない(型エラー)のかな?
Rubyを全然わかっていないのはどっちだよ
0580デフォルトの名無しさん2014/10/03(金) 09:37:53.93ID:ncSYSBhR
特異メソッドを定義したときに
メソッドfuga内から、
Hogeの名前を取得する方法がわからず、
教えてください。

class Hoge
class << self
def fuga
....
end
end
end
0581デフォルトの名無しさん2014/10/03(金) 12:18:43.89ID:zwNCTHT6
お断りします
   ハハ
   (゚ω゚)
  /  \
((⊂ )  ノ\つ))
   (_⌒ヽ
   ヽ ヘ |
εニ三 ノノ J
0582デフォルトの名無しさん2014/10/03(金) 12:20:42.30ID:zwNCTHT6
p ancestors
フムフムヌクヌクアプアアみたいな奴だな
0583デフォルトの名無しさん2014/10/03(金) 12:36:09.34ID:iohOSMY+
>>575
exist?は、引数に与えたファイルパス文字列のファイル名が存在するかどうか調べるメソッドだよね
で、この行の中でエラー文の“string”に関係しそうなのは、パス文字列のつもりで与えた引数の@temp
なのでこの場合は、引数@tempの中身がうっかり“nil”とやらになってんじゃないか?と疑い、前出の通り“p @temp”を入れて調べるのがまず第一

“type error”とか“argment error”とか出てきたら、とりあえずその行の引数とか変数調べてみればいいよ
0584デフォルトの名無しさん2014/10/03(金) 18:40:26.63ID:LkYraUGE
>>580
文字列として取得したいならば self.to_s とか to_s とか
0585デフォルトの名無しさん2014/10/03(金) 22:12:19.49ID:x4vX3Y5M
>>582
>> 584
ありがとうございます。
0586デフォルトの名無しさん2014/10/04(土) 11:53:38.36ID:pzA2eR9p
日帝の残滓が作った言語
0587デフォルトの名無しさん2014/10/04(土) 20:40:54.60ID:M66Mgi8t
そんなふうに色めがねでみるのは論理ではない。もっとこころを透明にしてください。
プログラミングには、論理的な思考が必要
0588デフォルトの名無しさん2014/10/05(日) 00:41:36.89ID:QzEV7fmk
>>556
>>563

返信遅れて申し訳ない。
メモリの挙動を監視するとCSVが一発で読み込まれてるようにしか思えなかった。
上の例のmenber変数はかなり巨大なハッシュだけどCSVに入れる前にARRAYにしておいても
CSV書き込みでとてつもないメモリを消費する。
複数回に分けて追記すればいいのかな
0589デフォルトの名無しさん2014/10/05(日) 00:45:06.70ID:QzEV7fmk
menberはハッシュじゃなくて自分で定義したクラスでした。
最初にmenber全部ARRAYにしてからCSVに書き込もうとするとメモリがやばいので
to_arrayを定義して逐次的にCSVに書き込んでます
0590デフォルトの名無しさん2014/10/05(日) 00:55:17.19ID:QzEV7fmk
失礼
CSVが一発で読み込まれているのではなく。
CSVの書き込み用バッファが4K確保されて書き込まれて、次の4kに進むのではなく
一気に全部確保されている気がする。
このため書き込みたい内容を一度メモリ上ですべて確保してる気がする
0591デフォルトの名無しさん2014/10/05(日) 01:31:33.72ID:IUlRSCDi
>>588-590
お前わざとやってるだろw
0592デフォルトの名無しさん2014/10/05(日) 01:59:12.81ID:MFOvIang
コードの断片だけ見せられてもな
menbersのクラスも分からんし
menbers.eachかmenber.to_arrayが原因じゃねーの?
まあ最大のバグはmenberのスペルなんですけどね
0593デフォルトの名無しさん2014/10/05(日) 13:26:52.71ID:sdXqIouw
男たちのビット誤り率という意味かもしれん
0594デフォルトの名無しさん2014/10/05(日) 13:28:42.98ID:FZuSwsnO
男どもの過ち‥奴らは何を間違えたのだろうか?
0595デフォルトの名無しさん2014/10/05(日) 14:49:48.27ID:QzEV7fmk
ぐは
0596デフォルトの名無しさん2014/10/05(日) 17:01:45.15ID:XrIDkgzN
xx
0597デフォルトの名無しさん2014/10/06(月) 23:26:34.77ID:OEPOtQ0D
ほんと馬鹿な質問で、ここで聞くのも大変申し訳無いんだが、

今日やさしいRuby という本を買ってきて、まずRubyのバージョンを確認しろという指示があった

具体的には、「macを使っている人は、まずコンソールを起動します。コンソールを起動するには、Finderからターミナルを選んでください。rubyのバージョンを調べるには、ruby-v
と入力し、必要なオプションを加えます」と書いてある。

この ruby-v と入力し必要なオプションを加えます というものがどういう動作かわからない。

とりあえず、このメモ帳みたいなターミナルの画面の続きに、ruby -v と入力してenterキーを押すと、

-bash: -v: command not found と 表示されるだけ。本来ならRubyのバージョン情報が出てくるらしいんだが、何が間違っているのだろうか?コンソールに入力する、という文章も
あるが、コンソールと思われるものを開いても、そもそも何かを入力できる箇所がなく、ログなどがずらっと並んでいるだけ。

macは標準のコマンドとしてRubyが利用できるとのことなので、Rubyのインストールという行為はやっていない。
0598デフォルトの名無しさん2014/10/06(月) 23:47:18.60ID:OrurmOLO
>>597
ターミナル起動して bash のプロンプト($ マーク)の右に ruby -v って入力して enter すると

$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]

みたいに表示されるはず
うまくいかなければスクリーンショットを貼ってくれると話が早い
0599デフォルトの名無しさん2014/10/07(火) 00:02:31.37ID:mh2mjaxD
>>597
ちなみに「ログなどがずらっと並んでいるだけ」のやつはその本でいうところの「コンソール」とは違うから気にしなくていい
多分全部「ターミナル」と読み替えていい
0600デフォルトの名無しさん2014/10/07(火) 00:02:38.09ID:A7b9XBsz
初心者は無理せずWindows使えよ
実はプログラマにはWindowsの方がフレンドリー
コンソールやターミナル、とか用語が安定しなくて迷ったりしないですむ
0601デフォルトの名無しさん2014/10/07(火) 00:13:52.75ID:dLpFFXt+
Windows普通に環境構築大変じゃね?
Macだと最初からruby入ってる
0602デフォルトの名無しさん2014/10/07(火) 00:54:44.80ID:OE9FEeTe
windowsでruby書く人って居るのか?
聞いたことない
0603デフォルトの名無しさん2014/10/07(火) 01:12:14.80ID:YQhu9gFf
winとrubyは絶対にやってはならない組み合わせの一つ
0604デフォルトの名無しさん2014/10/07(火) 01:13:32.04ID:YQhu9gFf
というか、Windowsのほうがプログラマにフレンドリー発言でRuby使ったことないのがもろ(ry
0605デフォルトの名無しさん2014/10/07(火) 07:08:20.75ID:TyujhZt1
Rails とか複雑なことしようとしないなら、インストーラもあるし Windows でも十分使える
0606デフォルトの名無しさん2014/10/07(火) 07:30:12.70ID:5iNhE6Cu
Windowsをはずしたら、負けることになる(死にます)
0607デフォルトの名無しさん2014/10/07(火) 09:01:44.10ID:cA1BC5is
>>597
買って来たやさしいRubyの版数
使っているOS XのVersion
X codeのVersion
commandline toolsのインストールの有無
を書け。
まずはそれからだ。

その本を使うためにhomebrewとrbenvを入れる必要が出るだろうけどな。
0608デフォルトの名無しさん2014/10/07(火) 09:06:59.09ID:Jaq4UASp
>>597
-vってコマンドを実行したいって思われてるな。
rubyの前に、ls、cd、catという基本的なコマンドを使う練習から始めてみてはどうだろう。
0609デフォルトの名無しさん2014/10/07(火) 10:25:54.57ID:JVM430wV
>>597
http://dotinstall.com/lessons/basic_unix
コマンドの勉強ならこのサイトがいいんじゃないかな。
動画で説明してるからわかりやすいと思う。
0610デフォルトの名無しさん2014/10/07(火) 19:10:46.04ID:RfEYvcpp
params[:body] が 半角英数字のみ(つまり日本語文章ではないかどうかを判断したい)か
どうかを簡単にチェックする方法を教えてください
0611デフォルトの名無しさん2014/10/07(火) 19:51:50.70ID:TyujhZt1
>>610
Railsスレとマルチすんな
0612デフォルトの名無しさん2014/10/07(火) 20:03:27.32ID:Lth77BfJ
マルチポストだったか
ヌケヌケと答えてしまうところだった
0613デフォルトの名無しさん2014/10/07(火) 22:12:43.85ID:KzNWKz7K
どうせ壁打ちと大差ないのにマルチだけは気にするゴミ
0614デフォルトの名無しさん2014/10/07(火) 22:21:38.40ID:lactWcAJ
壁打ちってどういう比喩?
0615デフォルトの名無しさん2014/10/07(火) 22:38:55.76ID:BlA3KCzr
別板の質問見かけたときにコピペするだけで荒らせるんだから安いもんだと思う
0616デフォルトの名無しさん2014/10/08(水) 12:51:11.03ID:RGealQpg
↑これが壁打ち
0617デフォルトの名無しさん2014/10/08(水) 14:05:31.36ID:WR+D1wBU
>>610
ヒント: 正規表現
0618デフォルトの名無しさん2014/10/08(水) 17:18:55.98ID:qx5li64a
Struct使うメリットを教えてください。setter,getterは他の言語に比べるとRubyはattr_accessorがあるので簡単だと思うのですが。
class Point
attr_accessor :x, :y
end
class Area < Point
end
と
class Area < Struct.new(:x, :y)
end
この2つの違いを教えてください
0619デフォルトの名無しさん2014/10/08(水) 17:34:36.72ID:vDUa8S4h
簡潔に書ける
0620デフォルトの名無しさん2014/10/08(水) 19:06:34.65ID:5mBaIux9
アクセサ以外のメソッドも定義されなかったっけ?
あれ、気のせい?
0621デフォルトの名無しさん2014/10/08(水) 22:02:54.67ID:0CbvvJCh
Struct の方は Enumerable モジュールが include されるのと、
initialize を定義しなくても new で各メンバの初期化が出来る

attr_accessor の方は Enumerable を取り込まないため
Enumerable 由来のメソッドが大量に定義されないで済む

個人的には Struct が好みだけど、一般的には attr_accessor の方が利用されている
0622デフォルトの名無しさん2014/10/10(金) 22:57:37.90ID:hLe2xq4/
10月から、プログラミングをはじめた者です。
本当に初歩の初歩だと思うんですが、、お答え願えませんか?

s = "My name is Monar"
s = s.split
p s[0] # => M
p s.class = # => String

a = s.split
p a[0] # => My
p a.class => Array

Stringをsplit したものを何かにぶち込むと配列になるのでしょうか?
そういうものだ、って解釈でよいのでしょうか。
0623デフォルトの名無しさん2014/10/10(金) 23:05:19.35ID:j7rjXjTe
>>622
お前が寝ぼけてるだけ
もう一度落ち着いてそれ実行してみろ
0624デフォルトの名無しさん2014/10/10(金) 23:21:19.86ID:hLe2xq4/
>>623

うわ。ほんとだ。寝ぼけてただけでした。
ほんとすいません。

s = "My name is Monar"
p s.class # => String
p s[0] # => M
s = s.split(" ")
p s[0] # => "My"
p s.class # => "Array"

これでした。すいません。
stringをsplitすると、配列オブジェクトになるってのはあってますか?
0625デフォルトの名無しさん2014/10/10(金) 23:29:13.14ID:Mhk11MXA
ドキュメント見れば一発やで
0626デフォルトの名無しさん2014/10/11(土) 00:17:24.24ID:t1ONSAIz
[1] pry(main)> require 'time'
=> true
[2] pry(main)> DateTime.new(1970,1,1)
=> #<DateTime: 1970-01-01T00:00:00+00:00 ((2440588j,0s,0n),+0s,2299161j)>
                    ↑+00:00
[3] pry(main)> DateTime.new(1970,1,1).to_time
=> 1970-01-01 09:00:00 +0900
              ↑+0900 ファ!?
0627デフォルトの名無しさん2014/10/11(土) 00:19:51.34ID:bs/sFubV
日本時間
0628デフォルトの名無しさん2014/10/11(土) 12:01:18.49ID:WAdfmHXI
夏時間終わっててよかったな
0629デフォルトの名無しさん2014/10/11(土) 13:04:18.34ID:GOKZHlwE
ブロックの書き方でdo〜end形式の方が{〜}形式より推奨される理由は何ですか?
rubocopもバシバシ警告してくるのですがイマイチ理由が分かりません。
0630デフォルトの名無しさん2014/10/11(土) 13:44:55.56ID:2iP0q5Ek
嫌なら{}で良いんだよ
0631デフォルトの名無しさん2014/10/11(土) 13:48:39.52ID:7ki1LAY5
>>629
http://stackoverflow.com/questions/5587264/do-end-vs-curly-braces-for-blocks-in-ruby
0632デフォルトの名無しさん2014/10/11(土) 14:58:29.97ID:9vsymaaR
>>624
s = "My name is Monar"
s = s.split(" ")を使うと、
文字列が空白で分割されて、配列の0〜3に格納される

[My,name,is,Monar]

>>629-631
ブロックが1行なら、{ }の方が見やすい
複数行なら、do〜endを使う
0633デフォルトの名無しさん2014/10/11(土) 15:14:29.24ID:7ki1LAY5
>>632
アンカつけるならリンク先読んでちょ
あと My じゃなくて "My" ね
06346292014/10/11(土) 18:35:23.61ID:GOKZHlwE
>>631
やっぱ優先順位から見ると{}の方が自然に思えますよね。
「複数行だとdo end」も見た目のこだわり以上の理由はないと理解しました。
0635烏有(uyuu) ◆/uuWdTQ106 2014/10/11(土) 18:40:20.18ID:fozbFsv6
壁ドンのやり方で柱〜ふすまの方が{ドア}部分をドンするより推奨される理由は何ですか?
家族もバシバシ警告してくるのですがイマイチ理由が分かりません。
0636デフォルトの名無しさん2014/10/12(日) 02:07:30.17ID:2D7VEq3z
うるさい
0637デフォルトの名無しさん2014/10/12(日) 02:23:45.11ID:LsklK5Cs
>>634
open obj.filename do |file|
# open()に渡されるブロック
end
open obj.filename {|file|
# obj.filename()に渡されるブロック
}
これだけ見ると do 〜 end の結合度のが自然に見えない?
どっちか片方だけが自然、って訳ではないと思う
0638烏有(uyuu) ◆/uuWdTQ106 2014/10/12(日) 04:40:30.30ID:iENiuObx
>>636
やっぱ優先順位から見ると{ドア}ドンの方が自然に思えますよね。
「複数回だと壁 ドン」もドンの音のこだわり以上の理由はないと理解しました。
0639デフォルトの名無しさん2014/10/12(日) 14:23:41.50ID:MraGD/gc
自分はブロックも引数の一種だとおもってるから
引数が二つ以上あるのにカンマがないのはおかしいので↑は自然とは思わないなあ
↓のfilenameがselectとかmapとかのときを考えると↓の結合度が自然だと感じる

まあどっちにしろそんなわかりにくい結合させずに括弧で明示するけどね
0640デフォルトの名無しさん2014/10/12(日) 16:06:02.65ID:Yv9TiAGs
英語っぽく見せかけるためだけのもので
冗長なうえ結合度が違うのは害悪ですらある
637は要らぬ混乱を招くとても悪いスタイルだから真似しちゃダメ
0641デフォルトの名無しさん2014/10/12(日) 21:26:34.17ID:Tx1BX1Kd
個人的には、複数行か否かで分けるのではなく
戻り値を扱うかどうかで書き分けてるな〜
0642デフォルトの名無しさん2014/10/12(日) 22:15:56.50ID:ElJnU/0K
>>641
俺もそうだな
戻り値を使うなら {}、使わないなら do..end だな
0643デフォルトの名無しさん2014/10/13(月) 05:27:00.26ID:j90eBv3o
戻り値というか副作用の有無で分けてる
0644デフォルトの名無しさん2014/10/13(月) 13:11:18.96ID:xzr2gdng
副作用で思い出したのだがpushやpopに!が付かないのは
何か歴史的な経緯があるのかい?
0645デフォルトの名無しさん2014/10/13(月) 13:15:20.64ID:j90eBv3o
対応する非破壊版がないから
後でそれを追加できないという破綻した命名規約だけどね
0646デフォルトの名無しさん2014/10/13(月) 13:27:29.45ID:yFRqmPNp
後で追加する可能性が無いんじゃない
0647デフォルトの名無しさん2014/10/13(月) 14:06:45.14ID:qSnkJX9/
>>644
正確な経緯は知らんけど、Lisper な Matz には副作用や参照透明性みたいな
概念を重要視していなかった(=深く考えていなかった)だけだと思う

>>645
命名規則が破綻したケースの例としては、ハッシュを更新する破壊的メソッド Hash#update に
後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね
0648デフォルトの名無しさん2014/10/14(火) 07:50:28.20ID:FY2dMxGy
pushやpopはどう考えても機能名称的にpushやpopという単語だろうという縛りがないでもない
まあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?
0649デフォルトの名無しさん2014/10/15(水) 21:56:04.60ID:0iTmmfe+
普段は非破壊的メソッドを使い、危険を冒す価値のある場所だけに使う。
何か問題があれば!を検索して集中的に調べる。
Immutableなコレクションしか持たない言語よりも柔軟で実用的だと思うんだ。
これはrubyの好きな点の一つなので、!のルール付けは徹底してほしいところだ。
0650デフォルトの名無しさん2014/10/15(水) 23:39:21.06ID:KzNnpQwi
delete!とか?
0651デフォルトの名無しさん2014/10/16(木) 07:30:36.81ID:GRIRO8vO
updateのaliasにupdate!を付けるのはあとから幾らでも出来る
逆が出来ないから困るって話をしてるんだが
0652デフォルトの名無しさん2014/10/16(木) 10:25:27.96ID:qnIoh31O
馬鹿には無理
0653デフォルトの名無しさん2014/10/16(木) 10:31:38.08ID:6hon/NKm
>>651
逆ができないってどういうこと?
aliasを付けることはどっちもできるし
ソース上で不統一だとどっちの場合も同じように困ると思うんだけど
何に困ってるの
0654デフォルトの名無しさん2014/10/16(木) 15:55:07.15ID:CsOFEKWu
44 デフォルトの名無しさん [sage] 2014/10/13(月) 13:11:18.96 ID:xzr2gdng Be:
副作用で思い出したのだがpushやpopに!が付かないのは
何か歴史的な経緯があるのかい?

645 デフォルトの名無しさん [sage] 2014/10/13(月) 13:15:20.64 ID:j90eBv3o Be:
対応する非破壊版がないから
後でそれを追加できないという破綻した命名規約だけどね
0655デフォルトの名無しさん2014/10/16(木) 15:56:08.66ID:CsOFEKWu
命名規則が破綻したケースの例としては、ハッシュを更新する破壊的メソッド Hash#update に
後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね

648 デフォルトの名無しさん [sage] 2014/10/14(火) 07:50:28.20 ID:FY2dMxGy Be:
pushやpopはどう考えても機能名称的にpushやpopという単語だろうという縛りがないでもない
まあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?
0656デフォルトの名無しさん2014/10/16(木) 17:18:05.50ID:MV7SzJpM
破壊的メソッドは戒めを込めて delete!!!!!!!!!!! にしておくべきだった
0657デフォルトの名無しさん2014/10/17(金) 02:16:25.49ID:EUFGtU/Q
Windows7上でruby2.0.0 p451のgemを使ってnokogiriをインストールしようとしましたが
うまくいきません。ネットでやると失敗します。

で、「Rubyによるクローラ開発」って本に、そういうときはコンパイル済みバイナリをローカルに
置くのがいい、とあったので、rubygem.orgからx86-mingw32というのを取って来て実行してみた
のですが、
Unable to resolve dependencies: nokogiri requires mini_portile
ってエラーが出て進まなくなってしまいます。
環境が悪いんでしょうか? みなさんとこ上手くインストールできてます?
0658デフォルトの名無しさん2014/10/17(金) 04:56:18.47ID:lMkb3UyL
nokogiri requires mini_portile
0659デフォルトの名無しさん2014/10/17(金) 07:48:33.50ID:tubR575L
そのエラーメッセージを和訳するんだ
0660デフォルトの名無しさん2014/10/17(金) 07:49:03.51ID:XvOfVc4r
>>656
トニー・ジャーか…?
マッハ!のタイトルっぽいな
0661デフォルトの名無しさん2014/10/17(金) 08:10:47.98ID:QP1DIUi6
>>657
環境が悪いとすれば君の生まれ育った環境が悪いんだろう
0662デフォルトの名無しさん2014/10/17(金) 08:21:15.00ID:4+0nBHRN
絶滅しそうなプログラミング言語は?
http://developers.slashdot.jp/story/14/10/10/2155216/

環境が悪いせいかやっぱ滅び行く言語みたいだな
0663デフォルトの名無しさん2014/10/17(金) 11:49:30.34ID:Q41qEvOL
嬉しそうですね
0664デフォルトの名無しさん2014/10/17(金) 11:53:45.91ID:HZvg3la9
まあな
0665デフォルトの名無しさん2014/10/17(金) 15:50:56.69ID:TIsdM5eD
Android上でスクリプトを動かしたいのですが、どんな選択肢がありますでしょうか。
Android上でコードを書き換えて動作させたりしたいと思っているので、Rubotoはちょっと方向性が違うと思っています。
よろしくお願いします。
0666デフォルトの名無しさん2014/10/17(金) 19:32:37.25ID:HZvg3la9
SL4A
0667デフォルトの名無しさん2014/10/17(金) 21:07:26.92ID:j5u0ESS9
>>665
>Android上でコードを書き換えて動作させたりしたいと思っているので、Rubotoはちょっと方向性が違うと思っています。

意味不明だな
Ruboto IRB(無償 Android アプリ)を使えば、「コードを書き換えて動作させたり」できるよ
メソッドやクラスの定義はもちろん、Ruboto IRB 上で GUI を生成して動かせる

・Ruboto IRB : 過去最大の衝撃。これは凄い!!AndroidでRubyが動く!!Androidアプリ427 | オクトバ
 http://octoba.net/archives/20100305-ruboto-irb-android-427.html

Roboto IRB で対話的に Android API を色々と触りつつ、本格的なアプリは PC 上の
Ruboto または RubyMotion(現状はベータ版)でクロス開発するというプロセスになると思われる
0668デフォルトの名無しさん2014/10/17(金) 23:42:47.60ID:4+0nBHRN
だせえ
すぐ潰れそう
0669デフォルトの名無しさん2014/10/18(土) 08:36:09.60ID:cvL+Wsv6
>> 666
ありがとう、試してみます。

>> 667
PCでRubyをコンパイルしてAndroidで動かす仕組みだと勘違いしていました。
ご指摘いただきありがとうございます。
0670デフォルトの名無しさん2014/10/19(日) 20:19:35.03ID:vOhlo+XI
OCRAで32bitバイナリと64bitバイナリを生成したいのですが
何か良い方法はないでしょうか?
何もオプションを付けないと64bitバイナリが生成されるようですが・・・
2.0.0p481[x64-mingw32]
0671デフォルトの名無しさん2014/10/20(月) 01:41:16.45ID:6j05cluu
ocraで作ったバイナリってウイルス検出されちゃうことがあるなんて話があったけど、
大丈夫なのかな? 個人環境で起きるなら良いんだけど、会社だとセキュリティ担当に
自動で通報されちゃうので説明したりとちょっと大事になるので面倒くさい。
0672デフォルトの名無しさん2014/10/20(月) 06:54:15.02ID:v2I1VvBQ
ocraってRuby2.1以降とか動かんでしょ
0673デフォルトの名無しさん2014/10/20(月) 19:46:50.69ID:kEWHmjOP
お蔵入り
0674デフォルトの名無しさん2014/10/24(金) 23:57:31.15ID:pwlehayb
数学的な意味で整数かどうか判定する方法教えてください
1.0.integer?
だとfalseが返ってきてしまいます
0675デフォルトの名無しさん2014/10/25(土) 00:09:39.99ID:L2ksR7r0
a = 1.0
a.floor == a # => true

a = 1.1
a.floor == a # => false

こういうこと?
0676デフォルトの名無しさん2014/10/25(土) 08:32:50.27ID:j6rbe9Rw
質問者が「数学的に」と言ってきてるのだから
複素数にも対応してあげるのが親切ってもんだろう。
そこはfloorでもceilでもなくto_iだな。
0677デフォルトの名無しさん2014/10/25(土) 08:34:28.50ID:8yzcXx0W
>>675
誤差考えるとなあ

irb(main):006:0> a=Math.sqrt(27)/Math.sqrt(3)
=> 3.0000000000000004
irb(main):007:0> a.floor==a
=> false
0678デフォルトの名無しさん2014/10/25(土) 08:37:31.51ID:Osfk0YxR
ん?aは整数じゃないから正しいんでは?
0679デフォルトの名無しさん2014/10/25(土) 09:19:46.12ID:NijgTWso
計算を全部Rationalでやったうえでdenominatorが1だったら整数
もしくは
require'mathn'
とかかなあ
0680デフォルトの名無しさん2014/10/25(土) 12:30:31.13ID:9i0hi/co
>>678
√27 ÷ √3
= 3√3 ÷ √3
= 3
を a に代入
以下略
0681デフォルトの名無しさん2014/10/25(土) 12:36:41.68ID:cqm+9BdH
irb(main):006:0> a=3*Math.sqrt(3)/Math.sqrt(3)
=> 3.0000000000000004

わろた
0682デフォルトの名無しさん2014/10/25(土) 13:23:01.23ID:Osfk0YxR
>>680
それが3になってないからfalseで正しいじゃん
0683デフォルトの名無しさん2014/10/25(土) 13:39:00.78ID:NijgTWso
無理数が入る計算はどうあがいても誤差が出るだろうなあ
累乗根とかの無理数をその場で計算せずそのままあつかうようなクラスを個別に定義していけば
そのうち全部誤差なしにできるかもね(もちろん最終的に有理数になる場合)

>>682
人間が計算すれば3になるからtrueを得たいってことでしょ
0684デフォルトの名無しさん2014/10/25(土) 14:21:19.99ID:L2ksR7r0
>>677
無理数が入るものを有限桁しか持てない計算機で計算させるんだから、
その誤差を考えて計算させないと意味が無い
これはRubyに限った話じゃなく、計算機に計算をさせる上で必ず考慮しなければ
ならないポイント
0685デフォルトの名無しさん2014/10/25(土) 14:47:58.38ID:B/NlI7do
>>681
$ python
>>> from math import sqrt
>>> 3 * sqrt(3) / sqrt(3)
3.0000000000000004

Prelude> 3 * sqrt 3 / sqrt 3
3.0000000000000004

julia> 3*sqrt(3)/sqrt(3)
3.0000000000000004

そういうものだよ
カッコでくくるといいかもね
0686デフォルトの名無しさん2014/10/25(土) 15:03:54.32ID:L2ksR7r0
EPS = 1e-10
(a.round - a).abs < EPS

みたいにやるのがよくある方法だね
(ただしaがそれほど大きくないという条件はつくけど)
0687デフォルトの名無しさん2014/10/25(土) 16:10:16.86ID:OBw5xvhC
それだと整数にならないケースも整数だと誤検出する可能性を排除できない
0688デフォルトの名無しさん2014/10/25(土) 16:55:42.43ID:5nT/ZQiN
>>676
Complex#to_iは虚数部が0じゃない時はRangeError吐くから
もう少し工夫しないといけない気がする
0689デフォルトの名無しさん2014/10/25(土) 17:42:04.77ID:Osfk0YxR
>>683
>>674は計算の仕方を聞いてるわけじゃないだろ
0690デフォルトの名無しさん2014/10/25(土) 19:46:48.42ID:L2ksR7r0
>>687
有限桁の計算機で計算する以上、無理数が混じった計算で整数かどうかを正確に
判定することなんてできないよ
0691デフォルトの名無しさん2014/10/25(土) 19:50:06.84ID:/9oTGPcj
バカにはムリw
0692デフォルトの名無しさん2014/10/25(土) 19:51:20.02ID:TvGWFX6/
無理数使いたいなら記号計算しかないな
そういうアカデミックな世界はPythonの方が環境整ってるからおすすめ
0693デフォルトの名無しさん2014/10/25(土) 20:55:31.74ID:OBw5xvhC
sympyいいね
0694デフォルトの名無しさん2014/10/25(土) 21:43:14.43ID:AJUIP7QM
浮動小数点は対数曲線上に、
まるで点のように飛び飛びに存在しており、
数学の実数のようには、数が連続していない

また数が大きくなるほど、2点間の距離も大きくなっていき、
最後には2点間の距離は、1よりも大きくなり、1を足せなくなる
また2点間にある値は、どちらかに丸められて表現される

>>686
絶対誤差と相対誤差という概念もある
1,000で1の誤差と、1.0で0.001の誤差は、
1/1,000という同じ誤差
0695デフォルトの名無しさん2014/10/26(日) 20:04:28.62ID:z1XaoFmt
coreserverにredmineを入れてfcgiで動くようにしたつもりだけど500 errorでて動かなくてrubyわからなくて涙目
どうやってデバッグしたらいいの?
0696デフォルトの名無しさん2014/10/26(日) 21:06:23.46ID:e33XAUxV
>>695
web server のログを見てみよう
0697デフォルトの名無しさん2014/10/26(日) 21:24:15.67ID:z1XaoFmt
サーバーのログは500だけ。
redmine/log/production.logはアクセスしても更新されてないです。
なぜだ。
0698デフォルトの名無しさん2014/10/26(日) 21:25:42.86ID:e33XAUxV
>>697
web server のエラーログだよ
0699デフォルトの名無しさん2014/10/26(日) 21:57:12.33ID:z1XaoFmt
coreserverは/var/logのパーミッションが
drwx--x--x 6 root root
で一般ユーザーには見れません。

ほかのところで見れるのかな
0700デフォルトの名無しさん2014/10/26(日) 21:57:13.28ID:BCpeePeb
>>695
coreserverってレンタルサーバか。CGIしか動かないんじゃないの。rackとかいじれば動くかもしれないけど、planioとか設置済みの借りたほうがいいんじゃないの。
0701デフォルトの名無しさん2014/10/26(日) 22:08:53.22ID:z1XaoFmt
>>700
sshでログインして色々できるので
~/usr/以下に
ruby-2.1.3
subversion-1.8.10
fcgi-2.4.1
make-4.0
libtool-2.4.2
など、依存関係、バージョンアップが必要なやつらを入れてやって
ようやくエラーなくbuild installできたり
require 'fcgi'でのーさっちふぁいる言われなくなったところです。
0702デフォルトの名無しさん2014/10/26(日) 22:09:41.87ID:z1XaoFmt
まちがえた
bundle installやった。
0703デフォルトの名無しさん2014/10/27(月) 01:56:33.97ID:AAN1U1FS
heroku使えばいいのに。
0704デフォルトの名無しさん2014/11/01(土) 10:53:07.72ID:KbCSRqlI
ある1万桁程度のBignum同士の乗算が
実際の値とは異なるものになってしまうのですが、何故なのでしょうか?
ruby-2.1.3 とruby-2.1.4 で動作を確認しました。
OSはvistaです。
0705デフォルトの名無しさん2014/11/01(土) 11:00:20.69ID:3nVvYlYV
動かしたコードを貼りなよ
codepadとかに
0706デフォルトの名無しさん2014/11/01(土) 11:48:23.78ID:KbCSRqlI
お返事ありがとうございます。
具体的には、高速で階乗を求めるソースを考えている時に起こりました。
http://codepad.org/uMrdmWoQ
上のソース(numの階乗を出力)で、5688以上の階乗を求めようとすると誤った値が出力されます。

原因を調べたところ、いつくかの乗算の結果がおかしなことになっていました。
その例です↓
http://codepad.org/Evm4WIzw

なお、codepad上では正しく動いています。
0707デフォルトの名無しさん2014/11/01(土) 11:59:15.57ID:KbCSRqlI
追記です。
1.8.7
1.9.3
2.0.0
では正常に動くことを確認しました。
0708デフォルトの名無しさん2014/11/01(土) 12:42:09.57ID:JDs1edib
>>707
2.1 のバグだね、きっと
↓にしたがってバグ報告しましょう

https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReportJa
0709デフォルトの名無しさん2014/11/01(土) 13:08:03.38ID:E0YeAKNc
こんな基本的なところでデグレードとか、ほんとRubyは信用ならないな。
やはり科学技術計算ならPythonか。
0710デフォルトの名無しさん2014/11/01(土) 13:12:37.62ID:JDs1edib
>>709
そう思ってるならRubyスレなんか覗かなきゃいいのに
単純に叩くネタを探しにきてるだけなのかい?
0711デフォルトの名無しさん2014/11/01(土) 13:13:46.50ID:tAp5B7hH
だって計算機科学とか全く無知な人でもrubyをある程度触ってればコミッタになれちゃんだもの
0712デフォルトの名無しさん2014/11/01(土) 13:18:44.69ID:NzxKzmT+
Webアプリどっぷりな人って基礎技術舐めてる子が多いからな
0713デフォルトの名無しさん2014/11/01(土) 14:18:25.31ID:KbCSRqlI
>>708
どうもありがとうございました!!
0714デフォルトの名無しさん2014/11/01(土) 16:57:13.22ID:Bg+qUaZT
error_logを別ファイルに吐かせる方法ってありますか?
0715デフォルトの名無しさん2014/11/01(土) 18:33:01.35ID:dJZLIuNK
trunk では直ったようだね
0716デフォルトの名無しさん2014/11/01(土) 20:35:05.70ID:dJZLIuNK
>>709
Bignum は 2.1 で結構変わった部分だから、単純なデグレードではないね
むしろ、新機能と言ってもいい部分

なので、今回のようなバグ報告はありがたいだろうね
0717デフォルトの名無しさん2014/11/02(日) 05:24:22.27ID:Vf5VSDSD
Pythonは、Rubyを目の敵にしている
Rubyさえ消えれば、Pythonの1強だから

鬼畜米英に対して、今こそ、日本人として立たねばならぬ!
全国民は何があろうと、Rubyを死守せよ!
0718デフォルトの名無しさん2014/11/02(日) 06:47:27.44ID:LNjYg/LZ
>>717
Out of guntyuu.
0719デフォルトの名無しさん2014/11/02(日) 06:56:13.27ID:ihJb2jjw
>>717
環境の問題でRuby使ってるけど、
正直、使えるならPython使いたいわ
0720デフォルトの名無しさん2014/11/02(日) 10:39:25.45ID:f5IAMfRc
>>717
使いたくない
>>719
俺も
0721デフォルトの名無しさん2014/11/02(日) 10:55:35.21ID:6vShOxas
PythonにゃロクなWebのFWがないからねぇ
Rails(か最悪はPHP)を使わざるを得ないことも多いんだね
0722デフォルトの名無しさん2014/11/02(日) 10:59:49.55ID:f5IAMfRc
>>721
結局そういう事だよねー
0723デフォルトの名無しさん2014/11/02(日) 11:01:48.93ID:LNjYg/LZ
>>721
逆にdjangoがあるからpythonを選ぶくらい。
0724デフォルトの名無しさん2014/11/02(日) 11:03:11.62ID:6vShOxas
>>723
Pythonがいい言語なのは同意できるが、Djangoは同意できないw
0725デフォルトの名無しさん2014/11/02(日) 11:04:07.50ID:ihJb2jjw
Pythonって書いてて余計なことに気を使わなくても
それなりに簡潔で読みやすいコードになるんだよな
RubyはWordで体裁気にしながら文章書いてるような気持ちの悪さを感じる
0726デフォルトの名無しさん2014/11/02(日) 11:09:10.69ID:6vShOxas
>>725
その部分ではPythonもRubyも大差ないなー
Rubyで簡潔で読みやすいコードにならないというなら、単純にRubyを知らないだけちゃうんかって感じ

だが、Perlよ、お前だけはだめだw
0727デフォルトの名無しさん2014/11/02(日) 11:14:46.34ID:ihJb2jjw
>>726
RubyはPython以上に簡潔で読みやすいコードを書けるけど、
使い方によってはPerlにもなるでしょ
良し悪しの問題ではないけどPythonと一番思想が違うところ
0728デフォルトの名無しさん2014/11/02(日) 11:18:16.14ID:6vShOxas
>>727
まさか単純にインデントベースのブロックのこと言ってるんじゃあるまいな?
だとすれば完全に好き嫌いの話でしかないぞ

そのレベルだと君が簡潔で読みやすいコードを書けるのはPythonとCoffeeScriptぐらいってことになる
0729デフォルトの名無しさん2014/11/02(日) 11:18:23.22ID:LNjYg/LZ
>>724
そう? 言語としてはrubyのが好き。
djangoは標準でユーザー管理ついてるのと、かなりDRYなとこがいい。
0730デフォルトの名無しさん2014/11/02(日) 11:24:44.64ID:4UwsIu6G
>>726
ぱ、Perlも読み易く書けば読み易く書けるし!
0731デフォルトの名無しさん2014/11/02(日) 11:25:18.61ID:ihJb2jjw
>>728
ブロックに限らず、単にRubyの方が書き方にバリエーションが多いって言ってるだけだよ
両方使ってるならそれくらいは納得してくれるだろ?
俺はバリエーションが少ないほうが好みだ、それだけ
0732デフォルトの名無しさん2014/11/02(日) 11:41:20.62ID:Ot4JK/1Q
教えてください
数字をEXCELの列の文字に変換するにはどうすればいいですか。

入力(数値) 0,1,2,3,…
出力(文字) A,B,C,…Z,AA,…,AZ,BA…,ZZ,AAA…
0733デフォルトの名無しさん2014/11/02(日) 12:01:36.32ID:OPPSZIQK
n="A"
$_.times{n.succ!}
0734デフォルトの名無しさん2014/11/02(日) 12:23:24.95ID:CjBmvnJw
CoffeeScript はむしろ Python より Ruby に似てる
0735デフォルトの名無しさん2014/11/02(日) 12:29:25.47ID:CjBmvnJw
>>732
Base26 encoding
0736デフォルトの名無しさん2014/11/02(日) 14:37:28.26ID:3t1Cscrq
それをRubyのせいにしてしまうのがだめだな
人には向き不向きがあるからそれならやめておけばいい
0737デフォルトの名無しさん2014/11/02(日) 14:44:31.57ID:6vShOxas
>>732
n.to_s(26).tr('0-9a-p', 'a-z').upcase
0738デフォルトの名無しさん2014/11/02(日) 15:17:25.24ID:3t1Cscrq
>>732
遅いしメモリ食うし最大値を考慮する必要があるけど単純
[*"A".."ZZZ"][n]
0739デフォルトの名無しさん2014/11/02(日) 16:19:28.15ID:/OQ7HjUb
>>732
もっときれいにかけるのかな。
ついでに英字から数字を出力するのも作ってみた。

def column_code n
len = Math.log(25*n/26.0+1, 26).floor+1
p = n+1+2*26**len - ("1"*(len+1)).to_i(26)
p = p.to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
return p
end

def column_decode s
len = s.length
p = ( ("B"+s).tr('A-Z', '0-9a-p') ).to_i(26)
q = ( "1"*(len+1) ).to_i(26)
return p+q-1-2*26**len
end
0740デフォルトの名無しさん2014/11/02(日) 17:13:03.61ID:bNYsKDd8
無駄な計算が多かったので訂正

def column_code n
len = Math.log(25*n/26+1, 26).floor+1
return (n+(24*26**len+26)/25).to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
end

def column_decode s
len = s.length
return s.tr('A-Z', '0-9a-p').to_i(26)+(26**len-26)/25
end
0741デフォルトの名無しさん2014/11/02(日) 18:21:25.77ID:LNjYg/LZ
再帰で考えたが、>>733を見て挫けた。
0742デフォルトの名無しさん2014/11/02(日) 19:13:57.03ID:B2VB/G2X
succを使うのが一番すっきりしてるしどうせ
5〜6桁目など存在しないのだからパフォーマンスも気にしなくてよいと思う。
0743デフォルトの名無しさん2014/11/03(月) 08:06:02.67ID:UI06u95t
class Point3D < Struct.new("Point3D", :x, :y, :z)
ストラクトクラスをスーパークラスにするやり方が本に
上のように書いてあったのですけど
Point3DクラスがPoint3Dクラスを継承することになってもいいのでしょうか?
0744デフォルトの名無しさん2014/11/03(月) 10:54:32.79ID:1DGR/mlS
作者に聞けよ
0745デフォルトの名無しさん2014/11/03(月) 11:48:48.65ID:lYTbCh7P
>>744
お騒がせして申し訳ありませんでした。
自分で考えることとします。
0746デフォルトの名無しさん2014/11/03(月) 12:21:28.78ID:VhC2rtBo
>>743
Struct.new("Point3D", :x, :y, :z) は Struct::Point3D になるから問題無い。
0747デフォルトの名無しさん2014/11/03(月) 12:24:39.05ID:aZ1lF/ar
>>743
実際に試してみればいい

irb(main):001:0> class Point3D < Struct.new("Point3D", :x, :y, :z); end
=> nil
irb(main):002:0> Point3D.superclass
=> Struct::Point3D

Struct.new( .... ) というスタイルを使うと、クラスは名前空間 Struct の下で定義される
Point3D と Struct::Point3D は別のオブジェクトだから、
それらの間に継承関係が存在しても何ら問題はない

もちろん、以下のようなケースはエラーになる

irb(main):001:0> class Struct::Point3D < Struct.new("Point3D", :x, :y, :z); end
TypeError: superclass mismatch for class Point3D
from (irb):1
from /opt/local/bin/irb:11:in `<main>'

irb(main):001:0> class Point3D < Struct.new("::Point3D", :x, :y, :z); end
NameError: identifier ::Point3D needs to be constant
from (irb):1:in `new'
from (irb):1
from /opt/local/bin/irb:11:in `<main>'
0748デフォルトの名無しさん2014/11/03(月) 13:41:16.97ID:Yqw0F9So
require 'timeout'
begin
 f = Fiber.new do
  timeout(1) do
   Fiber.yield
  end
 end
rescue
 p 1
end
begin
 f.resume
 sleep (2)
 f.resume
rescue
end

上記のコードで1が出力されるはずと期待していたら例外処理が補足されずに終了してしまいました。
sleep(2)でexecution expiredになるのは分かるんですが、何故補足されないんでしょうか?
Ruby2.0.0と2.1.4で試しましたが結果は同じでした。
0749デフォルトの名無しさん2014/11/03(月) 14:43:27.79ID:IiZVKpQi
ある多次元の配列arrayに対して、要素数が不定のの配列indexを用いて
array[index[0]][index[1]]〜[index[-1]]の要素を操作したいのですが
何かうまい方法は無いでしょうか?
0750デフォルトの名無しさん2014/11/03(月) 15:24:11.59ID:aZ1lF/ar
>>748
単純に timeout(1) へ与えたブロック内で Fiber.yield しているので
コンテクストが親に切り替わっているからだろ

自分でコンテクストを切り替えておいて、
それでもなお元のコンテクストでタイムアウト例外を補足できると期待するという
>>748 の思考回路がわからん
Ruby はエスパーではないから >>748 の意図を読み取って振る舞ってはくれないし、
コンテクストを切り替えろというコードの指示に従って忠実に動いているだけ

自分が何を意図してコードを書いているのか、よく考えたほうがいいと思う
0751デフォルトの名無しさん2014/11/03(月) 15:27:42.87ID:IO/fHbsZ
例外が上がるのはf.resumeの実行以降だからまずはp 1の位置が違う(下のrescueにすべき)と思うけど
なぜかTimeout::Errorじゃない無名のクラスになってて補足できてないね・・・なぜだろう誰か詳しい人

コンテクストが親に切り替わっても例外は上がるんだね
俺よくわかってないや

>>749
こんな感じ?
取得
index.inject(array){|s,r|s[r]}
設定
index[0..-2].inject(array){|s,r|s[r]}[index[-1]]=x
0752デフォルトの名無しさん2014/11/03(月) 15:41:58.79ID:aZ1lF/ar
>>749
0、1、とくれば次に期待するのは 2、3、と増加する振る舞いだと思うけど、
なぜか -1 になっている
すまんが、-1 になれる上手い方法は思いつけない

ちなみに 0、1、ときて最後に N へ到るという多次元配列であれば、

(0..N).inject(array) { |ary, n| ary[index[n]] }

でアクセスできると思う
0753デフォルトの名無しさん2014/11/03(月) 15:42:39.68ID:IiZVKpQi
>>751
ありがとうございます!!
indexを使うといいんですね。
0754デフォルトの名無しさん2014/11/03(月) 15:47:23.48ID:IiZVKpQi
>>752
説明が下手ですみません。
大変参考になりました。ありがとうございます。

あと>>753はindexじゃなくてinjectですね。
0755デフォルトの名無しさん2014/11/03(月) 15:47:46.99ID:3kX/Tanu
>>751
悪かないがindexが無効範囲だったときにnilが返るのが不親切じゃないか?
多少ダサくてもindexチェックのついた高階関数にバラすのが良いように思う。
0756デフォルトの名無しさん2014/11/03(月) 15:55:53.88ID:IO/fHbsZ
>>755
ご指摘通り確かに範囲外インデックスが入ってると落ちちゃうね
落ちずにnilを返すようにはできるけど、nilが入ってる場合と違いがわからんしなあ

高階関数で対応するイメージが湧かないので教えてほしい

>>754
ということで範囲外インデックスが入りえる場合は気を付けて!
0757デフォルトの名無しさん2014/11/03(月) 15:57:33.59ID:Yqw0F9So
>>750-751
ありがとうございます、理由はよく理解できました。
という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。
バグではないのかと気になりますが、どうなんでしょうね。
0758デフォルトの名無しさん2014/11/03(月) 16:21:40.77ID:aZ1lF/ar
>>757
>という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。

exception_classを指定しなくとも、>>748 のコードのままでも下の rescue で例外は補足されている
下の resucue というコードを rescue => ex; p ex へと書き換えれば、
#<Timeout::Error: execution expired> という出力を確認できるはず


>バグではないのかと気になりますが、どうなんでしょうね。

Fiber.yield でコンテクストを親に切り替えた後にタイムアウト例外が発生し、
その例外は切り替わった親の(=下の) resucue で補足されている

>>750 で書いたことを繰り返すけど、Ruby は>>748 のコードに従って忠実に動いているはずだ
それなのに、なぜこれをバグを感じるのか意味不明だね
0759デフォルトの名無しさん2014/11/03(月) 16:51:25.89ID:UKuQYTWz
>>755-756
ありがとうございます。勉強になりました。
0760デフォルトの名無しさん2014/11/03(月) 17:02:08.57ID:IO/fHbsZ
>>758
実行してみた?
色々言う前にまずは自分で書いた通り実行して確認してみなよ
なぜか例外にTimeout::Errorじゃない無名のクラスが投げられてきてて
rescue Exception とかしないと補足できないから

http://ideone.com/jtxDYd (p exと書いてみたけどエラーは変わらない)
http://ideone.com/9ctjA2 (Exceptionすべて補足すればいける)
http://ideone.com/0MytXY (757の書いた通りでもいける)
0761デフォルトの名無しさん2014/11/03(月) 17:03:48.53ID:IO/fHbsZ
ずっと誤字ってたなw
正 捕捉
誤 補足
0762デフォルトの名無しさん2014/11/03(月) 17:11:36.03ID:IO/fHbsZ
>>758
おお、こちらもいろいろ言う前に考えが足りなかった、すまん
ver違いで発生有無が違ったから、すでに修正されたバグなのかもしれん

上記の通り無名の例外が発生
1.9.3p547 (2014-05-14 revision 45962) [i386-cygwin]
2.0.0p481 (2014-05-08) [x64-mingw32]
2.0.0p481 (2014-05-08 revision 45883) [i386-cygwin]

正しくTimeout::Errorが発生
2.1.2p95 (2014-05-08 revision 45877) [i386-cygwin]
0763デフォルトの名無しさん2014/11/03(月) 17:12:32.08ID:aZ1lF/ar
>>760
同じコードであっても、Ruby のバージョンによって振る舞いが変わるみたいだね

$ ruby1.9 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.0 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.1 timeout2.rb
#<Timeout::Error: execution expired>
07647482014/11/03(月) 17:37:35.15ID:Yqw0F9So
2.1.4でも結果は同じ、と書きましたが再度試した所捕捉しましたorz
恐らくpikで切り替え忘れてirbで実行したのが原因だと思います…
2.0系では駄目でしたが、2.1系なら大丈夫そうですね。

捕捉せず
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]
ruby 2.0.0p594 (2014-10-27) [i386-mingw32]
捕捉
ruby 2.1.4p265 (2014-10-27 revision 48166) [i386-mingw32]
0765名無しさん2014/11/03(月) 22:33:03.64ID:LLz3qGqs
rubyでgui(2dゲームを作りたい)構築できるいいgemありますか?
win8のcore i7です
0766デフォルトの名無しさん2014/11/03(月) 22:34:40.73ID:UgEZQqgs
WindowsでRubyとか修行じゃない限りはやめとけ
素直にC#+XNAが吉
0767デフォルトの名無しさん2014/11/03(月) 22:40:36.85ID:UgEZQqgs
…と思って調べたらXNAは終了なんだな
SharpDXとか?になるんだろうか
0768名無しさん2014/11/03(月) 22:47:27.00ID:LLz3qGqs
デュアルブートでlinux入れたらましになりますかね?
hddも1tbあるので
0769デフォルトの名無しさん2014/11/03(月) 22:49:25.47ID:UgEZQqgs
>>768
いまどきデュアルブートするぐらいならVM使った方がいいと思うけど…
0770デフォルトの名無しさん2014/11/03(月) 22:50:06.32ID:x848GwYR
DXRubyがあるWindowsが一番向いてるじゃん
0771名無しさん2014/11/03(月) 23:34:46.76ID:LLz3qGqs
それ試しましたが32bit版しか対応してないって怒られました>>770
0772名無しさん2014/11/03(月) 23:37:17.91ID:LLz3qGqs
>>769
どっかでcygwinはエラーが多いと聞いた気がしましたが
なにか不都合ありますか?
0773デフォルトの名無しさん2014/11/04(火) 00:03:40.32ID:WEGF7NZu
>>771
じゃあ32bit版も入れれば
0774デフォルトの名無しさん2014/11/04(火) 03:06:41.92ID:30WYsMeZ
>>765-768
win8のcore i7なら仮想環境にするか、
USBから外付けHDD・USBメモリから、Linuxすれば?

win8で同一ディスクからのデュアルブートは、
UEFI・GPT・リカバリー領域など、
ややこしいことが一杯あって、win8を消してしまうかも!
あまり成功例を聞かない
0775名無しさん2014/11/04(火) 07:30:11.08ID:3vhPZ6VF
>>774
そうします
0776デフォルトの名無しさん2014/11/05(水) 00:05:20.96ID:AIrAdXYO
2Dゲーでもアクション系は作る気がせんなぁ。
GCが原因でカクついたりすると爽快感台無しになるし
そこでハマって調整に時間かかるとスクリプト言語選んだ
意味ないしで悩むところだ。
0777デフォルトの名無しさん2014/11/05(水) 09:49:19.03ID:6cY/hPez
わかります
0778デフォルトの名無しさん2014/11/06(木) 00:52:04.32ID:40Lk17ez
ファイルを読み込んで読み込んだものを","で分割したくて
File::open("./hoge") {|f|
while line = f.gets
end
lineAry = line.split(",")
}
って感じにしたのですが、undefined method `split' for nil:NilClass (NoMethodError)ってエラーが出てしまいわからなくなってしまいました
解決方法教えてください・・・・
0779デフォルトの名無しさん2014/11/06(木) 01:24:27.67ID:tQmqHd/H
lineAry = File.open('./hoge').each_line.map { |line|
  line.chop.split(/,/)
}
0780デフォルトの名無しさん2014/11/06(木) 02:01:45.45ID:4jfyym2c
>>778
その通り書いてあるものだとして、
while line = f.gets
end
を抜けているということは
line = f.getsがnilかfalseになっているということ
実際にはnilなわけだが、それに対して
line.split(",")
と"split"メソッドを呼び出してるけど、nilにはそんなメソッドはないよというエラー

while line = f.gets
  "処理"
end
というのをどこかで見て引っ張ってきたんだろうけど
これが意味してるところを理解しないと
getsというのがこの場合、ファイルを一行ずつ読み込むメソッドで、最後の行に達したらnilを返すようになってる
つまり、ファイルを一行読み込んでlineに代入。nilでなければ(ちゃんと読み込めてたら)"処理"を行うという意味
0781デフォルトの名無しさん2014/11/06(木) 02:29:54.61ID:e2GU7rka
>>778
クラスメソッドのアクセスに :: は使わない。ドットを使う
while 〜 endはそれでないと動作しない目的以外では使わない。each(を元にした各種メソッド)を使う
ファイル内容の取得にgetsは通常使わない。readやeach_lineを使う
lowerCamelCaseはとりあえず使わないようにする。snake_caseを使う習慣をとりあえずつけとく ※オプション

RubyにはEnumerableをeachで回すという概念/クラスがあって、基本的には
配列やハッシュ.each do |一個|
# ここで一個をなんかする
end
または
配列やハッシュ.each{ |一個| #ここでなんかする }
という形になる

Fileクラスにはオープンしたファイル内容を全部読み込んで文字列として返すインスタンスメソッドreadや
改行だと思われるとこで適当に切って配列にして返すインスタンスメソッドeach_lineがある
なので、「ファイルを読み込んで読み込んだものを","で分割したい」を
「ファイルを開いて1行づつ読み込んでその行を","で分割して配列に格納する」または
「ファイルを開いてテキストファイル全体を","で分割して配列に格納する」と<翻訳>して
前者は>>779のように、後者なら
splited =File.open(path).read.split(/,/)
とか書く

処方箋としては「まともな解説を最初のほうから読む」くらいしか思いつかない
「ペダルを回すと前に進むらしいんですがどうすればいいですか!」とか言って自転車のペダルだけ手で回してる状態
まず跨って乗ってくれ
0782デフォルトの名無しさん2014/11/06(木) 18:10:15.86ID:c7fp/oug
while line = f.gets
end
lineAry = line.split(",")
↓
while line = f.gets
lineAry = line.split(",")
end
0783デフォルトの名無しさん2014/11/06(木) 18:20:26.70ID:1AJgCGK+
>>782
動作しましたがlineAryに最後の行しか入っていません と言われるオチ
0784デフォルトの名無しさん2014/11/06(木) 23:16:51.51ID:KqnzrEM2
readやreadlinesに漠然とした恐怖感を感じることが第一歩だ。
gcの動きは?セキュリティホールは?スクリプト言語も実は楽じゃない。
0785デフォルトの名無しさん2014/11/07(金) 06:04:19.34ID:XfEMsduw
言語や出来合いのライブラリに頼りきってて裏の技術を意識しなくなるから
たまに必要になった時にそう感じるだけ
0786デフォルトの名無しさん2014/11/09(日) 06:33:32.65ID:gF5CsO0E
安全圏で妥協すんのもダメ
完璧主義も破綻する
どっち付かずの中途半端主義者しか生き残れないゴミみたいなゲームまだやってんの?
0787デフォルトの名無しさん2014/11/09(日) 14:50:38.45ID:ZDxM+nfG
>>779
chop より chomp の方が良いと思う。
0788デフォルトの名無しさん2014/11/10(月) 04:23:28.54ID:nN3Hg8Jd
a << $_.split(",") while f.gets
0789デフォルトの名無しさん2014/11/10(月) 08:25:58.99ID:jDCBd3CZ
以下のような、改行+カンマ区切りのCSVファイルなのか?
A,B,C
1,2,3
あ,い,う

それとも、改行はなく1行のみの、カンマ区切りなのか?
a,b,c,1,2,3,あ,い,う
0790デフォルトの名無しさん2014/11/10(月) 22:11:39.06ID:8QediavH
rbenvのインストール方法を紹介しているページで、ruby-buildのインストール先が
~/.rbenv/plugins/rucby-build
になっているページが多くあるんですが
rucbyになっている意味って思い当りますか?
typoした情報が広まっちゃっただけですかね
0791デフォルトの名無しさん2014/11/10(月) 22:37:30.07ID:BCpYGTgN
>>790
うひょおおおおおお
http://www.google.co.jp/search?num=50&;lr=&hl=ja&q=rucby-build&nfpr=1&sa=X
0792デフォルトの名無しさん2014/11/10(月) 23:08:48.98ID:LMH7nFF4
http://www.google.co.jp/search?q=rbenv+rucby&;oe=utf-8&hl=ja&sa=X&&as_q&nfpr=1&spell

>>790
typoが広まっているのは立教大キャンパス?www
0793デフォルトの名無しさん2014/11/11(火) 00:12:22.99ID:OobmUzAz
くっそわらたw
さすが三流大学
0794デフォルトの名無しさん2014/11/11(火) 22:24:32.20ID:IKuwQGRa
ruby 2.1.3p242 (2014-09-19 revision 47630) [x64-mingw32]
class Test
def initialize(*arg)
end
end
Test.new(*Array.new(10 ** 5))

これが stack level too deep (SystemStackError)になってしまうのは何故なんでしょう?
何をスタックに積んでるのかまったくイメージできません。
ちなみにinitialize以外のメソッドでは、同様の書き方でも問題ないようです。
0795デフォルトの名無しさん2014/11/11(火) 22:41:18.34ID:wcU8x7Ld
>>794
Ruby のメソッド呼び出しでパラメタの頭に * を付けると、パラメタを展開して渡す
つまり、

  Test.new(*Array.new(10))

というコードは、以下と同じ

  ary = Array.new(10)
  Test.new(ary[0], ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8], ary[9])

で、一般に手続き/関数/メソッドの引数は言語処理系内部のスタック上もしくはヒープ上に割り当てられる
Ruby の場合には、メソッド new によるオブジェクト生成時にはスタックを使っていて、
それがオーバーフローした(=システムスタックの上限を越えて溢れた)のだろうね

いずれにせよ、10 ** 5 個もの引数を渡すコードは非常識だから、予期しないエラーとなっても不思議ではない
>>794 のコードを

  Test.new(Array.new(10 ** 5))

と書き直せば(=パラメタの頭に付けた * を外せば)、期待した動作になるはずだよ
07967942014/11/12(水) 11:49:56.88ID:ltmCpT66
>>795
どうも引数全般がスタックを使ってるみたいですね
initialize以外大丈夫だと書きましたが、更に配列を増やすとやはりだめでした

お騒がせしました
0797デフォルトの名無しさん2014/11/13(木) 11:41:28.38ID:0GszBHHH
C# ASP.NetがLinuxサーバーでも使えるようになって
Rubyみたく哀れな言語を使わなくてすむようになるのがうれしい
0798デフォルトの名無しさん2014/11/13(木) 12:07:29.72ID:7ZjHj42h
なんでバカが湧いたのかと思ったらバトロワスレの次スレが立ってないのか
0799デフォルトの名無しさん2014/11/13(木) 14:19:37.64ID:sincN6IC
RWC2014 島根の会場に来てる
なんか質問ある?
0800デフォルトの名無しさん2014/11/13(木) 17:40:34.42ID:17cnbPeU
>>799
何か目新しい報告はあった?
08017992014/11/13(木) 18:33:52.15ID:sincN6IC
>>800
来週アメリカでなんか発表するらしいけど、教えてくんなかったorz

Ruby Prize 2014 受賞者は柴田さんだった

あと、.NETがオープンソース化されてるのは知らんかった。
0802デフォルトの名無しさん2014/11/14(金) 14:45:10.38ID:Y6976A5Y
質問なんですが、

hairetsu.include?(/正規表現/)

が認識しないみたいなんですがいい代替案ありますかね?
0803デフォルトの名無しさん2014/11/14(金) 14:46:19.79ID:rxnPKvOr
sorah
0804uy2014/11/14(金) 14:48:38.59ID:jCz39Be/
ttp://www.nicovideo.jp/watch/sm7760141

ちょっと下ネタになってしまうのですが、
みんなとこの気持ちを共有したいというか
0805デフォルトの名無しさん2014/11/14(金) 14:51:11.05ID:PoP9COyz
>>802
ary.grep /re/
0806デフォルトの名無しさん2014/11/14(金) 14:54:39.54ID:Y6976A5Y
>>805
サンクス
0807デフォルトの名無しさん2014/11/14(金) 14:56:58.11ID:oheSvaLq
array.grep(/正規表現/)
とかどうでしょう。
0808デフォルトの名無しさん2014/11/14(金) 14:58:09.85ID:oheSvaLq
あ、すでに書かれてたスマン
0809デフォルトの名無しさん2014/11/15(土) 13:46:51.20ID:s1wDRj1u
こういうインターフェースってウンコだと思う?

log("value"){ log(1); log(2); log("sub value"){log(3);} }

出力
log category: value
 1
 2
 log category: sub value
  3
0810デフォルトの名無しさん2014/11/15(土) 16:19:12.50ID:RzrSosLr
親子関係はプログラミングではなく、階層構造の話

XML,JavaScriptのJQueryなどのレベルの話
0811デフォルトの名無しさん2014/11/15(土) 16:20:29.70ID:x8Hc1054
>>809
pretty print が似たようなインタフェースのような気がする
0812デフォルトの名無しさん2014/11/15(土) 16:50:42.74ID:gniD1qRI
俺だったらYAMLか何かで階層構造指定させるようにするかなぁ。
format =<<EOS
value:
- 1
- 2
- sub_value:
 -3
EOS

log(format)
0813デフォルトの名無しさん2014/11/17(月) 20:12:13.72ID:Zff6ZJ9C
RubyのソースコードってUTF-8で書かれる事が多いけど
改行コードはみんなどれを使ってるの?
RoRがよく使われる→Linuxでのサーバで動かす事が多い→じゃあLFで
と思ってるんだけどどうなんだろ
0814デフォルトの名無しさん2014/11/17(月) 20:26:34.24ID:KnCa0+eC
>>813
Linux上で書いてるしツール使うしLFだ。
0815デフォルトの名無しさん2014/11/17(月) 20:44:52.20ID:Rk/OFXwa
ソースコードを公開するならLF
公開しないなら好きにせえ

ちなみに「UTF-8のテキストデータファイル」の改行はCRLFが好ましい
めんどくさいっすな
0816デフォルトの名無しさん2014/11/17(月) 22:49:11.65ID:waLJuR/4
RORならCRLFだろ
フォームデータは大抵CRlFで送られてくるんだからDBもソースも統一すればいいじゃん
0817デフォルトの名無しさん2014/11/18(火) 00:07:31.51ID:zO/+2tja
教えてください。
ruby -e 'puts $:'
というワンライナーは何をするものですか?
0818デフォルトの名無しさん2014/11/18(火) 00:41:56.74ID:gfsRu8uJ
$LOAD_PATH を puts
0819デフォルトの名無しさん2014/11/18(火) 09:33:02.58ID:zO/+2tja
818さん、ありがとうございました。
0820デフォルトの名無しさん2014/11/19(水) 00:24:48.78ID:MmxntMff
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/
0821デフォルトの名無しさん2014/11/19(水) 15:03:51.14ID:JZ2oYyd9
間違ってもRubyが採用されることはないから安心汁
0822デフォルトの名無しさん2014/11/19(水) 21:30:03.59ID:bEK2kswG
Rubyで書かれたコードは負債
後で後悔することになる
0823デフォルトの名無しさん2014/11/19(水) 22:28:07.63ID:eeZRz+g3
>>822
アンチRubyの悲痛な叫びが心地よい
0824デフォルトの名無しさん2014/11/19(水) 22:57:16.50ID:W0VjaeDS
>>822
完璧な言語が出るまでコードを1行もかかない、あなた勝ち組ですね。がんばって勝ち続けてください。
0825デフォルトの名無しさん2014/11/19(水) 23:21:14.70ID:pniQ/9rV
完璧な言語と比べなくても
Rubyは下の方だから
0826デフォルトの名無しさん2014/11/19(水) 23:27:57.56ID:DTfPg3SF
ということにして、何もしない言い訳を言い続けるだけの一生を終わるのだろうなぁ、こういうバカって
0827デフォルトの名無しさん2014/11/19(水) 23:35:12.66ID:tsrrXfqY
自分が見下してる言語のスレをわざわざ覗いてるような暇がある奴だ
察してやろうぜ
0828デフォルトの名無しさん2014/11/20(木) 00:03:37.59ID:W0VjaeDS
とりあえずプラットフォーム限定の言語より上。
0829デフォルトの名無しさん2014/11/20(木) 00:32:02.49ID:Po2bP3CX
Rubyは過剰にコンピュータリソースを消費し
地球温暖化を促進する人類の敵
0830デフォルトの名無しさん2014/11/20(木) 00:35:02.06ID:wJ3BgpRF
少なくとも
・オブジェクト指向プログラミング
・関数型プログラミング
を学び&それを実践したいのであれば、
数あるスクリプト言語の中でも Ruby が最良の選択

(もしS式に拒否反応が無ければ Scheme 等のLisp族でもいいんだけどね)
0831デフォルトの名無しさん2014/11/20(木) 01:38:44.14ID:Po2bP3CX
Rubyとか負債だから
今から始めるとか馬鹿
0832デフォルトの名無しさん2014/11/20(木) 02:12:28.23ID:e9ZJqUMF
福岡ではRuby推してるな
0833デフォルトの名無しさん2014/11/20(木) 02:30:11.35ID:wwhDP9Xo
>>831
こいつからジェンガを取り上げた奴は名乗り出ろ
せっかく一人で遊んでいたんだぞ
0834デフォルトの名無しさん2014/11/20(木) 07:04:02.44ID:pbftQxxb
Rubyが関数型とか片腹痛いわ
これほどeach(=副作用)が多用される言語も珍しい
0835デフォルトの名無しさん2014/11/20(木) 07:16:53.48ID:c59L+Vlf
言語のアンチになるひとたちの心理が分からない。嫌なら使わなければ良いだけ。
0836デフォルトの名無しさん2014/11/20(木) 11:04:10.34ID:8q4P6WgW
国産というだけで、補助金つけたり採用するアホがいるからな
ちゃんと技術的に劣ったものであると啓蒙しないと
0837デフォルトの名無しさん2014/11/20(木) 11:26:45.76ID:EmAWw9wC
2位じゃ駄目なんです
0838デフォルトの名無しさん2014/11/20(木) 11:34:28.77ID:oY1GPGoB
>>834 慣れれば自然とmapになるけどな。
0839デフォルトの名無しさん2014/11/20(木) 17:04:35.26ID:PQZG72rl
手続型のようにも関数型のようにも書けるからな
どっちかしか認めないような潔癖な人には使えんけど
自分で使い分けられれば柔軟性抜群
0840デフォルトの名無しさん2014/11/20(木) 17:49:56.50ID:caZHrNzS
>>835
言語のアンチに見えるけど、中身は事大主義者。
0841デフォルトの名無しさん2014/11/20(木) 18:12:45.00ID:IC7tS2EU
Rubyでなんか凄いことやった人がいるらしいね
0842デフォルトの名無しさん2014/11/20(木) 20:57:03.73ID:/tpcb8RQ
>>841
いっぱいいるよ
0843デフォルトの名無しさん2014/11/21(金) 00:58:04.29ID:giR2E1os
Rubyとか補助金なかったら使わないわ
0844デフォルトの名無しさん2014/11/21(金) 01:03:48.65ID:60xXXhMX
補助金なんて貰えるの?
0845デフォルトの名無しさん2014/11/21(金) 04:06:02.72ID:eKmyEZjy
しまね
0846デフォルトの名無しさん2014/11/21(金) 05:30:28.73ID:cPEjXala
>>843
詳しく頼む
定期的にこの煽りがあるけど
単発ばっかで要領を得ないんだわ
0847デフォルトの名無しさん2014/11/21(金) 07:05:19.39ID:sRt7xdzZ
変なのが居着いちゃったな
0848デフォルトの名無しさん2014/11/21(金) 07:45:59.05ID:R5E6cwET
しま
ね
0849デフォルトの名無しさん2014/11/21(金) 20:05:33.20ID:TFSPfM6y
しまねのまぬけ?
0850デフォルトの名無しさん2014/11/21(金) 20:34:56.03ID:cSM/9qCo
つまらないからやめた方が良いよ
0851デフォルトの名無しさん2014/11/22(土) 15:01:29.78ID:Fg4QwLMY
ねんまつ
0852デフォルトの名無しさん2014/11/22(土) 17:55:36.10ID:0Ov5Rq+L
馬鹿には無理
0853デフォルトの名無しさん2014/11/22(土) 18:07:21.85ID:X2dPHIKP
meteorがver1.0になった今、Railsの存在意義が問われる
0854デフォルトの名無しさん2014/11/22(土) 21:17:33.94ID:l5CnwIKY
meteorなんてまだまだだよ
もっとこなれてこないとね
0855デフォルトの名無しさん2014/11/24(月) 00:27:11.00ID:kZ0WyWVZ
時刻指定で任意のコードを実行することって出来ますか? 時間分解能はsleepくらいはほしいです
sleepを連続して実行していくとどうしても誤差が蓄積してしまうので時刻で実行したいです
0856デフォルトの名無しさん2014/11/24(月) 00:52:06.38ID:wCkEdUJA
そういうのはスクリプトの外でやるもんだ
cronなりタスクスケジューラなり
0857デフォルトの名無しさん2014/11/24(月) 01:59:17.24ID:amuxOgLW
知らなかったからmeteor調べてみたけど、こりゃ凄いな
簡易なwebサービスは近い将来js以外要らなくなるのかな
rubyやrailsが古臭いjavaみたいに見えてきた
0858デフォルトの名無しさん2014/11/24(月) 03:28:29.31ID:DrhgZmlI
バトロワスレに居着いてたjs厨か
うざいから他行け
08598552014/11/24(月) 09:10:54.14ID:kZ0WyWVZ
>>856
それだとシステムが複雑になりますし、時間の分解能にも不安があります
ストリーミングサーバー的なものを作っているので実時刻との同期は必須です
ひとまず実時刻との差を監視してsleepする時間を補正するようにしましたが
複雑さが増してスマートな実装ではないので時刻を指定して実行できればと
思います・・
0860デフォルトの名無しさん2014/11/24(月) 09:50:30.21ID:Xgjgsylw
msec単位で実行時間の正確性保証するのはどのスクリプト言語でも無理だ。
RTOS+C言語/アセンブラの組み合わせぐらいしかない。
0861デフォルトの名無しさん2014/11/24(月) 23:54:21.50ID:kSOFqGw4
コンソール(コマンドプロンプト)上でテキストを使った簡単なアニメーションを表示したいのですが
1画面分の描写(print)ですら時間が掛かってしまう上に、画面をクリアするとちらついてしまいます。
win32apiを使えばコンソール上でのダブルバッファリングもできるようですが……。
そもそもRubyでやることではないような気もするのですが、何か良い案は無いでしょうか。
0862デフォルトの名無しさん2014/11/25(火) 00:41:45.41ID:k1lxDZb5
>>861
Linuxにする。
0863デフォルトの名無しさん2014/11/25(火) 00:42:34.00ID:nXU8Vkzf
>>859
wheneverはどう?
結局cronだけど、rubyで書けるからシステムの一部っぽくできると思うけど
0864デフォルトの名無しさん2014/11/25(火) 02:10:00.66ID:GhhP0JI7
>>861
HSP
0865デフォルトの名無しさん2014/11/25(火) 03:49:54.47ID:hT+PxFm6
>コンソール(コマンドプロンプト)上でテキストを使った簡単なアニメーション
それを簡単だと思ってるのはお前だけだ
「パソコンに簡単な調理をさせたい」とか言ってるレベル
0866デフォルトの名無しさん2014/11/25(火) 04:38:41.54ID:kfvoFU9d
「簡単なアニメーションを表示させること」を簡単だとは言ってないだろw
0867デフォルトの名無しさん2014/11/25(火) 04:47:13.37ID:xqodwvk6
簡単と単純は違う
混同するな
0868デフォルトの名無しさん2014/11/25(火) 05:16:38.77ID:5ygUTnCM
簡単な機械とか言うし突っ掛かるところでもないな
0869デフォルトの名無しさん2014/11/25(火) 05:29:17.43ID:x/sCQWRu
>win32apiを使えばコンソール上でのダブルバッファリングもできるようですが

自分で解決策わかってるのに何で質問するかね
0870デフォルトの名無しさん2014/11/25(火) 06:58:35.14ID:RMbmAFFA
http://www.rubydoc.info/github/luislavena/win32console/Win32/Console/API
0871デフォルトの名無しさん2014/11/27(木) 04:41:08.12ID:6zp/+XUy
正規表現について質問があります。
リンク先のApacheのログ解析の話です。 http://pmakino.jp/tdiary/20070907.html
.*が最長一致ということは理解できたのですが、[^ ]*が最短一致になる理由がわかりません。
*が付いているので最長一致に見えるのですが。。
よろしくお願いします。
0872デフォルトの名無しさん2014/11/27(木) 05:24:29.91ID:isFZ5zeq
* は0回以上の、+ は1回以上の最長マッチで、
*?、+? は最短マッチ

[^ ]* は空白以外の文字の最長マッチじゃないの?
試してみれば?
"abc def ghi" → "abc"
0873デフォルトの名無しさん2014/11/27(木) 05:24:39.10ID:ureSvumC
>>871
先ず[^ ]がスペース以外の文字にマッチするということ。
リンク先読んでないが、
スペース以外の文字の繰り返しだから、スペースが出てきたら、そこまでしかマッチせず最短一致となる。
最長一致だとマッチ内容にスペースが含まれることがある。
よく後ろにその除外した文字が続く。
スペースわかりにくいので違う文字だと、.*_と[^_]*_の違い。
0874デフォルトの名無しさん2014/11/27(木) 07:00:47.62ID:6zp/+XUy
>>872,873
なるほど、理解出来ました。ありがとうございます!
0875デフォルトの名無しさん2014/11/27(木) 07:21:17.53ID:UAvli5hO
それ最短一致って言わねえから
0876デフォルトの名無しさん2014/11/27(木) 10:35:09.67ID:4ox/+qp0
・REエンジンに最短一致が無い
・否定文字クラスを使って簡単に表現できる
という場合に最短一致ぽい感じでマッチさせるためのイディオム
かな?
0877デフォルトの名無しさん2014/11/27(木) 12:29:32.39ID:3FdyDcSl
きこえるか
きこえるだろ
0878デフォルトの名無しさん2014/11/27(木) 12:31:34.44ID:kRLD/q+H
歴史的に、俺達はマカーだ!Windowsを成敗してやる!みたいな人が増えて
初期段階でWindowsは対象外扱いになって以降Windowsお断りの流れが残ってる。
だから、Windows(デスクトップ)で使いたいのならJRubyにしてJava経由で外部に
アクセスすればいいんじゃないか?
0879デフォルトの名無しさん2014/11/27(木) 12:35:30.92ID:4ox/+qp0
ねーよ。
著名コミッタでWindowsが日常使うインフラ、という人は普通にいるし。
0880デフォルトの名無しさん2014/11/27(木) 13:27:38.66ID:Zw4dztb/
どこが最短一致っぽいのか理解できん
空白有り無しと最長最短は全く関係ないだろ
0881デフォルトの名無しさん2014/11/27(木) 19:59:53.06ID:x9t4QVIg
「簡単なアニメーションを表示させること」を簡単だとは言ってないだろw
0882デフォルトの名無しさん2014/11/27(木) 20:00:52.83ID:x9t4QVIg
881はミスです。ごめん
0883デフォルトの名無しさん2014/11/27(木) 20:04:51.12ID:Gbz/cNhA
sauche labがjavascriptを主軸にした辺りでブームは終わってた
0884デフォルトの名無しさん2014/11/27(木) 23:46:42.90ID:VtF/vuC1
>>871のリンク先読んでみたが、>>871の誤読じゃねーか。
0885デフォルトの名無しさん2014/11/28(金) 09:01:09.20ID:9YzKv7io
rubyのリダイレクトってどうやんの?

require "cgi"
cgi=CGI.new
print cgi.header({
"status" => "REDIRECT",
"Location" => "http://yahoo.co.jp";})

これでstatus 302 Found Content-Type:text/html Location: http//yahoo.co.jp
とエラーになるのだけど
0886デフォルトの名無しさん2014/11/28(金) 14:04:23.45ID:9YzKv7io
Rubyのメソッドの位置
呼出しの後に書く方法ないの?
JavaScriptのfunctionの位置が後ろでもいいのと同じように
0887デフォルトの名無しさん2014/11/28(金) 14:31:02.42ID:9YzKv7io
レスがついてないかと何度も見にくるのが面倒
スレチェッカーみたいなのが必要だな
0888デフォルトの名無しさん2014/11/28(金) 16:33:52.22ID:s06WWqGk
それを>>887が作るんだよ
0889デフォルトの名無しさん2014/11/28(金) 16:36:18.24ID:9YzKv7io
>>888
そうだね作るよ
レンサバとtwitterの連携をして
2chスレとかブログとかの更新状況をチェックさせたいね
0890デフォルトの名無しさん2014/11/28(金) 17:22:02.27ID:4Q/0sUIl
>>886
kwsk
0891デフォルトの名無しさん2014/11/28(金) 17:24:27.65ID:9YzKv7io
>>890
def test
puts "a"
end
test

としたらエラーだよね
0892デフォルトの名無しさん2014/11/28(金) 17:29:57.85ID:9YzKv7io
>>891
逆だった
test
def test
puts "a"
end

としたらエラー?
0893デフォルトの名無しさん2014/11/28(金) 17:32:19.81ID:dYLaj0CI
前方参照だっけ
main を造れば解決

def main
test
end

def test
puts "a"
end
0894デフォルトの名無しさん2014/11/28(金) 17:38:43.47ID:9YzKv7io
>>893
ありがとう!
やってみる
0895デフォルトの名無しさん2014/11/28(金) 23:02:39.06ID:s06WWqGk
Rubyの参考書でピッケル本よりいいのある?
なるべく最新版のRubyの説明が欲しいんだけど
0896デフォルトの名無しさん2014/11/28(金) 23:06:23.12ID:X9B4zpDK
今からRubyやるなんてやめとけ
0897デフォルトの名無しさん2014/11/28(金) 23:57:36.86ID:rB015CFc
>>896
じゃあ、オススメは?
って聞くと返事ないんだなこれが。
0898デフォルトの名無しさん2014/11/29(土) 00:26:10.82ID:oYYPhm21
Rubyは技術的負債
0899デフォルトの名無しさん2014/11/29(土) 00:51:08.50ID:VwCgtTmZ
>>885
>{"status" => "REDIRECT",
>"Location" => "http〜"}

Hashの書き方は、以下のどちらか。:b はsymbol
{a: "あ", :b => "123"}

>>895
たのしいRuby、第4版、2013
0900デフォルトの名無しさん2014/11/29(土) 01:29:23.17ID:oGP8NIsU
firefox+ruby+linux/windowsで

if $url.include?("google")
$html.gsub!("google", "goooooooogle")
end

みたいなフィルタスクリプト書いて
好き勝手にHTML書き換えるような方法ってないですか
greasemonkeyのruby版的な
0901デフォルトの名無しさん2014/11/29(土) 01:45:08.48ID:7z0e2gGb
proxyでいいんじゃないの
0902デフォルトの名無しさん2014/11/29(土) 04:01:09.37ID:1zUyeCTh
>>899
文字列をキーとするハッシュを期待しているところに
シンボルをキーとするハッシュを渡したらいけない
本を読み違えてないか

>>885
情報足りないけどとりあえずNPHでぐぐって
0903デフォルトの名無しさん2014/11/29(土) 05:28:59.78ID:SoXvwZNw
本が間違ってるとか
0904デフォルトの名無しさん2014/11/29(土) 06:50:43.55ID:1zUyeCTh
>>885
ごめんNPH云々なしで。書いてきた
http://codepad.org/3Z6gcanA
0905デフォルトの名無しさん2014/11/29(土) 11:29:23.68ID:JNwBuwtk
Effective Ruby あなたのRubyをより輝かせる48の特別な方法
http://www.amazon.co.jp/dp/4798139823/
0906デフォルトの名無しさん2014/11/29(土) 17:40:54.50ID:SoXvwZNw
>>905
表紙からして怪しいな
0907デフォルトの名無しさん2014/11/30(日) 03:55:44.88ID:b4nmdqGs
>>902
あるある
0908デフォルトの名無しさん2014/11/30(日) 13:25:05.09ID:LSdEo5lN
Rubyの古本を読んで興味をもったのですが
今、オススメの開発環境てどんな構成でしょうか

古書によるとIDEがRDE
ActiveScriptRubyとか書いてあり、
調べた結果
ソフトの更新が2007/08/02とか・・ちょっと不安なもので。
0909デフォルトの名無しさん2014/11/30(日) 14:15:47.70ID:R4jt06qn
>>908
VMにLinux入れてその上で開発
使うのはエディタ
Sublime TextでもvimでもEmacsでも好きなのをどうぞ
0910デフォルトの名無しさん2014/11/30(日) 14:42:59.54ID:DANrX/9U
Win上でバッチ処理とかやりたいならPythonかPerlだな
Ruby使うんならまずはWinを捨てるのが先だ
0911デフォルトの名無しさん2014/11/30(日) 14:54:07.38ID:1W1RBCUH
>>908
今あなたの使っている開発環境でRuby2.x対応のプラグインかなんか探してください
0912デフォルトの名無しさん2014/11/30(日) 15:47:02.16ID:z7OEJfrL
以前はemacsかvimが多かったけど職場ではめっきり減ったなぁ
仕事じゃないならemacsで十分だけど
0913デフォルトの名無しさん2014/12/01(月) 22:21:30.46ID:x2gQFt7S
エディタやIDEの機能を頼らなくなるのはそれだけ
見通しが良くバグの少ないコードを書いている証でもある。
0914デフォルトの名無しさん2014/12/01(月) 23:55:20.61ID:zTqy9NYJ
コードジェネレーターみたいなものは持っているよね?
0915デフォルトの名無しさん2014/12/02(火) 01:13:50.70ID:e+ByT0s5
IDEはともかくVimやemacsなどの高機能エディタに頼るのは最悪
エディタを使いこなしてると自負する馬鹿は大抵コピペコードを量産するカス
0916デフォルトの名無しさん2014/12/02(火) 01:29:26.47ID:h63pZmVM
>>915
知り合いに恵まれてないだけ。
0917デフォルトの名無しさん2014/12/02(火) 01:30:37.60ID:2myFe3p+
バギーな俺様コードより実績の有るコピペコードの方が遥かにマシ。
0918デフォルトの名無しさん2014/12/02(火) 01:59:01.87ID:0dk6vh22
emacsやvim使い続けてる優秀なプログラマはたくさんいるよ
低レイアになるほどIDEに依存する部分は少なくなるし
ただのアプリ開発やWEBエンジニアが必死こいてemacsカスタマイズしながら効率は悪いやつとか
マジで死ねって思うけどね
0919デフォルトの名無しさん2014/12/02(火) 08:13:53.30ID:/FF2eUWr
rubygems.org落ちた?
0920デフォルトの名無しさん2014/12/02(火) 13:54:53.03ID:2HEveihy
各行の出力をソースコード中の#=>の後に表示するのってどうやってやるんでしたっけ
0921デフォルトの名無しさん2014/12/02(火) 20:48:46.36ID:baLmU3AB
vim+rubyですね
0922デフォルトの名無しさん2014/12/03(水) 09:19:57.96ID:rVeqzZtK
begin
  メインの処理
ensure
 puts("err",$!,$@)
end

と同等の処理を

require 'catcherr'
メインの処理

に書き換えることってできないですかね
begin ensure endで囲わず
最外周のブロックから飛び出た例外を何処かでキャッチするような実装
0923デフォルトの名無しさん2014/12/03(水) 19:05:09.67ID:RfWQR09u
RubyのFile.openは明示的にcloseしないと何が起こる? - QA@IT
http://qa.atmarkit.co.jp/q/58

また、1.8.7以降ではSymbol#to_procを利用して、
File.open(file, &:read)
と書くこともできます。
おそらくこれを見てイディオムとして
覚えたのではないかと思いました。

↑のページに書かれているイデオムってどこで覚えるんですか?
openメソッドで調べても&:readとか無いんですが。
0924デフォルトの名無しさん2014/12/03(水) 20:28:13.06ID:AZ6paHjN
>>923
& はブロックを渡すときに使う
ブロックでないもの (:read) を渡そうとしたときには、#to_proc が呼ばれてその結果が渡される
File.open(file, &:read) は File.open(file) {|f| f.read } と等価
0925デフォルトの名無しさん2014/12/03(水) 21:32:25.36ID:xz3L3IMu
>>923
File.openに限らず、メソッド呼び出し時の&という修飾子やSymbolに関する仕様なので
リファレンスマニュアルだとこのあたり参照
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcall.html#block
http://docs.ruby-lang.org/ja/2.1.0/class/Symbol.html#I_TO_PROC
0926デフォルトの名無しさん2014/12/03(水) 22:01:16.96ID:UQcSH8bq
そこらへんの考え方は一貫性があって良いと思うが
実際に読み書きすると分かりにくく忘れやすい。
やろうとしていることは単なるレシーバーの省略に過ぎないのにブロックと
Symbolの挙動に関する仕様を覚えてないといけないせいだろう。
0927デフォルトの名無しさん2014/12/04(木) 08:45:48.17ID:ce/wf1ga
>>920
StringIO を使えば?
StringIOは入出力を行う振りをする。
つまり、StringIOに対して、入出力できる

require "stringio"

io = StringIO.new
io.puts("abc")
0928デフォルトの名無しさん2014/12/04(木) 11:01:14.33ID:isKydaHb
>>927
自力でやるのでなく、ライブラリか何かでできたような気がしていたのですが勘違いでしたかね
0929デフォルトの名無しさん2014/12/04(木) 11:27:49.19ID:V4T1Mi+W
エディタやIDEの拡張スクリプトとRubyで実現すべきなんじゃないかそれ
0930デフォルトの名無しさん2014/12/04(木) 18:26:13.52ID:vTyshef8
xmpfilter
0931デフォルトの名無しさん2014/12/04(木) 19:17:37.69ID:isKydaHb
>>930
これだ!名前忘れてた ありがとうございます
0932デフォルトの名無しさん2014/12/06(土) 09:30:37.61ID:SY1DjOc1
同じカラム定義のテーブルAとテーブルBがあるとして、テーブルAのデータを丸ごとテーブルBにコピーするバックアップ処理をしたいのですが、中々上手くいきません。
いい方法があれば教えていただけないでしょうか
0933デフォルトの名無しさん2014/12/06(土) 09:59:59.94ID:O2PZNRYp
INSERT INTO B SELECT * FROM A
0934デフォルトの名無しさん2014/12/06(土) 13:53:19.49ID:SY1DjOc1
>>933
ruby on railsの話ですので、スレ違いのようでした。申し訳ありません。
0935デフォルトの名無しさん2014/12/06(土) 15:48:55.31ID:fsY1bGfg
>>934
バックアップならDBの機能を使うのが一番確実かつ高速
0936デフォルトの名無しさん2014/12/06(土) 22:50:21.90ID:97ikO/+S
JavaとかでありがちなCompositeパターンを用いた様々な図形の面積の和を求める例題をやってみてるんだけど、上手く動かないのでアドバイスください
http://ideone.com/4zVsIk#
0937デフォルトの名無しさん2014/12/06(土) 22:56:02.59ID:97ikO/+S
>>936
f = Figure.new
f.calcAreaSum
は
r = Region.new
r.calcAreaSum
の間違い
0938デフォルトの名無しさん2014/12/06(土) 22:58:28.94ID:O2PZNRYp
>>936
http://ideone.com/Feolqo
compositeならRegionもFigureを継承しろ
0939デフォルトの名無しさん2014/12/06(土) 23:03:48.85ID:97ikO/+S
>>938
ありがとう。助かりました。
0940デフォルトの名無しさん2014/12/06(土) 23:06:18.79ID:97ikO/+S
>>938
すまん、ひとつ質問。
calcAreaSumメソッド内のsumが@sumになってなかったのが原因だったみたいで、そこを修正したら動いた。
RegionがFigureを継承していないといけないもの?
Regionが継承している必要はないかなと思ってたのだけれど。
0941デフォルトの名無しさん2014/12/07(日) 07:41:59.28ID:O6jlUXZ3
>>940
必要ないかどうかはともかくそうしないとcompositeにならん
枝と葉を同一のインターフェースで扱うのがcompositeパターンだ
まあ実際compositeが必要なケースなんてまず無いけどね
設計者のオナニー
0942デフォルトの名無しさん2014/12/08(月) 00:17:30.45ID:foBCsgK4
慣れてきたら
・calcAreaSum以外の任意のメソッドも同様の振舞をするように
・継承を使わず
・メソッド定義を繰り返さずに済む
ように作ってみよう。まぁオナニーつーか練習でな。
0943デフォルトの名無しさん2014/12/08(月) 00:50:44.64ID:aCs4a6OV
>>941
なるほど、もっかいCompositeがどんなものか見てみる。

>>942
ん??全然分からん…
0944デフォルトの名無しさん2014/12/08(月) 23:04:19.93ID:4fpsMANT
Rubyのしくみ -Ruby Under a Microscope-
http://www.amazon.co.jp/dp/4274050653/

本屋で見つけて買ってみた。
2章ぐらい読んだが、すごく面白いのでお勧め。
0945デフォルトの名無しさん2014/12/08(月) 23:16:33.06ID:NGUYkyOW
おれもいま読んでる!
0946デフォルトの名無しさん2014/12/09(火) 17:17:06.41ID:a/7FaIvm
どんな感じで面白いの?

作りながら・・の方を読んでるけど実用的で理解し易かった
0947デフォルトの名無しさん2014/12/09(火) 19:15:57.80ID:6Ly9A1WV
ここは初心者スレッドだったか
言語フェチとか分解フェチみたいな人じゃないと厳しいかも
0948デフォルトの名無しさん2014/12/09(火) 19:19:14.74ID:2/WMNdES
面白い世界があるよ、という事が伝わるなら、初心者の励みになるんじゃないか?
0949デフォルトの名無しさん2014/12/09(火) 19:21:43.66ID:56meK9wT
Rubyは「実装が仕様」な言語だからあんまり深いところに入り込まないほうがいいよ
基本的にバッドノウハウだ
0950デフォルトの名無しさん2014/12/09(火) 22:02:10.16ID:7jn1Y2FE
>>946
「作りながら・・」のほうは Ruby を使って何かアプリを作ろうとしている人にとって、
有益な良い書籍だね

一方、>>944 は(Amazon で目次レベルでの判断だけど、)
Ruby インタプリタそのものに興味がある人、
あるいは言語処理系(インタプリタやコンパイラ)の自作に興味がある人向けの本に見える

Ruby 1.8 向けには RHG(Ruby Hacking Guide) と呼ばれる本があって、
後者の人達には好評だった(とはいえ Ruby プログラマ全体からすれば一部だけど...)
・『Rubyソースコード完全解説』サポートページ
 http://i.loveruby.net/ja/rhg/
でも Ruby 1.9 で導入された仮想マシン(YARV)をベースにした RHG に相当する本は存在せず、
登場が長く待たれていた

>>944 があらゆる Ruby プログラマにとってすぐ役に立つ本だとは決して言えないけど、
いつも使っている Ruby の内部構造を知ることは将来的なステップアップにつながると思う
(車やバイクを趣味としている人が、エンジン等のメカニズムに興味を持つのと似ている)
0951デフォルトの名無しさん2014/12/09(火) 22:28:00.64ID:zeFrRkpb
>>949
実装が仕様、とバッドノウハウがリンクする部分の論理がわからんのだが
0952デフォルトの名無しさん2014/12/09(火) 23:40:04.76ID:u5JX9V0E
【IT】中高生Rubyプログラミングコンテスト開催 [14/12/08]?2ch.net
http://daily.2ch.net/test/read.cgi/newsplus/1418097669/
0953デフォルトの名無しさん2014/12/10(水) 00:31:41.98ID:U+9OJfKH
YARVの作者の人も寄稿しているというのでそっちの詳しい話も読めるのかな、と
思ったら単に〜日でこんなの書けた俺スゲエ、って自慢話みたいな薄い内容でガッカリ
味付けは「みんなの参加も待ってるよ」といい感じに見せて実は単なる自慢だよなアレ

そういうのはどうでもいいからもっと技術的に実のあること書いて欲しかった。
0954デフォルトの名無しさん2014/12/10(水) 00:33:46.52ID:QXcQ5EoT
>>953
そういう取り方しかできない人は何読んでも一緒だよ
0955デフォルトの名無しさん2014/12/10(水) 05:04:05.05ID:+IoSb7+r
>>951
特定の実装のみに深く依存した知識やテクニックをバッドノウハウと呼ぶのはわりと普通だろ
プログラミングなんてバッドノウハウ覚えてなんぼの世界だが、程度問題だね
0956デフォルトの名無しさん2014/12/10(水) 05:17:46.52ID:dRumJmjh
Ruby 初心者スレッド Part 55
0957デフォルトの名無しさん2014/12/10(水) 10:32:12.86ID:4ySbe8P6
Rubyみたいな技術的負債生成言語
得意がって使っている頭の弱い人見ると
かわいそうになってくる
0958デフォルトの名無しさん2014/12/10(水) 14:39:23.04ID:X/Vb7CZT
かわいそうに思ったらちゃんと優しくするんだぞ
0959デフォルトの名無しさん2014/12/10(水) 20:14:26.27ID:qlA9G0h0
はあ
Ruby使ってて強い奴一杯いるから頭の弱いなんてことはないと思うが
0960デフォルトの名無しさん2014/12/11(木) 00:32:45.57ID:KeFdm/Mm
vectorでn個要素を右にずらすみたな処理ってかけますか?
2個右にずらすなら、
v = Vector[0, 1, 2, 0, 0]
p v.slide(2) # => [0, 0, 0, 1, 2]
というイメージです。

今のところ、arrayで持っておいて、
v = [0, 1, 2, 0, 0]
original_length = v.length
p v.unshift(Array.new(2, 0)).flatten.take(original_length)
とやっています。

もっと綺麗な書き方があれば教えて下さい
Vectorには拘るわけではないので、どんな方法でも構いません
0961デフォルトの名無しさん2014/12/11(木) 00:43:54.20ID:45mXFYqI
>>960
Array#rotate
0962デフォルトの名無しさん2014/12/11(木) 00:48:00.61ID:45mXFYqI
あぁ、違うか

(Array.new(0, 2) + v).take(v.length) てことかな?
0963デフォルトの名無しさん2014/12/11(木) 00:52:21.31ID:45mXFYqI
(Array.new(2, 0) + v).take(v.length) の間違い

他にも
Array.new(2, 0) + v[0...-2]
v.rotate(-2).fill(0, 0, 2)
とか書けるね
0964デフォルトの名無しさん2014/12/11(木) 23:39:59.15ID:j2eKWXxC
>>961
rotate 知らなかった
調べたら他にも知らないのがあった reverse choice
0965デフォルトの名無しさん2014/12/12(金) 11:22:11.81ID:wvqGZ6uF
ファイルの末尾の行を削除するのに以下のようにしているのですが
もっと綺麗な書き方ってありますでしょうか?

tmp = File.open("foo","r").read.sub(/\n.*\z/, "")
File.open("foo", "w"){|f| f << tmp}
0966デフォルトの名無しさん2014/12/12(金) 11:47:33.50ID:r3Fvlg1D
メモリ馬鹿喰い
0967デフォルトの名無しさん2014/12/12(金) 12:02:57.32ID:CU7D9V/b
Array.write(Array.read("foo")[0..-1])
0968デフォルトの名無しさん2014/12/12(金) 19:34:47.77ID:1pIHSp7p
>>967
何これ?
今使っているの1.9.3だけど最新バージョンだとこんなのできるの?
0969デフォルトの名無しさん2014/12/12(金) 21:12:49.28ID:acGnDnrN
2.0.0でも2.1.5でもできないぞ
0970デフォルトの名無しさん2014/12/12(金) 21:13:06.40ID:8AuYnR02
>>944
> Rubyのしくみ -Ruby Under a Microscope-
> http://www.amazon.co.jp/dp/4274050653/

Amazon売り切れなので、PDFで買ってみた。 500円安い。
http://estore.ohmsha.co.jp/titles/978427405065P
0971デフォルトの名無しさん2014/12/12(金) 23:48:26.96ID:1pIHSp7p
>>965
こんなんはどうぢゃろ?

File.open("foo", "r+"){|f| f.truncate(f.size - f.readlines[-1].bytesize)}

>>969
Thanks
そうかやはり出来ないか・・
0972デフォルトの名無しさん2014/12/13(土) 00:25:27.81ID:kA/WgxRu
>>970
読み終わったけど得るもの少ない
敢えて抽象的に説明しようとしてるんだろうけど無理矢理感が半端ない
実装はコラム枠で触れる程度
まぁ中卒高卒プログラマで溢れる現在にはこれぐらいがいいのかね
0973デフォルトの名無しさん2014/12/13(土) 00:28:40.88ID:+p+L+BhL
>>970
素晴らしいサービスだけどもうちょっと書籍の種類増やして欲しいな
0974デフォルトの名無しさん2014/12/13(土) 00:36:48.47ID:Iq5cIN4q
オーム社のPDF本何冊か買ってるけど、やっぱリフロー可能なepubの方がいいなあ
アスキーとかはそうなってる
0975デフォルトの名無しさん2014/12/13(土) 08:43:45.27ID:3ehKG0WS
最近よく見かける質問だが、
配列Aに名前、Bに年令、Cに電話番号が入っている時、
B年令順にソートしたとき、
A,Cも同じように入れ替わるのは、どう作ればよい?
ただし、DBを使わず

クラスを作って、名前・年令・電話番号フィールドを作り、
年令でクラスごと、ソートするのか?

クラスに、Comparatorインターフェースを追加して、
比較関数 <=> を定義すればよいのか?


また、sortは比較する時に、同じ関数を何度も呼んで非効率だから、
sort_byを使えばよいのか?

sort_byなら、関数を呼んだ結果を保存して、
その結果を使って比較するから
0976デフォルトの名無しさん2014/12/13(土) 08:54:48.07ID:1EyzOdES
>>975
Hashの配列で .sort_by{| hash | hash[:age] } するとか
サクッとデータ構造定義するにしてもclassでやらずにStruct使うとか

ちょっとしたことでクラス定義しちゃうのも、ある意味
クラスの扱いが手軽なRubyらしくていいかな、とも思うけどね
0977デフォルトの名無しさん2014/12/13(土) 09:08:10.50ID:Iq5cIN4q
そう言う時はクラス作るだろ。
Cなら構造体で。

最初からなんでもコンテナが用意されているのに慣れていると、こういうバカみたいな
質問する奴でてくるのかな?
0978デフォルトの名無しさん2014/12/13(土) 09:09:57.14ID:3ehKG0WS
集合演算を配列A=[1,2],B=[2,3]に使う際、
A + B → 1,2,2,3 重複あり
A | B → 1,2,3 重複なしとなるが、

順列ではなく組合せで、配列が同じかどうかを判別したい
[1,2,2][2,1,2][2,2,1] → 1,2,2
左のどの順列も、[1,2,2]と同じ

Rubyで、組合せマッチはどうすればよい?
0979デフォルトの名無しさん2014/12/13(土) 09:11:24.05ID:KEKavmkB
質問重ねる前に礼ぐらい書きなさいよ
0980デフォルトの名無しさん2014/12/13(土) 09:11:32.36ID:1Rys2+MB
>>978
Set
09819752014/12/13(土) 09:19:06.92ID:3ehKG0WS
>>976
Hashの配列とはどういう意味?
難しくてよくわからない

A名前は同姓同名もありで、このレコードはキーなしで、
幾つかのフィールドを持つ、単なる構造体と考えてください
0982デフォルトの名無しさん2014/12/13(土) 09:22:41.20ID:uQ37H43s
sorted_index=(0..B.size).sort_by{|i|B[i]}

sorted_index.each{|i|
p [A[i],B[i],C[i]]
}
0983デフォルトの名無しさん2014/12/13(土) 09:23:28.89ID:uQ37H43s
あ、ミス
×:sorted_index=(0..B.size).sort_by{|i|B[i]}
○:sorted_index=(0..B.size-1).sort_by{|i|B[i]}
09849752014/12/13(土) 09:23:30.88ID:3ehKG0WS
うんうん、皆様、回答ありがとう
0985デフォルトの名無しさん2014/12/13(土) 09:26:51.09ID:1Rys2+MB
>>981
最近の言語では列ごとに縦の配列を作るなんてFortranや昔のCみたいな前時代的な発想はしない
確かにメモリの利用効率やアクセス効率の面でメリットはあるが、
Rubyの配列はもともとクソ非効率だから意味は無い
レコードごとにハッシュ作るような昔の人が見たら卒倒するようなことすら平気で行われる
0986デフォルトの名無しさん2014/12/13(土) 09:27:56.22ID:uQ37H43s
>>978
処理負荷気にしなくていい程度なら全要素ソートしてから比較できればいい
A.map(&:sort) | B.map(&:sort) とか
0987デフォルトの名無しさん2014/12/13(土) 09:30:00.76ID:DLY4IovQ
Ruby 初心者スレッド Part 56©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418430552/
09889752014/12/13(土) 09:36:37.22ID:3ehKG0WS
>>982-983
配列A,B,C自体は、並べ替えずそのままで、
ソート結果のインデックスのみを使うんだね

もし配列A,B,C自体を並べ替えるのなら、
クラスやStructを使えばよいの?

>>980
Setですか、調べてみます

皆様、回答ありがとう
0989デフォルトの名無しさん2014/12/13(土) 09:52:04.58ID:uQ37H43s
正しくは、というかちゃんとするならクラスやStructだろうね
その場で並び替えたいだけならいくらでもやりようはあるよ
A,B,C=[A,B,C].map{|a|sorted_index.map{|i|a[i]}}
とか
0990デフォルトの名無しさん2014/12/13(土) 09:54:01.10ID:uQ37H43s
B,A,C=B.zip(A,C).sort.transpose
とか
09919752014/12/13(土) 09:54:01.70ID:3ehKG0WS
>>980
>>978
は同じ要素ありだから、集合を使えない

Set,SortedSetは集合だから、同じ要素は持てない
0992デフォルトの名無しさん2014/12/13(土) 09:57:09.43ID:1Rys2+MB
>>991
だったらソートしてから比較しろ
09939752014/12/13(土) 10:06:02.73ID:3ehKG0WS
map,zipなど、魔法のような関数が、次々と出てきますね

Rでも行列を入れ替える関数などに、驚いたものですが、
もはや、Rubyは神です!
Rubyの奥深さを、少し知ることが出来ますた
0994デフォルトの名無しさん2014/12/13(土) 10:07:58.45ID:1Rys2+MB
土方言語のVBやC#やJavaでもできるけどね
0995デフォルトの名無しさん2014/12/13(土) 10:14:06.14ID:DLY4IovQ
関数とかインタフェースとか言ってる時点でお察し
レス数が950を超えています。1000を超えると書き込みができなくなります。