トップページ⇒tech
993コメント322KB

Ruby 初心者スレッド Part 57©5ch.io [転載禁止]©5ch.io

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2015/03/12(木) 22:08:53.45ID:qh8O4P61
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

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

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

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

逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん2015/03/12(木) 22:10:29.80ID:qh8O4P61
前スレ
Ruby 初心者スレッド Part 56
http://peace.2ch.net/test/read.cgi/tech/1418430552/

いろいろミスった すまん
0003デフォルトの名無しさん2015/03/12(木) 22:56:21.44ID:xOWYefW7
>>1乙
0004デフォルトの名無しさん2015/03/12(木) 23:00:25.55ID:E4K/qych
Ruby 2.2.1 リリース
0005デフォルトの名無しさん2015/03/13(金) 10:08:50.27ID:ua+Lgk3v
>>1-2
乙
0006デフォルトの名無しさん2015/03/14(土) 10:46:58.67ID:tvgpDvXZ
rubyで開発環境にMac使ってる人って
どの機種を買ってるの?
ノートでもいけるもんなの
0007デフォルトの名無しさん2015/03/15(日) 03:48:59.75ID:GfmgeCmk
Rubyプログラム実行したくて今日はじめてDLしたんですが、
実行したら、

写真袋.rb:9:in `require': no such file to load -- json (LoadError)
from 写真袋.rb:9

って出るのはなんでですか?
他の人はたぶん実行できてるみたいなんです
ジャバはインストール済みです
0008デフォルトの名無しさん2015/03/15(日) 04:06:19.16ID:Igs3//KG
$ gem install json
0009デフォルトの名無しさん2015/03/17(火) 08:20:27.14ID:jjUxdnY2
CentOS7上でRedmine動かそうとしてるんだけど、SELinuxを有効にしたままだと

uninitialized constant ActionView::Helpers::ActiveModelHelper (NameError)

が出る。
エラー発生部分のコードは

include ActiveModelHelper

で, 上のほうで

module ActionView #:nodoc:
module Helpers #:nodoc:
extend ActiveSupport::Autoload

autoload :ActiveModelHelper

などと書かれているんだけれども、これはActiveModuleHelperが読み込まれてないとみるべき?
0010デフォルトの名無しさん2015/03/17(火) 22:46:50.46ID:nsNWbIEZ
includeで読み込むのはC言語
001192015/03/18(水) 01:52:07.57ID:ZeAfVT3v
>>10
Rubyさんは初めて触るんですわ・・・・(主にPerl)


とりあえず解決したのでご報告。
redmineのbundleのインストール先ディレクトリ vendor/bundle ディレクトリ以下の全ファイルにセキュリティコンテキスト httpd_modules_t を付与したら正常に起動した。
audit.logにもdeniedのログが残ってなかったので, gemsのあるディレクトリに手当たり次第にセキュリティコンテキスト変えながらテストしたら前述の条件で動いた。

/* RedmineのインストールガイドにとりあえずSELinuxを切りましょうとかあるのはどうかと思う */
0012デフォルトの名無しさん2015/03/19(木) 02:25:41.65ID:noU2qMQu
SELinuxを切るというのは、
どのプログラミング言語でも書いてある


ところで、9bitのフラグを使いたいが、
Rubyにはビットセットは無いのか?

9bitだと、2バイト(16bit)で使うのか?
0013デフォルトの名無しさん2015/03/19(木) 08:34:25.16ID:pl6HuOAu
ビットセットってなんぞ。
Cのビットフィールドのことか?ネーヨ。

そーゆーのはFixnumのインスタンス変数と各ビットのアクセサ定義したクラスかな。

Fixnumのサイズはsizeof(long)なんで実装依存な。
http://docs.ruby-lang.org/ja/2.2.0/method/Fixnum/i/size.html
0014デフォルトの名無しさん2015/03/19(木) 14:08:39.29ID:TrzpuitZ
Rubyを始めようと思い、Ruby 2.2.1 のwindows installerをダウンロードしました。
しかし、このインストーラーがダブルクリックしてもさっぱり起動しません。ずっと読み込みマークが出たまま
何がまずいのかさっぱりわかりません
0015デフォルトの名無しさん2015/03/19(木) 14:35:40.96ID:Wd74eGtb
UACじゃない?
0016デフォルトの名無しさん2015/03/19(木) 15:04:04.86ID:TrzpuitZ
>>15
それでした。ありがとうございます
まったく、一言「ブロックしました」とか出ればいいのに、何も表示されないからどうしたかと思いました

ついでにもう一つ聞きたいんですが、自分のパソコンが64bitだから64bitのを落とせばいいですよね
0017デフォルトの名無しさん2015/03/19(木) 18:34:50.82ID:eg1mQNFt
おっと、15氏宛てだったか
危うく俺が答えそうになったわ
0018デフォルトの名無しさん2015/03/19(木) 19:16:46.50ID:TrzpuitZ
>>17
そんな意地悪しないで下さいよ
サイトを見てまわったら64bitだと環境を構築するのに面倒だというのがいくつかあって不安なんですよ
0019デフォルトの名無しさん2015/03/19(木) 19:54:10.03ID:pl6HuOAu
>>16
RubyDevKitでsoをコンパイルできるgemならいいけど、ものによってはコンパイル済みのsoを配布してたりするので、そういうのは32bitの方がいいかも。
つーわけで、答えは両方入れろ。
64bitの広大なメモリ空間を使いたいこともあるかもしれん。

そうそう、まだ2.2.1はmingwに対応できてないgemがあるので、2.0で様子みとくのがいいかも。
2.0は2.0でなんか挙動がおかしかったりするけど。

そもそも、さんざん言われてるけど、WindowsでRubyを使うのが苦行。
最近のバージョンは特にWindowsでろくにテストされてないかんじだし。
1.8から1.9のときは、開発期間が長かったこともあって、非互換は多くても、糞みたいなバグに悩んだりしなかったかったんだけどなー。
0020デフォルトの名無しさん2015/03/19(木) 20:08:16.98ID:TrzpuitZ
>>19
りょ、両方入れろ…ですか…
最新バージョンが必ずしもいいわけではないんですね(; ・`д・´)
まずは32bitでやってみようと思います
ありがとうございました
0021デフォルトの名無しさん2015/03/19(木) 20:10:15.43ID:rGfQi3lS
Rubyはオワコン
0022デフォルトの名無しさん2015/03/20(金) 09:12:21.28ID:63YhLXCj
メタプログラミングを覚えてからが
rubyのrubyたる始まり
なので
終わってない
0023デフォルトの名無しさん2015/03/20(金) 09:41:05.49ID:63YhLXCj
win版なんか入れずに
win上の仮想linuxでruby使えばいいよ

導入法はドットインストールを参考にすれば猿でも出来る
0024デフォルトの名無しさん2015/03/20(金) 12:05:27.27ID:tF7jVOck
Ruby の文法がかなり安定するのはバージョンがいくつになってからなのかなー.
自分のプログラムはいつも 1.8.7 から一通り動くのを試してる.
ついこないだまで 1.9 が最新だったのに,1.9.3 以前はもうサポートしないって,信じられんな.
Rails とかで追従するのは私の能力だともう無理.
Ruby にはレガシーオプションってのがないのかな?
つか,性能はおいといて言語仕様として Common Lisp レベル(とまでいかなくてもいいけど)
のものを作って,せめて言語仕様の開発は止めて欲しい.
Ruby はプログラミングのし易さがとても好きなんで使ってるけど,これだけがなー.
0025デフォルトの名無しさん2015/03/20(金) 12:07:37.91ID:tF7jVOck
自分だけのプログラムなら良いけど,
公開してるといろんなバージョン環境で使われるからなー.
0026デフォルトの名無しさん2015/03/20(金) 22:50:51.56ID:kel79wje
a=%W(a b c)
x=%W(x y z)
p a
p x
{a,x}.clear
p a
p x

#a, x を clearしたいのですが、できません
#どう書けばいいですか
0027デフォルトの名無しさん2015/03/20(金) 23:12:09.03ID:krs7HuX/
a.clear
0028デフォルトの名無しさん2015/03/20(金) 23:47:40.09ID:0D64RMiq
[a, b].each(&:clear)
0029デフォルトの名無しさん2015/03/21(土) 00:05:13.35ID:/FAWNGWp
>>27,28
できた、ありがとうございます
>>28 のような書き方があるんですね
0030デフォルトの名無しさん2015/03/21(土) 14:07:29.35ID:4rhekeJv
ary = bool ? [x, y] : [y, x]
xとyが長くなると読みにくくなっちゃうんですけど、何かスマートな方法はあるでしょうか?
0031デフォルトの名無しさん2015/03/21(土) 14:14:15.66ID:YzmjW15S
2行で良いんじゃないの

ary = [x, y]
ary.reverse! unless bool
0032デフォルトの名無しさん2015/03/21(土) 17:34:11.61ID:PcOPjagP
プログラミング初心者です。
Ruby とRuby on Railsを習得したいのですが、どうやったらいいですか?
0033デフォルトの名無しさん2015/03/21(土) 18:13:15.26ID:4pneRj7M
>>32
入門サイトを探して、そこを見ながら動かしてみるのが一番
0034デフォルトの名無しさん2015/03/21(土) 19:05:32.48ID:Vk/jcLRo
http://dotinstall.com/lessons
0035スッキリ厨2015/03/22(日) 01:10:13.92ID:zalLAL+t
たのしいRuby 第4版、2013

この本を読むと、Rubyの文法や正規表現も、学べるけど、
RoRなどのフレイムワークは、オブジェクト指向の理解が必須

プログラミング初心者には、長い長い道のり

以下の本を、順に読んで
ttp://peace.2ch.net/test/read.cgi/tech/1419964623/309
0036デフォルトの名無しさん2015/03/22(日) 03:59:04.09ID:L6yG2yVA
>>31
ary = [x, y].tap{|i| i.reverse! unless bool}
とか色々考えてみたんですけど2行に分けて書くのが一番見易そうですね
どうもありがとうございました!
0037デフォルトの名無しさん2015/03/22(日) 10:14:32.83ID:4BB4Mdp+
たのしいRuby読んで
物足りない、複雑なことがしたいと感じてから
他の本に手を出した方が良いと思うけどね

まず
http://dotinstall.com/lessons

で

1.楽しいRuby
2.レシピブックor逆引き
3.作りながら学ぶRuby
3.5 リーダブルコーディング
--
↑ とりあえず動くコードをたくさん作る

↓ 生産性の高いコードを目指す、
--
4.Rubyによるデザインパターン
5.UML
6.Git
or
進みたい分野の専門知識
0038デフォルトの名無しさん2015/03/23(月) 02:07:54.34ID:WpSM24TQ
Ruby/mswinからグラフを書くとしたらやっぱりgnuplotあたりが定石ですか?
他にもっと使いやすいツールとかあれば教えてもらえるとうれしいです

ググるとgruffと言うのもあるようですがRMagick依存らしいのでインストールが
かなり面倒・・・
0039デフォルトの名無しさん2015/03/23(月) 05:54:37.02ID:Mas1vnDZ
質問スレみたいなのなかったのでここで質問させていただきたいです
今までずっと1.9.3と2.0.0使ってたんですが、
最近2.2.1がリリースされたと聞いたんでそろそろいれておこうとRubyInstallerを落として実行したんですけど、
一向にインストールが始まる気配が無くて困っています、どうしたらよいでしょうか?
0040デフォルトの名無しさん2015/03/23(月) 06:56:22.18ID:s7C/DHNu
UACじゃない?
0041デフォルトの名無しさん2015/03/23(月) 07:13:14.12ID:Mas1vnDZ
それがUACも出てこないんですよ……って思ってもう一回実行してみたら、
ちゃんとUAC出てきて普通にインストールできてあれぇ〜!?状態
すみません、お騒がせいたしました……
0042デフォルトの名無しさん2015/03/23(月) 07:14:19.92ID:h9PpfwFW
mswinは上級者バージョン
0043デフォルトの名無しさん2015/03/23(月) 11:32:38.42ID:irbxTPxc
ちょっと上で似たようなやりとりがあったよ
0044デフォルトの名無しさん2015/03/23(月) 18:43:43.77ID:xnTQJ2sa
windows8.1でruby2.2.1を使用している超初心者です。
メモ帳に簡単なプログラムを書いてrubyのコマンドプロントで
実行すると一瞬だけコマンドプロントが表示されて終了してしまいます。
どうしたら治りますか?
0045デフォルトの名無しさん2015/03/23(月) 18:58:04.59ID:pipv5iGo
>>44
知るか( ゚Д゚)ヴォケ
まず、テメーのカスみたいなソースをさらせ
0046デフォルトの名無しさん2015/03/23(月) 19:35:06.76ID:s7C/DHNu
>>44
Windowsキー+R→「cmd」と入力→出てきた黒いウィンドウに「ruby ファイル名(絶対パス)」
0047デフォルトの名無しさん2015/03/24(火) 03:30:38.73ID:UePi+RvZ
>>35
>>37

これどっちが妥当なの
0048スッキリ厨2015/03/24(火) 04:07:53.54ID:figDJ/Iz
これが漏れの編み出した、最速メソッドである!
1. スッキリわかる Java入門 第2版、2014

その後、この2冊を順に読む
2. たのしいRuby 第4版、2013
3. みんなのPython 第3版

123の順番で勉強する。
勉強時間は、1,2に各20H、3に10H

これで、オブジェクト指向、正規表現、
UNIX系でシェルスクリプトの代わりに使える

漏れのやり方は、最初に本で、
50H勉強するから退屈かもね

一方、 >>37 は手を動かしながら試行錯誤する。
どちらでもお好きに
0049デフォルトの名無しさん2015/03/24(火) 13:48:57.56ID:t/9qecum
ruby -e 'p Time.new(1970,1,4).wday'とかってやってこの日の曜日を調べるとなぜかこの日だけ
1.8.7, 1.9.3, 2.0.0 では0(日曜日)なんだけど、2.1.5, 2.2.0 では1(月曜日)になってしまう。(暦上は日曜日)
環境はWindows VISTA SP2 32bitなんだけどどうしてなんでしょうか?
0050デフォルトの名無しさん2015/03/24(火) 13:56:54.86ID:t/9qecum
2.2.1では次のようになっていました…
1970年1月3日午前8時59分59秒 + 1秒 = 1970年1月4日午前9時0分0秒
0051デフォルトの名無しさん2015/03/24(火) 20:18:06.92ID:lrhN9mZD
調べてみると1月2日と3日の午前9時までが、本来なら時差+9時間になるところが、-15時間になってる
これだと24時間分時間が前にずれるはずだけどずれないようになってるみたい
一方で、1月4日も午前9時以降は正常だから、本来1970年1月2日と3日にだけ適用するはずの処理を間違えて掛けてるのかな?
0052デフォルトの名無しさん2015/03/24(火) 20:58:11.45ID:WLCHoINr
>>51
前スレで似たような話しをみた気がする。
0053デフォルトの名無しさん2015/03/25(水) 13:52:18.52ID:ZnaXoefX
<a =href="http://hogehoge.com";>のhogehoge.comだけ正規表現で抜き出したいんだけど
どうすればいいんだろう?
0054デフォルトの名無しさん2015/03/25(水) 14:00:58.02ID:ZnaXoefX
>>53だけど抜き出したいのはhogehoge.comじゃなくてhttp://hogehoge.comだ
0055デフォルトの名無しさん2015/03/25(水) 15:30:36.14ID:VW0J0cUv
>>53
http://ideone.com/1vwuLr
0056デフォルトの名無しさん2015/03/25(水) 17:24:19.06ID:ZnaXoefX
>>55 おお!ありがとう!
0057デフォルトの名無しさん2015/03/26(木) 02:20:22.72ID:uK/WLLbH
x=a[i] if true == a.key?(i)
初歩レベルの質問ですが、もっとよい書き方はありますか?
(a は Hash)

ハッシュを二回調べるのを、一回にしたいです。
0058デフォルトの名無しさん2015/03/26(木) 04:02:10.86ID:LA0ApMoS
>x=a[i] if true == a.key?(i)
if x = a[i]

キーが存在しなければ、nil を返すから、
そのまま、if の条件に書ける

また、Hash.new("")の引数や、
a.fetch(i, "") の第2引数に指定すれば、
キーが存在しない際、指定した文字列、
例えば、空文字列を返す


ちなみに真偽値は、if にそのまま書ける
>if true == 真偽値
if 真偽値

false, nil は偽。それら以外は真。
!真偽値で、真偽値を反転する
0059デフォルトの名無しさん2015/03/26(木) 04:45:10.87ID:kahQGSuP
>>57
begin
x = a.fetch(i)
rescue
end
とか

>>58
{}[:foo]
=> nil
{:foo=>nil}[:foo]
=> nil
の区別がつかない
0060デフォルトの名無しさん2015/03/26(木) 09:04:00.47ID:LA0ApMoS
FROM_ARY = ["AA","BB","CC"] # 置換前
TO_ARY = ["aa","bb","cc"] # 置換後

置換前後の文字列の組が、複数あるとき、
文字列(またはファイル)をどうやって置換するの?
0061デフォルトの名無しさん2015/03/26(木) 09:08:37.48ID:01//DD7r
FROM_ARY.map(&:downcase)
0062デフォルトの名無しさん2015/03/26(木) 09:45:39.97ID:U2cl9cv9
anemoneについて質問
http://blog.nogizaka46.com/
このサイトのブログ画像だけanemoneで取得したいんだけど
画像が他のサイトにおいてあるからどうすればいいのかわからない
教えてください
0063デフォルトの名無しさん2015/03/26(木) 10:26:57.72ID:Megmic4v
>>57
x = a.fetch(i, x)
とか
0064デフォルトの名無しさん2015/03/26(木) 11:12:33.93ID:5qC90pSF
質問です
p /a/.! # => false
p !/a/ # => true
後者の挙動が把握できません
CRuby 2.0.0, 2.1.5 で確認しています
0065デフォルトの名無しさん2015/03/26(木) 11:31:47.16ID:01//DD7r
前者はBoolean negateで、
後者は$_とのマッチを取っている。
$_ = 'a'
p !/a/ #=> false
0066デフォルトの名無しさん2015/03/26(木) 11:41:29.13ID:01//DD7r
http://docs.ruby-lang.org/ja/2.2.0/method/Regexp/i/=7e.html
0067デフォルトの名無しさん2015/03/26(木) 11:49:35.14ID:5qC90pSF
>>65-66
おお、なるほど。ありがとうございます
警告が出なかったのではなんででしょうね
0068デフォルトの名無しさん2015/03/26(木) 12:58:41.09ID:ejfTzuZp
独学なんで聞くのだけど
ユニットテストってどんな時に使うのかな

もちろん想定外の挙動を認識するためだとは思うのだけど
工程の流れ的にどんな時に、どのように用いのだろう。
0069デフォルトの名無しさん2015/03/27(金) 02:48:40.15ID:B/xnV6qp
テスト駆動開発では、
コーディングとユニットテストは、同時に行う

Javaではコードを修正すると、Test用のTestClassも修正して、
JUnit, Jenkinsなどでテストする

Coberturaでコードカバレッジを測定する。
命令網羅(C0)100%・分岐網羅(C1)90%以上かどうかをチェック
0070602015/03/27(金) 05:25:34.33ID:B/xnV6qp
>>60-61
もっと一般的な話で、置換表のようなファイルに、
(置換前, 置換後)のような文字列の組が、
複数定義してあって、それを配列に読み込むと、

FROM_ARY = ["Ruby","Python","JavaScript"] # 置換前
TO_ARY = ["宝石","蛇","JS"] # 置換後

この置換表を使って、
文字列(またはファイル)をどうやって置換するの?
0071デフォルトの名無しさん2015/03/27(金) 06:03:49.89ID:DTkMuG4d
s.gsub!(Regexp.union(*FROM_ARY), FROM_ARY.zip(TO_ARY).to_h)
0072デフォルトの名無しさん2015/03/27(金) 09:02:41.18ID:59COlJN1
>>60の内容でそこまで察しろと言うのも酷な話だな
0073602015/03/27(金) 16:35:01.78ID:B/xnV6qp
FROM_ARY.zip(TO_ARY) do |sFROM, sTO|

str.gsub!(Regexp.new(sFROM), sTO)
end

結局、文字列(またはファイル)全体を、
何回もループして、1つずつ置換していくんだね?

>>71
Regexp.union(配列)は、
配列中のどれかの要素と一致したら、
という意味だから、漏れの想定とは違う
0074デフォルトの名無しさん2015/03/27(金) 17:14:58.35ID:9ORSmkz6
>>70
そんなもんHashでやれよ。
ゴルフのネタでも提供してるつもりなのか。おまいは。
0075デフォルトの名無しさん2015/03/27(金) 21:44:19.77ID:4Pr9ruNj
想定が違うだのなんだの後から条件小出しにされたんじゃかなわんわ
0076デフォルトの名無しさん2015/03/28(土) 00:29:01.06ID:NvPvIHKe
>>58 >>59 >>63
ありがとうございます。
fetch 試してみます、使ったことないです。
0077デフォルトの名無しさん2015/03/28(土) 09:55:00.70ID:eS6PuzJC
>>35
その手順で読んでみたけど理解出来た気がしなかった
0078デフォルトの名無しさん2015/03/28(土) 19:04:32.10ID:9D6q6DQr
先生、RubyでGUIって作れますか?
0079デフォルトの名無しさん2015/03/28(土) 19:18:47.63ID:eS6PuzJC
webをguiと認識するなら出来るんじゃないの
0080デフォルトの名無しさん2015/03/28(土) 19:41:05.67ID:9D6q6DQr
webをguiと認識するってどういうことっすか?
プログラミングのスーパー初心者の僕にわかりやすくおしえてくだせえ…
0081デフォルトの名無しさん2015/03/28(土) 20:20:08.09ID:3hbPl+o9
>>80
そういう奴はGUI自体が分かってないから、何言っても無駄
0082デフォルトの名無しさん2015/03/28(土) 21:20:26.56ID:eS6PuzJC
コマンドプロンプトからテキスト落として読んでるやつなんて少数だろ
0083デフォルトの名無しさん2015/03/28(土) 21:55:51.48ID:9D6q6DQr
>>81
そう言わずに、兄さぁぁん!!
0084デフォルトの名無しさん2015/03/28(土) 22:58:25.89ID:Rm/MLphK
よっしゃ、俺が教えたる
0085デフォルトの名無しさん2015/03/29(日) 00:28:25.67ID:t4hqKB21
はよ
0086デフォルトの名無しさん2015/03/29(日) 01:58:18.36ID:cbZ+OAuX
まずMVCはわかるよな?
0087スッキリ厨2015/03/29(日) 02:26:23.38ID:abbduuww
>>77
繰り返し読むと、最初は20Hかかっていたのが、
次には10Hで読める

まあ、2,3回読めばよいと思う
0088デフォルトの名無しさん2015/03/29(日) 10:18:33.36ID:PdgsgtyB
んだ、繰り返し読むことは大事
0089デフォルトの名無しさん2015/03/29(日) 12:29:11.20ID:tbam8Rya
>>78
どれがいいかは知らない

Rubyist Magazine - Ruby de GUI
http://magazine.rubyist.net/?0001-RubyGUI
0090デフォルトの名無しさん2015/03/29(日) 22:14:44.40ID:yrIUYa7M
>>先生、分りません。
プログラミング始めたばかりです。
GUIつくるとかレベル高杉ますか?
0091デフォルトの名無しさん2015/03/29(日) 22:30:51.02ID:yrIUYa7M
>>89
ありがとうございます!
ちょい読んでみる!
0092デフォルトの名無しさん2015/03/30(月) 01:30:09.86ID:tZH83wbT
htmlとCSS、eruby覚えた方が
使いまわし効くと思うけどね
0093デフォルトの名無しさん2015/03/30(月) 12:52:21.90ID:5htnBXQS
下のマージソートを真似してやると成功するんだけど、ちょっと理解できない・・・
http://melborne.github.io/2010/10/12/Ruby/
a,bに1つずつ入ったらmergeに行って小さい順にresに入れていく、を繰り返してると思うんですが、
これだと整列された2つが次々resに入ってもres全体では整列されてないように思えます・・・ご教授おねがいします


class Array
def merge_sort
tmp = self.dup
return tmp if tmp.length <= 1
a, b = self.half.map { |e| e.merge_sort }
merge(a, b)
end
def half
mid = length/2
return slice(0...mid), slice(mid..-1)
end

def merge(a, b)
res = []
until a.empty? && b.empty?
res <<
case
when a.empty? then b.shift
when b.empty? then a.shift
when a.first < b.first then a.shift
else b.shift
end
end
res
end
end
0094デフォルトの名無しさん2015/03/30(月) 13:57:02.46ID:KemAcwb4
具体例考えてみれば納得行くんじゃない。
0095デフォルトの名無しさん2015/03/30(月) 14:00:25.71ID:5htnBXQS
再帰で結果待ちのe.mergesortに整列されたのが帰ってきて
それがa,bに渡されて整列されていくのかな
0096デフォルトの名無しさん2015/03/30(月) 17:09:10.01ID:vd5gzrat
再帰は理解するのが難しいから、

図や表に描いて、一つずつ考える
0097デフォルトの名無しさん2015/03/30(月) 18:09:54.03ID:vBLCev70
最小まで分割されて整列されたのがresとしてどんどん帰ってきてゴニョゴニョ
0098デフォルトの名無しさん2015/03/30(月) 22:52:03.53ID:jOu/nfHk
配列の1要素だけ別名を付けることってできないでしょうか?
例えば、$a[1]を$bという名前で扱いたいです。
$bに変更をかけると$a[1]も変更される、aliasのような扱いが望ましいのですが、
alias $b $a[1] と書くとエラーが出てしまいます。
どなたかご教授くださいますようお願いいたします。
0099デフォルトの名無しさん2015/03/31(火) 07:46:50.82ID:E5ZmHRmL
できない
0100デフォルトの名無しさん2015/03/31(火) 13:58:02.55ID:meXl7bV+
>>98
条件付きでできる
配列の要素に別名を付けるというわけではなく
配列の要素であるオブジェクトを別の変数名でも参照するようにする(2行目)
そのオブジェクトを破壊的に変更すればどちらから見ても変更されていることになる(3〜6行目)

ただし、別のオブジェクトを参照するように再代入した場合は
参照するオブジェクトが変わっただけで元のオブジェクトは変更されていないので
もう片方から見ると変わっていないことになる(7〜8行目)

下記例では配列の要素がArray型のオブジェクトなのでうまくいくが、ただの整数とかだと破壊的変更ができないのでできない

irb(main):001:0> a=[[1,2],[2,3]] #=> [[1, 2], [2, 3]]
irb(main):002:0> b=a[1] #=> [2, 3]
irb(main):003:0> b<<5 #=> [2, 3, 5]
irb(main):004:0> a #=> [[1, 2], [2, 3, 5]]
irb(main):005:0> b.delete(2) #=> 2
irb(main):006:0> a => [[1, 2], [3, 5]]
irb(main):007:0> b=3 #=> 3
irb(main):008:0> a #=> [[1, 2], [3, 5]]
0101デフォルトの名無しさん2015/03/31(火) 13:59:55.80ID:aNarOGXw
hashじゃダメなん
0102デフォルトの名無しさん2015/03/31(火) 23:15:44.57ID:oj+ySTd6
そういう扱いにして解決したい問題は何?
0103デフォルトの名無しさん2015/03/31(火) 23:59:25.24ID:emRDa7+p
クラスでラップすればええんやで
0104デフォルトの名無しさん2015/04/01(水) 00:31:47.75ID:N2hhpQD6
横だけど、クラスでラップってどういうこと??
0105デフォルトの名無しさん2015/04/01(水) 01:35:01.62ID:UVT1+zz0
(共通語訳)クラスメイトみんなでラップミュージックを歌えばよいのですよ
0106982015/04/01(水) 01:40:10.89ID:0SHwilWW
皆様ありがとうございます。

>>102
変更が困難な基盤システムのデータ管理方法として、
バックアップの必要なデータはある1つの配列に集約するという
ルールになっております。
配列名が汎用のものなので可読性に欠けるため、
別名での管理が出来ればと考えておりました。

>>101
hashでも構いませんが、
何かしら方法があるだろうと思って調べておりました。
またRubyを扱い始めたばかりなため、勉強の一環として
hashではなく別名で管理するという方法を覚えてみようと考えたのも理由です。
C言語におけるdefineのようなことが、まさか出来ないはずはないと思い
同様の手軽さで出来ることを前提に考えていましたが、
一筋縄ではいかないようで……。

>>100、103、その他ご検討いただいた皆様。
ありがとうございました。
ご意見は手法のひとつとして参考にさせていただきましたが、
今回Ruby初心者の私が安全に実装できるかは少し疑問だったので
結局、hashでの管理に落ち着くことにいたしました。
0107デフォルトの名無しさん2015/04/02(木) 14:36:03.07ID:qqPJ8aIO
Pythonで、モジュールに別名を付ける
import math as m

cos関数に、別名を付ける
from math import cos as c


JavaScriptで、オブジェクトチェーンを作る
var objA = {
objB: {
objC: { foo: 'bar' }
}}
objA.objB.objC.foo

Rubyにはこういうものや、
Alias、名前空間などは無いの?
0108デフォルトの名無しさん2015/04/02(木) 16:53:57.56ID:Jdu7FtOn
<<
0109デフォルトの名無しさん2015/04/02(木) 18:43:53.42ID:z8Sedsrd
>>107
モジュールや関数もファーストクラスオブジェクトなんだから変数に代入すれば別名になる
もしくは関数ならaliasやalias_methodで別名を付けられる

オブジェクトチェーンって言ってるのと名前空間は別な気がするが・・・
オブジェクトチェーンって言ってるやつはネストした構造体でしょ?Rubyはもちろん大体どの言語でもできるのでは
Rubyで名前空間っていうならModuleやClass内Classかな
0110デフォルトの名無しさん2015/04/03(金) 15:29:12.49ID:ECHkgOPX
http://itpro.nikkeibp.co.jp/atcl/idg/14/481542/040300096/?ST=cm-hardware&;P=2

Raspberry Pi 2を使ったノートパソコン組み立てキット「Pi-Top」

https://www.youtube.com/watch?v=jb6hVe1fRzI


組み込み用Ruby「mruby」でモノ作りを始めよう日経LINUX
マイコンボードでmrubyを動かす

http://itpro.nikkeibp.co.jp/article/COLUMN/20130712/491148/
0111デフォルトの名無しさん2015/04/03(金) 19:29:04.36ID:V4mE3d7Z
よく知らんのだけどマイコンをノートPCに近づけたとして
ノートPCと比べて何が嬉しいもの?
マイコンは小ささが大きな利点だと思ってたんだけど違うのか
0112デフォルトの名無しさん2015/04/03(金) 20:03:45.66ID:LDkJND5+
作るのが楽しいんだよ
0113デフォルトの名無しさん2015/04/03(金) 20:04:48.74ID:ECHkgOPX
取り外ししながらイジる遊びでしょ
PCの前だけで完結する訳じゃないから
出先で稼働チェック、バグ発見できるじゃないの
0114デフォルトの名無しさん2015/04/05(日) 03:13:12.56ID:6AkiVh1a
配列にメソッドを入れて呼び出す書き方を教えて下さい。

例
subf=[]
subf[0]="aa0()" #配列にメソッドaa0を登録
subf[1]="aa1()"

[1,0].each{ |i|
subf[i] #メソッド aa0 などを呼び出したい
}

eval を使えばできましたが遅くなりそうです。
他の方法はありますでしょうか
0115デフォルトの名無しさん2015/04/05(日) 08:41:52.46ID:/p4ZvisL
[:aa0,:aa1].each{|i|send i}
0116デフォルトの名無しさん2015/04/06(月) 00:18:11.99ID:YJS2Vz5l
>>115
ありがとうございます。
send(:メソッド名)でできました。
ぐぐったら method(変数).call という方法もありました。
どれもマニュアル本にのっていなかった。
0117デフォルトの名無しさん2015/04/06(月) 12:39:37.41ID:azS7WBIj
sendメソッドの存在は、3冊目に“メタプログラミングRuby”呼んで始めて知ったわ
たのしいRubyにもパーフェクトRubyにも無かったのに…
便利だからもっと布教して欲しいな
0118デフォルトの名無しさん2015/04/09(木) 16:19:46.37ID:RpdxwBCT
Ruby/DBIについて
一番左は行数ね

1:dbh = DBI.connect('DBI:SQLite3:hoge.db')
2:dbh.select_all('select * from fuga') do |row|
3:print "row = #{row}\n"
4:print "name = #{row[0]}\n"
5:end

4行目は返ってくるんだけど,3行目が何も返ってこない
ほんとは,row=[X,Y]みたいな感じで返ってくると思うんだけど
なんでだろ?
0119デフォルトの名無しさん2015/04/09(木) 18:30:31.53ID:l3U3HHix
これで何も返ってこないのは確かにおかしいですね
最低でもrow=""くらいは出力されそうですが…
コンソールの故障ではないでしょうか?
0120デフォルトの名無しさん2015/04/10(金) 01:41:52.05ID:yrWgqEIF
すみません
row =
これは返ってきます
0121デフォルトの名無しさん2015/04/10(金) 09:29:55.62ID:RfX1D9w4
DBIって知らないけど、rowのクラスのto_sを調べてみたら?
0122デフォルトの名無しさん2015/04/10(金) 17:08:35.61ID:yrWgqEIF
>>118だけどto_sとか調べてみてもよくわからないし諦める
答えてくれた人ありがとう
0123デフォルトの名無しさん2015/04/10(金) 22:27:53.31ID:iSKCb4Co
.class か .inspectだとどうなるんでしょうか
0124デフォルトの名無しさん2015/04/11(土) 10:28:57.31ID:ncuFBFa5
to_sとinspectの出力が違うんでしょ。
0125デフォルトの名無しさん2015/04/11(土) 12:26:53.70ID:OMIW7dLX
え、いや出力してる対象がそもそも違いますし
0126デフォルトの名無しさん2015/04/11(土) 16:13:24.52ID:UKPnNYb6
p row

なら、配列の中身を表示してくれる
0127デフォルトの名無しさん2015/04/11(土) 16:54:15.74ID:OMIW7dLX
rowがArrayならそうだけど118の場合はそうじゃない
DBI::Rowのto_sがnilか何かを返すから何も表示されなく見えるんでしょう
0128デフォルトの名無しさん2015/04/11(土) 19:35:20.19ID:jprZbhPv
(0..9).to_a + ('A'..'Z').to_a

これもっと短くかけない?
0129デフォルトの名無しさん2015/04/11(土) 20:07:28.44ID:OMIW7dLX
[*0..9,*?A..?Z]
0130デフォルトの名無しさん2015/04/11(土) 20:20:11.34ID:jprZbhPv
>>129
ありがとう。

これなんて言葉でググったら出てくるのかさっぱりわからんw
0131デフォルトの名無しさん2015/04/11(土) 20:21:42.15ID:jprZbhPv
あぁ、なるほど。配列を引数に展開するあれと一緒なわけか?
0132デフォルトの名無しさん2015/04/11(土) 21:03:05.89ID:OMIW7dLX
YES
splat展開とか*をsplat演算子とかいう
0133デフォルトの名無しさん2015/04/11(土) 22:42:31.45ID:gihZD1Jp
>>129
?
syntax error
0134デフォルトの名無しさん2015/04/11(土) 23:11:06.53ID:m2InqXq3
さして短いように感じないけどw
0135デフォルトの名無しさん2015/04/11(土) 23:44:42.63ID:OMIW7dLX
>>134ゴルファー解答は任せた
0136デフォルトの名無しさん2015/04/12(日) 00:30:37.84ID:kD7m9Q1o
>>132
一生に三回くらいしか使わなさそうだからいいや
うっかり使ってしまうと5年後、自分で読めなくなりそう

使った方がいい人もいるのだろうが
0137デフォルトの名無しさん2015/04/12(日) 03:14:45.31ID:Ve5wxvO+
>>136
そうか?結構使うぞ
0138デフォルトの名無しさん2015/04/12(日) 15:06:38.33ID:u+bXlDiV
以下のような文字列で人名部分のみ正規表現でマッチさせるには
どのように記述すればよろしいのでしょうか?

____4____4__5_山田_太郎________9
__8______田中_次郎________5
____13___9___オサマ_ビン_ラディン___28
____________加藤_花子________7

※半角スペースをアンダースコアで表してあります。
※人名の前の数字は最小0で最大4つ存在します。
※数字は最大2桁です

よろしくお願いします。
0139デフォルトの名無しさん2015/04/12(日) 16:19:45.45ID:MTxsiU+i
もっと上手い方法があるかもしれないが。

/(?!_)[_日本語]*[日本語]/

[]の中の日本語は用途に合わせて
\p{Han}\p{Hiragana}\p{Katakana} なり
[亜-熙ぁ-んァ-ヶ] なり適宜入れ替えてくれ。
0140デフォルトの名無しさん2015/04/12(日) 16:32:16.86ID:MTxsiU+i
名前に半角数字が含まれないならこっちの方が良いかも。

/(?!_)[\D]*[^_\d]/
0141デフォルトの名無しさん2015/04/12(日) 16:48:53.22ID:MTxsiU+i
連投すまん。こっちの方が意味が明瞭で良いと思う。

/(?!_)[_日本語]+(?<!_)/
/(?!_)\D+(?<!_)/
0142デフォルトの名無しさん2015/04/12(日) 16:52:22.33ID:4195b+YJ
正規表現で、\r\n と \r と \n を
同一視してくれるメタキャラクタってないですよね・・・?
01431382015/04/12(日) 17:08:52.73ID:u+bXlDiV
>>141
マッチできました!

ただこの表現(先読み、後読み?)が理解できていないので、これから調べてみます。

ありがとうございました!
0144デフォルトの名無しさん2015/04/13(月) 16:22:45.31ID:gNPn7XlC
railsで今一番おススメの書籍はどれですかね?
0145デフォルトの名無しさん2015/04/14(火) 02:09:34.93ID:FDWB7Bl3
>>142
出来なければ、universal_newline で、

\r, \r\nを、\nに置き換えたら?
0146デフォルトの名無しさん2015/04/15(水) 04:51:37.21ID:jXTy0Fxm
逆引きレシピ(2009)は今のバージョンでも役に立ちますか?
0147デフォルトの名無しさん2015/04/17(金) 23:47:40.49ID:eE8aPdvb
>>145
そうも行かんのよ。

なぜなら、hogehoge(\r|\n|\r\n) のhogehogeを置き換えたいが、
それ以外の\r, \n, \r\n はそのままにしておきたいから。
0148デフォルトの名無しさん2015/04/18(土) 01:27:35.31ID:zEo+1i3a
a = ['a','b','c']
a.values_at(* a.each_index.select {|i| i.even?})

配列の要素のうち、インデックス番号が奇数のものだけ取り出したいとき、
うえのようにすればよいみたいだ、というのはわかったのですが、
この values_at(* ... )の "*" はどういう処理を行っているのでしょうか
01491482015/04/18(土) 01:57:13.33ID:zEo+1i3a
すいません>>129とかで出てました。。。こういうのggるときはどうすればよいんだろ
0150デフォルトの名無しさん2015/04/18(土) 03:47:15.67ID:j/wjXDDU
ruby * array
ruby * 引数
ruby 記号
などで検索する

* は余りとか、配列にまとめて扱う、
数のわからない引数リスト
0151デフォルトの名無しさん2015/04/18(土) 14:56:46.64ID:vWBjvHtT
ruby でネットワークのお勉強したいです。
オススメの教科書ありますか?
0152デフォルトの名無しさん2015/04/18(土) 22:32:35.26ID:JaNp7CB/
appleという文字列の文字と文字の間にカンマを挿入して
それを全て表示するにはどういう処理を書けばいいんだろ?
具体的には
a,pple
ap,ple
app,le
appl,e
apple,
みたいな感じにしたい
0153デフォルトの名無しさん2015/04/18(土) 22:46:30.38ID:kJGYLJy1
str[0...i] + "," + str[i..-1]
でstrのi番目にカンマを挿入した文字列になる
0154デフォルトの名無しさん2015/04/19(日) 00:52:37.89ID:JgTbIpQo
>>153
説明不足だったごめん
それはわかる
俺の知識だとこれを全部表示したいときに

puts str[0...1] + "," + str[0..-1]
puts str[0...2] + "," + str[0..-2]
.
.
.

みたいにしか書けなくてこれだと面倒だし汎用性低いから
うまく繰り返しの処理使って書けないかなと
0155デフォルトの名無しさん2015/04/19(日) 02:08:39.92ID:6VTvXYTp
>>153
を使って書くと、

str = 'apple'

(1..str.length).each do |i|
puts str[0...i] + "," + str[i..-1]
end

>>154
>puts str[0...1] + "," + str[0..-1]
>puts str[0...2] + "," + str[0..-2]

[0..-1], [0..-2]ではなく、[i..-1]だよ
0156デフォルトの名無しさん2015/04/19(日) 12:53:42.85ID:JgTbIpQo
>>155
ありがとう

ここにでてくるメソッドとか構文は全部知ってたし
コード読めば理解できるんだけど、自分では全く
思いつかなかった
どうしたら思いつくように、というか自分でコードが書けるように
なるんだろう
コツとか勉強法とかあったら教えて欲しい
0157デフォルトの名無しさん2015/04/19(日) 13:27:19.89ID:wxQ8bpjm
str[0...i] + "," + str[i..-1]がわかって、それを繰り返す術がわからないとなると
コードを書く経験が圧倒的に不足しているんじゃない
0158デフォルトの名無しさん2015/04/19(日) 13:30:52.47ID:HWkUOGT6
>>156
forとifとwhileでかなりのことはできるから、まずそれを思い通りに使えるようにする
0159デフォルトの名無しさん2015/04/19(日) 16:20:52.36ID:JgTbIpQo
>>157,158
なるほど、たしかにコードはあまり書いてないし
whileとかもちゃんと理解してないな...

アドバイスありがとう
参考にさせてもらいます
0160デフォルトの名無しさん2015/04/19(日) 17:09:27.07ID:6VTvXYTp
str[0...i] + "," + str[i..-1]

i=1なら、str[0...1] + "," + str[1..-1]
i=2なら、str[0...2] + "," + str[2..-1]

i=nなら、str[0...n] + "," + str[n..-1]

>>154
で君が既にやっている通り、
簡単な表にして、具体的に考える。
そして具体的なものから、抽象化・一般化する

特に再帰では、表にしないと理解できないよ
0161デフォルトの名無しさん2015/04/19(日) 20:38:34.75ID:ufvWNWCd
>>152
https://ideone.com/6LVi8s
0162デフォルトの名無しさん2015/04/19(日) 23:42:27.12ID:BlhhoLV3
puts "apple".gsub(/\G./, "\\`\\&,\\'|").split("|")
0163デフォルトの名無しさん2015/04/20(月) 07:52:32.08ID:6ZYvOI+Q
文字列にもeach使えるんだな
iを見ると何故か反射的にtimesが思い浮かんでしまう
0164デフォルトの名無しさん2015/04/20(月) 11:13:20.53ID:rPDQ4MSJ
>>162
\G なんて使ったことない
処理速度的にも each などを使うより速いのでしょうか
0165デフォルトの名無しさん2015/04/20(月) 19:59:50.49ID:MvH6tGWq
\Gなんてリファレンスマニュアルに記載がないものを使わないでいただけますか
0166デフォルトの名無しさん2015/04/20(月) 20:39:58.42ID:j3ZSM6vs
確かにリファレンスマニュアルには載ってない
oniguruma or onigmo の機能なら書いてないけど使えるってことなのかな
柔軟な発想ですごいなあ
まあ実際にコードかくなら155で十分な気がするけど
0167デフォルトの名無しさん2015/04/20(月) 20:50:49.56ID:BD4F5QuZ
http://peace.2ch.net/test/read.cgi/tech/1418430552/80
> [ プログラム ] Ruby 初心者スレッド Part 56©2ch.net
> 80 名前:デフォルトの名無しさん [sage]: 2014/12/28(日) 19:00:20.64 ID:EhJlAFnh (2)
> \Gなんて使ってるのは見たことないんですがどういう時に使うものなのか何かサンプルはありませんか?


http://peace.2ch.net/test/read.cgi/tech/1418430552/81
> [ プログラム ] Ruby 初心者スレッド Part 56©2ch.net
> 81 名前:デフォルトの名無しさん [sage]: 2014/12/28(日) 19:08:58.77 ID:0BcgJOIK
> >>80
> 1.8.7になっちゃいますが、ここにありますよ
> http://docs.ruby-lang.org/ja/1.8.7/doc/spec=2fregexp.html#regexp
> あとこことかも
> http://magazine.rubyist.net/?0020-BundledLibraries
0168デフォルトの名無しさん2015/04/20(月) 20:51:26.46ID:MvH6tGWq
載ってたわ。メンゴ
tp://docs.ruby-lang.org/ja/1.8.7/doc/spec=2fregexp.html#regexp
0169デフォルトの名無しさん2015/04/20(月) 20:52:35.91ID:MvH6tGWq
一歩遅かった…
0170デフォルトの名無しさん2015/04/20(月) 21:45:38.26ID:j3ZSM6vs
すまん載ってたのか
なんで1.9.3マニュアルからは消えたんだろう?
それとも自分が見つけれてないだけで載ってる?
0171デフォルトの名無しさん2015/04/20(月) 22:03:30.73ID:lBn3AcT1
>>167で引用された者だが、そのレスをした時点では(そして今も)1.8.7にしかなかったよ
0172デフォルトの名無しさん2015/04/21(火) 00:54:47.84ID:lokfdG/n
>>170
利用者が少ないので、そのうち機能削除と推定
0173デフォルトの名無しさん2015/04/21(火) 01:25:01.11ID:mlZT6oHh
利用者と言う観測しがたい対象の多寡で機能の有無は決まるのか?
0174デフォルトの名無しさん2015/04/21(火) 03:17:05.85ID:2LCbUk1L
Ruby-Doc.orgの方には明記されてるのが興味深い
0175デフォルトの名無しさん2015/04/22(水) 17:04:26.56ID:zTSSyZOc
erbで画像を表示する方法を教えてください
ファイル名をfoo.erbとして以下のプログラムを
書いたのですがうまく表示されません
<html>
<head>
<title>foo</title>
</head>
<body>
<% a = rand 5 %>
<%= <img src="#{a}.jpg"> %>
</body>
</html>
0176デフォルトの名無しさん2015/04/22(水) 17:50:18.54ID:YVcdWSZh
>>175
<img src=<%= "\"#{a}.jpg\"" %>>
0177デフォルトの名無しさん2015/04/22(水) 18:12:10.20ID:zTSSyZOc
>>176
できました!
ありがとうございます!
0178デフォルトの名無しさん2015/04/25(土) 21:26:53.65ID:7JJG1bdn
http://www.r-labs.org/projects/r-labs/wiki/
 └プラグインインターナル

Redmineにて、上の「Redmine の本体機能のオーバーロード」をviewsで行いたいと思ってます
そこで複数のプラグインでの同一viewのオーバーロードを試したら
どうもプラグイン名のアルファベットが後のものが優先される気がするのですが、
若いものを優先させる方法はないでしょうか?
0179デフォルトの名無しさん2015/04/26(日) 01:20:48.48ID:asKmOzJa
数独を解くプログラムをrubyで簡単に作れますか?
0180デフォルトの名無しさん2015/04/26(日) 01:55:23.60ID:L6M7+b17
総当りでいいなら簡単
0181デフォルトの名無しさん2015/04/26(日) 11:23:26.17ID:b8PGU3dG
>>179
ちょうど数ヶ月前に作ったことがあるけど簡単にできるよ
0182デフォルトの名無しさん2015/04/26(日) 22:45:41.51ID:EyibrkcR
rubyじゃなくてもほぼ全ての言語で作れるな
0183デフォルトの名無しさん2015/04/26(日) 23:12:28.16ID:C+a0R1p+
どの言語が簡単なのか書かないと意味がないような
0184デフォルトの名無しさん2015/04/27(月) 13:47:55.09ID:EJCz8b3F
http://www.lifehacker.jp/2015/04/150427slush_asia_linda_liukas.html
プログラミングは画用紙とクレヨンと同じ:『Hello Ruby』の著者が語る成長の物語 #SlushAsia
Lifehacker
0185デフォルトの名無しさん2015/04/27(月) 23:46:49.78ID:U5G0BE7/
>>180
総当たり式だと、他に解が無いか(複数解)の確認が必要になり、
かえって複雑になるような気がする。
0186デフォルトの名無しさん2015/04/28(火) 04:18:05.78ID:ZSPnkmQx
んなこたーない
0187デフォルトの名無しさん2015/04/28(火) 09:19:39.84ID:YDhB7+fs
結構複雑な解法アルゴリズムは背理法より時間かかったから適度に適用するのが良い
解の一意性を仮定するかどうかでも多少変わってくるが
0188デフォルトの名無しさん2015/04/28(火) 22:07:24.55ID:N9lyu4uw
数独ぐらいだったら全パターンのデータベースを作っておいて照会するのが一番早いよな
おもしろくないけどw
0189デフォルトの名無しさん2015/04/28(火) 22:32:50.70ID:qVL3+LTP
数独の全パターンを網羅するデータベースって
0190デフォルトの名無しさん2015/04/28(火) 23:23:09.92ID:mW9wjtdm
対象性を考慮したとしてもデータベース照会が速いとは思えない
0191デフォルトの名無しさん2015/04/28(火) 23:44:15.99ID:RGLkAIGi
9^81件のデータベース…
0192デフォルトの名無しさん2015/04/29(水) 00:01:15.83ID:jPUUiyrt
>>191
解のある場合だけだとそんなに多くない
行や列や数字の入れ替え、回転、裏返し操作で同じ物を除くと更に減る
どれくらいになるかは面白そうだけどrubyではなく、数学の問題かな
0193デフォルトの名無しさん2015/04/29(水) 00:37:22.57ID:LCS8IA96
確か数独の解答パターンは60000通りぐらいだと聞いたことがある
それなら十分パターン照会の方が早いかな
まぁそこまでやるならRubyにこだわる必要性は皆無だけど
0194デフォルトの名無しさん2015/04/29(水) 00:49:01.58ID:i2xwsgev
ふつうに解く方法考えなよ・・・
万が一パターン漏れてたらどうすんの
0195デフォルトの名無しさん2015/04/29(水) 00:49:05.10ID:LCS8IA96
あと、ヒューリスティックに解くプログラムも昔組んだことがあるけど、そんな難しくはなかったね
RCCはちょっと計算時間を要するけど、それ以外は大した計算時間も必要なかったし
(枝刈りはちゃんとやらないと計算量が爆発するけど)
0196デフォルトの名無しさん2015/04/29(水) 00:53:11.45ID:LCS8IA96
>>194
そういうパターンを数え上げるのはコンピュータの得意とするところでしょ
枝刈りをきちんとやれば現実的な時間で数え上げられるよ
0197デフォルトの名無しさん2015/04/29(水) 06:09:19.11ID:f54jgqM7
>>193
互いに影響を受けずに独立に値を決められるマスが9マスあるから少なくとも9^9通り以上だろう。
0198デフォルトの名無しさん2015/04/29(水) 09:53:49.58ID:q0yxqD4A
http://homepage3.nifty.com/imura/23sudoku/sudokuS/sudokuS.html
並べ替え・反転・回転・数字の入れ替えを考慮して5472730538通りだそうだ
データベース作れなくはないな
0199デフォルトの名無しさん2015/04/29(水) 10:28:27.40ID:g6CBhBxf
こういう場合のデータベースってどんな設計にするの?
キーにできる値って何になるのか
0200デフォルトの名無しさん2015/04/29(水) 10:29:08.43ID:f54jgqM7
数字の入れ替えありだと検索も一筋縄ではいかんな。
盤面をマス間の同値関係で表現してビットマップインデックスでも使うか。
0201デフォルトの名無しさん2015/04/29(水) 10:41:20.10ID:CB780E1e
>>199
{x,y,n} を key とするlookupテーブルを用意すればいいんじゃないの?
0202デフォルトの名無しさん2015/04/29(水) 10:48:29.64ID:g6CBhBxf
x,y,nって座標とマスの値ってこと?
1マスだけ指定して何が取れるテーブルにするの?
0203デフォルトの名無しさん2015/04/29(水) 13:47:21.25ID:LCS8IA96
>>202
解答パターンIDみたいなもんじゃない?
複数のx,y,nをANDでつないでいけばパターンIDがひとつに絞り込める、みたいな
0204デフォルトの名無しさん2015/04/29(水) 14:35:10.76ID:i2xwsgev
凡人の俺には回答の数値を左上から順番に9 * 9 = 81列のデータベースに入れる方法しか思いつかないんだけどダメなのか
0205デフォルトの名無しさん2015/04/29(水) 16:51:43.40ID:LCS8IA96
>>204
それでもいいんじゃない?
計算量的にはどちらでも同じになりそうな気がするし
0206デフォルトの名無しさん2015/04/29(水) 21:44:55.30ID:U49c0tb7
>>204
数字の入れ替えで得られるものは本質的に同じなので、データベース上の局面はすべて1行目が123456789となってる可能性もある
入れ替えと回転・反転だけなら総当りで、どれがデータベースに登録されてるか調べることはできそうだけど
リンク先を見ると総局面はユニークな局面の1兆倍ほどだから、どの局面として登録されてるかを判断するのも一苦労
0207デフォルトの名無しさん2015/04/29(水) 22:11:51.72ID:f54jgqM7
こういう問題があったとして

 ABCD
a1 2
b   3
c
d 2

以下の条件を同時に満たす局面が検索できればいい。

AaとBdは異なる
AaとCaは異なる
AaとDbは異なる
BdとCaは同じ
BdとDbは異なる
CaとDbは異なる

単純にやろうとすると81*(81-1)/2=3240個のフィールドが必要になるけど。
0208デフォルトの名無しさん2015/04/30(木) 11:37:07.16ID:M3WUgXkG
なるほど
後は対称な局面を調べればいいだけか
0209デフォルトの名無しさん2015/04/30(木) 20:46:55.87ID:CtownvBX
>>206
これで言おうとしてる事って、完成状態から9種の数字の個々を入れ替えても同様に完成状態として成立するって事かな?
データベースとしては1行目を一般化してa〜iという記号で固定しておけば件数かなり減りそうだ
反転とかあるから1/9!とまではいかないけど数桁削れそう
0210デフォルトの名無しさん2015/05/01(金) 11:24:57.32ID:eqatqBnD
最近勉強始めたんだけどProcクラスってなんて発音してるの
0211デフォルトの名無しさん2015/05/01(金) 12:37:06.39ID:bH7RBw4h
ぷろっく
0212デフォルトの名無しさん2015/05/01(金) 13:46:23.99ID:jAM2krsm
「ふろく」は無いのか
0213デフォルトの名無しさん2015/05/01(金) 17:51:23.36ID:tPnkV53E
>>210
読まない、見るだけが8割
プロック
心に余裕がある時はプロセジャー
0214デフォルトの名無しさん2015/05/02(土) 01:43:23.86ID:5VssKqD1
もしかしてプロシージャ?
0215デフォルトの名無しさん2015/05/02(土) 05:30:49.57ID:PoUrbjOe
プロシジャーじゃない?
0216デフォルトの名無しさん2015/05/02(土) 06:38:15.83ID:xXK42ACJ
>>214 >>215 >>216
つ ttp://www.merriam-webster.com/dictionary/procedure
ということで、日本語からカタカナ表記がすべて無くなればいいと思います。
0217デフォルトの名無しさん2015/05/02(土) 10:12:34.93ID:RbSXq7CR
カタカナ表記が無くなって皆が正確な発音を覚えるならいいけど
結局英語を見ても適当に発音して混乱するしなあ
どうなるのが良いんだろう?

>>216
発音記号だけ見るとプロセヤーに見えてしまう そこの発音記号間違ってない?
0218デフォルトの名無しさん2015/05/02(土) 15:44:39.32ID:GdWsYLg4
nullは正しくはナルと発音するけど日本でナルって言っても通じない
一人だけ正しい発音してもねー
0219デフォルトの名無しさん2015/05/02(土) 16:24:41.59ID:eD8Z1MUe
pingも泣く泣くピングと言ってる。
0220デフォルトの名無しさん2015/05/02(土) 16:33:05.65ID:3eY1bcIm
>>217
IPA準拠でない発音記号は数多くある。
というか英単語の発音でIPA準拠しているものに遭遇した記憶がない
0221デフォルトの名無しさん2015/05/02(土) 16:41:51.65ID:K///ApN8
欧米人自体ラテン文字綴りは、自国語のルールで読んでると聞いたが。
日本人ならラテン文字綴りを全部訓令式ローマ字読むようなもん。
コンピュータ言語の予約語とかは違うかも知れないけど。
0222デフォルトの名無しさん2015/05/02(土) 16:42:56.64ID:K///ApN8
×コンピュータ言語
◯プログラミング言語
0223デフォルトの名無しさん2015/05/02(土) 17:31:20.80ID:FKREMwzJ
どの言語にも異音があるからIPAじゃなくて音素で表現するのが普通だよね
0224デフォルトの名無しさん2015/05/04(月) 10:11:15.69ID:VrN6lBi/
λをlambdaと書かなければならない所にASCIIコードの悲しむべき限界がある。
まぁAPLみたいになられても困るのだが・・・
0225デフォルトの名無しさん2015/05/04(月) 10:55:31.34ID:+ZdhyuUD
>>224
Jの立場がw
0226デフォルトの名無しさん2015/05/04(月) 22:25:50.31ID:a5/ons/h
>>224
,\ をパースできるようにするパッチを送るチャンスだ!
0227デフォルトの名無しさん2015/05/05(火) 09:14:26.98ID:6w+bN4p2
lambdaあるんだったらblockなんて要らなくね?
関数っぽいのに()で呼べないのおかしくね?
とか考え出すとscalaやC#に近づいていってしまう。
0228デフォルトの名無しさん2015/05/10(日) 01:26:12.23ID:E8bjKhA4
あげ
0229デフォルトの名無しさん2015/05/12(火) 18:21:52.25ID:bBUMqeIN
node-webkitみたいな感じでSinatraで書いたウェブアプリをデスクトップアプリみたいに動かしたいんだがそういうライブラリとかあらぬ?
0230デフォルトの名無しさん2015/05/12(火) 19:00:12.56ID:VPfkeJkH
複数行の文字列をソースに入力する場合にヒアドキュメントを使う意味ってなんですか?
ダブルクォーテーションやシングルクォーテーションでも改行含んでいても普通に文字列作れますが
0231デフォルトの名無しさん2015/05/12(火) 19:05:34.93ID:VPfkeJkH
あと配列やハッシュを作るときに要素ごとにコンマを打つのがすごくめんどくさいんですけど
改行で要素を分ける仕様じゃダメだったんですか?

[
"aaa",
"bbb",
"ccc",
]

ではなく
[
"aaa"
"bbb"
"ccc"
]

でいいんじゃないかということです。
一行で書くならもちろん必要ですが、改行で要素が分かれていることは自明なわけで。
0232デフォルトの名無しさん2015/05/12(火) 20:04:24.35ID:E78u8ziX
俺俺言語作れや
0233デフォルトの名無しさん2015/05/12(火) 20:14:26.86ID:uJjQzeKQ
>>230
ヒアドキュメントだと最初の行をその行じゃなく次の行の行頭から書けるという違いはある

>>231
JSONやYAMLとかほかの言語とかとあえて違う記述を可能にする理由が無かったんでしょ
それに個人的な感想としてはブロックみたいな雰囲気を出してるからそのままだと最後の行の値を返しそうにも見える
0234デフォルトの名無しさん2015/05/12(火) 21:32:28.16ID:T2eyCbcC
>>230
ヒアドキュメントはうっかり閉じてしまう確率が格段に低い。

>>231
そういう提案はある。

https://bugs.ruby-lang.org/issues/8956
https://bugs.ruby-lang.org/issues/10528

積極的に推し進める人がいないので話が進んでないみたいだけど
強い反対もなさそうなのでそのうち採用されるのかもね
0235デフォルトの名無しさん2015/05/12(火) 22:30:23.97ID:UZCLQ5ym
その程度の内容であればパーサ書いて自分だけ使っとけ
面倒に感じるほど配列をソース中に埋め込まなければならない
設計なんか見たら俺はリジェクトする
0236デフォルトの名無しさん2015/05/12(火) 23:07:24.09ID:a39hBEOU
>>234
さすがにうっかり閉じてしまうようなケースはエディタのハイライトで気づけると思うが…
それすらできないようなエディタは窓からポイーだろうし

俺も考えてみたけど、ヒアドキュメントは単純にPerlとかからもらってきたからあるだけで
そこまでメリット・デメリットを考えて導入されたものじゃない気がする

なのでそんな違いはないので好きな方を使っとけ、ってのが結論じゃないかと
0237デフォルトの名無しさん2015/05/12(火) 23:24:19.47ID:McgsoQJk
>>231
%W(aaa bbb ccc)
0238デフォルトの名無しさん2015/05/12(火) 23:33:39.43ID:avMjEYTK
文字列リテラルの間が空白類だと連結された一つの文字列になるんじゃなかったっけ?
空白類は改行も含む
0239デフォルトの名無しさん2015/05/13(水) 01:48:17.64ID:9i6gM8IV
>>230
>>231

ary = <<EOT.split
aaa
bbb
ccc
EOT

みたいに書けることは意外に知られていない気がする
0240デフォルトの名無しさん2015/05/13(水) 08:48:10.25ID:PDARsX4g
>>236
いちいちエスケープするの面倒だろ
ほぼそのまま書けるのがヒアドキュメントのメリット
0241デフォルトの名無しさん2015/05/13(水) 10:21:10.72ID:5w+SdhWJ
>>240
%記法ってのもあるんですが…
0242デフォルトの名無しさん2015/05/13(水) 17:31:25.41ID:/vC2Ckq+
PCを買い替えたのでrubyの環境構築していたのですが
Ruby2.2.2 にてbyebugのgemインストールにてdevkit入れろとエラーがでてしまいます
2.2系のDevkitが探しても無いようなのですが
まだないということでしょうか?
0243デフォルトの名無しさん2015/05/13(水) 18:35:35.64ID:AOVYLWkN
>242
こんなとこに書き込む暇があったら試せよ
0244デフォルトの名無しさん2015/05/13(水) 18:47:43.50ID:dkMaBjgg
>>242
Ruby 2.0.0 and above: mingw64-32-4.7.2
Ruby 2.0.0 and above x64 (64bits): mingw64-64-4.7.2
って書いてあるから2.2.2でもいけるんじゃない?
0245デフォルトの名無しさん2015/05/13(水) 19:20:26.79ID:peiJ2wcY
>243
ダウンロードページを少し読めばすぐ分かるようなことを簡単に教えちゃダメだって…。
初心者スレとはいえ、ここの住人は優しすぎると思うよ。
0246デフォルトの名無しさん2015/05/13(水) 19:21:24.94ID:peiJ2wcY
安価間違えたカコワルイ
0247デフォルトの名無しさん2015/05/20(水) 01:55:45.72ID:JquZNGcV
保守
0248デフォルトの名無しさん2015/05/20(水) 15:55:40.92ID:PrWBPEio
>>245

>>243は教えてないじゃん
初心者スレだと、installするのがやっとで、何日もかけて何とか成功する人もいるので。
0249243 245 2462015/05/20(水) 18:23:03.15ID:JDqrHdgv
安価間違えたって書いてるでしょ。

242はRuby使うのは初めてじゃなさそう(多分1.8 or 1.9からの乗り換え)だったから、もうちっと自分で調べろよ。
と言う思いで、突き放したレスをしたのよ。
2.2とDevkitは俺も使ってるから、Devkitが問題なく動くことは知ってたんだけどさ。

そもそも、ホントの初心者なら、WindowsでRubyを使うこと自体をお勧めしないのが親切なんじゃね?

ないしは、gemがきちんと整備されてる1.9系をまず使うように案内するとか。
0250デフォルトの名無しさん2015/05/20(水) 22:03:37.78ID:ptbOhCsA
1.9以降はみんなgithubで好き勝手に作ってて整備なんかされてない気がする
0251デフォルトの名無しさん2015/05/21(木) 15:30:14.61ID:GdS2dqGm
Rubyのリファレンスなどに出てくる「::」が何を表しているのかよくわかりません
例えばNokogiri::XML::NodeSetというのは何を表しているのですか?
親子関係なのかメソッド呼び出しによる返り値からさらにメソッドを呼び出してるのか……
::は一体なんなのですか?調べてもしっくりするものが出てきません
PHPであれば::はstaticのメソッドやプロパティにアクセスするための記号だなぁとわかるのですが。
手元にある「たのしいRuby」には「.」と「::」同じ意味と書いてありましたがどうもライブラリのリファレンスなどでは::と.を使い分けてるように感じます
0252デフォルトの名無しさん2015/05/21(木) 17:59:42.18ID:TIfvV/jT
>>251
http://melborne.github.io/2013/09/24/rubys-scope/
0253デフォルトの名無しさん2015/05/21(木) 19:12:10.92ID:GdS2dqGm
>>252
リンクありがとうございます
すごくわかりやすいです。助かりました感謝致します。
0254デフォルトの名無しさん2015/05/22(金) 21:21:58.30ID:6YiaeImK
Rakeでファイルがローカルにすでにあればそれを使って
なければwgetするタスクってないのん?
0255デフォルトの名無しさん2015/05/24(日) 19:53:45.34ID:BGt14oQU
rake単体でできない事もないがBundlerを使った方が簡単だろう
0256デフォルトの名無しさん2015/05/25(月) 21:09:31.82ID:bs/1Uzyk
curbで gem install curbは完了して
Curlで何か書こうかなーと思ったら
ruby -e "$(curl -fsSL https://www.google.co.jp/";)ってやったら
-e:1: `$(' is not allowed as a global variable name

ってなちゃって(´・ω・`)
curl --help は動くんだけどなんででしょー(´・ω・`)
Windows7 64bit Ruby2.2.2 コマンドプロンプトです。

スキルはdotinstall ruby半年前に全部見た程度です。
0257デフォルトの名無しさん2015/05/25(月) 22:17:45.79ID:o6nCxH6o
とりあえずダブルクォーテーションの対応おかしくね
0258デフォルトの名無しさん2015/05/26(火) 01:24:33.10ID:w5o9scD7
なんでって、そうなるように書かれたから
0259デフォルトの名無しさん2015/05/26(火) 14:38:46.64ID:ty86ilJR
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?
0260デフォルトの名無しさん2015/05/26(火) 14:39:14.29ID:ty86ilJR
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?
0261デフォルトの名無しさん2015/05/27(水) 00:39:56.95ID:nI5vt9oP
Yes.
0262デフォルトの名無しさん2015/05/28(木) 15:47:34.95ID:o+E2fSxO
p '! 1 2 3'.scan(/(!)(\s\d)+/)
で
[['!', ' 1', ' 2', ' 3']]
ではなく
[['!', ' 3']]
になるのはなんで?
0263デフォルトの名無しさん2015/05/28(木) 16:17:58.51ID:4ci5OfPn
!と連続してるから当然だろ。
p '! 1 2 3'.scan(/\s?[!\d]/)
0264デフォルトの名無しさん2015/05/28(木) 16:24:26.00ID:DR5ziRfz
テスト
p '1 2 3 4'.scan(/\s\d/) #→ [" 2", " 3", " 4"]
p '1 2 3 4'.scan(/(\s\d)/) #→ [[" 2"], [" 3"], [" 4"]]
p '1 2 3 4'.scan(/(\s\d)+/) #→ [[" 4"]]
p '1 2 3 4'.scan(/\s?\d/) #→ ["1", " 2", " 3", " 4"]
0265デフォルトの名無しさん2015/05/28(木) 22:21:18.81ID:k3niE8s3
'! 1 2 3'.scan(/(!)(\s\d)(\s\d)(\s\d)/)
なら
[["!", " 1", " 2", " 3"]]
なのにね

'! 1 2 3'.scan(/(!)(\s\d){3}/)
は
[["!", " 3"]]
0266デフォルトの名無しさん2015/05/28(木) 22:48:12.60ID:hjZS/GsK
いや, キャプチャを量指定子で繰り返したらキャプチャ対象なるのはキャプチャ部分に対する最後のマッチだけだろ(正規表現の一般論として)
0267デフォルトの名無しさん2015/05/28(木) 23:03:42.26ID:dLu0WU3T
繰り返し何回マッチしたかによってそれ以降のキャプチャを参照する番号が変わるなんてことになったらいやすぎる
0268デフォルトの名無しさん2015/05/28(木) 23:41:22.41ID:fjZg4KPN
>>266
それが結論のようですね

p '1234'.scan(/(.)/) #→ [["1"],[" 2"], [" 3"], [" 4"]]
p '1234'.scan(/(.)+/) #→ [[" 4"]]
0269デフォルトの名無しさん2015/06/01(月) 02:21:48.67ID:Y1SfGQAR
>>268
これと逆なんですけど

p "1234".slice(/./) # "1"
p "1234".slice(/.+/) # "1234"
0270デフォルトの名無しさん2015/06/01(月) 08:21:10.39ID:vSxmWzhu
それの何が問題なの
0271デフォルトの名無しさん2015/06/02(火) 00:28:30.61ID:8518yJU4
そりゃ逆に書いてるんだから逆になるだろ
0272デフォルトの名無しさん2015/06/02(火) 01:32:52.01ID:YSKGxbzH
すいません
+があると出力が少なくなる場合と多くなる場合があったのを発見
0273デフォルトの名無しさん2015/06/02(火) 02:36:26.27ID:Im+YEyTj
?
意味不
0274デフォルトの名無しさん2015/06/02(火) 18:15:19.46ID:vepkkYh3
Railsの質問なのですが
<%= form_tag({controller: 'ajax', action: 'result'}, remote:true) do %>
...
<% end %>
上記form_tagを実行した場合

<form accept-charset="UTF-8" action="/ajax" data-remote="true" method="post">
<div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /></div>
...
</form>

指定したactionではないページが作成されてしまうのですが、このような場合なにか原因が考えられるでしょうか?
Windows
Ruby 2.1.5
Rails 4.2.1 を使用しています
0275デフォルトの名無しさん2015/06/02(火) 19:01:49.98ID:NaslPVjy
>274
【RoR】Ruby on Rails Part19
http://kanae.2ch.net/test/read.cgi/php/1409423461/
0276デフォルトの名無しさん2015/06/02(火) 22:00:34.98ID:jU2A440n
1 && 2がなんで1になるんでしょうか?
0277デフォルトの名無しさん2015/06/02(火) 22:17:04.91ID:w3ztcJiD
1 は真だから、2 は評価しない
偽は nil か false だけ
0278デフォルトの名無しさん2015/06/03(水) 00:13:17.86ID:JxGyv6Qf
irb(main):001:0> 1 && 2
=> 2
0279デフォルトの名無しさん2015/06/03(水) 00:31:54.34ID:0f9O3Aau
すいません、頭がごっちゃになってたみたいです

irb(main):001:0> 2 && 1
=> 1
irb(main):002:0> 1 && 2
=> 2

x && yは、xが真ならyの値を返す仕様と理解しました
0280デフォルトの名無しさん2015/06/03(水) 02:16:48.51ID:OhDMuo8z
「x && y」は結果が
真の時にyを
偽の時にxを
返すみたいだね。
0281デフォルトの名無しさん2015/06/03(水) 02:16:50.15ID:+cj40TuI
逆に x || y はxが真ならxの値を返す仕様です

これらの仕様はちょっとした条件分岐のイディオムとして使ったりする
多用すると糞コードだけど
0282デフォルトの名無しさん2015/06/03(水) 02:20:18.32ID:OhDMuo8z
&&も||も真偽が確定した時の値を返すってことだね
0283デフォルトの名無しさん2015/06/03(水) 16:48:17.14ID:bMkxvijs
>>280-282
知らなかった、これから使おう

x=false
y=true

p x && y #false
p y && x #false
p x || y #true
p y || x #true
0284デフォルトの名無しさん2015/06/03(水) 17:03:31.76ID:tdUAPzML
&&は、且つ。||は、または。
x && yの場合、xがnot falseなら、次にyが評価される
x || yの場合、xがfalseなら、次にyが評価される。
&&、||ともに条件式の真偽値が確定した段階で評価を終了する
0285デフォルトの名無しさん2015/06/03(水) 17:27:47.57ID:mLaeXcpL
ruby は1/0 で true/faliseとしないが敢えて
 1 = true = 真
 0 = false = 偽
で説明

ttp://upload.wikimedia.org/wikipedia/ja/7/7b/Venn-Diagram-AND.png
【論理積 / AND演算 / &&】
1 x 1 = 1
1 x 0 = 0
0 x 1 = 0
0 x 0 = 0
 積ってある通り、両方とも 1 でないと 1 にはならない。逆に言うと片方が 0 なら 0 だ。

ttp://upload.wikimedia.org/wikipedia/ja/5/5e/Venn-Diagram-OR.png
【論理和 / OR演算 / ||】
1 + 1 = 1 ← まぁ 0 ではないよって事w
1 + 0 = 1
0 + 1 = 1
0 + 0 = 0
 和ってある通り、両方とも 0 でないと 0 にならない。逆に言うと片方が 1 なら 1 だ。


で >>282 の指摘通り
A && B はAが偽ならBがどうだろうと全体で偽が確定なのでBは評価(実行)せず
A || B はAが真ならBがどうだろうと全体で真が確定なのでBは評価(実行)せず

・・・わかりづらいかw
0286デフォルトの名無しさん2015/06/03(水) 20:59:25.70ID:+cj40TuI
長い
3行にまとめろ
0287デフォルトの名無しさん2015/06/03(水) 23:24:11.35ID:ciz6E00S
話をややこしくするけど C とかだと && や || は 0 か 1 しか返さないから 1 && 2 とか 2 || 1 みたいなのも 1 になるんだよな
Ruby だとどっちも 2 になるのな

http://ideone.com/X28ve7
https://ideone.com/90E5kx
0288デフォルトの名無しさん2015/06/04(木) 07:10:03.19ID:/AL4RUwW
Perl 由来なんじゃない?
0289デフォルトの名無しさん2015/06/04(木) 07:45:29.82ID:UDpXUDZ8
Perlだと open or die とかやるよね
0290デフォルトの名無しさん2015/06/05(金) 02:46:17.56ID:vgtnI7Mx
>>288
OSSで配布されるshスクリプトを覗けばわかるけど、&&や||なんて幾らでも見かけるよ
こうい評価式に関しては、一度、schemeやelispを触ってからだと理解しやすいのかも
(and () ())
(or () ())
0291デフォルトの名無しさん2015/06/07(日) 20:56:05.84ID:tz2PkCph
2.2系でwebrickを一旦停止から再始動するのはどしたらいいの?
二回目のstartで例外が起きてしまうんだけど
環境は ASR 2.2.0 Win7(32) / 2.2.2 Freebsd11(64) / 2.2.[0-2] Ubuntu14.04(64)

require 'webrick'
s = WEBrick::HTTPServer.new
Thread.new { sleep 2; s.stop }
s.start
Thread.new { sleep 2; s.shutdown }
s.start
puts 'Success'

<<エラーログ>>
[2015-06-07 20:37:27] ERROR NoMethodError: undefined method `[]' for nil:NilClass
/opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:174:in `block in start'
.<2050 回リピート>

/opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:333:in `cleanup_shutdown_pipe': undefined method `each' for nil:NilClass (NoMethodError)
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:202:in `block in start'
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:32:in `start'
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:162:in `start'
from /tmp/web.rb:9:in `<main>'
0292デフォルトの名無しさん2015/06/08(月) 01:34:35.25ID:mgWlS5+H
停止っていうのが何のかよくわからんが
['INT', 'TERM'].each{|i| Signal.trap(i){puts"Hello, world!"}}
とかじゃダメなのかな
0293デフォルトの名無しさん2015/06/08(月) 04:20:13.36ID:jibIjF7D
>>292
それではサービスが稼働しっぱなしなのでよろしくないのです
やりたいのは、webrickを生かしたままで任意の時点で改造すること
弄っている最中はなるべくリクエストを受けたくないわけでして
Rubyを使わずファイヤーウォールで止める手もあるけれども……


それと停止とはどういう状態なのか分かってなかったので軽く調べてみた
netstat と telnetで観察してみるとこんな感じ

2.2: stop時 port closed 接続確立不能
  再開後 例外発生
2.1: stop時 port lisning 接続確立可能 リクエスト送信可能
  再開後 受信キューに貯まったリクエストを取得し、応答を開始

もしや2.2はlisten portを閉じてるから、再startでaccept出来なくなってる?
0294デフォルトの名無しさん2015/06/08(月) 14:20:56.48ID:jibIjF7D
自己解決 truncでfixしてた

https://bugs.ruby-lang.org/issues/10956
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/webrick/server.rb?r1=49101&;r2=49917
0295デフォルトの名無しさん2015/06/09(火) 00:26:22.45ID:X2ZYuZ0V
文字列 "abxcd(exfgxhij)klmnxoxpq" で
かっこ内のxだけ削除する簡単な記法はありまでしょうか?

これまで "("でsplitして削除し、最後にjoin("(")を していました。
0296デフォルトの名無しさん2015/06/09(火) 02:37:13.31ID:d2G2JwTT
文字列が"abxcd(exfgxhij)klmnxoxpq"ってあらかじめ分かってるんだから
削除済みの文字列リテラルを書けばOK。
意図が分かりずらくなりそうならコメントに # かっこ内のxだけ削除 とか書けばよい。
0297デフォルトの名無しさん2015/06/09(火) 08:06:56.59ID:ms43utQc
>>296
どう曲解したら文字列が固定になるんだよ。頭弱いのか?それとも295を煽ってるつもりか?

295の提示した条件も曖昧過ぎだけどさ。
0298デフォルトの名無しさん2015/06/09(火) 09:23:17.40ID:wLd87YRu
>>295
こんな感じでどう?
str="abxcd(exfgxhij)klmnxoxpq"
puts str.gsub(/((?<=\().*(?=\)))/){|c| c.gsub(/x/,"")}
0299デフォルトの名無しさん2015/06/09(火) 09:26:34.41ID:ms43utQc
改めて読むとsplitとjoinで元に戻るということは、

■確定
・小カッコは1つのペアだけが必ずある。
・小カッコ中にxは2個発生する可能性がある。
・小カッコの前後にもxは発生する。

■不確定
・小カッコ中のxは2個以外発生するかも知れない。発生しないかも知れない。

・・・と思ったけど295のやり方だと、splitしたあとの"("後ろの文字列は
"exfgxhij)klmnxoxpq"
になる。これからxを消してしまうと")"の後ろのxも消えない?
0300デフォルトの名無しさん2015/06/09(火) 10:02:23.26ID:t6/3em7f
>>298
その正規表現において、先読み・後読みは不要

素直に /\(.*\)/ でOK
0301デフォルトの名無しさん2015/06/09(火) 10:20:24.51ID:wLd87YRu
>>300
本当だ。キャプチャするんだから必要ないですよねw
0302デフォルトの名無しさん2015/06/09(火) 12:04:23.81ID:J2H5hRFH
教えてください。

undefined method `cache' for Gem:Module (NoMethodError)
とエラーが出ます。
gem install cacheとインストール済みのはずです。

よろしくお願いします。
0303デフォルトの名無しさん2015/06/09(火) 21:31:19.67ID:d2G2JwTT
いや
あえて的外れな答を提示しておいて反論として正答を引き出すのが狙いだ
0304デフォルトの名無しさん2015/06/09(火) 21:43:45.71ID:+VzixiOx
>>297-301
ありがとうございます。
gsub(/ /){|c| c.gsub(/x/,"")}
でトライしてみます。 そんなやり方があるのを知りませんでした。

じっさいは htmlソース中の <a ..> のカギ括弧内から
不要な要素を削り、必要な要素(たとえばhref)だけを残すすっきりした書き方がわからなかったからでした。
例
<a title="**" href="http://**";target="** rel="**" class='**' onmouseout="**">

>>299
>これからxを消してしまうと")"の後ろのxも消えない?
ありゃ、そうでした、バグでした。
0305デフォルトの名無しさん2015/06/10(水) 05:45:48.97ID:T+RB9DK5
>>304
その目的ならnokogiri を使った方がいい。
0306デフォルトの名無しさん2015/06/11(木) 05:38:31.92ID:PXBCUrWo
p %q(#{a+1})実行した時に、"#"の前に出力される"\"ってなぜ出力されるのですか?

irb(main):002:0> p %q(#{a+1})
"\#{a+1}"
=> "\#{a+1}"
0307デフォルトの名無しさん2015/06/11(木) 07:13:05.55ID:8bPOERyx
p は出力したものをそのままRubyに食わせてもいいように変換しているから(デバッグ用)
0308デフォルトの名無しさん2015/06/11(木) 07:16:43.23ID:FjLBTU+U
p '"'実行した時に、"の前に出力される\ってなぜ出力されるのですか?
ってのと同じこと。
0309デフォルトの名無しさん2015/06/11(木) 08:24:52.92ID:PXBCUrWo
>>308
p '"'の結果の\はエスケープ(?)って理解したのですが、
p '#'とした時に\が出力されないのって何でなんでしょうか?

irb(main):019:0> p '#'
"#"
=> "#"
0310デフォルトの名無しさん2015/06/11(木) 10:00:55.82ID:FjLBTU+U
#じゃなくて#{}などとして初めてエスケープする必要があるから
0311デフォルトの名無しさん2015/06/11(木) 10:28:19.32ID:FjLBTU+U
puts "#" #=> #
puts "#{1+2}" #=> 3
puts "\#{1+2}" #=> #{1+2}
これで分からない?
0312デフォルトの名無しさん2015/06/11(木) 11:47:30.61ID:PXBCUrWo
'#{'は'#'と'{'で別々じゃなくて、'#{'でまとめて処理すると理解しました。

irb(main):033:0> p '#{'
"\#{"
=> "\#{"
0313デフォルトの名無しさん2015/06/11(木) 12:03:09.64ID:PXBCUrWo
これで完全に理解しました

1. pメソッドはputsとinspectの機能を併せ持ったメソッド
2. inspectメソッドは制御文字や非アスキー文字をバックスラッシュ記法に置き換えた文字列を返すので
"#{"は"#{"に置き換わる
0314デフォルトの名無しさん2015/06/11(木) 12:17:34.48ID:FjLBTU+U
"#$foo", "#@foo", "#@@foo"なんかもあるけどね
0315デフォルトの名無しさん2015/06/11(木) 17:07:28.29ID:k6fmyMb0
ary = [1, 2, 2, 3, 4]
ary2 = Array.new

以上のようなaryって配列があったとしてここから2(数値)の位置を
ary2に入れる方法ってありますか?
ary2 << ary.find_index(2)だと1しか入りませんでした
この場合だと1,2が入っていてほしいのですが
0316デフォルトの名無しさん2015/06/11(木) 17:54:24.79ID:k6fmyMb0
>>315 ですが
ary.each_index.select{|i| ary[i] == 2}
で、できました
0317デフォルトの名無しさん2015/06/11(木) 23:29:37.65ID:tlYNnI/3
俺も昔同じ事したことある!って思って確かめてみたらずっと劣悪な方法だったww
0318デフォルトの名無しさん2015/06/12(金) 08:18:37.24ID:H4QZivGM
Rubyのような無駄に電力使う言語は使うべきではない
Rubyは人類の地球の敵
0319デフォルトの名無しさん2015/06/12(金) 10:18:54.09ID:Zv8/wash
と、無駄にサーバに負荷をかけているお前はより害悪
0320デフォルトの名無しさん2015/06/12(金) 11:20:08.67ID:X4ZGEAJo
Array.selectのブロック内部でary[i]とか使いたくないな

ary.map.with_index {|item, index| item == 2 ? index : nil }.compact

人それぞれ
0321デフォルトの名無しさん2015/06/13(土) 00:07:45.52ID:pXK4iExZ
ちなみに>>317で言った俺バージョンはこちら。

ary.each_with_index.reduce([]){|s, i| i[0] == arg ? s << i[1] : s}
0322デフォルトの名無しさん2015/06/13(土) 03:19:47.81ID:+mI+miZs
>>315 をみて、最初に思いついたやつ
ary.each_with_index.select{|a,b| a==2}.map(&:last)
0323デフォルトの名無しさん2015/06/13(土) 14:24:50.73ID:upMXSc0p
utf8が\nnnの8進数エスケープに変換されてしまっている時に
お手軽に元のutf8に戻すやり方はありますか?
0324デフォルトの名無しさん2015/06/13(土) 14:29:15.80ID:upMXSc0p
pythonだと
.decode('string_escape')
でできるみたいなんですが
rubyだとstring_escapeがないみたいです
0325デフォルトの名無しさん2015/06/13(土) 15:37:54.95ID:NUKk6CPY
pack/unpackじゃね
0326デフォルトの名無しさん2015/06/13(土) 18:23:37.62ID:upMXSc0p
gsub(/(\\\d{3})+/){|str| str.force_encoding("UTF-8").scrub}
みたいな感じでできることはできるんですが
irbで直接入力したら表示できるので
eval使ったりしてシンプルにならないかなぁと
0327デフォルトの名無しさん2015/06/13(土) 18:27:32.05ID:NUKk6CPY
ソースを書き換えたいの?
0328デフォルトの名無しさん2015/06/13(土) 18:37:21.84ID:upMXSc0p
すいません、書き方悪かったです
irb上で"\nnn"表記の文字列を評価すると
正しく日本語表示できるので
上に書いたみたいな直接的なやり方でなくて
eval使えないかなと思った次第です
0329デフォルトの名無しさん2015/06/14(日) 22:41:43.04ID:mX+deoEx
解決しました
普通にpなりputsなりするだけでokでした
0330デフォルトの名無しさん2015/06/15(月) 05:26:05.47ID:TKCLtNo1
x 書き方悪かった
o 頭が悪かった
0331デフォルトの名無しさん2015/06/15(月) 08:28:37.66ID:f/UEz8h4
できたと思ったらできてませんでした
結局、以下のような感じで無理やりやってます
str.gsub(/((\\\d{3})+)/) do
$1[1..-1].split("\\").map{|b| b.to_i(8)}.pack("C*").force_encoding("UTF-8").scrub
end
賢い方にシンプルな方法を教えていただけると嬉しいです
0332デフォルトの名無しさん2015/06/15(月) 10:05:48.59ID:623SBX0v
str='A \343\201\202'
puts str

str.gsub!(/\\([0-7]{3})/){ [$1.to_i(8)].pack("C")}
puts str
とか?
0333デフォルトの名無しさん2015/06/15(月) 12:59:22.58ID:f/UEz8h4
>>332
ありがとうございます!
なんか無駄なことしてますね、自分
文字数制限で途中のバイトで切れてしまうことがあるので
force_encoding('UTF-8').scrub
つけてバッチリです
0334デフォルトの名無しさん2015/06/16(火) 13:43:30.23ID:2URK/h9L
t = Thread.new {p "test"}
で"test"と表示されないのですが、なぜでしょうか?

t = Thread.new {p "test"}
t.join
だと"test"と表示されます。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0335デフォルトの名無しさん2015/06/16(火) 14:17:00.19ID:GRyCax2n
メインスレッドが終わったらプロセスも終わるから
0336デフォルトの名無しさん2015/06/16(火) 14:33:03.42ID:2URK/h9L
理解しました、ありがとうございます。
0337デフォルトの名無しさん2015/06/17(水) 04:14:33.64ID:HjULUL/P
>>276-290
Pythonでもそうだけど、A && B, A || B は、
先にAを評価して、答えが決まれば、Bを評価しない短絡評価

ただし短絡評価は、A,Bが評価された時に、
変化しない変数なら問題はないが、

C() && D() のような関数(メソッド)の場合には、
後のD()が、実行されるかされないのか、
一目でわからないため、バグを生みやすく、
こういう書き方は推奨されない
0338デフォルトの名無しさん2015/06/17(水) 07:23:03.21ID:q4tkpwL/
>>337
推奨されないって、何かのガイド?
それとも君の感じた雰囲気?
今時、短絡評価すら理解してないプログラマ向けの事まで気にしながら書くんじゃあ、COBOL並の表現力しか無くなるだろ。
0339デフォルトの名無しさん2015/06/17(水) 10:36:28.91ID:N2ZtzNxW
>>337
なぜ関数なら一目でわからず変数なら一目で分かるの?
0340デフォルトの名無しさん2015/06/17(水) 11:50:38.52ID:oWNuaF3B
変数なら一目でわかるから問題ないのではなく、変数なら一目でわからなくても構わないから問題ないということでしょ
0341デフォルトの名無しさん2015/06/17(水) 12:07:28.07ID:7KhQ6AFD
そんなこと
内部状態を変更するメソッドと
真偽判定するためだけの関数を
見てすぐ判るようにしておけばいい
そのために Ruby は ! を選んだ
0342デフォルトの名無しさん2015/06/17(水) 13:01:51.76ID:N2ZtzNxW
だからさ、関数に副作用があろうが短絡評価に何の影響もないでしょ
内部状態を変更しようが返り値がわかればいいんだから
0343デフォルトの名無しさん2015/06/17(水) 22:27:23.92ID:7BaHL0e3
デフォルト値を代入するイディオムとか君使ってないの?

そもそもrubyでメソッドっていうと
内部状態を変更する意図の全くないアクセサとかさえも
メソッドなんだけど?
0344デフォルトの名無しさん2015/06/17(水) 22:30:42.69ID:DKqtm4ef
話が噛み合っていない人が混ざると全てがカオスに見えてくる
0345デフォルトの名無しさん2015/06/18(木) 09:25:40.40ID:TyCwIxIX
おまいら忘れてるかも知れないが、ここは初心者スレだぜ。
その程度のドカタであるおまいらに向けて、337さんが、テストも書かずにカスみたいなバグを量産してで同僚を困らせるなよ。
と忠告してあげてるんだ。
ありがたく聞きなさい。
0346デフォルトの名無しさん2015/06/18(木) 09:32:05.21ID:7/h/PzkV
>>341
驚き最小の原則のためにビックリマークを増やした訳か
0347デフォルトの名無しさん2015/06/18(木) 19:36:51.68ID:sk5olvXp
そして、ビックリマークがついてるのに内部状態が変わっていない!
ビックリマークがついてないのに内部状態が変わってる!

という驚きを増やしてしまったわけだなw


そんなルールを作る前に、ビックリマークがついている時だけ
内部状態が変わるような仕組みを言語自体に搭載しろよ・・・。
0348デフォルトの名無しさん2015/06/19(金) 08:55:27.94ID:QPr8sq8T
>>347
自分は経験無いんだけど、参考までに具体例が出せれば教えてください。
0349デフォルトの名無しさん2015/06/19(金) 09:41:02.87ID:fjcNZFIQ
String#clearとかいくらでもあるだろうに
0350デフォルトの名無しさん2015/06/19(金) 13:16:56.14ID:X+CwqWOz
http://qiita.com/tadsan/items/7baab2605a4d8ac1858e
> みなさまだいすきな Ruby on Rails さんは「!は破壊的」なんて虚構の原則にはまるっきり従ってません。

ワロタw
0351デフォルトの名無しさん2015/06/19(金) 14:37:09.96ID:0iuq1jE/
定期的にこの話題になるな
0352デフォルトの名無しさん2015/06/19(金) 15:02:44.39ID:FzphauAa
Railsはメソッドどころか言語体系を破壊しているな
0353デフォルトの名無しさん2015/06/19(金) 17:00:56.57ID:Cuyp0r6Z
>>349
いわれればそうだな
出力のないメソド
他動詞と自動詞
0354デフォルトの名無しさん2015/06/20(土) 04:49:37.00ID:TX3yB/JP
hashメソッドで取得した値は何に使うんでしょうか?
(何か使い道ってありますか?)

irb(main):001:0> "string".hash
=> 1997604647
0355デフォルトの名無しさん2015/06/20(土) 05:44:22.78ID:m/GPi3MC
>>354
文字列の比較を何度も行うときは
hashで比較して一致するときだけ文字列でもう一度比較
0356デフォルトの名無しさん2015/06/20(土) 19:37:56.17ID:avbrfGtl
ruby3.0出たら本気出す
0357デフォルトの名無しさん2015/06/20(土) 23:15:39.55ID:ysSeXR2X
ruby 2.1.6p336 (2015-04-13 revision 50298) [x64-mingw32]
win7 64
を使用しています

nokogiriを使用してwebスクレイピングを始めたのですが
コマンドプロンプトに出力される内容が文字化けしてしまいます。

対処方法を教えていただきたいです

よろしくおねがいします。
0358デフォルトの名無しさん2015/06/20(土) 23:18:29.55ID:g/mzTnpr
nokogiriはutf8だろうから、sjisに変換すればいいんじゃないかな
と何も調べずに書いてみる
0359デフォルトの名無しさん2015/06/21(日) 01:12:17.33ID:3VZnQzoZ
逆にコマンドプロンプトを、UTF-8に出来ないのか?


それか、コマンドプロンプトに出力せずに、
ファイルに出力するとか
0360デフォルトの名無しさん2015/06/21(日) 01:26:51.47ID:trS59Vlk
スレチかも知れんがコマンドプロンプトなら
「chcp 932」でsjisへ
「chcp 65001」でutf8へ
文字コードを変更できるよ。
0361デフォルトの名無しさん2015/06/21(日) 04:15:08.10ID:/JS5ft5/
chcp 65001 バグがあって
右端まで表示するとボロボロになるんだよなー
0362デフォルトの名無しさん2015/06/21(日) 05:15:32.11ID:GwSFg/Wt
comspecをpowershellに変更する(超適当)
0363デフォルトの名無しさん2015/06/23(火) 02:38:29.66ID:C02P46O1
powershell または、powershell_ise は、

.NET環境だけど、Rubyも動くの?
0364デフォルトの名無しさん2015/06/23(火) 02:43:03.19ID:UdZmnE2/
>>357
cygwinを使えばいいんじゃね?
0365デフォルトの名無しさん2015/06/26(金) 09:10:38.74ID:s8FXX7HP
ruby 2.2.2を使っている状態で
$ bundle install --path vendor/bundle
すると、vendor/bundle/ruby/2.2.0
が作られるんだけど、なんで2.2.0なの?
Gemfileにrubyのバージョンは指定していない
0366デフォルトの名無しさん2015/06/26(金) 09:31:54.98ID:QfFX6qdc
最後の0はワイルドカードみたいなもの
0367デフォルトの名無しさん2015/06/26(金) 15:05:39.03ID:s8FXX7HP
�d
0368デフォルトの名無しさん2015/06/26(金) 18:36:13.56ID:Kh92atrX
rubyでsqlite3使いたくて
sqlite-shell-win32-x86-3081002.zip、sqlite-dll-win32-x86-3081002.zip
をダウンロードして、「gem install sqlite3-ruby」、「gem install dbi」、「gem install dbd-sqlite3」を実行したんだけど、
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/dbi-0.4.5/lib/dbi.rb:300:in `block in load_driver': Unable to load driver 'SQLite3' (underlying error: uninitialized constant DBI::DBD::SQLite3) (DBI::InterfaceError)
from C:/Ruby22-x64/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/dbi-0.4.5/lib/dbi.rb:242:in
`load_driver'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/dbi-0.4.5/lib/dbi.rb:160:in
`_get_full_driver'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/dbi-0.4.5/lib/dbi.rb:145:in`connect'
from db_sample.rb:6:in `<main>'
って表示されました。これってどういう意味ですか?

ちなみに
require 'rubygems'
require 'dbi'

studentsdb = DBI.connect ( 'DBI:SQLite3:students01.db' )

studentsdb.select_all( 'select * from students' ) do |row|
print "----\n"
print "name = #{row[0]}\n"
print "age = #{row[1]}\n"
end

studentsdb.disconnec

こんな感じのプログラム

(作りながら学ぶRuby入門をそのまま試してみた感じです)
0369デフォルトの名無しさん2015/06/26(金) 22:01:02.32ID:Kh92atrX
ruby 2.1.6 でやったらいけた
んー
0370デフォルトの名無しさん2015/06/27(土) 14:21:12.23ID:+6vnIAsZ
bundler gem GEM [OPTIONS]
の、オプションの仕様が書かれてるサイトを教えてくれ。
1.10系のドキュメントはこれしか見つからない。
http://bundler.io/v1.10/man/gemfile.5.html
0371デフォルトの名無しさん2015/06/27(土) 22:40:19.85ID:aFv5L/Yw
bunder のソースコードを嫁!
0372デフォルトの名無しさん2015/07/02(木) 16:24:19.83ID:umOe3By3
質問なのですが
配列aの要素と配列bの要素を全通り足し算させるにはどんなコードを書けばいいのでしょうか?

例えばa=[1,2,3] b=[4,5,6]のときに
(1+4)、(1+5)、(1+6)、(2+4)、(2+5)、(2+6)、(3+4)、(3+5)、(3+6)
と、全通り計算させたいです

a.each do でできそうなんですがそれ以降の書き方が分からないので教えて下さい
よろしくお願いします
0373デフォルトの名無しさん2015/07/02(木) 16:58:19.37ID:v1gphKVf
>>372
a.product(b).map{|item| item.inject(:+)}

こんなかんじ?
0374デフォルトの名無しさん2015/07/02(木) 21:44:53.94ID:a8SK9Eq7
計算したいだけならproductに直接ブロック渡せる
https://ideone.com/ihpSvW

回答者が求めていたのはこういう感じのコードな気がする
http://ideone.com/1bx9cp
0375デフォルトの名無しさん2015/07/02(木) 21:45:38.16ID:a8SK9Eq7
回答者じゃなくて質問者ね
0376デフォルトの名無しさん2015/07/02(木) 22:26:53.92ID:umOe3By3
>>374
求めていたのはまさしくその下のプログラムです
しかしプロダクトも勉強してみます
ありがとうございました
0377デフォルトの名無しさん2015/07/02(木) 22:30:52.22ID:fqyYssiJ
関数型プログラミングが流行りだからね
product使う方がこれからの中心になっていくのかな
0378デフォルトの名無しさん2015/07/02(木) 23:25:13.84ID:RxSUeAcb
わざわざ、method用意されてるのに、eachで回す意味がわかんない
0379デフォルトの名無しさん2015/07/03(金) 00:18:33.86ID:CxuijVE/
何をするかじゃなくて何ができるかが問題
組み合わせは列挙出来たけど二重ループは書けませんじゃ困る
0380デフォルトの名無しさん2015/07/03(金) 00:29:48.39ID:Laz7VlDf
ちょっと何言ってるのかわかんないです
0381デフォルトの名無しさん2015/07/03(金) 04:42:28.61ID:KvdZ0QS5
そりゃ、ソースコードが少ない方が、バグが少ないから、
関数が使えるなら、それを使えばよい

逆に、異なるバージョンなどで、
使えないなら、自作すればよい
0382デフォルトの名無しさん2015/07/03(金) 19:40:46.39ID:CxuijVE/
自作もできないうちはバグなんてどうでもいいでしょ
0383デフォルトの名無しさん2015/07/04(土) 18:51:53.73ID:aORV0gQX
荒らす気はないんだけど、Rspecの書き方なんかわからずに
ソース探すのに疲れて、rubyMine買うと決めたんだけど、
参考までに、皆 pryで調べてるんですか?
0384デフォルトの名無しさん2015/07/04(土) 18:58:56.05ID:aE1SWTzm
やべえ、3回読み返したけど、さっぱり分からんw
解読班はよ
0385デフォルトの名無しさん2015/07/04(土) 19:38:00.22ID:2O5lVBCk
>>383
rspec の記法はちゃんとドキュメントあるから、RubyMine 使わなくても大丈夫だ。
github とかにホスティングされてるgemのspec を読むのが手っ取り早い。
0386デフォルトの名無しさん2015/07/04(土) 19:54:14.00ID:aORV0gQX
>>385
ありがとうございます。すごく丁寧に書かれてました。
0387デフォルトの名無しさん2015/07/05(日) 14:42:04.99ID:19q/SObD
ruby xxx.rb でエラーが出て
ruby -U xxx.rb でエラーが出なくなるコードがあるのですが、
このオプション-Uに関する記述はどこにあるのでしょうか

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2frubycmd.html#cmd_option
にも-Uの記述が全く有りません。
0388デフォルトの名無しさん2015/07/05(日) 16:06:04.95ID:vNDQviuw
単純にリファレンスがメンテしきれてないだけでしょうね
manには書いてあるね
Sets the default value for internal encodings (Encoding.default_internal) to UTF-8.
だそうな
0389デフォルトの名無しさん2015/07/12(日) 23:58:48.91ID:RydZEeqm
保守
0390デフォルトの名無しさん2015/07/15(水) 19:54:06.79ID:rBiIOBeb
rubyからTeraTermを制御(逐次入力、出力結果取得)したいんですが、どうやれば。
出力結果は最悪TeraTermでログ出力したファイルを読み込むのでもかまいません。

Open3.popen3を使う? でもこれって標準入力閉じずに標準出力取得できないと聞きました。
TeraTerm出力結果をもとにruby側で判断、TeraTermに再度入力したいのです。
0391デフォルトの名無しさん2015/07/15(水) 21:08:04.69ID:NoeQQAWM
TeraTermいらね
0392デフォルトの名無しさん2015/07/15(水) 21:21:26.12ID:PlIpDVLp
puttyじゃいかんのか?
0393デフォルトの名無しさん2015/07/15(水) 21:29:50.08ID:rBiIOBeb
複数人にTeraTermがインストールされている状況なのでTeraTermが望ましいですが、
PuTTyでもかまいません。
0394デフォルトの名無しさん2015/07/15(水) 21:41:30.21ID:Kluh4htZ
先輩方、お世話になります。

Ruby 2.0.0.481
Windows8.1
であります。

テキストエディタに表示している文字列、数値などを、読みだしたり、書き出したりできるのでしょうか。
たとえは、エディタに、
x=1.2
と書いてあるときに、この「1.2」を読み取って、Rubyで繰り返し計算をして、
最期の結果をテキストエディタの最後の行に書き出せるのでしょうか。

つまり、エディタでから数値データを取り出して、計算して、返す、という動きであります。
0395デフォルトの名無しさん2015/07/15(水) 21:52:24.18ID:PlIpDVLp
なんのエディタかによるがたとえばEmacsやJEDなら可能
テキストエディタのバッファの中身を読み書きするメソッドが用意されてるかどうかによる
0396デフォルトの名無しさん2015/07/15(水) 21:55:00.67ID:d0uSs4Pt
windowsならxyzzyで簡単にできるよ
03973942015/07/15(水) 22:23:38.65ID:Kluh4htZ
>>395,396
どうもです。
エディタによるんですね。
すると、いきなり、ノートパッドでやるなんてのは無茶ということですね。
0398デフォルトの名無しさん2015/07/15(水) 22:40:14.06ID:2OhrzIaS
あるアプリと別のアプリ(スクリプト)を連携させる場合、AutoHotKey使うと便利

{Home}+{END}^c
でカレント行をコピーしてからRubyスクリプト起動してあれこれ計算して
クリップボードにコピーしてから
^vで結果を書き戻すというのも可能
0399デフォルトの名無しさん2015/07/15(水) 23:05:54.76ID:1u1xQ4w9
スクリプトが動いている間自分は操作できないとか
動作が重くなるとタイミングがずれて芋づる式に変な操作してしまうとか

AutoHotKeyってそうはならない?
0400デフォルトの名無しさん2015/07/16(木) 00:23:12.20ID:HOH6O9xm
そういう時私ならほっときーますね。
0401デフォルトの名無しさん2015/07/16(木) 01:46:01.84ID:vW5tNoO7
AutoHotkeyは力技過ぎて最終手段だなあ
使い所を間違えなければいいツールだとは思うが
0402デフォルトの名無しさん2015/07/16(木) 04:47:19.06ID:MREKRM2C
>>397
win32ole
0403デフォルトの名無しさん2015/07/16(木) 19:35:47.96ID:/YzLSp2x
>390
net-ssh gemとか標準のtelnetじゃだめなの?
0404デフォルトの名無しさん2015/07/18(土) 11:03:37.85ID:XqruX5K0
>>403
おーこれでなんとかやれそうです。
外部ツールに頼らないでやればよかったんですね。
対象機器はtelnet接続は許可されていないのでsshでやってみます。
net-sshはdl/*を使っているので2.2.xでは使えないようで…ひとまずRubyのバージョン落としてみます。
先に進めそうです。ありがとうございました。
0405デフォルトの名無しさん2015/07/18(土) 11:17:37.44ID:xTrOg+7r
なんと、そういうことだったのか…w
0406デフォルトの名無しさん2015/07/19(日) 15:09:50.79ID:GWdtmhTK
390です。

sshでのやりとりをメインスレッドでやるのはうまくいきましたが、
実用上は別スレッドにする必要があるため分けたところ、躓いてしまいました。

簡略化したコードを以下に貼りました。
http://pastebin.com/ABH6ak0p

gdb実行時の標準出力が得られません。
上記コードで言えば"connect success"の後に何も表示されません。

何が悪いかご教示いただけないでしょうか。

※ サーバ上で、gdbでa.outを動かしているプロセスは居ました。(別口でサーバにログイン、"ps -ef"で確認)
0407デフォルトの名無しさん2015/07/19(日) 15:13:49.75ID:GWdtmhTK
あああコメントアウト外すの忘れてました
Net::SSH.start 〜 の行はコメントアウトしていないものとして見てください。すいません。
0408デフォルトの名無しさん2015/07/20(月) 21:18:13.28ID:Tkp70n/r
たびたび申し訳ありません。390=406です。
サーバ再起動させたあとはうまく動きました…。何かゴミプロセスが残っていたのかもしれません。
強制終了させてもプロセスきちんと片付けるような修正を加えようと思います。
今後はもう少し色々試してから聞くようにします…連投失礼しました。
0409デフォルトの名無しさん2015/07/22(水) 19:28:52.48ID:RRhD77eq
質問です。

puts 1.0 - 0.92
を実行すると

ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] → 0.08
ruby 2.0.0p645 (2015-04-13) [i386-mingw32] → 0.07999999999999996

のように1.8と2.0で結果が違います。
2.0でも1.8同様の結果が欲しい場合どのように記述したらよいでしょうか?
04104092015/07/22(水) 20:01:21.12ID:RRhD77eq
409です。
以下の記述でできました。

require 'bigdecimal'
puts (BigDecimal("1.0") - BigDecimal("0.92")).to_f
0411デフォルトの名無しさん2015/07/22(水) 22:16:42.45ID:/LcTIUwd
環境に関わらず統一したいならRational使うしかないんじゃないの
0412デフォルトの名無しさん2015/07/23(木) 00:13:59.50ID:ZoFYpsVn
>>411
Rationalは2.1以上じゃなかったっけ?
0413デフォルトの名無しさん2015/07/23(木) 00:15:06.51ID:oARZ3zU4
じゃあNationalは?
0414デフォルトの名無しさん2015/07/23(木) 00:41:35.09ID:8g5M7/3K
>>412
1 + 1/3rみたいなことはできないけど、あるよー
ttp://docs.ruby-lang.org/ja/1.8.7/class/Rational.html
0415デフォルトの名無しさん2015/07/23(木) 09:10:34.67ID:fAWwlZE2
Ruby Tools for Visual Studio 2015マダー
0416デフォルトの名無しさん2015/07/26(日) 18:22:06.01ID:2VKiOwqX
gets.chopで入力した文字列をclassインスタンス名にすることはできますか?
↓のコードで明らかに欠陥があるのは分かってるのですが、どうすればいいのかわかりません。
ようはirbでそのクラスやメソッドを記述したrbファイルで開いてから
データを収めるインスタンスを任意で追加できるような仕組みをつくりたいのですが。

class Hello
def setName(name)
@name = name
end

def hello
print "Hello ", @name,"\n"
end
end

def int
print "名前は?:"
yourname = gets.chop
yourname = Hello.new
yourname.setName(yourname)
end
0417デフォルトの名無しさん2015/07/26(日) 18:24:46.96ID:2VKiOwqX
まちがい
×記述したrbファイルで開いてから
↓
○記述したrbファイルを開いてから
0418デフォルトの名無しさん2015/07/27(月) 21:33:25.31ID:TgAx1E6z
メソッド定義を
class Hello
end
でくるめばいいんじゃね?
0419デフォルトの名無しさん2015/07/28(火) 00:40:56.52ID:SY7oXFPU
>>416
eval "#{yourname} = Hello.new"
としたいということ?
0420デフォルトの名無しさん2015/07/29(水) 16:14:29.18ID:2q2ZdS20
テキストファイルに名前その横に点数が書いてあるファイルがあって
それを左から国語、算数、理科、社会、合計、平均点を計算するプログラムを作らないといないのですが
カラの配列つくってファイルを読み込むとこまでやったんですがこの先ちんぷんかんぷんです
助けてぇ・・・・・
0421デフォルトの名無しさん2015/07/29(水) 17:03:46.55ID:1zEW+9y+
宿題なら宿題スレで
0422デフォルトの名無しさん2015/07/29(水) 21:15:01.10ID:5riumSBq
array.inject(:+) で合計を求める

a = [1, 2, 3]
a.inject(:+) # => 6

平均は、合計を配列の要素数
(array.length または、array.size)で割って求める


コテ 50
ショパン 70
ななまる 30

でも、こういうファイルでは、科目はわからないだろう
0423デフォルトの名無しさん2015/07/30(木) 17:42:41.86ID:2wiyWeYf
イニシャライザに渡すブロックについて教えてください。

require 'tk'
button = TkButton.new {
text 'exit'
command proc { exit }
pack
}
Tk.mainloop

↑ここのブロック { text 'exit' ... } が
{|w| w.text 'exit' ... } (これでも動きます) と同等に機能する仕組みを教えてください。
0424デフォルトの名無しさん2015/07/30(木) 18:43:29.51ID:2wiyWeYf
class Foo
attr_accessor :text

def text(_text="defalut")
self.text = _text
end

def pack
print "pack, OK!\n"
end

def initialize
yield if block_given?
rescue NameError => err
if defined? err.args
self.send(err.name, err.args)
else
self.send(err.name)
end
end
end

obj = Foo.new {
text "Hello"
pack
}

試しにこんな感じで書いてみましたが、当然ながら text "Hello" だけ実行されます。
エラーのあった次の文から再開 (retryだと最初からやり直し) 的な書き方があるんでしょうか?
0425デフォルトの名無しさん2015/07/30(木) 22:41:08.75ID:e7NCTD1Y
def initialize(&block)
self.instance_exec(self, &block)
end
0426デフォルトの名無しさん2015/07/30(木) 22:53:56.70ID:2wiyWeYf
>>425
ありがとうございます
0427デフォルトの名無しさん2015/08/02(日) 22:26:38.67ID:3ZR8eaCb
(a,b),c =[1,2,3]

p a #=> 1
p b #=> nil
p c #=> 2

なぜこういう結果になるのか仕組みが分かる方いらっしゃったら教えてください。
0428デフォルトの名無しさん2015/08/02(日) 23:09:21.76ID:dTRZmQiN
(a, b) = 1
c = 2
cyberspace = 3
0429デフォルトの名無しさん2015/08/02(日) 23:10:51.15ID:fovtrXXc
http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2foperator.html#multiassign

多重代入は括弧により、ネストした配列の要素を代入することもできます。
(foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3
0430デフォルトの名無しさん2015/08/03(月) 17:32:28.07ID:+rvo8Bqt
ありがとうございます。

ヒント貰って試していて、理解出来ないケースがあって

test1
(a,b),c=[1,2,3]
#=> a=1 b=nil c=2

test2
a,(b,c),d=1,2,[3,4]
#=> a=1 b=2 c=nil d=[3,4]

test3
(d1,d2),d3,(a,b),c=[1,2,3],4,[5,6,7]
#=> d1=1 d2=2 d3=4 a=5 b=6 c=nil

test4
(d1,d2),d3,(a,b),c=[1,2,3],4,[5,6,7],8
#=> d1=1 d2=2 d3=4 a=5 b=6 c=8

このtest1とtest3のa,b,cが違うことをどう理解すればいいのか分からなくて

(a,b),c=[[1,2],3]
#=> a=1 b=2 c=3

ここで、やっと「ネストした配列」の意味が分かりました。
0431デフォルトの名無しさん2015/08/07(金) 14:15:41.95ID:yhyLjZsM
CSV::Tableのパースで教えてください。

UFJ銀行の入出金明細をcsvで出力したものをつぎのコードで読み込んでます。
(パースする前にnkfでsjisからutf8に変換済み)

table = CSV.table(path, :header_converters => lambda { |h| h.to_sym unless h.nil? })

そうすると一部の金額が,StringでなくFixnumになってしまうのです。
すべてStringとして読み込むにはどんな対処方法がありますか?

元データ(コード変換済み)
"2015/8/4","振込IB2","ホゲホゲ フガフガ","80,000","","145,141"
"2015/8/4","為替手数料","フリコミ テスウリヨウ","324","","144,817"

p table
#<CSV::Row 日付:"2015/8/4" 摘要:"振込IB2" 摘要内容:"ホゲホゲ フガフガ" 支払い金額:"80,000" 預かり金額:"" 差引残高:"145,141">
#<CSV::Row 日付:"2015/8/4" 摘要:"為替手数料" 摘要内容:"フリコミ テスウリヨウ" 支払い金額:324 預かり金額:"" 差引残高:"144,817">

桁区切りのカンマの有る無しに影響されているようです。
tableの2行目,column 支払い金額が"324"ではなく324になってしまっている。

よろしくお願いします。
0432デフォルトの名無しさん2015/08/11(火) 09:08:22.29ID:Lj7Gr5q2
rubyのつかえるオススメサーバーってどこ?
っていう質問はここでいいのかな。
0433デフォルトの名無しさん2015/08/11(火) 09:15:41.46ID:AySGymUB
自宅に眠ったノートPC
0434デフォルトの名無しさん2015/08/11(火) 13:57:16.98ID:3pKn71t8
>>431
http://docs.ruby-lang.org/ja/2.1.0/method/CSV/s/table.html
ってことなので
数値変換器の動作を無効化してみてはどうか

table = CSV.table(path, converters: nil, header_converters: lambda { |h| h.to_sym unless h.nil? })
0435デフォルトの名無しさん2015/08/11(火) 14:34:22.08ID:SeETvk3M
むしろ数値のままで何が問題なのか
0436デフォルトの名無しさん2015/08/12(水) 00:09:19.13ID:2p58Flem
>>434
つうか普通に read とか open を headers: true 付けて呼べばいいんじゃね。
0437デフォルトの名無しさん2015/08/12(水) 12:30:08.19ID:DAPBN+R4
>>432
さくらのレンタルサ−バ

ただし、新しいversionは自分でinstallする必要がある
0438デフォルトの名無しさん2015/08/14(金) 02:50:53.31ID:tVC0EFYk
初歩的な質問だとは思いますがレス貰えるとありがたいです
bitbucketにあがっているとあるgemをrubyにインスコしたいんですがrubyがそのgemを認識してくれません
古いバージョンはコマンドでインスコ出来たのですがbitbucketのリポジトリにある
最新版のgemをどうインスコ(?)アップデートすればいいのか分かりません
listでもsearchでも古い方しか認識されません
これを参考にいくつか試してみましたが無理でした
http://bundler.io/git.html

windows 7
ruby 1.9.3
宜しくお願いします
0439デフォルトの名無しさん2015/08/18(火) 15:10:19.77ID:YJRjd7XD
>>438
自己解決しましたのでレスはもう要りません
0440デフォルトの名無しさん2015/08/30(日) 05:53:05.34ID:+htnx8/P
>>357
rubyバージョン同じ
win7 32bit
同じく文字化けします。

解決策が見つかりそうもないので
諦めてcentosかmacでやっています。
0441デフォルトの名無しさん2015/08/30(日) 07:40:26.63ID:/PELE0GV
UTF-8のソースをそのままコマンドプロンプトに出力したらそりゃあ文字化けするわ
出力前にShift-JISに変換すればいい
0442デフォルトの名無しさん2015/08/30(日) 08:17:44.87ID:Nn/Oa5bk
「Rubyがミニツク」というサイトの演習問題をやっているが
http://pastie.org/10384578
上記のようなコードを書いて実行すると

Library contents:
Title: Moby-Dick, Author: Herman Melville
Title: The Ugly Duckling, Author: Hans Christian Andersen
#<Library:0x007f9e7b1e7640>

最後の一行で余計な情報が出力されてしまう。
(Objectクラスのto_sメソッドが呼ばれている?)

自作クラスのto_sメソッドはどのように記述すればいいですかね。
04434422015/08/30(日) 08:25:23.30ID:Nn/Oa5bk
rubyのバージョンを書き忘れていました。
2.2.0p0
です。
0444デフォルトの名無しさん2015/08/30(日) 10:49:29.33ID:uddDd/Fp
to_sの中でputsしちゃいかんがなw
…いけないことはないが、使う人からしたらギョッとするでしょ
to_sは普通にstringを返すだけにしたら?

それで呼び出し側で puts my_library みたいにすれば十分では?
04454422015/08/30(日) 11:27:13.68ID:Nn/Oa5bk
>>444
なるほど、ギョッとしました!
確かにstringを返すのが自然ですね。
ありがとうございました。
0446デフォルトの名無しさん2015/08/30(日) 17:53:04.14ID:py1e6P0M
終了時リターンコードって、正常に終われば0、
文法ミスなどのエラー終了は1でいいですか。
0447デフォルトの名無しさん2015/08/30(日) 19:01:06.11ID:ZGwv1hqi
関数のこと言ってるなら例外あげろ
プロセスならそれでいいんじゃね?
0448デフォルトの名無しさん2015/09/01(火) 04:54:53.57ID:/DoXUIG1
そういうの気にしてやる言語じゃなくね
作法学ぶならJAVA,C#で
0449デフォルトの名無しさん2015/09/02(水) 17:02:40.98ID:eDqiT8Wq
シェルスクリプトなどの戻り値は、0〜255を使う

0が正常で、1以上がエラー
0450デフォルトの名無しさん2015/09/03(木) 00:43:19.55ID:iQnjIkb4
shのように0が真ならいいんだけど、偽として扱われる言語で関数の戻り値に
使っちゃうような悪習が蔓延っているのはなんでなんだろうな。
0451デフォルトの名無しさん2015/09/03(木) 01:47:57.19ID:o02/AS18
コードは上から下へ。例外的な処理を if 文の中へ入れるのだ。なんてな
0452デフォルトの名無しさん2015/09/05(土) 00:27:46.85ID:3U9xihI0
スレ違いかもだけど、何処で聞いたらいいのか分からないので、ちと質問です

さっき何の気なしにVirtualBoxにLubuntu15.04インストールして、そのまま続けて何の気なしにrvmインストールしてたら
# ----,
#
# Thank you for using RVM!
# We sincerely hope ・・・・・・以下略
ってメッセージが出て
一番上の「----,」の所に自分のTwitterとかgmailで使っているアカウント部分が出てたんだけど、
そもそも上にも書いたとおりOS新規インストール後、直でrvmを入れようとしたわけなのに
この仮想PCには一度も入力した事のないアカウント名をどうやって割り出したんすかね?
(もちろん、PC名やユーザ名はそのアカウント名とは全然違うものを入力してます)
何か凄い気になったので・・・

公式に書いてある手順の「gpg --keyserver hkp://key〜」とかと関係あるんすかね?
0453デフォルトの名無しさん2015/09/08(火) 02:03:37.13ID:K9PLTp8k
url = "http://www.example.com/register?url="; +
CGI.escape('http://www.example.com/index.rss')
p url
#=> "http://www.example.com/register?url=http%3A%2F%2Fwww.example.com%2Findex.rss";
で
www.example.com
のところとかも強引にエスケープするのはどうやればいいですか
0454デフォルトの名無しさん2015/09/09(水) 13:14:52.77ID:4cI6pG8V
置換
"A".ord.to_s(16) # => "41"
0455デフォルトの名無しさん2015/09/09(水) 14:45:57.36ID:pS2N2yop
1文字ずつ自力でやれということですね
ありがとうございます
0456デフォルトの名無しさん2015/09/10(木) 20:43:46.60ID:UFEDaipD
tapって盗聴するって意味らしいけど
ブロック変数で破壊的に操作できるから
盗聴ってよりspyじゃね?
0457デフォルトの名無しさん2015/09/11(金) 00:35:52.77ID:EBu7PyHn
有識者の方、教えて下さい。

1.Rubyのグラフィカルなデバッグ環境って何がお薦めなんですか?
2.apache経由で動いているRubyにアタッチしながらデバッグする、お薦めの環境ありますか?
0458デフォルトの名無しさん2015/09/11(金) 22:11:21.59ID:Z6BYqfNY
有識者「にゃーん」
0459デフォルトの名無しさん2015/09/11(金) 22:20:42.02ID:GHVwR1ig
javascript覚えて結構便利で使いやすいなあと感じてるんですが、ruby覚えるとそれ以上の感動有りますか?
0460デフォルトの名無しさん2015/09/11(金) 22:26:02.85ID:rVr5mLkZ
何をするのかによる
文字列操作するならとても便利で感動するかも
javascript何に使ってるの?
0461デフォルトの名無しさん2015/09/11(金) 22:27:07.19ID:vI/Sge8p
JavaScriptは標準ライブラリがクソだからなぁ
0462デフォルトの名無しさん2015/09/11(金) 22:30:50.28ID:GHVwR1ig
>>460
webサイトです
0463デフォルトの名無しさん2015/09/12(土) 22:34:32.56ID:dK13GhPG
>>462
ほとんど何も言ってないに等しいぞ。
0464デフォルトの名無しさん2015/09/16(水) 10:50:32.64ID:fQczy5Yc
以下の様な数値群から、重複しない要素を使って任意の数値(例えば2360)に最も近い和を求めるにはどうしたら良いでしょう?
115,135,215,352,358,655,885,925,936,1250,1285,1620,1850
0465デフォルトの名無しさん2015/09/16(水) 12:32:29.68ID:d+PGYxxz
>>464
お題スレ行けよ!
04664642015/09/16(水) 13:01:57.78ID:fQczy5Yc
では、お題スレにいってみます。
0467デフォルトの名無しさん2015/09/17(木) 04:00:34.11ID:7nhq2dTy
linuxで一からインスコしてたけど
挫折した
もういいおwinでやるよ

gemがエラー吐きすぎ
0468デフォルトの名無しさん2015/09/17(木) 07:19:20.57ID:0IN9fIB7
RubyはWindowsの方が茨の道じゃないか?
0469デフォルトの名無しさん2015/09/17(木) 13:19:29.49ID:PZjZi1q6
英数字の全角半角変換方法がわからなかったが
require 'jcode'
で trを使って全角半角ができた
(初心者の発見)
0470デフォルトの名無しさん2015/09/17(木) 17:39:15.04ID:Deuez3d+
a = Mechanize.new { |agent|
agent.user_agent_alias = 'Mac Safari'
}

a.get('http://google.com/') do |page|
search_result = page.form_with(:name => 'gbqf') do |search|
search.q = 'Ruby'
end.submit

上の「a = Mechanize.new { |agent|」という部分はどういった意味になるんでしょうか?
Mechanizeのインスタンスであるaを更にagentに入れてるんですか?
0471デフォルトの名無しさん2015/09/17(木) 20:02:58.32ID:2BhOyj3T
>>470
mechanizeのインスタンスのaがどっかアクセスするときに使うuser-agentをmacのsafariで使われる感じの文字列に設定してる
a = Mechanize.new
a.user_agent_alias = 'Mac Safari'
と同じ意味
0472デフォルトの名無しさん2015/09/18(金) 14:34:25.40ID:Q3xKeKMY
ブロック引数の扱いはライブラリ実装によってまちまちで
Mechanize#initialize がたまたま self を引数にブロックを呼んでるだけ。
初期化をまとめて明示的に書けるイディオム
0473デフォルトの名無しさん2015/09/18(金) 14:55:24.76ID:GAuLG231
>>470のような
block付きinitializerはどうも好きになれなかったが
Class.initializeの仕様を知って驚いた。
0474デフォルトの名無しさん2015/09/18(金) 17:15:12.68ID:F9/JIS/o
自分自身をブロックパラメータにもらえるのってある?
1.tap{|i| break [i, i*2]}
みたいなことを素直にできる
1.xxx{|i| [i, i*2]}
みたいなxxxってある?
0475デフォルトの名無しさん2015/09/18(金) 19:23:09.07ID:Q3xKeKMY
nilだと動かないけどrailsのtry!
0476デフォルトの名無しさん2015/09/18(金) 19:55:48.50ID:qK9BPuWU
れすとん!
railsにはあるんやね
ttp://api.rubyonrails.org/classes/Object.html#method-i-try
0477デフォルトの名無しさん2015/09/20(日) 04:26:05.83ID:vBjKt0IW
>>469
String#upcaseで大文字に、
String#downcaseで小文字に変換します

String#capitalizeを使うと、
先頭だけ大文字に変換します

大文字と小文字を入れ替えるには、
String#swapcaseを使います

「ruby 大文字 小文字 変換」で検索する
0478デフォルトの名無しさん2015/09/20(日) 08:44:38.37ID:OSUmrGRk
大文字小文字じゃなくて全角半角やって言ってんやろーが

ruby2.0以降ならrequire'jcode'は非推奨だし不要
0479デフォルトの名無しさん2015/09/20(日) 09:44:23.68ID:t6sFQCTm
神調教 → ネ申 言周 孝攵 みたいにしたいの
0480デフォルトの名無しさん2015/09/20(日) 14:55:13.41ID:rSqoApkT
たのしいrubyの8章と9章の抜粋されたサンプルコードってどう書き換えればいいの?
0481デフォルトの名無しさん2015/09/21(月) 00:00:43.70ID:UwK67s0X
>>478-479
Windowsには、LCMapString という、
半角/全角を変換する関数がある

半角カナ・英数字 ←→ 全角


>>480
抜粋された箇所だけを、見ればよい
0482デフォルトの名無しさん2015/09/21(月) 01:45:08.50ID:UwK67s0X
>>478-479

nkf ライブラリで、できるかも
0483デフォルトの名無しさん2015/09/21(月) 12:34:09.30ID:ImbkXCPB
>>481
書き写して実行したいときは点々の部分は気にしないでいいのね
一応すべてのサンプルを打ち込んで実行してるんだけどそこだけ解らなかった
0484デフォルトの名無しさん2015/09/21(月) 13:59:27.40ID:ZB4SMmGZ
スレ違いかもしれませんが、質問場所が分からないので、こちらでさせてもらいます。
環境構築でつまずいてます。

■症状
OpenSSL::SSL::SSLError: SSL_connect のエラー

■環境など
レンタルサーバー、ruby2.1.5
■問題の内容
証明書が無いと怒られてます。証明書を置く場所は、レンタルサーバーなので、アクセス不可。
最終的に、cronで動かしたいので、 .bashrc に記述する方法は出来ない
rubyのスクリプトの頭に、下記を記述してみたのですが、エラーが消えない。

ENV['SSL_CERT_FILE'] = "/virtual/name/lib/ruby/etc/cert.pem"
p ENV['SSL_CERT_FILE']

リンクは間違ってないようですが、何か思い当たることなどありませんか?
0485デフォルトの名無しさん2015/09/21(月) 15:04:40.09ID:dq2ooNt1
>>484
https = Net::HTTP.new(url, 443)
https.use_ssl = true
https.ca_file = "/xxxx/cacert.pem"
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.start {
..
}

みたいにやった、素人芸なのでもっといい方法があるのかも知れない
0486デフォルトの名無しさん2015/09/21(月) 15:53:33.84ID:ZB4SMmGZ
>>485
ありがとうございます。少し変更して、下記の形で行けた気がします。
助かりました。

https = Net::HTTP.new(url, 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER

https.cert_store = OpenSSL::X509::Store.new
https.cert_store.set_default_paths
https.cert_store.add_file("/virtual/name/lib/ruby/etc/cacert.pem")
0487デフォルトの名無しさん2015/09/23(水) 04:24:10.42ID:NIZtVs7u
railsとかsinatraってプログラムはどこに記述するの?
コントローラーやテンプレートには変数もらったりイテレーターとか条件文しか書けないみたいだし
0488デフォルトの名無しさん2015/09/23(水) 09:58:52.79ID:+BBxqjZk
すみません、変数について教えてください。
1.sliceした場合、fの元の値が書き換わってしまうものなのですか?
2.sliceする前の値を得たい場合、どう記述すべきでしょうか?
3.gは何もしていないのに、値が変わるのはなぜでしょうか?

f = "abcdefg"
g = nil

g = f
print f,"<=f1回目\n"
print g,"<=g1回目\n"
print "---------\n"
charset = f.slice!(0,1)

print charset,"\n"
print f,"<=f2回目\n"
print g,"<=g2回目\n"
■結果
abcdefg<=f1回目
abcdefg<=g1回目
---------
a
bcdefg<=f2回目
bcdefg<=g2回目
0489デフォルトの名無しさん2015/09/23(水) 12:02:33.24ID:t1geCVCC
>>488
.object_id
0490デフォルトの名無しさん2015/09/23(水) 18:01:52.94ID:I9Zkhl7t
TCPserverのacceptが動作してくれてなさそうなので、助言がありましたらお願いします。


■環境
Server : Windows7 PC
Client : Mac Book Air
Ruby ver 2.2.3

■やりたいこと
Server <-> Client間でTCP通信で単純なメッセージのやり取りができること

■症状
Server側のRubyコード acceptで実行が止まっており接続が正常にできていない模様。

■やったこと
Server <-> Client間のpingは通る。

だめもとでC言語で書かれたServerプログラムをコンパイルして実行して
Client側のMacだけRuby clientを実行したら意図通りにメッセージのやり取りができた。

■コード
Ruby
 ttp://qiita.com/nekogeruge_987/items/23312e53b15ebfeb0607
ここのサイト様のコードをそっくりコピペして実行しました。

C言語Socketプログラムコードは
 ttp://capm-network.com/?tag=C%E8%A8%80%E8%AA%9E-TCP%E3%82%B5%E3%83%BC%E3%83%90
0491デフォルトの名無しさん2015/09/23(水) 18:09:26.94ID:+BBxqjZk
>>489
慣れが必要そうですが、何となく分かりました。ありがとうございます。
04924902015/09/23(水) 22:01:26.90ID:I9Zkhl7t
自己解決しました。
サンプルのRubyのコードでは不十分で、
server = TCPServer.open(2000)
とするとlocalhostをlistenするので、他のIPからの接続を受け付けていませんでした。
server = TCPServer.open('IP address',2000)
IP addressはServerとなるPCのIP
で接続出来ました。
0493デフォルトの名無しさん2015/09/24(木) 01:54:38.91ID:KIwTvfAf
>>488
Array.sort!、 String.slice! など、
メソッド名の最後に「!」が付いているものを、
破壊的メソッドと言って、
そのオブジェクト自体を変更してしまう、メソッドを言う
(「!」が付いていない破壊的メソッドもある!)

また文字列の追加で、「+」を使うと通常のメソッドで、
「<<」を使うと破壊的メソッドとなるので要注意!

Rubyでは、数値などのPrimitive型(単純型)も含めて、
すべてがオブジェクトであり、メソッドの引数で渡す際にも、
参照渡しとなり、そのアドレス値をコピーして渡すので、
同じオブジェクトを指す

一方、Javaでは、Primitive型は値渡し(コピー渡し)となり、
その値をコピーして渡すので、別のオブジェクトとなる

だから変数xを、メソッドa()に渡して、そこからb()に渡して、
さらにc()に渡しても、参照渡しなので、
同じオブジェクトを指すため、
元のxを変更すると、すべてが変更される!
0494デフォルトの名無しさん2015/09/25(金) 11:07:09.29ID:VhYt0QvP
ruby2.2.3入れていくつかgems入れたら
全くエラー出る事なくインストールできやがった・・・・
何事だよ・・・
0495デフォルトの名無しさん2015/09/27(日) 18:37:06.59ID:UYzM99J3
rubyってどこで使われてるんですか?
0496デフォルトの名無しさん2015/09/27(日) 18:44:37.78ID:UYzM99J3
ネエネエwwww ドコデwwww るbywwww ツカワレテルノーwwwwwwwwwwwwwwんんんんんっwwwwwww
0497デフォルトの名無しさん2015/09/28(月) 10:38:16.41ID:0RjOK4Zp
>>495
rails
0498デフォルトの名無しさん2015/09/28(月) 22:22:05.47ID:pdVcHsD8
レレレレレイルッズwwwwwwwwwwww
0499デフォルトの名無しさん2015/09/29(火) 00:22:15.78ID:2Af20K9J
>>495
個人用途だとDOS画面から、
こまごまとした身の回りの処理や日曜プログラム
0500uy ◆e6.oHu1j.o 2015/09/30(水) 06:23:46.97ID:ZFzEM6SP
質問です


module Uy_ha_initiator
refine Proc do
def + n
->{
self.call
n.call
}
end
a = -> { p 1 }
b = -> { p 2 }
c = a + b
c.call
end
end


こうゆう事したいんですけど、
メソッドa , b に引数ついてる場合も考慮してスマートに実装する方法ないですか?
0501デフォルトの名無しさん2015/09/30(水) 12:35:41.18ID:iRWak9My
>>495
自治体HP
0502デフォルトの名無しさん2015/10/02(金) 04:52:29.19ID:j2xAjxnc
Ruby資格の教科書を見たが、5年前の求人割合では、
Java:Ruby = 10:1 だが、今では、5:1 で、
5年後には、2:1 と予測されている

JavaからRubyへの流れが、止まらない
0503デフォルトの名無しさん2015/10/02(金) 10:40:39.02ID:7Md9hlDd
もしその予測通りなら失業者が10倍くらいになってるかな
0504デフォルトの名無しさん2015/10/04(日) 20:19:03.58ID:OIYCaleY
cronでの実行で質問です。

レンタルサーバーで、cronからスクリプトを動かしたいのですが、動かせずにいます。
・ターミナルから、直接叩く =>動く
・ターミナルから、シェルスクリプトを介して、スクリプトを動かす =>動く
・cronでシェルまたは、rubyのスクリプトを叩く =>動かない
・cronで別のスクリプト(requireなど記述していないもの)を叩く =>動く

起動時のパスが動かない原因だと考えているのですが、エラーの吐き出し方が分からず困っています。
こういったときは、どうデバッグすべきでしょうか?
0505デフォルトの名無しさん2015/10/05(月) 02:33:29.49ID:igCu1GJ5
>>509
レンタルサーバーやlinuxスレの方がいいと思うが

/... /test.rb 引数 >/dev/null 2>&1
みたいにしている
0506デフォルトの名無しさん2015/10/07(水) 10:01:49.95ID:0iwSPjqO
>/dev/null 2>&1
もし上記のようにして、エラーを捨てているのなら、
エラーを捨てないで、cron, rubyのエラーを見る

まず、rubyスクリプトの冒頭に、
logかファイル出力でも書いておいて、
それが出力されないのなら、cronでの起動エラーになる

まあ、Linux板で聞いた方がよさそう
0507デフォルトの名無しさん2015/10/07(水) 11:32:20.71ID:0iwSPjqO
ディストリに最初から入っている、rubyを使うのなら、
これで、実行されるのでは?
ruby test.rb

ttp://www.lab.ime.cmc.osaka-u.ac.jp/~kiyo/pub/lecture/unixpro/ruby/

echo $PATH
として、サーチパスを見れば、最初からパスが通っている、
/usr/local/bin があるから、そこにスクリプトを置いて、
そのスクリプトに、以下のように実行権限を付ける

chmod +x test.rb
0508デフォルトの名無しさん2015/10/08(木) 01:21:17.16ID:ax9qeEL5
>>504
STDERR.reopen() でSTDERRをファイルに書き出す
0509デフォルトの名無しさん2015/10/08(木) 11:52:56.53ID:vEe59M97
Fiber(笑)使ってる奴いる?
スレッドの壁超えられない
0510デフォルトの名無しさん2015/10/08(木) 20:10:42.27ID:Gm31FEMf
GILあるならFiberが適当
0511デフォルトの名無しさん2015/10/09(金) 10:48:34.44ID:AnphRb22
OS X El Capitan‎をクリーンインストールしてSassとかCompassを入れたあと
$ gem update --systemしたら、そのあとパーミッションの問題で
$ gem install ***ができなくなってしまいました

& gem envをみてみたら「EXECUTABLE DIRECTORY:/usr/local/bin」が「EXECUTABLE DIRECTORY: /usr/bin」に変わってたんですが、EXECUTABLE DIRECTORYを変える方法ってありますでしょうか

わかる方がいらっしゃったらご教示ください!
0512デフォルトの名無しさん2015/10/09(金) 20:32:34.19ID:zXylNyAd
単にOS標準のgem(ruby)が使われているだけじゃないん?
以前が/usr/local/binだったならたぶんHomebrewでいれたんだろうね。
さらにいうとrvmやrbenvとbundler使ったほうがいい。
0513デフォルトの名無しさん2015/10/09(金) 20:47:38.63ID:a6l66mp2
GILとFiberって何か関係あるの?
0514デフォルトの名無しさん2015/10/10(土) 00:24:59.25ID:u1b7Ierj
何も関係ない
0515デフォルトの名無しさん2015/10/10(土) 14:38:26.65ID:UP2dWSIf
railsのエラー処理で挫けそうになるんだけど
バージョンいっぱいあるせいでエラーググっても意味を成さない事が殆ど
一回安定した環境にしたら二度とアップデート出来ないな
その前にrailsやめそうだけど
0516デフォルトの名無しさん2015/10/10(土) 15:33:35.56ID:/egW/Cb1
わかります
0517デフォルトの名無しさん2015/10/10(土) 16:04:43.77ID:yLWmOzh6
・アップデート?アップグレードでしょ?
・railsやめたところで他の言語やプラットフォームでも同じこと
・エラー?ソース読めばわかる(他のOSSでも同じ)
・ソース読めない?じゃあ使うな(他のOSSでも同じ)
・安定した環境にしたらアップグレードできない?
 ・テスト書いてないってことじゃん。そんなの今は安定っていわねーんだよw
0518デフォルトの名無しさん2015/10/10(土) 21:04:12.47ID:wylVu18O
gem upgrade rails?

いやもうrailsとかほんと良いんで・・・・・
他の手段でWebサイトは現状管理出来てるけど
ruby繋がりでrails一応やっとくかー → あーーーーーー・・・・・・もうやんね
と、なったのでした。おしまい。
0519デフォルトの名無しさん2015/10/11(日) 10:52:35.73ID:ngi+Bnfd
Ruby対Scala
http://b.hatena.ne.jp/entry/tech.cm55.com/wiki/scala/ruby
0520デフォルトの名無しさん2015/10/11(日) 20:03:17.53ID:p0ViGygC
趣味だから扱い易いのでいいや
0521デフォルトの名無しさん2015/10/16(金) 13:41:19.15ID:CYEljn+R
今の時代に個人サイトでCGI使う必要性すらなくなってきてるな
CGI動かなくてもかなりのものが外部委託
大体動的なページ生成とか、あらかじめメタするかjsでページ内変更で十分出来るし
それはサーバーサイドにやらせなくても実現出来るけど管理が楽だからって理由でサーバーサイドにやらせてるだけ
URLに?とか=くっつけてparam受け取るのって脆弱性しか残らんよ
いずれURLからparam受け取る情弱設計は淘汰される運命
0522デフォルトの名無しさん2015/10/16(金) 17:56:09.00ID:MCgyDKhx
jsだとソース見られるけど
jsで済んでしまうんだよな
0523デフォルトの名無しさん2015/10/16(金) 20:11:02.68ID:N6Jh2d8+
初心者スレで初心者が知識を披露して自分の知識のバグ取りする流れは飽きたな
0524デフォルトの名無しさん2015/10/16(金) 21:24:47.35ID:+G3m5iUJ
飽きるほど2ch張り付いてる事に驚く
よっぽど暇なんだな
0525デフォルトの名無しさん2015/10/18(日) 01:33:19.53ID:WOyChqNZ
うん、最近は仕事も順調でかなり暇
0526uy = ruby^rb ◆hBlkfWm2Xc 2015/10/18(日) 11:33:50.76ID:WvPHJe2x
コテでもやれよ
0527デフォルトの名無しさん2015/10/18(日) 13:06:49.46ID:Q87slw7q
>>525
紹介して
0528デフォルトの名無しさん2015/10/19(月) 04:34:17.56ID:3gr1qLW4
んんんんwwwwwwwwww
0529デフォルトの名無しさん2015/10/20(火) 14:21:04.78ID:aDq7wlfP
rubyinstallerでruby&nbsp;2.2.3をインストールしたのですが、
irbなどでコンソールから日本語を入力すると
Error:&nbsp;Invalid&nbsp;argument&nbsp;@&nbsp;io_write
というエラーが出ます
なんとかなりませんか?
0530デフォルトの名無しさん2015/10/20(火) 19:58:42.92ID:Rs0+C/fu
Windowsだとコマンドプロンプトの入力はShift_JISになるからじゃね?
0531デフォルトの名無しさん2015/10/20(火) 20:13:03.38ID:5FrvHuNh
つーか今試したらマルチバイト文字をなに入力しても
bbbbbなってワロタw
Windowsからirb使えないじゃん
0532デフォルトの名無しさん2015/10/20(火) 20:18:12.92ID:5FrvHuNh
ゴミ
0533デフォルトの名無しさん2015/10/21(水) 03:47:58.10ID:tbQLNnPC
便利すぎる
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -app=http://fatiherikli.github.io/fil/
0534デフォルトの名無しさん2015/10/21(水) 05:35:54.16ID:YZnuen5o
ブラクラ貼るなぼけ
0535デフォルトの名無しさん2015/10/21(水) 07:43:09.22ID:BEOnjFkl
100万行ある日本語まじりの、カンマ区切りで30フィールドもあるようなファイルを読み込んで、
2行目以降が、きっちり、1行目とまったく同じだけのフィールドの数で統一されてるかをチェックしたいんだけど、
こういうのってRubyでは出来るもんでしょうか?
0536デフォルトの名無しさん2015/10/21(水) 07:48:24.40ID:zc5Cc/IW
出来るか出来ないかで言えば出来るにきまってるだろ
0537デフォルトの名無しさん2015/10/21(水) 10:30:40.60ID:4fxeGd4H
rubyでもexcelでも
0538デフォルトの名無しさん2015/10/21(水) 11:34:58.23ID:zc5Cc/IW
後ろから前から
0539デフォルトの名無しさん2015/10/21(水) 18:35:32.66ID:ZXMR/M8n
ただし、巨大なファイルは、File.read()などで、
一度に全部読み込んじゃダメ

1行ずつ読み込む、IOクラスを使う

io.each_line do |line|
line.chomp!
処理
end
0540デフォルトの名無しさん2015/10/21(水) 18:42:16.21ID:eyra7kkr
仕事でちょっとしたツールを書いているのですが
同じようなコードを再利用する場合は
モジュール化すれば良いのでしょうか?
0541デフォルトの名無しさん2015/10/22(木) 01:29:40.39ID:TbUL0QMn
コード使い回したいだけなら単にそのファイルをrequireするだけ
使いまわしたいコード(関数)が増えてきたらmoduleやclassで囲って用途ごとにグルーピングする
0542デフォルトの名無しさん2015/10/23(金) 10:51:54.93ID:Rrtmqjxl
再帰関数の中でrequireをたくさん使いたいのですけど
requireってスタック消費しますか?
0543デフォルトの名無しさん2015/10/23(金) 12:58:24.44ID:x5v4qLUm
ruby初心者です
あるソースコードで以下のようなメソッドを見かけたんですが
どういう意味でしょうか?
教えて下さい

def self.[](key)
{
'test1' => 'aaa',
'test2' => 'bbb'
}[key]
end
0544デフォルトの名無しさん2015/10/23(金) 16:50:34.83ID:vpVrL7dw
>>543
Ruby のクラスメソッド定義まとめ
http://qiita.com/Linda_pp/items/b7135ae1f0def6058c6c
0545デフォルトの名無しさん2015/10/23(金) 23:46:19.25ID:KbxpAfMH
[ ]演算子を、再定義しているのかも
0546デフォルトの名無しさん2015/10/24(土) 23:48:55.22ID:Qgv+LRcU
ご無沙汰しております。前スレ982です。
前スレで問題を解決していただき、無事にVistaで運用しておりましたが、
8.1のマシンで同じRBファイルを実行しようとすると以下のようなエラーが…どなたかお分かりになりませんでしょうか?

ttp://imgur.com/z4S2yUE.png
0547デフォルトの名無しさん2015/10/25(日) 00:09:06.02ID:U+zphv13
エラーメッセージを読もう
0548デフォルトの名無しさん2015/10/25(日) 00:13:36.65ID:dvCcO/ow
エラーメッセージが何を指しているのかが分からないのですw
0549デフォルトの名無しさん2015/10/25(日) 00:32:26.49ID:U+zphv13
「エラーメッセージの言っていることはわかるがどうしてエラーが起こっているのかわからない」のか、
「エラーメッセージの英語が読めないまたは読んでない」のか、
「そもそもどれがエラーメッセージかわかってない」のか
0550デフォルトの名無しさん2015/10/25(日) 00:41:54.03ID:dvCcO/ow
>>549
すみません、全部です…
0551デフォルトの名無しさん2015/10/25(日) 00:45:35.56ID:dvCcO/ow
>>549
いや、最初のパターンですね!
0552デフォルトの名無しさん2015/10/25(日) 00:48:58.17ID:kAzb4U8m
no such file or directory が読めないのか
0553デフォルトの名無しさん2015/10/25(日) 00:54:46.20ID:udh7cbN2
Vista機と同じように運用しようとしてる(つもり)なのにエラーが出る理由が知りたいとです…
0554デフォルトの名無しさん2015/10/25(日) 00:58:24.88ID:U+zphv13
C:\調教分析\temp\kol_den2.kd3 がないと言っている
どっかから拾ってきたスクリプトなんだったらきっとあなたが使い方を間違えてるので作者に聞いて下さい
0555デフォルトの名無しさん2015/10/25(日) 00:59:41.21ID:kAzb4U8m
C:\調教分析\temp\kol_den2.kd3 が見つからないってエラーじゃないですか
エクスプローラでそのファイルが存在するか確認しました?
0556デフォルトの名無しさん2015/10/25(日) 01:03:29.44ID:udh7cbN2
>>554
>>555
わざわざありがとうございます!
検証してみたらVista機からdropbox経由でコピーしてきたtempフォルダの中身がいつの間にか消えてしまうんです。
0557デフォルトの名無しさん2015/10/25(日) 01:12:37.20ID:U+zphv13
temp (一時ファイル) っていうくらいだしスクリプトが最後にtempフォルダの中身を消す仕様なんじゃない?
Vista機で正常に実行し終えたあとにはtempフォルダの中身は残ってるの?
0558デフォルトの名無しさん2015/10/25(日) 02:06:13.35ID:IGihUR6P
>>543-545
def func(overwrites = {}){
:a => AAA
:b => BBB
}.merge(overwrites)

「Selenium デザインパターン & ベストプラクティス」2015
という本に載っていたけど、

この関数の引数に、ハッシュを渡すことで、
任意のフィールドを上書きできたり、
新たなキーと値を追加できる
0559uy ◆ggMix6r0fY 2015/10/25(日) 07:04:34.58ID:Pm66QtwE
VimからAtomに移行したよ
http://soz.hatenablog.com/entry/2015/03/23/150317

Atom を Vim っぽく扱う vim-mode と ex-mode
http://loumo.jp/wp/archive/20150727064627/

vim使いがAtomに乗り換えを試みる
http://codeofsea.hatenablog.com/entry/2015/05/01/232954

竹上、vimmerやめるってよ
http://utage.headwaters.co.jp/blog/?p=3835

Atomチートシート
http://qiita.com/ryo0301/items/e06ea6bf95910cdbcc29




Matzって人は確か、Emacs(笑)だっけ?
0560デフォルトの名無しさん2015/10/25(日) 07:06:57.32ID:Pm66QtwE
Hi マッツ
0561デフォルトの名無しさん2015/10/25(日) 07:23:21.63ID:udh7cbN2
>>557
レスありがとうございます。Vista機ではtempフォルダの中身は残ったままなんです。8.1だと本当に「いつの間にか」消えてしまってるんです。
0562デフォルトの名無しさん2015/10/25(日) 08:16:09.56ID:wzNiY0Sm
8.1だめだな。添付ファイルが消えるなんてメールも送れないじゃない。
というとでも思ったのか? 
いつの間にか消えるのを臨時スペースや一時スペースといいます。
0563デフォルトの名無しさん2015/10/25(日) 08:25:06.46ID:kAzb4U8m
tempフォルダは消して良いものか定期的(プログラムの終了とか)に消すものを入れておくフォルダですよ
0564デフォルトの名無しさん2015/10/26(月) 00:18:30.55ID:405X1S7m
RubyでPython風のインデントでブロックを書くやりかたしたいんだけど
やり方教えてよ
0565デフォルトの名無しさん2015/10/26(月) 09:44:07.76ID:7klYI+GR
まずPhyhonを覚えます。
覚えたら教えて。
0566uy ◆BfeYkzFGdo 2015/10/26(月) 11:44:01.14ID:PFFVX39o
>>564
CoffeeScriptはendのないrubyだよ


AA テスト
  ┴ァ 
  イヽ
0567Uy ◆2uwIzfDc1. 2015/10/26(月) 13:13:15.19ID:PFFVX39o
質問です
物凄くネストしたコードを書きたいんですけど

lambda do
 lambda do
  lambda do
   ...

これってスタック使っているんですか?
いくつくらいまでのネストが可能ですか?
0568デフォルトの名無しさん2015/10/27(火) 21:07:10.63ID:sS/wkUVJ
もういいです

プログラミング飽きた
0569デフォルトの名無しさん2015/10/28(水) 11:15:34.66ID:dfvAkVtP
質問です

extendの時に引数を渡してメソッドの初期化をしたいのですが
クラスでラップしたりmy_extend定義以外の方法はありませんか?
一応下記の方法で出来ましたが冗長してしまいます

# 1
o = Object.new
o.extend Module_A_rapper_class.new("text").module # メソッド func を追加
o.func # => text

# 2
o.my_extend(Module_A, "text")
0570デフォルトの名無しさん2015/10/28(水) 20:18:57.45ID:WdTv92Vj
もういいです

レス来る前に
実装終わっちゃった
0571西行寺うゆ ◆e6.oHu1j.o 2015/10/29(木) 10:29:29.44ID:R4RgirF7
初めましての方は初めまして 西行寺 うゆと申します

rubyって自由度が高いといわれていますけれど
>>569このような事をやる場合に、結局ネックになるのは

「クラス」には存在して「モジュール」には存在しない機能です
extended , includedが呼び出し側から引数を取れないのは何故ですか?

それでも無理やりにmoduleのextendedをinitializeの代わりにプログラミングしていった先にあるひとつの壁は
extendedが「引数を取れない事」と「super」を呼べない事です

このせいで結局「クラスにラップされたモジュール」というのが、コード上の冗長性を抜きにした場合
最も効果的な手段となってしまいます


しかしながら他にも問題はあります

 ラ イ ブ ラ リ の ほ と ん ど は ク ラ ス で 提 供 さ れ て い る 

o = Object.new
o.extend Module
よってこの記述は、モジュールだから出来ているだけで

o.extend Class
は出来ないです
0572西行寺うゆ ◆e6.oHu1j.o 2015/10/29(木) 10:30:53.39ID:R4RgirF7
よってextend Module型のプログラミングを、rubyが可能だとしても出来ないんです
その場合
o = Object.new
o.extend Module.new { attr_accessor :mod }
o.mod = Lib_Class.new
このような形になってしまいます




これって結局「自由なプログラミング言語」と謳っていても、
結局「クラスを使った"常識的なプログラミング"」の中だけの「自由」なんです

実際classではなく module extended式のプログラミングをしてみるとわかりますが
moduleのスコープとmodule内特異クラスの最低でも2つ以上のスコープを意識しながら組む事になります

このスコープは「カプセル化」の恩恵を与えてくれるものではなく、ただ煩雑にさせるだけのスコープです
よって
@var = 1
def self.extended | mod |
@ var
end
def func
 @var # error
end
klassの違いからなる制約が頻発します
0573西行寺うゆ ◆e6.oHu1j.o 2015/10/29(木) 10:31:19.88ID:R4RgirF7
なので、このような煩雑なklassスコープを意識しながら組むよりは
var = 1
self.define_singleton_method :extended do | mod |
 p var
 mod.define_singleton_method :func do
  p var
 end
end


と、書いてしまったほうが、明らかにわかりやすいです


extended プログラミングの中では
「 def 」を使わずに一見冗長define_singleton_methodを使ったほうがまだマシなように思います
@つきメンバ変数を使わず
ローカル変数スコープを全てのmodule内の定義メソッドで突っ切らせたほうが、簡潔になります


先にも言いましたが、extend extended は引数を得られない
これってユーザー引数によって、extendedからメソッドを「追加」ではなく「定義」しようと思った時に
無理なんです
extendの利用価値がガタ落ちじゃないですか?

「引数」ではなく、内部変数等の「状態保存」だけならできます

extend でメソッドを作っても、
「引数」ではなく、内部変数等の「状態保存」%まで% しか出来ない、
0574西行寺うゆ ◆e6.oHu1j.o 2015/10/29(木) 10:32:37.79ID:R4RgirF7
そしてそれを打開するために、このようにしました
o.extend My_module_rappar_class.new("extendedで使いたい引数").new.module ## My_module_rappar_class#module # => #<Module:0x0000FF0>

rubyのシンタックスシュガーの外に出た感じです

参道から外れて獣道に入ったようなイメージ

自分の通ろうとしている獣道をruby言語で開拓していただけませんか?


自分が欲しい機能を以下に並べます

アジェンダ
 ・extend で「引数に沿ってメソッド生成・メソッド定義」が可能なモジュール機構
   これが出来ない時点で、基本的には状態保存をしないで済むメソッドの追加しかextendでは出来ない制約があります
 ・ライブラリがクラスで作られていても容易にextendが可能な機能
   これは「o.extend Module.new { attr_accessor :mod }」のひと手間かければ良いのですが
   

この二つです


 では、何か質問等ございましたら

 http://peace.2ch.net/test/read.cgi/tech/1443578172/l50

   こちらまでメールをお願いします 
0575デフォルトの名無しさん2015/10/30(金) 00:01:17.77ID:k5vGnOwJ
Rubyのしくみ、2014

黒魔術の書
メタプログラミングRuby 第2版、2015

この2冊を読め!
0576uy ◆e6.oHu1j.o 2015/10/30(金) 14:33:43.12ID:J4qdTdgZ
>>575
ruby関連の書籍で読んでない本が自分にあると思ってんの?

全部読んでるから
0577デフォルトの名無しさん2015/10/30(金) 15:06:03.35ID:+puIhN5e
Rubyプログラミング基礎講座(広瀬雄二)も?
0578うy ◆e6.oHu1j.o 2015/10/30(金) 21:59:26.43ID:37Q7KUOb
10万3000冊の技術書を暗記してる
0579デフォルトの名無しさん2015/10/30(金) 22:01:29.39ID:olSnnU8y
何そのゼロみたいな人
0580デフォルトの名無しさん2015/10/31(土) 11:45:00.47ID:zwNlcJhb
>>569
よくわかんないけど、こういうんじゃダメなの?

module M; def foo; p "foo" end end

class Module
  def my_exec(p, &b); module_exec{ b.call(p) }; self end
end

obj = Object.new
obj.extend M.my_exec("bar"){ |s| define_method(:bar){ p s } }
obj.foo #=> "foo"
obj.bar #=> "bar"
0581uy ◆e6.oHu1j.o 2015/10/31(土) 16:03:04.68ID:eogiaEdE
>>580
その発想なかったです、
self.extendedを捨てればよかったのですね
これで出来ましたありがとうございます

module UY
def self.my_exec arg
define_method(:func){ p "hallo "+arg }
self
end
end

o = Object.new
o.extend UY.my_exec("uy")
o.func
0582デフォルトの名無しさん2015/10/31(土) 20:41:27.96ID:h/fOQC4f
refineってモジュールに対して使えないみたいですけど
moduleの特異クラスに適用する方法ってありますか?
0583デフォルトの名無しさん2015/11/01(日) 05:13:28.18ID:u91GrISs
>>582
クラスと同じようにできるみたい。

module M; def self.foo; p "foo" end end

module ModuleMethodRefine
 refine M.singleton_class do
  def bar; p "bar" end
 end
end

using ModuleMethodRefine

M.foo #=> "foo"
M.bar #=> "bar"

http://qiita.com/joker1007/items/68d066a12bc763bd2cb4
0584デフォルトの名無しさん2015/11/01(日) 17:19:20.61ID:t/1K3INb
基本的な質問ですみません。
Windowsのコマンドプロンプトからruby(main.rb)を実行するとき、あるファイル(stdin.txt)から標準入力を与えるにはどうすればいいですか?

一応こんなコマンドを指定してみましたが、なぜか標準入力がmain.rb自身になってしまいます。
ruby main.rb < stdin.txt
0585デフォルトの名無しさん2015/11/01(日) 17:23:46.70ID:t/1K3INb
>>584
すみません、勘違いのようでした。質問取り消しでお願いします
0586uy ◆Qawu9.2l1E 2015/11/01(日) 17:59:27.58ID:hwVDg0hR
前から疑問なんだけど、デストラクタ (゚�听)イラネ のruby使いさんたちは、

例えば花火のように「爆発前」と「爆発後」で別オブジェクトが必要な時
つまり、物体Aが消滅する時に「消滅エフェクト」として火花を生成したい。
デストラクタ無しでこの「消滅エフェクト」ってどこに書くんですか?

花火は打ち上げられてから時間で爆発します

def delete_count
 if ( self.count -= 1 ) < 0
   < ここ? >
  self.delete
 end
end


時にはデストラクタに処理直接書いたほうが楽なケースってあるんですけどぉ
0587uy ◆Qawu9.2l1E 2015/11/01(日) 18:00:21.83ID:hwVDg0hR
>>585
良いよ
今度から気をつけろよ
0588デフォルトの名無しさん2015/11/02(月) 11:40:32.18ID:xhNmMlq/
def f
5.instance_exec do
p to_s # => 5
yield
end
end

f do |s|
p to_s # => main
end

こんなの書いてみたんですけど
ブロック側から 5のselfを得るのって無理ですか?
0589デフォルトの名無しさん2015/11/02(月) 12:59:22.29ID:z6P56ki9
>>588
5 を self で得るのは無理ですが、わざわざ用意している s で受けるのはどうして駄目なんですか?

def f
 5.instance_exec do
  p to_s # => 5
  yield(self)
 end
end

f do |s|
 p s.to_s # => 5
end
0590デフォルトの名無しさん2015/11/02(月) 13:28:27.16ID:hDe7Ebe3
>>589
f do |s|
 ...
end
ここに多くのコードを書く場合にs. が何度も登場して冗長だからです
0591uy ◆Qawu9.2l1E 2015/11/02(月) 14:10:05.48ID:NBJZmpcU
こんなこともわからない奴いるってマジ?


def func
  file = nil , line = nil
  caller().each do |str|
    str =~ /(.*?):(\d+)/
    file, line = $1, $2
  end
  5.instance_exec do
    p to_s # => 5
    eval open(file).each_line.to_a[line.to_i-1].sub( __method__.to_s, "1.times") # => 5
  end
end

func do p to_s end
0592デフォルトの名無しさん2015/11/02(月) 14:56:08.20ID:z6P56ki9
>>590
じゃあ、こんな感じで。

def f(&b)
 5.class.class_exec(5){ |s| define_method(:anon, &b); instance_method(:anon).bind(s) }.call
end

f{ to_s } #=> "5"
0593デフォルトの名無しさん2015/11/02(月) 15:28:08.29ID:hDe7Ebe3
>>591-592
凄いですね・・・
流石にここまでrubyで出来るとは思いませんでした
ありがとうございます
0594uy ◆Qawu9.2l1E 2015/11/02(月) 16:02:08.27ID:Pq0uxgZZ
def f
5.instance_exec &amp;proc
end
f {p to_s}

はいわろ
0595デフォルトの名無しさん2015/11/02(月) 16:05:07.65ID:QGaoT7BM
あれ?このスレちょくちょく文字化けしてる
どのエンコード選べば読めるようになるの?
0596uy ◆Qawu9.2l1E 2015/11/02(月) 17:07:33.45ID:MPfeNe3M
スマホが文字化けする
0597うゆゆゆゆゆゆ ◆Qawu9.2l1E 2015/11/02(月) 17:10:12.34ID:MPfeNe3M
オブジェクト思考はゴミ
0598uy ◆Qawu9.2l1E 2015/11/02(月) 19:06:55.92ID:YzpIGAAp
高度なオブジェクト思考が出来て、関数型思考が出来て
ruby並に記述が簡潔で再帰の速い言語ください

rubyの再帰はマジでおそいと思う
0599デフォルトの名無しさん2015/11/02(月) 20:09:49.93ID:JLYNx9SG
>>598
なければ作っちゃえばいいんじゃなーい?
Matzだって自分好みの言語がなかったから作っちゃったんだしー
0600uy ◆Qawu9.2l1E 2015/11/02(月) 21:47:32.94ID:gLS3ib7d
Matzほど暇人じゃないんで。

VM関連のソースは漁るかもしれない
0601デフォルトの名無しさん2015/11/02(月) 21:52:34.65ID:JLYNx9SG
>>600
まるでヒマがあれば作れるみたいな言い方じゃなーい
だとしたらあとは必要なのは時間じゃなくて情熱だよねー
0602uy ◆Qawu9.2l1E 2015/11/02(月) 23:31:24.62ID:5/Pq42i4
時間ねーっつってんだろタコ
0603デフォルトの名無しさん2015/11/02(月) 23:43:34.43ID:WyDMkyCX
BMPからPNGに変換する処理を書いたが、1980x1200で2桁秒程度しか出ていません

特に時間がかかっているのが、BMP→PNGの画素表現の変換処理

a255 = "\xFF".force_encoding("ASCII-8BIT")
bmpi.each do |line|
pos = 0
posp = 0
pngl = a255*(4*ihdr.width)
while pos<line.size # BGR => RGBA
pngl[posp ] = line[pos+2]
pngl[posp+1] = line[pos+1]
pngl[posp+2] = line[pos ]
pos += 3
posp += 4
end
pngi << [0, pngl]
end


それとIDAT作成時の
[[フィルタメソッド、RGBAイメージ]×ライン数] の連結処理

image.each do |line|
pngi += line.pack("Ca*")
end

なのですが、これ以上高速に動く記述法は無いでしょうか?
0604デフォルトの名無しさん2015/11/03(火) 01:12:24.53ID:rm6qzEkF
離散フーリエ変換を自分で作ってみたんだけど適当に直してくれ
FFTにはしないでね

class Array
 def dft
  n = self.length
  w = Complex.polar(1, -2*Math::PI/n)
  w_arr = (0...n).map.with_index{|row, _n| (0...n).map.with_index {|e, _k| w**(_n*_k)}}
  dft_arr = (0...n).map.with_index do |e, _k|
   sum = 0
   n.times{|_n| sum += w_arr[_n][_k] * self[_n]}
   sum/(n**0.5)
  end
 end
end

p [0,1,0,1].dft #=> [(1.0+0.0i), (-6.123031769111886e-17+0.0i), (-1.0-2.4492127076447545e-16i), (1.836909530733566e-16+0.0i)]
0605デフォルトの名無しさん2015/11/03(火) 02:16:12.28ID:rm6qzEkF
>>604
どうでもいいけどMatrixってのがあるんだな、いまいち配列ほど使いこなせないけど
これは便利だ

require 'matrix'
require 'complex'

v1 = Vector[0,1,0,1]
n = v1.size
w = Complex.polar(1, -2*Math::PI/n)
w_matrix = Matrix.rows((0...n).map.with_index{|row, _n| (0...n).map.with_index {|e, _k| w**(_n*_k)}})
v2 = w_matrix * v1 / (n**0.5)
p v2 #=> Vector[(1.0+0.0i), (-6.123031769111886e-17+0.0i), (-1.0-2.4492127076447545e-16i), (1.836909530733566e-16+0.0i)]
0606デフォルトの名無しさん2015/11/03(火) 03:37:04.32ID:yudcS5lQ
>>600
crystal 以上のものができるとは思えない。
0607デフォルトの名無しさん2015/11/03(火) 07:57:22.38ID:ZahXSpxi
>>602
2ちゃんやってる時間はあるのにねw
0608デフォルトの名無しさん2015/11/03(火) 10:47:01.90ID:7fKHty9q
>>603
元は、
pngl += line[pos+2] + line[pos+1] + line[pos]
と、
pngi += [line[0]].pack("C")+line[1]
としてて、
これを>>603に変えたら3割ほど早くなったのですが、
そこからどうすれば時間削減できるか思いつきませんでした
全コードは以下です
http://codepad.org/RMuparfO
どなたか高速化のアイデアありましたらご意見お願いいたします
0609デフォルトの名無しさん2015/11/03(火) 11:31:08.87ID:bls6utNu
Core i7-6700、DDR4-2133 8GBメモリ、GeForce GTX960
より低スペックだったら買い替える
0610uy ◆Qawu9.2l1E 2015/11/03(火) 13:23:55.39ID:IUDjoANu
興味も向かず金にもならない事をやらない事が逃げみたいな風潮

ひとりでやってろよ暇人
0611デフォルトの名無しさん2015/11/03(火) 13:28:42.78ID:ZahXSpxi
>>610
まさに>>601の言ってる通りじゃん
足りないのは時間じゃなくて情熱でしょ
0612デフォルトの名無しさん2015/11/03(火) 14:34:36.46ID:C0Kah9v/
>>603,608
rubyならCで書いてモジュール化したら?
0613uy ◆Qawu9.2l1E 2015/11/03(火) 15:13:05.09ID:dozR5F+q
では、適当な有名人を思い浮かべてください。

IT分野以外の。第一線で活躍して日々忙しく生きている人です。

実はその人は余暇を使って趣味でプログラミングをしていました。

しかし言語に足らない機能があると思い「この機能なくね?」と愚痴をこぼしました

そしたら周りが「じゃあお前が作れよw」「情熱が足りてねーよw」とか言うの?

言わないでしょ。
そのレベル
0614デフォルトの名無しさん2015/11/03(火) 15:29:49.79ID:ZahXSpxi
>>613
キレてる意味が分かんない
「自分が作れよ」とか「情熱がない」をけなし言葉だと受け取っちゃったのかな?
0615uy ◆Qawu9.2l1E 2015/11/03(火) 15:30:13.30ID:C3Kp9NP8
ぼくには知識がありますけれど、それは「とある魔術のINDEX」のインデックス

インデックスでありインデックス以下でもない、インデックス === インデックス
( インデックス != インデックス ).false?

一度読んだものを全て覚えてしまう能力があるので
知識をため込む事が容易過ぎるだけなんです
その能力がIT分野では特に発揮される

でも何があっても絶対に、他人の為・社会の為に技術力を使いません
0616デフォルトの名無しさん2015/11/03(火) 15:45:30.21ID:oINh57iv
             ,.'´        ``ヽ、
        /              `ヽ
        /              ヽ  \
      |   /              _」    |
      |  }ー----------…… '´/.:l   |
       !  l:r┐   //  // // /l   |
       !  l:l !   //  // // //\  |
      l/ ,.イ /-- ── ─┬┬ < トト、ト、 1
      l 「7 ⌒ヽム_/ノl/ ヽ┼仆ハVV〉  |
      ///   ‐{ l/ニ     _.._,  1i!   |
     〃    ソー=='      ̄ '' j.:.l  |
      ,′   ハ'゙     ,      ,.イ.:.l  |
      i   イ:: : ヽ    t -- -ァ /.:.l.:.:l  |
      |    |:: :: ::_」> _ゝ-_'. イ`ヽl.:l.:.:l   |
     ./|    ∧l l:: i.:\` ー----‐' 人 l.:.:l  |
    /. |  / ∧ l:: l.:.:.:.\     イ /l.:l.:. l   |
   /.: . |/  // l:: lヽ.:.:.:.:.\ __,  /.l.:l \ l |
  〈__/   //  .l:: l  \.:.:.:.:\. /.:.:l.:l  \1
  /\   //   .l:: l   \.:.:.:.:V.:.::/l:.l   ∧,
0617デフォルトの名無しさん2015/11/03(火) 16:21:56.78ID:bls6utNu
 発 者 同         . 。_   ____           争
 生 同 .じ     .    /´ |  (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`|  }⌒j     
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   |∨ ` ̄
            /   ..:.:./    |   丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          |、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/|.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:|    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>
0618uy ◆Qawu9.2l1E 2015/11/03(火) 16:24:41.15ID:c9KPlTxg
人間っていうデバイス使ってるくせに「同じレベルじゃない」とか思ってる奴のほうが痛いな

ゴキブリやカメムシか何かですか?(生命力強い的な意味で)
0619uy ◆Qawu9.2l1E 2015/11/03(火) 16:40:21.85ID:dozR5F+q
>>608
0.2秒くらい
http://codepad.org/E9uNOvQ6
0620デフォルトの名無しさん2015/11/03(火) 20:24:39.31ID:WDR9dJBW
NG一つで快適快適
0621uy ◆Qawu9.2l1E 2015/11/04(水) 00:20:49.03ID:9yLsNv2L
>>620
このスレで名無しの自演がどんだけ含まれてると思ってる?
誰もuyから逃げられないんだよ
0622デフォルトの名無しさん2015/11/04(水) 07:59:12.03ID:IENSYbNF
>>621
ちくわ大明神

これも覚えたな?
0623uy@紫の鏡 ◆Qawu9.2l1E 2015/11/04(水) 12:52:14.93ID:i1eTFo0U
そんな単語覚えたところで何の意味もない
0624uy@紫の鏡 ◆Qawu9.2l1E 2015/11/04(水) 13:02:57.05ID:aNCvQtC0
ちなみに自分は、紫色より「もう一段階」波長の短い「色」を見る事が出来る
コウモリは赤外線を見れるけど、その逆側の波長だ

普通の人は見る事が出来ない、可視光線の外側
これが「紫の鏡」なのでは無いかな?
0625デフォルトの名無しさん2015/11/04(水) 14:29:06.54ID:D2Xkj+uK
>>624
鳥の目は4原色対応
人間は3原色だが女性に少数だが4原色がいるらしい
女性ホルモンが多いとそうなるのかな
色覚障害の人は2原色やモノクロ
猫は2原色
0626デフォルトの名無しさん2015/11/04(水) 22:46:34.22ID:+yNa4eFA
入力した整数が2のべき乗かどうかを効率的に判定するにはどうしたらいいですか?
0627デフォルトの名無しさん2015/11/04(水) 22:50:03.42ID:Ly3yLQ9c
2で割っていけばいいんじゃないの?
0628デフォルトの名無しさん2015/11/04(水) 22:52:20.59ID:+yNa4eFA
>>627
ありがとうございます
やってみます
0629デフォルトの名無しさん2015/11/04(水) 23:07:16.32ID:aW05L/Nl
>>619
Rubyはインストール可能だけどXnViewは使用可能なソフト一覧に含まれてないしZlibも使用可能なライブラリには名前ないので(汗
同じ理由でRubyの拡張ライブラリでという手も打てません

>>628
たっているビットが1ビットのみかを判定するでもいけますね
0630uy@紫の鏡 ◆Qawu9.2l1E 2015/11/05(木) 01:05:05.77ID:BygappPf
>>608
92行目〜96行目

http://codepad.org/17iMUscM
0631デフォルトの名無しさん2015/11/06(金) 00:56:29.34ID:YVUNOzRU
おい、おまえら、

「誰もuyから逃げられないんだよ 」
0632デフォルトの名無しさん2015/11/06(金) 01:43:15.89ID:ARx20cVI
>>630
ありがとうございます・・・
計測してみましたが1%ほど早くなっているようです
やり方根本的に変えないとこれ以上は無理かもしれません、う〜ん
0633uy ◆Qawu9.2l1E 2015/11/06(金) 16:52:48.67ID:aIehvATR
問題はループ回数だろうね
誰もuyから逃げられないんだよ
0634デフォルトの名無しさん2015/11/06(金) 18:31:20.98ID:Vobfpb3W
>>603
String の += は破壊的連結ではなくて使った分だけオブジェクトができる
なのでループ中とかでたくさん呼び出すと速度低下の原因になる
破壊的連結でいい場合は String#<< というメソッドがあるのでそっちを使いましょう

あとは、String#[] には Range を渡す使い方もできるので、
pngl[posp..posp+2] = line[pos..pos+2].reverse!
とすると String#[] の呼び出し回数を1/3にできる
0635uy ◆Qawu9.2l1E 2015/11/06(金) 18:59:35.72ID:AWzYOs1s
>>634
^^;



>>630 更新

  atmp = "\xFF".force_encoding("ASCII-8BIT")
  for line in bmpi do
    pos  = 0
    pngl = ""
    while pos < line.size
    # BGR => RGBA
      pngl << line[pos+2] + line[pos+1] + line[pos] + atmp
      pos+=3
    end
    pngi << [ 0 , pngl]
  end
0636uy ◆Qawu9.2l1E 2015/11/06(金) 19:57:47.43ID:6VBxeh94
速度は出ないけど変数減らしてみるとこうなる

atmp = "\xFF".force_encoding("ASCII-8BIT")
res << bmpi.map do |line|
[0 , line.chars.each_slice(3).inject("") do |s,(b,g,r)| s << r+g+b+atmp end ]
end
0637デフォルトの名無しさん2015/11/06(金) 20:23:16.65ID:ZLqSRBgO
申請すれば許可してくれるんじゃね?
趣味でやってて公けにできないんなら別だが
0638uy ◆Qawu9.2l1E 2015/11/06(金) 21:37:20.98ID:DzTyHAnl
>>630 , 635 更新

  atmp = "\xFF".force_encoding("ASCII-8BIT")
  for line in bmpi do
    pos  = 0
    pngl = ""
    while pos < line.size
    # BGR => RGBA
      pngl << line[pos+2] + line[pos+1] + line[pos] + atmp
      pos+=3
    end
    pngi << [0 , pngl]
  end



ruybの :+ ってカスだわ
0639uy ◆Qawu9.2l1E 2015/11/06(金) 21:38:25.05ID:6VBxeh94
同じの貼ってしまった上のは間違い。


  atmp = "\xFF".force_encoding("ASCII-8BIT")
  for line in bmpi do
    pos  = 0
    pngl = ""
    while pos < line.size
    # BGR => RGBA
      pngl << line[pos+2] << line[pos+1] << line[pos] << atmp
      pos+=3
    end
    pngi << [0 , pngl]
  end
0640uy ◆Qawu9.2l1E 2015/11/06(金) 22:33:38.77ID:Y2REc2we
速くなってきた
0641uy ◆Qawu9.2l1E 2015/11/06(金) 22:44:45.65ID:DzTyHAnl
http://codepad.org/dP52ktEI

とりあえず一桁秒になったはず


つうか重いのは最初に最適化してた場所じゃなくて
png_to_binary
↑ これだろ

文字連結には:+=ではなく:<<を使うべき
0642デフォルトの名無しさん2015/11/07(土) 18:38:08.83ID:Rb6TxNfK
Rubyでは配列の添え字を0からさらに1をひいて-1を指定すると
後ろから参照されます
MatzもHPがゼロになると声が裏返るんでしょうか?
0643uy ◆Qawu9.2l1E 2015/11/07(土) 18:52:01.30ID:YPPH2uE6
>>642
https://www.youtube.com/watch?v=EToMOmP4oRw
0644デフォルトの名無しさん2015/11/07(土) 19:24:50.76ID:can/VOFL
>>634
ありがとうございます、 << は存じませんでした
来週実環境で計測してみます

>>637
たぶん許可は出るともいます…が、手続きが結構めんど(汗

>>641
png_to_binaryは>>603で述べてるように手を入れてましたよ
修正前と後で30%違ってましたが、なるほど、+が減った分で効いていたのですね
0645デフォルトの名無しさん2015/11/08(日) 05:27:50.02ID:eTPvEeSN
質問です。

e = Enumerator.new(ObjectSpace, :each_object)
# warning: Enumerator.new without a block is deprecated; use Object#to_enum

この構文が警告出るようになってるんですけど
これは以下のようにEnumeratorを継承して使う事は出来なくなるという事ですか?
警告を出さない書き方がわかりません

class A < Enumerator
  def initialize _
    super
  end
  def my_each
    self
  end
end

x = A.new([1,2,3])
p x.my_each
0646uy ◆Qawu9.2l1E 2015/11/09(月) 13:46:22.37ID:VP0GkkkJ
rubyじゃ無理
0647デフォルトの名無しさん2015/11/09(月) 16:10:55.73ID:ddVcBsOP
ID:VP0GkkkJ=キチガイ
0648デフォルトの名無しさん2015/11/11(水) 23:42:19.72ID:qynC6Zv6
>>644 の結果
http://codepad.org/nktsZViC
1920x1200サイズの画像が1枚1.2秒で変換できるようになりました。

一番最初のコードからすると8〜10倍くらい早くなって十分実用できる出来になりました。
いろいろと教えてくださった方に感謝いたします。
0649デフォルトの名無しさん2015/11/12(木) 13:37:53.57ID:63YCCmxd
効率には関係ないですけど
"〜".force_encoding("ASCII-8BIT")
は
"〜".b
でOK
0650uy ◆Qawu9.2l1E 2015/11/13(金) 03:47:30.91ID:8gPiU2/Q
def Fixnum_uy n
  return n if n.class == Fixnum
  p :err
end
def String_uy n
  return n if n.class == String
  p :err
end
def func n
n * 2
end

x = 10
p func Fixnum_uy x # => 20
p func x # => 20
x = "abc"
p func String_uy x # => "abcabc"
p func x # => "abcabc"

func Fixnum_uy x # err


ぼくの考えた静的型チェック
0651デフォルトの名無しさん2015/11/13(金) 07:36:36.68ID:0Gwam1l3
まじかよ! 天才じゃねーの?!
0652uy ◆Qawu9.2l1E 2015/11/13(金) 09:24:15.22ID:TDianL6O
見つけたバグを報告しようかどうか迷う
0653uy ◆Qawu9.2l1E 2015/11/13(金) 09:25:30.36ID:TDianL6O
とりあえず、>>648
PNGSIG = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A".force_encoding("ASCII-8BIT")
res = [PNGSIG]
↑ これ複数のbmp変換の時にバグる
0654デフォルトの名無しさん2015/11/13(金) 12:54:02.58ID:BvUUurmn
新型Ruby開発へ 設計者表明、IT高度化・複雑化に対応
2015/11/13 9:56

http://www.nikkei.com/article/DGXLZO93937240S5A111C1LC0000/

松江発のプログラミング言語「Ruby(ルビー)」を開発した、
まつもとゆきひろ氏が新しいバージョンとなる「ルビー3.0」の開発に着手した。
12日に松江市で開幕した「Rubyワールドカンファレンス」の基調講演で、
IT(情報技術)環境の高度化・複雑化にルビーを対応させる実験を進めていると述べた。
0655デフォルトの名無しさん2015/11/13(金) 23:30:22.07ID:GJbbkJB1
>>653
ありがとうございます。
たまたま1起動で1枚の変換だったので発覚しませんでしたが複数枚を一度に変換した場合、
png1
png1+png2
png1+png2+png3
のように次々と連結されたファイルに変換されてしまってました(汗

res = [PNGSIG.dup]
で修正できました。
0656デフォルトの名無しさん2015/11/14(土) 11:20:12.98ID:Hu5fAc9a
RubyでGUIアプリを作るなら、JRuby+JavaFX+Rawrで決まり!
ttp://blog.supermomonga.com/articles/jruby/javafx-rawr.html


このサイトのような人もいるけど、皆さん、WindowsでRubyで、
普通のGUI画面を作るには、どうやっているの?

Rubyで出来ないのなら、Python, Groovyかな?
0657デフォルトの名無しさん2015/11/14(土) 11:52:01.92ID:hCpncyRd
初心者スレってことは新たにRubyを使い始めたいって人がいるってことなの?(´・ω・`)
なんで先のないことを始めようなんて思ったの?(´・ω・`)
0658デフォルトの名無しさん2015/11/14(土) 12:30:10.17ID:erHlxJOJ
綺麗なコードっていうけどスレだけ見てたらPerlと大差ないね
0659デフォルトの名無しさん2015/11/14(土) 13:29:45.17ID:kYx4kaK6
>>656
ルビー()をウインドウズ()で使うと不幸になるよ
0660デフォルトの名無しさん2015/11/14(土) 18:29:15.58ID:mv+oMLfo
>>656
以前ならRuby+VCLのApolloがオススメだった……
1.8ベースであることを気にしないなら今でも使えるけどね
0661uy ◆Qawu9.2l1E 2015/11/14(土) 20:41:01.85ID:Shexr7Cq
>>656
dxrubyサンプルかいた
http://www1.axfc.net/uploader/so/3566728
0662デフォルトの名無しさん2015/11/16(月) 11:36:08.51ID:7yHHnP/U
職種別、資格別、スキル別の平均最低月給リスト(ほぼ毎日更新)
http://jobinjapan.jp/cate/
全掲載求人109,160件の平均最低月給195,800円

Rubyの求人 の平均最低月給221,800円
http://jobinjapan.jp/job-listing/keyword-ruby.html
0663デフォルトの名無しさん2015/11/16(月) 17:29:45.01ID:voKrxMtV
IT業界の初任給
日本500万円、シリコンバレー1500万円って最近どっかにあった
0664デフォルトの名無しさん2015/11/16(月) 19:32:26.70ID:28cafqJz
RBGとHSVの変換をエレガントに書いてください
0665デフォルトの名無しさん2015/11/16(月) 19:54:09.66ID:HbX6xNB+
よくわかんないけどまずお風呂に入って
真っ白いバスローブ着て猫を膝に乗せて書けばいいの?
0666デフォルトの名無しさん2015/11/16(月) 20:27:05.18ID:+SAjp3uD
それは私の思うエレガントとは違います
0667デフォルトの名無しさん2015/11/17(火) 00:01:16.50ID:UqVfqUOl
エレガンスC、でググッてはいけない。
0668デフォルトの名無しさん2015/11/18(水) 06:20:14.72ID:m00kBiNc
HSV→RGBなら前に書いたけど逆方向?
0669デフォルトの名無しさん2015/11/18(水) 07:22:08.93ID:nLopjri3
Rubyスレにソースコードや計算式貼ると
著作権ガーって言ってたひとは居なくなったの?
0670デフォルトの名無しさん2015/11/18(水) 21:03:57.49ID:zeYTnh9x
RGB→HSVみたいな対称性のあるものって対称性を保ったままコーディングできないのかな
0671デフォルトの名無しさん2015/11/20(金) 12:12:51.73ID:hF6sOdis
ファイルを開きたいのですが
パスの区切り文字ってwindowsとlinuxは違うんですけど
どちらでもいいのですか?
0672uy ◆Qawu9.2l1E 2015/11/20(金) 13:00:56.22ID:QlSu2hgW
殆どのものはどっちでも動く
たまに \\ か / の片方でしか動かないものがあるだけ
0673デフォルトの名無しさん2015/11/20(金) 13:11:04.99ID:FnrKl1QX
どちらでもいいなんて事は無い。
require 'pathname'
してPathnameクラスを使うのが正しい。
0674uy ◆Qawu9.2l1E 2015/11/20(金) 13:25:37.13ID:QlSu2hgW
やだ
0675デフォルトの名無しさん2015/11/20(金) 14:19:32.77ID:LnAg0HCn
頼まれても使いたくないですね
0676デフォルトの名無しさん2015/11/21(土) 00:58:19.20ID:bHtpd329
なんでやねん
0677デフォルトの名無しさん2015/11/21(土) 02:18:40.43ID:8J5MXxtT
BOM付きutf-8を書き出すにはどうすればよいのでしょうか
0678デフォルトの名無しさん2015/11/21(土) 03:14:39.76ID:M+Mq0fql
Encoding クラス

nkf ライブラリ
0679デフォルトの名無しさん2015/11/21(土) 08:00:25.23ID:NwMGeQu6
jsonでハッシュテーブルからpretty_generateするには
ハッシュテーブルをアンパースしてパースして
pretty_generateするしかないのですか?
3段階もあるので
2段階か1段階に縮めたいです
0680デフォルトの名無しさん2015/11/21(土) 17:27:46.64ID:XOdIEoHK
次のようなことが起こってしまうのですが、どなたか原因や解決法をご教示願えませんか。

コマンドプロンプト上でpryを起動して
任意のタイミングでshiftキーを押すと、頻繁に固まります。
(操作が一切できなくなりますが、時間をおけばなおります。)

また、次のことはirbにも共通して発生するのですが、
日本語を入力しているとかなりの確率で改行以外の操作を受け付けなくなってしまいます。
おまけに文字化けも起こしてしまいます。

windows 8.1
ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]
Pry version 0.10.1
irb 0.9.6(09/06/30)
0681uy ◆Qawu9.2l1E 2015/11/22(日) 12:08:15.48ID:hFpqZnLD
irb --noreadline
0682デフォルトの名無しさん2015/11/22(日) 12:32:12.30ID:GQHFag3/
>>681
ありがとうございます。
確かにreadlineを切れば文字化けは起きなくなりますが、1つ目の問題は解決しないようです。
また履歴機能も使いたいのでreadlineは切らずに済ませたいです。
0683uy ◆Qawu9.2l1E 2015/11/22(日) 19:04:43.86ID:hFpqZnLD
http://qiita.com/kidach1/items/d0137d96bed9ac381fd5
0684デフォルトの名無しさん2015/11/23(月) 13:08:02.25ID:TRyH0joP
既存のcsvファイルを読み込み
a,c列だけ残したcsvファイルを作ろうと思っています

c列内の改行は全体をダブルクォーテーションでエスケープしたLFで
一行の区切りはCRLFです

これを維持したいのですが、wモードだとCRLFに、wbモードだとLFに統一されてしまいます
どうすればLF,CRLF両方共存させられるのでしょうか?
gsub!がマッチしてないような気がします

CSV.open(
0685デフォルトの名無しさん2015/11/23(月) 13:09:58.40ID:TRyH0joP
途中送信失礼しました
CSV.open("元ファイル","w") do |csv|
flag = true
CSV.foreach("新規ファイル") do |row|
row.each{ |k, v| v.gsub(/(\r\n|\r)/, '\n') unless v.nil? }
csv << [row[0],row[2]]
end
end
0686uy ◆Qawu9.2l1E 2015/11/23(月) 14:40:09.79ID:tOBxxsaN
v.gsub!(/(\r\n|\r)/, '\n')
or
v=v.gsub(/(\r\n|\r)/, '\n')
0687デフォルトの名無しさん2015/11/23(月) 15:38:27.12ID:TRyH0joP
>>686
変化無しでした
0688uy ◆Qawu9.2l1E 2015/11/23(月) 17:27:59.79ID:QX2C8YaD
row.each{ |k, v| v.chomp! unless v.nil? }
csv << [row[0]+"\r\n",row[2]+"\n"]
0689デフォルトの名無しさん2015/11/23(月) 18:20:30.33ID:TRyH0joP
CSV.open("","wb",:row_sep => "\r\n") do |csv|
CSV.foreach("") do |row|
  row[2].gsub!(/(\r\n|\r)/, "\n") unless row[2].nil?
  csv << [row[0],row[2]]
  end
end

これでなんとかなりました。ありがとうございました
0690デフォルトの名無しさん2015/11/23(月) 19:29:21.84ID:6Cv6XcSv
Perlより汚い
0691デフォルトの名無しさん2015/11/25(水) 12:58:48.76ID:64f3mw6U
vimで配列に<<を使うと文字列として認識してしまうから
pushを使うようにしている
0692デフォルトの名無しさん2015/11/29(日) 18:49:25.26ID:8CD9EPjb
私は ruby 初心者以下の phper でSASS を触った際の質問です。

php での unset($value) に相当するような処理はできますでしょうか?

SASS においては一時的に使用したい変数もグローバル空間を汚染してしまいます。
そこで、一時的に使用した変数を、仕様を終えたところで unset するようなルールを作ろうと思ったのです。

もしそのような仕組みがないのなら諦めます。
よろしくご教授下さい。
06936922015/11/29(日) 18:51:04.92ID:8CD9EPjb
ちなみに

$value: null;
や
$value: nil;

では目的を果たせません。
0694デフォルトの名無しさん2015/11/29(日) 21:47:26.07ID:IW3RF4Lm
Railsスレで聞いた方がいいんじゃね?
06956922015/11/29(日) 22:42:30.81ID:8CD9EPjb
>>694
そうなんですか。
移動します。有難うございました。
0696uy ◆Qawu9.2l1E 2015/11/30(月) 03:22:14.76ID:K9XXst/g
>>692
スコープ
http://lab.sonicmoov.com/markup/sass-variable/
0697デフォルトの名無しさん2015/12/01(火) 07:39:26.83ID:5gA5qM1d
プログラムを使って2chに書き込むにはどうすればいいですか?
いわゆるスクリプトとか呼ばれてるやつを作りたいんですけど
0698デフォルトの名無しさん2015/12/01(火) 09:02:01.71ID:aM2QGKxt
ググればすぐにわかるよ
注意としては秘密のキーと値はクッキーにセットしないと書き込めないということくらいかな
0699uy ◆Qawu9.2l1E 2015/12/01(火) 14:45:35.96ID:p3g6QuXB
>>697
selenium / watir
あるいはwshとかでブラウザの自動操作が一番楽
0700デフォルトの名無しさん2015/12/01(火) 15:28:49.41ID:9BYkXgQy
>>697
http://anago.2ch.net/test/read.cgi/software/1434991857/
0701デフォルトの名無しさん2015/12/01(火) 15:29:59.57ID:9BYkXgQy
板移転してた
http://potato.2ch.net/test/read.cgi/software/1434991857/
0702デフォルトの名無しさん2015/12/01(火) 18:17:04.96ID:CfMOKjtg
おまいら、スクリプトが書きたいとか言う明らかな荒らしにいちいち相手するなよ
0703デフォルトの名無しさん2015/12/02(水) 00:41:11.93ID:R2vt9Ztx
<<をpush扱いは嫌いな仕様の一つだ
シフト演算子もいらんよなInteger#bitshiftとか作ればいいし
0704デフォルトの名無しさん2015/12/02(水) 04:33:58.56ID:SG5bn8pD
rubyで、ぷよぷよの最大連鎖数を計算するプログラムを組もうかと思ったらどう書く?
https://ideone.com/qMs43L
0705デフォルトの名無しさん2015/12/02(水) 10:16:13.59ID:hK3n/ycX
音声認識でダイアキュートなら4連鎖と判断
0706デフォルトの名無しさん2015/12/02(水) 15:07:31.23ID:MsCBqWdx
queueが2つくらいなら全検索でもそんなに時間かからんのちゃうか
0707デフォルトの名無しさん2015/12/02(水) 15:27:49.31ID:SG5bn8pD
>>705
なんつー無駄な処理をww

>>706
2つだけなら全探索でも良いんだけど、10個20個になるとだんだん辛くなってくる
0708デフォルトの名無しさん2015/12/02(水) 17:47:33.68ID:N2ji3q8m
ぷよぷよってあんまり詳しくないんだけど、queueってなんのこと?
07097082015/12/02(水) 17:53:37.23ID:N2ji3q8m
理解したんでスルーしてください
0710uy ◆Qawu9.2l1E 2015/12/03(木) 10:18:49.80ID:z2raHlbz
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J




キュ・・・クエウェwwwwwwwwwwwww
0711デフォルトの名無しさん2015/12/03(木) 20:41:11.41ID:c/3d3tD7
PCが重くならないように仮想メモリを、減らしたいのですが、
GC後も100MBぐらい残ってしまいますが、nilを代入するだけで、解放されるというのは間違いですか。
ruby 2.1.6p336 (2015-04-13 revision 50298) [i386-mingw32]

class Dat
def datain
f=open("csv.txt")
da=[]
while f.gets do
ta=$_.split ','.freeze
da.push ta[1]
end
f.close;f=nil
end
end

loop {
a=Dat.new
a.datain
p '+++++++++'
print `powershell -command "Get-Process -Id #$$"`
a=nil
GC.start
print `powershell -command "Get-Process -Id #$$"`
}

CSVは以下で作りました。
f=open("csv.txt", "w+")
1500000.times {f.write "1,2,3,4,5,6,7,8,9,10\n"}
f.close
0712デフォルトの名無しさん2015/12/03(木) 21:44:14.63ID:ygZz+2K/
>>711
Rubyとして使わなくなったとしても、プロセスがOSにメモリを返すかどうかはOS依存
0713デフォルトの名無しさん2015/12/03(木) 22:07:35.11ID:c/3d3tD7
100MBレベルで、繰り返し残るので、使っているようなんですが
0714デフォルトの名無しさん2015/12/03(木) 22:24:24.74ID:LoHjicY3
100MBレベルでまだ返さなくていいとOSが判断してるんだろ
0715デフォルトの名無しさん2015/12/04(金) 08:15:10.10ID:0x8EcT4y
そもそも、ガベージコレクトしたからといって、その空きメモリをRubyのVMが即座にOSに返却するかどうかなんて実装しだいだろ。
自分でソース読むか本家のメーリングリストで聞いた方がいいよ。
あるいは変数Aに1GBくらいのデータを入れて検証してみれば?

こんな検証結果もある。バージョン古いけど。
http://vcxzasdf.blogspot.jp/2011/08/ruby.html

後は勝手に調べろや
0716デフォルトの名無しさん2015/12/04(金) 11:11:30.56ID:ss/13u2k
>715 どうもです
nil代入するだけでいいのか、よくわからないレベルなので
>>自分でソース読むか本家のメーリングリストで聞いた方がいいよ。
こういうのは敷居が高いです。

制限付きGCらしいとは、読んだのですが、何かスクリプト上の工夫余地があるのかが
知りたかったのです。
07177152015/12/04(金) 12:52:57.47ID:0x8EcT4y
自分で調べろといったものの、気になったので調べてみた。

http://qiita.com/yuroyoro/items/14ec7079f6574ad74409
http://wazanova.jp/items/759

GCの挙動は環境変数である程度制御出来るらしい。
Rubyが起動する前に設定が必要だから、Rubyのスクリプトで何とか出来るのか。
という問いなのであれば「出来ない」が回答なのかな。

なお、環境変数変更の結果、頻繁にGCが動作してしまうようになるリスクもあるので、本当にそのチューニングが必要なのかどうか考えた方がいいんじゃね?
おまいさんが暇でGCに興味があるのなら、好きなだけ実験すればよいけど。
0718デフォルトの名無しさん2015/12/04(金) 14:16:06.80ID:ss/13u2k
上記のページ 難しいですね。
速度と、メモリ使用量のトレードオフのチューニングっぽいですが、
やりたいことは、使わなくなったデータ領域を、OSに還元さえできれば、満足なんです

class Dat
def datain
 da=["2"]*50000000
end
end
とした場合は、200MBが、GC後5MB位まで、減りますね。。。
0719デフォルトの名無しさん2015/12/04(金) 16:13:41.90ID:u0bQfuw3
nilを代入するだけで、解放されるというのは間違いです
0720デフォルトの名無しさん2015/12/04(金) 20:26:22.64ID:52yuQwwP
GCっても結局Cのfree呼んでるだけで、CのfreeがOSに返すかどうかは環境依存だよね
0721デフォルトの名無しさん2015/12/04(金) 23:07:49.74ID:JzxqQT0L
>>718
無知なプログラマーの独りよがりだと思いますよ。

返却しなくてもOSも他のプロセスも誰も困らない。
むしろ何かしようと変なことをして、システム全体の効率を落としますよ。
0722デフォルトの名無しさん2015/12/05(土) 00:36:53.73ID:SSa/axrj
喧嘩しないでね?
0723デフォルトの名無しさん2015/12/05(土) 09:09:33.35ID:fWHJ2v3J
ルビーの組み込み型のデータのファイルに書き込みって
全部書き込むんじゃなくて
増えた分だけ追加書き込みって出来ないの?
0724デフォルトの名無しさん2015/12/05(土) 09:23:45.26ID:xXNtL6gS
>>723
http://docs.ruby-lang.org/ja/2.2.0/method/Kernel/m/open.html
0725デフォルトの名無しさん2015/12/05(土) 09:37:16.61ID:fWHJ2v3J
だめだこりゃ
0726デフォルトの名無しさん2015/12/05(土) 12:09:18.88ID:kPO9yvRD
日本語だから読めよ
0727デフォルトの名無しさん2015/12/05(土) 12:19:09.16ID:fWHJ2v3J
空気読めよ
マーシャルダンプで追加書き込みするにきまってるだろ
0728デフォルトの名無しさん2015/12/05(土) 12:33:35.47ID:pK0sc289
24時間年中無休でスクリプトぶん回して
一定時間毎に処理するよりも
必ず一回毎に終了してcronで何度も起動した方が
OSには優しいですか?
0729デフォルトの名無しさん2015/12/05(土) 13:34:04.85ID:YG+TJC8i
OSに優しいとはどういうことか
0730デフォルトの名無しさん2015/12/05(土) 13:40:41.18ID:ylT5mXD4
>>727
なにそれ
0731デフォルトの名無しさん2015/12/05(土) 13:43:41.28ID:YG+TJC8i
Marshalで追加書き込みとかありえなさ過ぎて
空気読んだら誰も言い出さない
0732デフォルトの名無しさん2015/12/05(土) 13:57:24.47ID:T65Hu+4Y
OSに優しいがツボに入って腹がやばい
0733デフォルトの名無しさん2015/12/05(土) 16:37:40.18ID:fWHJ2v3J
MarshalといってもYAMLとかいろいろあるわけだが(www
0734デフォルトの名無しさん2015/12/05(土) 17:29:28.71ID:cDKYTAJ8
Windows8.1 64ビット版
Ruby-2.2.0 (x64) MIP (rev 49005)(with bug#10819 patch)
たのしいRuby で勉強し始めたプログラミング未経験者ですが
Ruby2.2 consoleでnilが表示されず空白行になります
Ruby2.2 consoleでirb --noreadlineを使用するとnilは表示されますが…
windowsだとこうなるのが普通なのでしょうか?
0735デフォルトの名無しさん2015/12/05(土) 17:35:10.38ID:ckYMWiJu
RubyをWindowsで使おうと思わない方が良い
0736デフォルトの名無しさん2015/12/05(土) 18:48:57.30ID:S+43+Er8
>>734
puts nil
みたいなこと?
putsは to_sが勝手に呼ばれるから
nil.to_sで空文字列に変換された後出力されることになる
nilと表示したいなら p nilで
0737デフォルトの名無しさん2015/12/05(土) 19:33:16.99ID:cDKYTAJ8
たのしいRuby3版p46
irb --simple-prompt
/Ruby/=~"ruby"
/Ruby/=~"RUBY"
/Ruby/i=~"ruby"
/Ruby/i=~"RUBY"
/Ruby/i=~"rUbY"
などの例文でirbだとirbの後に色々入力するのが大変なので全部 printを頭に付けてファイルにしてました
pにしたらnil出ました
少しまた分かってきました ありがとうございます
0738デフォルトの名無しさん2015/12/05(土) 20:44:21.73ID:YG+TJC8i
>>733そんなわけ分からないこと言ってないでもう書くのやめときなよ
0739デフォルトの名無しさん2015/12/06(日) 01:54:59.50ID:aV79RTr4
>>711
Javaでも、使用メモリを増やすと、
メモリがまだ十分にあるから、GCを呼ばなくなるらしい

ObjectSpace#count_objects
GC::Profiler なども使ってみて

Rubyのしくみ、2014も読んで

>>728
プロセスの起動・終了は、重い処理だから、
繰り返さない方がよい。
起動させたままにする

>>734
えー!。Windows8.1 64ビット版で、Ruby動くの?
0740uy ◆Qawu9.2l1E 2015/12/06(日) 07:06:05.66ID:R7UAkY9T
ちなみに僕がbbs等を荒らす為のスクリプトを書く時に標準ライブラリ以外も使ってると
一定時間起動していたり、同じインスタンス使ってるとバグを触る事あるので
書き込み毎に新しくインスタンス生成するコードにしてます
それでも落ちる場合は定期的にプロセス起動し直すコードにします


最初から安定性を信頼してないライブラリはソースコード全体を
begin

rescue

end
で囲ったりして
謎の例外拾ったらプロセスrestartしてます
カス過ぎるとSEGV出すから、これでもダメだったりするよね(′・ω・`)
0741デフォルトの名無しさん2015/12/06(日) 11:08:56.37ID:AeiLPlcL
このスレのひとにはなじみが薄いかもしれませんが
32ビットと64ビット両方に対応しないとWindows対応を名乗っちゃダメなんです。
ソフトもパーツも全部そうです。
0742デフォルトの名無しさん2015/12/07(月) 00:17:11.51ID:ClQkmXjX
型チェックなしで大規模プログラミングはできる?
0743デフォルトの名無しさん2015/12/07(月) 04:34:16.36ID:7ldc1+VM
やりにくくなるだけで、できることはできる。
0744ネトuy ◆Qawu9.2l1E 2015/12/08(火) 00:16:20.22ID:ne+/Joxl
ひとによっては出来る
0745デフォルトの名無しさん2015/12/09(水) 00:02:26.41ID:vUJ/P0DS
文字列メソッドの殆どがinvalid multibyte char (UTF-8)になってしまう
irbではちゃんと動作するのに
0746デフォルトの名無しさん2015/12/09(水) 00:10:12.21ID:WHhV5RKE
>>742
テストちゃんと書こう
テストがなければ型チェックあり言語でもろくなものはできない
0747デフォルトの名無しさん2015/12/09(水) 07:58:38.06ID:RodzvFpu
>>742
テストをちゃんと書こうとすると型チェックあり言語の何倍も書かないといけない
0748デフォルトの名無しさん2015/12/09(水) 12:31:25.60ID:DRhJYiKV
変更→テストがコケる→修正→グリーン
で、本当にこれで十分なのか?っていうね
自信を持ってyesと言えるレベルのテストを書くには相当なコストをかけなきゃいけないわけ
型チェックの有無でそのコストに大きな差が出るとは思わないけど、
テストにそこまでのコストをかけるなら相対的に本体のコーディングの比重はとても小さくなるから
LLを使うメリットってほとんど無くなっちゃうんたよね
0749デフォルトの名無しさん2015/12/09(水) 15:58:47.06ID:ymvL9hab
デスクトップ上のフォルダ内に
1.csv, 2.csv, 3csv…と名前を連番で大きくしていくファイルを出力したいのですがどのように書いたらいいですか
0750デフォルトの名無しさん2015/12/09(水) 20:04:35.27ID:HLl+HTTd
perl -e 'for $i (1..5) { `touch $i.csv`; }'
0751uy ◆Qawu9.2l1E 2015/12/12(土) 18:14:08.46ID:uQVh6GL6
この前起こったバグだけど
@var.hash == v.hash の時に
関数やブロックに@var渡すのとv渡すので挙動が変わるケースってないよね?

v = @var
UY.class_eval do
 @var = v
 def self.func
  @a.f do
   yield @var
  end
 end
end
↑ self.funcをオーバーライド

およそこんな事しながら
ブロックにメンバ変数を渡して「yield」の中から引数の[@var(インスタンス)]の持つメンバ変数のArrayの要素を削除しようとすると、
削除すべきじゃない要素まで削除したり、また削除しなかったり挙動がおかしい

ちなみに
v = @var
UY.class_eval do
 define_singleton_method :func
  @a.f do
   yield v
  end
 end
end
これだとバグらなかった

報告しようにも公開出来ないソースコードなのでここに簡易コードだけ
0752デフォルトの名無しさん2015/12/12(土) 18:52:39.82ID:JF7BD07+
まずは実際に再現するコードを出せ
0753デフォルトの名無しさん2015/12/12(土) 21:55:16.45ID:6egCpPrL
同じ振る舞いなら同じハッシュであることを期待するというならまだわかるが、逆を期待するのは普通じゃない
それともobject_idの比較のつもりなのか?
0754uy ◆Qawu9.2l1E 2015/12/12(土) 22:22:08.48ID:f68kZJl6
>>753
は・・・?

>>752
コードは出せないけどバグったもん
rubyのバグ
0755デフォルトの名無しさん2015/12/12(土) 22:26:00.43ID:B4iyQ5Rc
精神障害っぽいな
0756デフォルトの名無しさん2015/12/12(土) 23:40:16.27ID:gYwXaUBA
uyだからしょうがないよ
0757uy2015/12/13(日) 02:27:40.36ID:sfzErp4C
そもそも他の場所のバグが、
そこで表面化したのかもしれないし
klassを飛び越えるローカル変数か
メンバ変数か
オーバーライドか
arrayあたり
ちなみに再帰も使ってる
あとloadもつかってguiアプリ
いろいろ要素ありすぎて
ソースコードはアップできないのだよ
ただ何かそこら辺にバグがあるということは掴んでる
0758デフォルトの名無しさん2015/12/13(日) 03:18:52.13ID:X/k3QAPc
切り分けちゃんとしてから書こうぜ
0759デフォルトの名無しさん2015/12/13(日) 03:59:46.49ID:Be8+1Kca
>>749
カレントフォルダに、1〜3の空ファイルが作られる。
PowerShell_ise で試して。
-WhatIf を削除すれば、実際に実行される

for ($i = 1; $i -le 3; ++$i){
$tmp = [string]$i + '.csv'
New-Item $tmp -type file -WhatIf
}

Rubyでは、
3.times do |i|
tmp = (i+1).to_s + '.csv'
File.open(tmp, 'w').close()
end

'w'では、既に同名のファイルが存在する場合、
ファイルサイズを0にするので要注意
0760デフォルトの名無しさん2015/12/13(日) 13:11:54.16ID:aRLjCXwK
ダメだendって見るだけで吐き気がしてくる
よくこんなクソ言語使ってられるわ
0761デフォルトの名無しさん2015/12/13(日) 13:30:52.94ID:Ke+V+0rY
>>750
module MyModule
class MyClass
def my_method
begin
10.times do |i|
if i % 2 == 0
puts i
end
end
end
end
end
end
0762名無しさん@そうだ選挙に行こう2015/12/14(月) 12:39:38.57ID:tx6Cj+2B
>>749
ファイル名の文字列内で
#{数値変数}.csv
0763名無しさん@そうだ選挙に行こう2015/12/14(月) 13:28:37.59ID:baKxaSGv
Phoenix
http://confreaks.tv/videos/elixirconf2014-rise-of-the-phoenix-building-an-elixir-web-framework
Introduction to elixir for Rubyists
http://confreaks.tv/videos/elixirconf2014-introduction-to-elixir-for-rubyists
2015
http://www.elixirconf.eu/
0764デフォルトの名無しさん2015/12/15(火) 00:59:30.38ID:QowKLBZE
>>759

3.times do |i| { File.open("#{i+1}.csv", 'w').close() }
0765デフォルトの名無しさん2015/12/17(木) 11:13:45.76ID:l98kMQcJ
「Rubyによるクローラー開発技法」が送料込み1000円で売られてるぞ

   <(´`c_,'`)>
     ) )
 (((( > ̄ > ))))
0766デフォルトの名無しさん2015/12/17(木) 11:14:25.40ID:l98kMQcJ
http://page22.auctions.yahoo.co.jp/jp/auction/l332728499
ここな
0767デフォルトの名無しさん2015/12/17(木) 13:56:55.85ID:Szn4FINI
http://confreaks.tv/videos/elixirconf2014-introduction-to-elixir-for-rubyists

ドローンのデモわろた
0768デフォルトの名無しさん2015/12/18(金) 23:50:17.61ID:a2I0C9t5
rubyってどこらへんが良いの?
python使いの俺にもわかるように教えてくれ
0769デフォルトの名無しさん2015/12/19(土) 00:18:02.37ID:LGhGH2LK
オフサイドルールじゃないところかな
0770デフォルトの名無しさん2015/12/19(土) 00:19:27.17ID:2jcAGqqg
Pythonと比較するなら実質的に特に良いところはない
3.times do を美しいと感じるか一貫性がなくて無駄に複雑なだけだと感じるか、純粋に好みの問題
日本人はExcel方眼紙に見られるように論理性よりも体裁を重視する傾向があるからRubyを好む人が多い
0771デフォルトの名無しさん2015/12/19(土) 01:02:45.89ID:/LhuVD7p
体裁についてはむしろPythonの方がうるさい感じだけどなー
Rubyは全体的にゆるい

そのゆるさを気持ち悪いと感じるか心地いいと感じるかかな
0772デフォルトの名無しさん2015/12/19(土) 11:42:17.66ID:8LauFAwB
Rubyはゆるい に同感
だから個人的にはでかいプログラムには向いてないと思う
小さい処理したり、成果物を機械的チェックしたりをさっと書くのによく使う

まあ別に小さいのはPythonでもなんでもいいだろうけどね
しいて言えばコンソール上コマンド引数に直接コードを書くのも簡単ってとこか
0773uy ◆Qawu9.2l1E 2015/12/19(土) 14:02:40.83ID:z6r6v8NU
Pythonとあまり差異が無ければ
あとは日本語資料多いほうの言語が楽
0774デフォルトの名無しさん2015/12/19(土) 14:20:44.49ID:97l4we9f
Windowsならpythonのがよい
macならruby
linuxは知らん
0775デフォルトの名無しさん2015/12/19(土) 17:40:23.41ID:JWNupyto
Python使いがあえてRubyをやる理由はRailsだけだと思う
Pythonで書くにはちょっと大袈裟な簡単な自動化とかに使うならRubyよりPerlの方がどこでも使えるしシェル呼びやすい
0776デフォルトの名無しさん2015/12/19(土) 19:30:33.39ID:KCXD/UEw
読みやすさではPerlが僅差で上?
0777デフォルトの名無しさん2015/12/19(土) 23:51:38.42ID:/LhuVD7p
Perlは確実に読みにくい
PythonとRubyは同程度かな
0778デフォルトの名無しさん2015/12/20(日) 00:14:36.26ID:gcjL+cZo
読みやすさ
自分が書いたRuby >= 自分が書いたPython = 他人が書いたPython > 他人が書いたRuby > 自分が書いたPerl >>>(解読不能の壁)>>>他人が書いたPerl
0779uy ◆Qawu9.2l1E 2015/12/20(日) 01:47:57.44ID:XCKyN+j3
言語によって調べやすい情報の種類が違うから
やるメリットが0って事はないけどぬ

rubyでやりたい事探して見つからない時にPyrhon Perl で調べると見つかるとかはある
で、出てきたライブラリ名とかを今度はrubyで探してrubyで書くというのが上級者様の検索技術です
0780デフォルトの名無しさん2015/12/20(日) 12:02:30.29ID:0rXSjneF
arr1 = []
arr2 = []
arr3 = []
(1..100).each do |i|
 if condition(i)
  arr1 << i
 elsif condition(2)
  arr2 << i
 else
  arr3 << i
 end
end

という処理を、map()で書くことはできますか?
map()じゃなくても、関数型っぽく書く方法があれば教えてください。
0781デフォルトの名無しさん2015/12/20(日) 14:04:55.96ID:Kuy1M1Wj
arr1, arr2, arr3 = (1..100).reduce([[],[],[]]){|a, i|if condition(i) then [a[0] + [i], a[1], a[2]] elsif condition2(i) then [a[0], a[1] + [i], a[2]] else [a[0], a[1], a[2] + [i]] end}

arr1, arr2, arr3 = (1..100).group_by{|i|if condition(i) then 0 elsif condition2(i) then 1 else 2 end}.map{|(key, value)|value}

関数型はよくわからないけど、たぶんこんなのが関数型っぽいんでしょ
0782デフォルトの名無しさん2015/12/20(日) 14:16:17.46ID:Kuy1M1Wj
二つ目はmapの前にsortがないとほかではうまく動かないかもしれなかったね
0783デフォルトの名無しさん2015/12/20(日) 15:59:06.09ID:Ny1JRpvZ
別に全部1行で書くのが関数型っぽいというわけじゃないだろ
arr1, arr2or3 = (1..100).partition{|i|condition i}
arr2, arr3 = arr2or3.partition{|i|condition2 i}
0784デフォルトの名無しさん2015/12/20(日) 17:08:03.77ID:0rXSjneF
>>781
ありがとう。reduceを使うのね。

>>783
説明が足りませんでした。1回のループで複数の作業を行う必要がある場合、
関数型ではどうやるのかを知りたかったです。partition()だと2回のループに
なるのが気になりました。
0785デフォルトの名無しさん2015/12/20(日) 17:32:10.95ID:Ny1JRpvZ
関数型だとそもそもループっていう概念もないに近いだろう
気にするのは計算量
計算量はどっちも変わらない
0786デフォルトの名無しさん2015/12/20(日) 17:48:25.60ID:VZ49G1Nt
ary1 = (1..100).select {|i| condition(i) }
ary2 = (1..100).select {|i| !condition(i) && condition2(i) }
ary3 = (1..100).select {|i| !condition(i) && !condition2(i) }

関数型は素直に書くのが一番
0787デフォルトの名無しさん2015/12/20(日) 18:07:00.75ID:Ny1JRpvZ
計算量は多くなるけどそれもありだね
0788デフォルトの名無しさん2015/12/20(日) 21:34:37.70ID:sNgiTuJS
それなら上の partition の良くね?
0789デフォルトの名無しさん2015/12/20(日) 23:37:50.01ID:gcjL+cZo
大差ないだろ
中途半端なハックするよりは素直に>>787か
自分でpartition_by_keyみたいなメソッドを自作したほうがいい
0790デフォルトの名無しさん2015/12/21(月) 00:09:14.85ID:HlTRazJO
その自作するメソッドの中身を聞かれているのでは

786と783は定数倍しか違わないので大差ない(ということは素直な方がよいことが多い)のは同意
0791デフォルトの名無しさん2015/12/21(月) 00:15:35.58ID:HlTRazJO
メモリが許すならconditionやcondition2をメモ化させておけば定数倍の差も出なくなるか
0792uy ◆Qawu9.2l1E 2015/12/21(月) 04:37:00.37ID:pDpL0ZtE
>>780
def condition n
  rand(2) == 0
end

x = (1..100).map do |i|
  if condition(i)
    [i,nil,nil]
  elsif condition(2)
    [nil,i,nil]
  else
    [nil,nil,i]
  end
end.transpose.map(&:compact)

p x[0]
p x[1]
p x[2]
0793uy ◆Qawu9.2l1E 2015/12/21(月) 06:45:13.07ID:YrJaKapA
・・何が起こったのだろう・・

rubyスレの住民が投稿されたひとつのソースコードを見たときに感じた最初の感想はそれだった

投降者はuy ◆Qawu9.2l1E
名を「西行寺 うゆ」と言う

スレ住民の1人が落ち着く為にまずはコーヒーを淹れる事を提案した
12月の厳しい寒さの為か、または別の要因か、カップを持つ手の震えを抑えながら、皆がコーヒーを飲みほした

そして再びスレを開きソースコードを見る住民たち・・・
「見たいから」ではない。目を背けたくなるような自分の知らない手法を見ようとするのは自身プライドの為だ

今までバカにしてきたキチガイ
こんな奴に負けるはずがないという信念
それが彼らに与えられた原動力

----
0794デフォルトの名無しさん2015/12/21(月) 10:17:54.71ID:NofUbt2g
Windows環境の人、cmd.exeでこれ実行してエラーになる?
自分の環境だとErrno::EINVALとかいうエラー出るんだけどおま環なのか知りたい

> ruby -e "p gets"
あ
0795uy ◆Qawu9.2l1E 2015/12/21(月) 10:34:52.91ID:OvM9PrFx
でない
0796デフォルトの名無しさん2015/12/21(月) 11:47:27.96ID:lS2KqIdp
普通に"あ\n"が出力された
0797デフォルトの名無しさん2015/12/21(月) 12:55:16.95ID:9a9Pk4jp
Windows 8.1 64 bit
ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]
07987972015/12/21(月) 12:56:17.78ID:9a9Pk4jp
ごめん。ミスった。
>>797の環境では"あ\n"だったよ。
0799デフォルトの名無しさん2015/12/21(月) 15:05:15.25ID:LY2IEbkC
配列aをn個の部分集合に分割するすべての組み合わせを列挙したい。
とりあえず空集合は許す、戻り値はEnumurable or Arrayとして。

これをできるだけ短くRubyで書くとどうなる?
aが大きい場合に効率の良い書き方は?
0800デフォルトの名無しさん2015/12/21(月) 17:06:55.93ID:Ph7GU2WN
定期的にpermutationネタ出るけど宿題かなんかで流行ってんのか
0801デフォルトの名無しさん2015/12/21(月) 19:07:52.30ID:n9k1C4Zd
>>794
むかしハマったわ
08027942015/12/21(月) 19:11:41.46ID:NofUbt2g
ansiconが原因でした
0803デフォルトの名無しさん2015/12/22(火) 07:02:14.84ID:U2GagDf5
permutations ではなく、
Groovyの、List#subsequences のことだろ

1, 2, 3,
12, 13, 23,
123
0804デフォルトの名無しさん2015/12/22(火) 14:46:06.62ID:6WVAXWi7
それだと各集合のサイズ指定だからちがうんじゃない?(Array#combination)
n=2:
[], 123
1, 23
2, 13
3, 12
にしたいのだとおもう。
0805デフォルトの名無しさん2015/12/22(火) 20:42:18.10ID:rNJ+nMzC
質問です。
$a = gets.to_i
def calc(other)
$a * other
end
puts calc(4)
puts calc(2)

要は標準入力から取り込んだ値を関数に使いたいのですが、これだとグローバル変数が汚染されるのでスマートでない気がします。
グローバル変数を汚染せずにする方法はありますでしょうか?
0806デフォルトの名無しさん2015/12/22(火) 21:10:55.05ID:Ped0XTvJ
あります
0807デフォルトの名無しさん2015/12/22(火) 21:55:51.78ID:rNJ+nMzC
あるのですか、良かったです!
教えてもらえたら助かります!
0808デフォルトの名無しさん2015/12/22(火) 22:00:09.31ID:lhPbrUmR
カリー化して部分適用すりゃいいんじゃないの?
0809デフォルトの名無しさん2015/12/22(火) 23:20:43.77ID:G8TSJGI1
>>786 はDRYじゃないのが嫌。
これなら >>783 の方がいい。
でも関数型だと通常リストと再帰使うけど、
そうやって書いたのを ruby に翻訳すると、
>>780 が一番近い気がする。
0810uy ◆Qawu9.2l1E 2015/12/23(水) 00:15:22.98ID:dpAqe3cZ
>>805
c = -> a , b { a * b }.curry
c = c[2]
p c[4]
p c[8]
0811デフォルトの名無しさん2015/12/23(水) 03:04:29.76ID:uB2nj2I/
$a は、def calc()内でしか使わないのなら、
自由(グローバル)変数にせず、calc()内の束縛(ローカル)変数にする

クラス内のインスタンス変数か、クロージャ(ラムダ)内の変数とする

def calc(a)
lambda do |other|
return a * other
end
end

f = calc(3)
p f.call(5) #=> 15
p f.call(10) #=> 30
08128052015/12/23(水) 07:45:59.11ID:DqWY6q7M
>>808>>810>>811
ありがとうございます!すっきり解決しました!
カリー化は初めて聞いた言葉だったのでググって勉強になりました。
いい休日が過ごせそうです。
0813デフォルトの名無しさん2015/12/23(水) 20:35:16.07ID:KL0rgOa8
>>809
発言内容的にLisp系の人かな?
好みと違うかも知らんが、こんなのどうかね

h = (0..100).group_by {|x| condition(i) ? :ary1 : condition(2) ? :ary2 : :ary3 }
ary1, ary2, ary3 = h.values_at(:ary1, :ary2, :ary3)
0814デフォルトの名無しさん2015/12/23(水) 21:51:07.00ID:L95mHKNc
>>810
http://hissi.org/read.php/tech/20151223/UGp4VlNGMlU.html
http://hissi.org/read.php/tech/20151223/bGd3LzFLdkk.html
http://hissi.org/read.php/tech/20151223/dWhucmxRZG4.html
http://hissi.org/read.php/tech/20151223/ZHBBcWUzY1o.html
http://hissi.org/read.php/tech/20151223/Y0dyQzdxZWQ.html
http://hissi.org/read.php/tech/20151223/eE9Zd3lKSlM.html
http://hissi.org/read.php/tech/20151223/eTNMMnFtaEY.html
http://hissi.org/read.php/tech/20151223/aDJKTXlFZk8.html
http://hissi.org/read.php/tech/20151223/ZFV6WUFBZlg.html
http://hissi.org/read.php/tech/20151223/UDZmKysxZks.html
0815uy ◆Qawu9.2l1E 2015/12/24(木) 09:38:29.82ID:kjx2km/n
>>813
この程度の処理で:ary1,2,3とか余計なシンボル作るとか冗談みたいなコードですね^^;
08167992015/12/24(木) 14:01:02.23ID:srISd0Ns
>>803, >>804
実行結果は>>804みたいになる処理を想定してました。
実際に必要だった処理では、配列aも分割数nも小さかったので再帰で済ませたけど、
重複要素がある大きな配列に試すと遅い。
配列の比較を最小限にする書き方はどんなかな、
とか途中配列に溜めないでEnumurableないかな、とか考えた上での質問です。
0817デフォルトの名無しさん2015/12/24(木) 18:33:58.39ID:QFPP7Vz6
つ Lazy
0818デフォルトの名無しさん2015/12/24(木) 23:54:41.10ID:LKbtWIA8
>>813
かっこいい。
>>815
0、1、2で事足りるとは言え、シンボル3つ如きで何を言っとる。
08197152015/12/25(金) 08:07:17.27ID:Us3+3faY
>818
基地外の相手するなよ。喜ぶから。
0820デフォルトの名無しさん2015/12/26(土) 00:34:43.96ID:w+fIwRnj
>>818
変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。
0821デフォルトの名無しさん2015/12/26(土) 07:30:22.15ID:KoYH9+bG
スマートじゃないってことでしょ
数字でええがな
0822デフォルトの名無しさん2015/12/26(土) 20:29:10.12ID:w+fIwRnj
マジックナンバーを使うよりシンボル使った方がスマートだと思うけどな。まあ感性の違いか
0823デフォルトの名無しさん2015/12/26(土) 22:27:38.70ID:gbQMSnGA
こういうのは?
key = -> x { condition(x) ? 1 : condition2(x) ? 2 : 3 }
ary1, ary2, ary3 = (0..100).group_by(&key).sort.map(&:last)
0824デフォルトの名無しさん2015/12/26(土) 23:16:53.05ID:Mh3LsY+/
こういうのもなにも最初の回答にそれあるじゃん
0825デフォルトの名無しさん2015/12/26(土) 23:58:32.70ID:gbQMSnGA
あ、ほんとだ。^^;
0826デフォルトの名無しさん2015/12/28(月) 15:55:33.71ID:SIjvxUna
>>822
0,1,2 の役割は位置を示すものなので、マジックナンバーじゃないよ。
逆にシンボルにすればマジックナンバーでなくなる訳でもない。
0827デフォルトの名無しさん2015/12/28(月) 17:51:00.87ID:iwZYneEF
Ruby3でシンボル廃止してくれ
シンボルGC(笑)とか完全に当初の意味を失ってる
0828デフォルトの名無しさん2015/12/28(月) 18:29:35.51ID:Y4DeX8w+
連想配列のキーにシンボルと文字列混在させて死ぬパターン多し
0829デフォルトの名無しさん2015/12/28(月) 21:38:14.27ID:BoIp6Qyu
位置だからマジックナンバーではない? 意味が分からない。
位置を即値で埋め込んだらそれはマジックナンバーだろう。やるなら定数を定義しないと。
しかしそれは大げさなので、シンボルを使うのがスマートな選択。
もちろん:ary0とかではマジックナンバーと変わらないが、
本番のコード当然意味のわかる名前を使うだろう。
0830uy ◆Qawu9.2l1E 2015/12/29(火) 03:10:19.65ID:KaKwDEtA
>>820

def condition n
rand(2) == 0
end

h = (0..100).group_by {|x| condition(0) ? :ary1 : condition(2) ? :ary2 : :ary3 }
ary1, ary2, ary3 = h.values_at(:ary1, :ary2, :ary3)

p Symbol.all_symbols.grep(/ary\d/)

# => [:ary1, :ary2, :ary3]


はいわろ


820 :デフォルトの名無しさん:2015/12/26(土) 00:34:43.96 ID:w+fIwRnj
>>818
変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。


↑

w
0831uy ◆Qawu9.2l1E 2015/12/29(火) 03:11:55.99ID:KaKwDEtA
                         ∧_∧         ミ ギャハッハッ 変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。
                              o/⌒(. ;´∀`)つ >>820
                              と_)__つノ  ☆ バンバン


p Symbol.all_symbols.grep(/ary\d/)    ∧_∧  
                              o/⌒(゜Д゜ )つ >>820
                              と_)__つノ

# => [:ary1, :ary2, :ary3]
                         ∧_∧
                              o/⌒( ゚д゚ )つ >>820
                              と_)__つノ
0832デフォルトの名無しさん2015/12/29(火) 15:15:20.73ID:HQID5Dbw
僕のコードが動きません!
引数のファイルを開いて、一行ずつ読んで
パターンマッチした文を表示させたいだけなのに



#coding: Windows-31J

filename = ARGV[0]
file = File.open(filename)
text = file.read

text.each_line do |line|
line.chomp!
line.scan(%r|http://aaa.bbb.com/content/[A-Za-z0-9_-]+.txt|) do |matched|
print matched

end
file.close
0833デフォルトの名無しさん2015/12/29(火) 15:32:05.00ID:5o0CYWec
File.open
処理
end
だけでいい。file.close は書かない

text.each_line do |line|
の次の行に、
p line
を付け足して、中身を見れば?

バグが起こったときは、もっとコードを少なくして、
正常に動く所まで戻ること
0834おありがとうございます・・・2015/12/29(火) 15:35:25.36ID:HQID5Dbw
      ,, -─‐-、,,-─-,、
     /        ,'⌒ヽ\
    〈  ,‐-⌒-、ノ,,,  |.  \
    /, ミ、Vヽl〉| | |,,,  |.   \
     '|\Nヘ「ヽ||_|__,|.     \
              |L.|  |       ヽ、
            | | ,,,|,        .l
.              |_|_,||        .ノ
                |::|::: :|_|       ,ノ |
             rrr´‐::: :j. L,,---‐‐'´ ノ
            i´^^i´ ̄~    ̄ ̄ ̄~i‐⌒ヽ,
            ヽ、__ヽ、______」-、__.⌒っ
                           ̄
0835デフォルトの名無しさん2015/12/29(火) 15:43:02.66ID:ITFPdK18
ary1 = ary2 = ary3 = 42
p Symbol.all_symbols.grep(/ary\d/)
#=> [:ary1, :ary2, :ary3]
0836デフォルトの名無しさん2015/12/29(火) 15:44:21.71ID:iCcGBsDn
おいuy元の質問に対してその回答が良いかどうかは置いといて
uy変数名のシンボルはどうせパーサが作るから実質増えないってのは合ってるだろうがuy

ary1 = 1
p Symbol.all_symbols.grep(/ary\d/)

# => [:ary1]

uy煽りたいならuy正確な内容で煽れやuy
0837デフォルトの名無しさん2015/12/29(火) 15:45:40.09ID:HQID5Dbw
ちがうわボケ
end一つ忘れとんねヤンケ
こんな池沼先生の棲み家には二度と来ねーよ




ふふふ ごめんなさいネ
0838uy ◆Qawu9.2l1E 2015/12/29(火) 20:35:35.10ID:4RcqbWns
死にますごめんなさい ノシ
0839デフォルトの名無しさん2015/12/29(火) 21:09:29.08ID:2A8C+lrK
くやしいのうwwwくやしいのうwww
0840デフォルトの名無しさん2015/12/29(火) 21:44:35.74ID:PLgvp1Hq
で、スレの何番と何番のコードがきれいなの?
教科書的なコードが読みやすいのはわかったけど
現実はPerl以下だよね。
0841デフォルトの名無しさん2015/12/30(水) 00:11:34.43ID:6Tvlbjyh
言語で比較してる時点でお察し
読みやすいコードを書く人はどっちの言語で書いても読みやすいコードになるだけ
0842デフォルトの名無しさん2016/01/01(金) 12:19:57.21ID:Z7e2NzBj
AptanaStudio3を使うと
puts乱発でエラーチェックするレベルを超えれるのですか?
0843デフォルトの名無しさん2016/01/02(土) 03:31:28.07ID:cqMsfgi2
rubyじゃ無理
0844デフォルトの名無しさん2016/01/02(土) 15:10:11.19ID:dDeNCcj5
elixir おぬぬめ
0845デフォルトの名無しさん2016/01/03(日) 03:46:38.02ID:ZCsbV3RO
1.8で作ったUTF-8、CP932、バイナリ間で相互にデータをやりとりするスクリプトを2.1に移植しようとして地獄を見た
Encoding例外の嵐で片っ端から文字コードとencodingをチェックしてすりあわせないと動かなかった・・・orz
0846デフォルトの名無しさん2016/01/03(日) 23:18:40.45ID:7E/Rwrfz
新春初食糞はいつもに増して苦かったです><
みなさんはいかがでしたか?
0847デフォルトの名無しさん2016/01/03(日) 23:19:32.87ID:7E/Rwrfz
>>846
誤爆です。板汚しすみません。
0848デフォルトの名無しさん2016/01/04(月) 02:02:37.22ID:TIJ9YlQ3
UTF-8からSJISに変換する場合に変換出来ない文字だけエスケープしてその後戻す簡単な方法ってないですか?
0849デフォルトの名無しさん2016/01/04(月) 12:57:15.46ID:0MKfE4K1
座標、x:12, y:3 があるとき、
Hashのキーを、DBみたいに、数値の連結キー(x, y)にできる?

単純につなげると123となり、(12,3), (1,23)の区別がつかない

また、12-3のように文字列のキーにすると、
座標(12,3)に戻すのに、手間がかかる

>848
CP932には、丸で囲んだ数字などの環境依存文字があるけど、
UTF-8には、CP932に変換できない文字があるの?
0850uy ◆Qawu9.2l1E 2016/01/04(月) 18:19:08.27ID:zTvWipKl
1=>2
0851デフォルトの名無しさん2016/01/04(月) 20:10:37.94ID:TIJ9YlQ3
>>849
ハートマークとか

美しくない&簡単じゃないけどこんな感じになった
utf8 = "\u2665"
utf8.force_encoding("utf-8")
$> << "#{utf8} / #{utf8.encoding}\n"
begin
cp932 = utf8.encode("cp932")
rescue Encoding::UndefinedConversionError
utf8.sub!($!.error_char){"\\u#{$!.error_char.encode("utf-16be").unpack("H*").first}"}
retry
end
$> << "#{cp932} / #{cp932.encoding}\n"
utf8 = cp932.encode("utf-8").gsub(/\\u(.{4})/){[$1].pack("H*").encode("utf-8", "utf-16be")}
$> << "#{utf8} / #{utf8.encoding}\n"
0852デフォルトの名無しさん2016/01/05(火) 02:11:00.87ID:jgjwtOas
Encoding::Converter が使えるんじゃない?
08538492016/01/05(火) 03:54:24.49ID:RHXILbsO
>>849
自己レスですが、2次元のハッシュ(ハッシュのハッシュ)がありました

h = {}
h[3] = {}
h[3][10] = 'x'
h[3][5] = 'y'

{3=>{10=>"x", 5=>"y"}}
0854デフォルトの名無しさん2016/01/05(火) 12:04:20.02ID:4ajyxAFr
>>853
他にArrayをキーにしてしまう方法もあるよ
ただしキーに破壊的操作するとか変なことすると取り出せなくなったりする罠もあるけど

h = {}
h[[3,10]]='x'
h[[3,5]]='y'

h
=> {[3, 10]=>"x", [3, 5]=>"y"}
0855デフォルトの名無しさん2016/01/06(水) 09:28:16.26ID:UtgyJeyz
WindowsでUnicodeでしか表記出来ない引数を受け取るにはどうしたらいいですか?
普通にARGVで読み出すとSJISに変換されて破壊されてしまいます
0856デフォルトの名無しさん2016/01/06(水) 16:28:39.23ID:mQsQtNcK
最近、Fiberを使ってみようとしてるんだが、

fi = Fiber.new do
Fiber.yield
fi = nil
end

上記みたいにブロック内でFiberオブジェクトへの参照をnilにした場合
GCが走っても安全なのか知っていたら教えて欲しい。
ちなみに目的はNilクラスに空のresumeを定義してalive?チェックを省くだけ。
0857デフォルトの名無しさん2016/01/06(水) 19:37:54.23ID:yluT1kPN
>>855
コマンドラインはUnicodeを受け取れる
-Ku
0858デフォルトの名無しさん2016/01/06(水) 21:02:27.11ID:UtgyJeyz
>>857
thx
それでもダメっぽいです。強制的に?へ変換されてしまいます
0859デフォルトの名無しさん2016/01/06(水) 22:03:21.69ID:UtgyJeyz
>>857をヒントにこんな感じになった
#!/usr/bin/ruby -E utf-8
# encoding: utf-8
require 'win32ole'
cl=nil
l=WIN32OLE.new("WbemScripting.SWbemLocator")
s=l.ConnectServer(nil, "root\\CIMV2")
c=s.ExecQuery("Select * From Win32_Process Where ProcessId=#{Process.pid}")
c.each{|i|
cl=i.CommandLine[/#{$0}\s(.+)$/, 1]
}
p cl
これでUnicodeな文字が入っていてもUTF-8で受け取れました。ARGVは-Ku(-Eも)を付けても
SJISに変換されてしまう模様。このコードでも-Kuや-E utf8を付けないと?に変換されちゃってダメです
無意味にeach呼び出しているのは避けたかったけどItem(0)と書いても例外吐いちゃうし
他の方法が見つからなかったです
0860デフォルトの名無しさん2016/01/07(木) 15:31:45.37ID:XOpkkkUz
shebangに書くんじゃなくて
ruby -Ku hoge.rb とかやってもだめ?
0861デフォルトの名無しさん2016/01/07(木) 15:57:24.75ID:Pe5rEwkw
>>859
Win32API で lpCmdLine とか後から unicode 版のを取れなかったっけ
0862デフォルトの名無しさん2016/01/07(木) 15:59:02.42ID:Pe5rEwkw
GetCommandLineW() だったかな
08638552016/01/07(木) 21:56:26.72ID:R2oUu6Ae
>>861-862
thx。確かにそれでも取れそうですね。最近はWin32APIは非推奨でFiddleを使うらしい?
>type foo.rb
#!/usr/bin/ruby -E utf-8
# encoding: utf-8
require "fiddle/import"
module Kernel32
extend Fiddle::Importer
dlload "Kernel32.dll"
extern "char * GetCommandLineW()"
end
cl = Kernel32.GetCommandLineW()
p cl
>ruby foo.rb hogehoge
#<Fiddle::Pointer:0x******** ptr=0x******** size=0 free=0x000000>
なぜか0byteが返ってきます。GetCommandLineAやGetCommandLineでも同じでした
使い方が間違っているのだろうか?
08648552016/01/07(木) 22:43:50.84ID:Hmw0mFw8
自己レスです。解決しました
>type foo.rb
#!/usr/bin/ruby
# encoding: utf-8
require "fiddle/import"
module Kernel32
extend Fiddle::Importer
dlload "Kernel32.dll"
extern "wchar_t * GetCommandLineW()"
end
module MSVCRT
extend Fiddle::Importer
dlload "msvcrt.dll"
extern "int wcslen(wchar_t *)"
end
gclw=Kernel32.GetCommandLineW()
cl=gclw.to_str(MSVCRT.wcslen(gclw) * 2)
cl.force_encoding("utf-16le")
p cl
>ruby foo.rb aaaaあいう
"aaaa\u3042\u3044\u3046"
>>859より正攻法ですがコードは長いですね
0865uy ◆Qawu9.2l1E 2016/01/08(金) 07:10:42.30ID:MJgcrbur
>>856
仕様上は安全だろうけど
その手のコードはバグを触りやすい
それひとつのコードではバグらなくても幾重にもネストしたり再帰したりすると突然何かが起こるのがruby
0866デフォルトの名無しさん2016/01/08(金) 14:21:40.43ID:oo2zXXZh
>>864
すごい無駄なことしてるコードに見える
0867デフォルトの名無しさん2016/01/08(金) 19:06:23.33ID:6fogzGHc
>>866大先生が効率的なコードを披露してくれると聞いて
0868デフォルトの名無しさん2016/01/09(土) 00:44:17.76ID:orvexjc2
コードを披露しないまでもどこら辺が無駄でどういった改善の余地があるのか言ってくれたらためになるね
0869デフォルトの名無しさん2016/01/09(土) 05:15:12.68ID:0wrtgmvg
いちいち書式指定してstrftimeするのが面倒なんですが
Time.now.to_sの書式を強引に書き換えて読みやすくするのってどうやればいいですか

ローカルの小物ツールくらいしか書かないので影響範囲が大きくても問題無いです
0870デフォルトの名無しさん2016/01/09(土) 07:55:24.34ID:Luk+Oam8
モンキーパッチ、class Time ... endで上書きするメソッドを再定義する
0871デフォルトの名無しさん2016/01/09(土) 12:50:51.99ID:TeXBfoOh
>>869
Timeのto_sをオーバーライドすれば良いんじゃね
0872デフォルトの名無しさん2016/01/09(土) 16:11:01.78ID:/zf3lzOM
moduleを使えば、継承チェーンに割り込める

子 → 親
子 → module → 親
0873デフォルトの名無しさん2016/01/09(土) 21:39:34.37ID:/zf3lzOM
Rubyに、BitSetってある?

メモリを節約したいので、
9, 9, 4, 1 bitのように、自由に定義したい
0874デフォルトの名無しさん2016/01/09(土) 22:09:08.44ID:u9vfZt76
メモリを節約したい要求のある場所でRubyを選択したのが間違い
0875デフォルトの名無しさん2016/01/09(土) 22:21:42.87ID:3OVUjhEX
ビット演算は出来るんだから作れば?
というか昔の8bitマイコンならともかく今時そこまで省メモリを求められる用途って何だろう
フラグが何百万個もあるのだろうか
0876デフォルトの名無しさん2016/01/09(土) 22:42:20.98ID:lo5XvONC
俺のPC数年前のモデルだけどそれでも8GB積んでるもんな
メモリって8MB, 16MBの世界だと思ってたのにいつの間にやら千倍だな…
08778732016/01/09(土) 22:53:44.40ID:/zf3lzOM
例えば、400ある各マス目に、1〜5は置けて、6〜9は置けないなど、
置けない数字を、各マス目に持つのは、もったいない

これをbitにして、1〜5には0、6〜9には1とすると、たった9bit!
0878デフォルトの名無しさん2016/01/09(土) 23:40:35.84ID:w2pqhm9C
>>877
400万マスならわかるけど400マスやそこらならたかだかキロバイト単位のメモリ消費だろ、そんな節約になんの意味がある?
それでソースコードが読みにくくなったら百害あって一利なしだから普通に書いたら?
普通に書いたらメモリにのらないようなサイズのデータを扱うなら>>874の言うとおりRubyでやるなって話で
0879デフォルトの名無しさん2016/01/10(日) 00:03:44.36ID:INJKYkHg
ちょっと前までメモリ1.5GByteでWin7を使っていたメモリドケチな俺でも
PCなのにビット単位で操作しようとは思わないなw

あと今時のプロセッサのアクセス単位は64bit?だからそれから外れると
遅くなりそうだよね
0880デフォルトの名無しさん2016/01/10(日) 00:08:23.53ID:6OwkKsim
a = 2
puts 4.downto(0).map { |n| a[n]; p a[n]}.join

0
0
0
1
0
00010

なんじゃこれ。
整数[ ]で、その位置のビットを取れるの?
0881デフォルトの名無しさん2016/01/10(日) 00:32:34.38ID:WGiWSmcB
>>880
http://docs.ruby-lang.org/ja/2.1.0/class/Fixnum.html#I_--5B--5D
0882デフォルトの名無しさん2016/01/10(日) 12:52:15.06ID:UyzGSaeg
stringをdumpしてバックスラッシュ記法に置き換えた文字列をまたもとに戻すにはどうやるんですか?
0883デフォルトの名無しさん2016/01/10(日) 13:05:11.69ID:UyzGSaeg
evalでいいのかな、処理重そうだけど。
0884デフォルトの名無しさん2016/01/12(火) 06:24:52.98ID:iDDwmGx/
p sprintf("%#b", 1 << 32)
p sprintf("%#x", 1 << 32)

0b100000000000000000000000000000000
0x100000000

sprintfは、桁区切りできないようだが、
これを、_ で4桁区切りにするには、どうするの?
0885デフォルトの名無しさん2016/01/12(火) 12:58:44.50ID:AcUi9Sgd
ggrks^H^H^H^H^H
http://takaaki024.blog.jp/archives/51133994.html
https://uky0426.wordpress.com/2011/11/21/%E6%95%B0%E5%80%A4%E3%82%923%E6%A1%81%E5%8C%BA%E5%88%87%E3%82%8A%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/
http://d.hatena.ne.jp/rubikitch/20081016/1224165602
http://d.hatena.ne.jp/zariganitosh/20070327/1174983865
http://docs.ruby-lang.org/ja/2.0.0/doc/print_format.html
0886デフォルトの名無しさん2016/01/12(火) 21:35:22.40ID:ZwH6qafS
Windowsの32bit用のバイナリはどっかに無いのか? 2.3
0887デフォルトの名無しさん2016/01/12(火) 22:55:12.06ID:HYDzXRco
まだないと思うよ
0888デフォルトの名無しさん2016/01/12(火) 23:03:38.00ID:ZwH6qafS
そうか
08898842016/01/13(水) 18:47:51.83ID:HEyl8rAG
>>884-885
num = 987_654_321
p num.to_s.gsub(/(?<=\d)(?=(?:\d{3})+(?!\d))/, '_')

num = 987_654_321.987_654_321
p num.to_s.gsub(/(?<=\d)(?=(?:\d{3})+(?!\d))/, '_')

結果は、987_654_321
987_654_321.9_876_543

(?:pat) という記法を使うと、
キャプチャせずにグループ化できて、性能が多少改善する

直後に、patがある
(?=pat) 肯定先読み(positive lookahead)
(?!pat) 否定先読み(negative lookahead)

直前に、patがある
(?<=pat) 肯定後読み(positive lookbehind)
(?<!pat) 否定後読み(negative lookbehind)

(?<=\d)(?=(?:\d{3})+(?!\d))の解説。
直前に数字、(?<=\d)
直後に、(?=(?:\d{3})+(?!\d)
(\d{3})+ 数字3桁が1回以上、(?!\d) 数字以外
0890デフォルトの名無しさん2016/01/16(土) 05:30:39.07ID:UI4Hs62y
require 'fiddle'
include Fiddle
$dlls = Hash.new
def reg(dll, ret, func, args)
$dlls[dll] ||= Handle.new(dll)
eval(<<EOS
def #{func}(*args)
Function.new(
$dlls["#{dll}"].sym("#{func}"),
#{args},
#{ret},
abi=Function::STDCALL
).call(*args)
end
EOS
)
end
reg("User32.dll", TYPE_INT, "MessageBoxW", [-TYPE_INT, TYPE_VOIDP, TYPE_VOIDP, -TYPE_INT]) #←簡単に定義を追加出来るようにしたい
MessageBoxW(0, "テキスト".encode("utf-16le"), "タイトル".encode("utf-16le"), 0)
DLLの関数をトップの名前空間?のメソッドとして定義したいのですがもっとスマートな方法はないでしょうか?
グローバル変数を使っているところとかevalを回しているところとかもうちょっと何とか出来ないかなと・・・
0891デフォルトの名無しさん2016/01/18(月) 15:16:04.29ID:hrpSj5fV
>type sample.rb
h = {}
p h[:A]
h[:A][:B][:C][:D] = 1
p h
>ruby sample.rb
nil
sample.rb:2:in `<main>': undefined method `[]=' for nil:NilClass (NoMethodError)
となってしまいますが
nil ←[]はnilを返す
{:A=>{:B=>{:C={:D=>1}}}} ←[]=は必要なだけHashを作ってキーと値を格納する
みたいな動作って出来ないでしょうか?
0892デフォルトの名無しさん2016/01/18(月) 15:45:40.17ID:HWtNcFE4
Hash#[]=をモンキーパッチしちゃえば
0893デフォルトの名無しさん2016/01/18(月) 17:16:40.65ID:w2phWYX5
>>891-892
:C までは [] が呼ばれるから無理よ。
2.3 で追加された dig の setter 版を作るのが無難だと思う。
08948912016/01/18(月) 20:04:41.16ID:hrpSj5fV
ありがとうございます。[]で何とかするのは無理がありますか
digのセッターを作ってみようとしましたが、ひょっとして
h.dig(:A, :B, :C) = 11みたいに使えるメソッドは定義出来ない・・・?
0895デフォルトの名無しさん2016/01/19(火) 04:40:42.25ID:AE6RCJmb
# .*? の、? は最短マッチ
str = File.read('File1').gsub(/^=begin.*?^=end/m, '')

print str.gsub!(/^#.*$/, '').gsub!(/^\r\n|^\n|^\r/, '')

=begin, =end のコメントを削除して、
行頭の# コメントを削除して、空行を削除するのだが、

gsub, gsub! ともに、置換するものが無いときに、
nil が返ってきてエラーになってしまう

エラー処理をどう書けばいい?
08968952016/01/19(火) 06:19:57.11ID:AE6RCJmb
>895 自己レス

ttps://paiza.io のバグかな? 謎だ。
命令文を分割すると、エラーが起きない

# .*? の、? は最短マッチ
str = File.read('File1').gsub(/^=begin.*?^=end/m, '')

# print str.gsub!(/^#.*$/, '').gsub!(/^\r\n|^\n|^\r/, '')
str.gsub!(/^#.*$/, '')
str.gsub!(/^\r\n|^\n|^\r/, '')
0897デフォルトの名無しさん2016/01/19(火) 08:55:59.59ID:sF3aJ+Pj
バグでもなんでもないがな

Signature: gsub!(*arg1)
Number of lines: 3

Performs the substitutions of String#gsub in place, returning
str, or nil if no substitutions were performed.
If no block and no replacement is given, an enumerator is returned instead.
0898デフォルトの名無しさん2016/01/19(火) 13:23:33.42ID:TwxtwyWd
>>894
deep_merge でよくね?
0899デフォルトの名無しさん2016/01/19(火) 19:05:06.45ID:pToVStIW
>>898
そういう問題ではなくね?そもそもそのメソッドは標準で付いていないだろ
0900デフォルトの名無しさん2016/01/19(火) 20:14:52.72ID:zywzlcNl
>>911
却下されてる
http://stackoverflow.com/questions/34620469/safely-assign-value-to-nested-hash-using-hashdig-or-lonely-operator
https://bugs.ruby-lang.org/issues/11747
> It's not clear to generate either Hash, Array, or Struct (or whatever) to bury a value.
> So it's better to reject now.
> Matz.
09018912016/01/19(火) 23:11:13.15ID:eQspgBAx
結局Hash#[]とHash#[]=を書き換えて:A, :B, :Cみたいな複数のキーも受け取れるようにしました
これでことあるごとに||= Hash.newを書かなくて済むかなl
09028952016/01/19(火) 23:36:01.74ID:AE6RCJmb
>>897
print str.gsub!(/^#.*$/, '').gsub!(/^\r\n|^\n|^\r/, '')

一つも置換されなかった時は、nilが返るので、
どういうようにエラー処理を書けばいい?
0903デフォルトの名無しさん2016/01/20(水) 00:01:24.98ID:I0mr8dGx
>>901
Refinement とか使ってるの?
自分のコードや使ってるライブラリが盛大にぶっ壊れても知らんぞ。
0904デフォルトの名無しさん2016/01/20(水) 00:31:30.51ID:A6cPD9Df
そのときはそんな言語使ってる自分が悪いと思う
0905デフォルトの名無しさん2016/01/20(水) 00:37:07.04ID:CKeFiLXY
>>903
後学のためにどのように盛大にぶっ壊れるのか具体例をplz
Hashは何でも受け付けるしリファレンスマニュアルどおりの動作をさせた上で
拡張するなら問題はないように思うけど。>>901も「も」って書いているしな
0906デフォルトの名無しさん2016/01/20(水) 01:43:49.37ID:wyzbWinc
>>902
str.gsub!(/^#.*$/, ‘’)&.gsub!(/^¥r¥n|^¥n|^¥r/, '')

2.3な
09078952016/01/20(水) 02:38:49.25ID:7T123+WA
>>902 自己レス
str = File.read('File1').gsub(/^=begin.*?^=end/m, '')
p str

str.gsub!(/^#.*$/, '')
p str

str.gsub!(/^\r\n|^\n|^\r/, '')
p str

これを、ttps://paiza.io で実行すると、
たとえ、File1が空ファイルで、
全く置換されなくても、エラーにならない。
strには、nilではなく、空文字列が返る

でも、メソッドチェーンにすると、実行時エラーになる。
わけわからんw Rubyは深い、深すぎるw

str.gsub!(/^#.*$/, '').gsub!(/^\r\n|^\n|^\r/, '')
undefined method `gsub!' for nil:NilClass (NoMethodError)
0908デフォルトの名無しさん2016/01/20(水) 02:58:46.62ID:yPrd8nI2
別に深くないけど
nilが返ってくるかもしれんものをメソッドチェーンで呼び出す方がどうかしてる
09098952016/01/20(水) 03:10:13.62ID:7T123+WA
でも、メソッドチェーンにせず、
単独の命令文に分割すると、nilが返ってこない

全く置換されなくても、そのまま置換前の文字列が返ってくる。
わけわからん
0910デフォルトの名無しさん2016/01/20(水) 08:43:57.58ID:UTsS/Gix
そんなにメソッドチェーンにしたければgsub!じゃなくてgsubを使えばいいだけなのに
わけわからん
0911デフォルトの名無しさん2016/01/20(水) 11:15:06.34ID:WIh3ROx7
str.gsub!(/^#.*$/, '')
p str

str.gsub!(/^\r\n|^\n|^\r/, '')
p str

ここら辺を
p str.gsub!(/^#.*$/, '')

p str.gsub!(/^\r\n|^\n|^\r/, '')

こう書いてみたらわかるんじゃない?
0912デフォルトの名無しさん2016/01/20(水) 14:09:06.15ID:oewfRt8i
strがどう変わるかとメソッドの戻り値は別物なんだよ
メソッドの戻り値がnilでもstrがnilになるわけじゃないんだよ
0913デフォルトの名無しさん2016/01/21(木) 00:51:31.76ID:Ybl3jyTF
>>909
gsub!の戻り値が変換後のstrだと期待してるからおかしなことになるんだよね
君が期待してることを達成するメソッドはgsub!じゃなくてgsubだと気づけばすべて解決
0914デフォルトの名無しさん2016/01/21(木) 01:01:05.51ID:L852Reef
こういう作法ってどのくらい現実的なんですか
上級者ならみんなやってるよって感じですか

Rubyによる関数型プログラミング
http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html
09158952016/01/21(木) 01:06:53.17ID:f4TiidQN
そうか、gsub!の戻り値は、変換後のstrでは無かったのか。
それとは別に、戻り値があったのか

うわっはははは。意外な盲点じゃったわいw
でも、別に戻り値は見ないな

gsubよりも、使うメモリが少なそうな、gsub! を使いますわ
0916デフォルトの名無しさん2016/01/21(木) 01:10:15.75ID:Ro+JnAfr
>>915
>>897で既出なんですが
0917デフォルトの名無しさん2016/01/21(木) 01:16:03.41ID:Ybl3jyTF
>>914
> 関数型プログラミングへの際立った潜在能力があるのだから、 それらを
> いつどのように使うか(そして、いつ使わないか)を知っておくべきである。

この括弧内を意識できるなら、まぁいいんじゃない?って感じ
でもそこまで意識できるようになるには、関数型プログラミングにある程度親しんでおく必要はありそうだ
0918uy ◆Qawu9.2l1E 2016/01/21(木) 03:03:42.11ID:8l/ACpWh
>>915
は?
0919デフォルトの名無しさん2016/01/21(木) 09:14:52.65ID:bLZ10bT+
>>914
Rubyはオブジェクト指向原理主義だから、関数型のレコードやリストのような、
オブジェクトを振る舞いを持たない単なる値として扱うというのは好まれない
変数やフィールドを再代入不可にできなかったりブロックが式じゃなかったり、関数型に向いてるとも言いづらい
0920デフォルトの名無しさん2016/01/21(木) 12:20:16.08ID:0eFee794
>>914
再帰やブロックでより宣言的に書くとか、破壊的メソッドの呼び出しに注意する(特にメソッドの引数として受け取ったオブジェクトに破壊的メソッドを適用する場合)とか
作法ってほどルール化されてないけど、有益な考え方は多い
0921デフォルトの名無しさん2016/01/21(木) 17:31:41.01ID:bdQYAVtq
f.call(a)とかf.(a)とかf[a]とか萎え萎えですやん
Common Lispの(funcall f a)の形も嫌
Standard MLやOCamlやSchemeの(f a)の形が好き
0922デフォルトの名無しさん2016/01/21(木) 21:24:57.28ID:OmENn3Ct
どっちでもいいよ。
俺らは使って便利なものを作りたいだけなんだから
そんな些細な違いは方言程度にしか思ってない。
0923デフォルトの名無しさん2016/01/21(木) 21:25:27.19ID:OmENn3Ct
俺らは 言語を 使って便利なものを作りたいだけなんだから
0924デフォルトの名無しさん2016/01/21(木) 21:45:44.24ID:avOtfex3
関数とクロージャを区別せずに書けるのは気持ちいいでしょ
0925デフォルトの名無しさん2016/01/21(木) 21:48:39.18ID:jSpegSOL
ご苦労じゃな
0926デフォルトの名無しさん2016/01/22(金) 07:33:53.39ID:5jqeGNRb
最近は大分マシになったけど本質的にオブジェクトの生成は高コストだから
積極的にオブジェクトを増やす実装は推奨されないのでは
09279142016/01/22(金) 08:15:55.47ID:1VitLDg8
レスありがとうございます

いくつかの書き方は参考になりましたが
やはり状態変更は悪などと極端に走らず
Rubyとして効率的なコードを書くように心がけるのが良さそうですね
0928デフォルトの名無しさん2016/01/22(金) 08:16:18.29ID:Q7uzg+r2
Rubyは本質的にクソ遅いからそんなことは問題にならないよ
どうせIOがボトルネックのケースか処理時間が重要でないケースにしか使えないんだから
0929uy ◆Qawu9.2l1E 2016/01/24(日) 18:31:01.95ID:JCW4ssXH
そうやっていつもすぐどうせどうせってゆうのよくないよ
0930デフォルトの名無しさん2016/01/26(火) 13:14:16.28ID:mkuLwhRZ
ruenvで2.1.2をインストールしようとしたら、

> ERROR: Ruby install aborted due to missing extensions
> Try running `yum install -y readline-devel` to fetch missing dependencies.

ってでたのでredline-develをインストールしたら2.1.2をインストールできました。

・・・なんて話を「rbenv で Ruby2.1.2 がインストールできなかった話」というタイトルで
Qiitaとかに投稿するな!!!

わざわざクリックして最後まで読ませやがって。
0931デフォルトの名無しさん2016/01/26(火) 21:27:41.67ID:E7aOa7R/
お前のために他人がいる訳じゃない

他人が発信した情報あてにしないと問題解決もできない奴が
他人の記事に文句言うな
0932デフォルトの名無しさん2016/01/26(火) 22:49:53.25ID:GXD8VpF6
qiitaは既に糞まみれ
残念ながら
0933デフォルトの名無しさん2016/01/26(火) 23:14:12.67ID:vn2Q4vZq
意識高い系はもうRubyから引揚げてるしな
0934デフォルトの名無しさん2016/01/26(火) 23:39:15.00ID:WceGgIjm
それって皮肉なのか?
0935デフォルトの名無しさん2016/01/27(水) 00:20:56.00ID:/TmOpm0o
>>931 の性格の悪さがディスられてるだけ
0936デフォルトの名無しさん2016/01/27(水) 12:54:52.64ID:E7OQZ8ca
>>931
「rbenvで2.1.2をインストールしようとしたら、readline_develが無いと怒られた」

というタイトルだったら、まだギリ許せた。
0937デフォルトの名無しさん2016/01/27(水) 19:53:10.87ID:oO7fm3iA
玉石混交の情報から自分に必要な情報をピックアップする技術ってのはエンジニアには
必須だと思うけどなー

んなことぐらいでキレてたらやってられんと思うんだが
0938デフォルトの名無しさん2016/01/27(水) 21:20:24.05ID:/TmOpm0o
想像だけど>>930はたぶんフェイスブックみたいなSNSもやってて
ふさわしくないなと思ったから2chに思いのたけをぶつけたのだと思う。
エンジニアとして適切な行為だと思う。
0939デフォルトの名無しさん2016/01/27(水) 21:29:22.19ID:oO7fm3iA
2chに愚痴を書き込むのがエンジニアとして適切って…どこまでが釣り針なんだろう?
0940デフォルトの名無しさん2016/01/27(水) 21:45:43.39ID:iQ3nwyf1
そもそもエンジニアとはなんなのか
0941デフォルトの名無しさん2016/01/27(水) 22:02:26.17ID:NkEGFK8F
教えてください。
0942デフォルトの名無しさん2016/01/28(木) 11:32:12.64ID:Tq1/h+gy
>>936
QiitaとかStack Overflowとかは、投稿数に応じてなんらかのステータスが上がる仕組みになってたり、
投稿数を増やそうと誘導する仕組みになってたりするから、ゴミ記事が増えるのは仕方がないよ。

NG機能があればいいんだけどね。
0943デフォルトの名無しさん2016/01/28(木) 23:35:47.79ID:pLiNNOp7
>>942
情報が多い分には別に構わんでしょ
それが役に立つかどうかは読む人によって変わるんだから

「俺にとって役に立たないからクソ記事だ」とか叫ぶ方が異常なだけなんだよ
0944デフォルトの名無しさん2016/01/29(金) 00:01:28.76ID:tOtoATn6
こういうのが新参者をバサバサ切る老害の思考なんだなと分かる例ですね
0945デフォルトの名無しさん2016/01/29(金) 02:13:31.48ID:E1SYsv9d
いや、役に立たない情報が多いのは大いに困るだろ
読んでみないと役に立たないかわからないような紛らわしい情報ならなおさら
一つや二つの記事でそれを言い出すのはどうかと思うが、これを否定するのは無理がある
0946デフォルトの名無しさん2016/01/29(金) 04:26:08.86ID:w5vE0Dwg
>>945
>>931
0947デフォルトの名無しさん2016/01/29(金) 10:33:25.59ID:E1SYsv9d
何が言いたいんだろう
お前のために公開した情報じゃないんだから、その情報のせいでお前が困っても関係ないってこと?
0948デフォルトの名無しさん2016/01/29(金) 10:43:53.47ID:ocau8PiP
自分基準でしか物事考えられないなら明らかに向いてないんだから転職をオススメするよ
0949デフォルトの名無しさん2016/01/29(金) 10:48:19.05ID:+dgjzxQ2
>>947
>>943の通りでしょ。
ある情報があなたには有益ではなくても他の人には有益な可能性もあるのに、
自分の役に立たない情報は世の中にも不要な情報と決めつけているだけ。
0950デフォルトの名無しさん2016/01/29(金) 11:40:54.56ID:ciUqMjIc
話ループさせてるやつはなんなんだ。
ループが上手でこの職に向いてるのか。
もう一度言うが元レス書いた人は
2手先を読んで「2ch.net」に書いたのであればなんの問題もないじゃん。
ここは2ちゃんねるというゴーストタウン。
スマホで見たらエロ漫画の広告しかないよ。
こんな辺鄙とこでも炭鉱があったころはにぎわってたらしいけどな。
0951デフォルトの名無しさん2016/01/29(金) 11:56:30.78ID:qELvr9Oj
> > Try running `yum install -y readline-devel` to fetch missing dependencies.
>
> ってでたのでredline-develをインストールしたら2.1.2をインストールできました。

という内容をありがたがる奴なんているんだ
それは盲点だったわ
0952デフォルトの名無しさん2016/01/29(金) 12:38:04.83ID:6UZRSAow
記事書いてると気合いいれたのは全然延びなくて
そんなんあたりまえやろ、自分で試せばいいちゃん
って思うような記事が伸びるのはみんな経験すること。
むしろ盲点しかない。
0953デフォルトの名無しさん2016/01/29(金) 12:59:38.44ID:PBp+3Ff3
どうしてruby触ってる人はうんこ臭いの??
0954デフォルトの名無しさん2016/01/29(金) 13:27:44.62ID:qELvr9Oj
>>952
別にその記事伸びてないし
Qiitaでは、普通に良記事が伸びる
0955デフォルトの名無しさん2016/01/29(金) 13:44:03.67ID:6UZRSAow
>>954
じゃあなおさらなんのもんだいもない
0956デフォルトの名無しさん2016/01/29(金) 14:09:13.02ID:qELvr9Oj
>>955
いやだから「rbenv で Ruby2.1.2 がインストールできなかった話」というタイトルに釣られて
クリックして、最後まで読んでやっとクソ記事だったとわかった俺の時間が無駄になった
(同様の奴けっこういるかもよ)
0957デフォルトの名無しさん2016/01/29(金) 14:11:37.00ID:qELvr9Oj
さらに言うなら、なぜそのステップが必要なのかも書かずに、だらだらどうやったか
だけを書いた「○○をインストールしてみた系」の記事も、いいかげんにして欲しい
(Qiitaに限らず)
0958デフォルトの名無しさん2016/01/29(金) 14:14:26.20ID:rwMtqIQl
>>957
健全なネット環境のための法案を作って
ノイズをうpした連中とその家族を焼き払ってほしい
youtubeとか検索してでてくる「歌ってみた」「カバー」
とかもう半笑いで殺意湧く
0959デフォルトの名無しさん2016/01/29(金) 14:23:06.69ID:+dgjzxQ2
こんなところでいつもでもグダグダしょうもない書き込みをしておきながら
俺の時間がムダになったとかwww
0960デフォルトの名無しさん2016/01/29(金) 14:27:21.35ID:qELvr9Oj
> ある情報があなたには有益ではなくても他の人には有益な可能性もある

とか言い出す奴がいなければ、グダグダしょうもない書き込みはしなかったけどね
マジで驚いた
0961デフォルトの名無しさん2016/01/29(金) 14:44:27.71ID:6UZRSAow
ぼかした言い方でも誰かが実行したら>>958
が罪に問われる法律なら結構前に施行されてる
0962デフォルトの名無しさん2016/01/29(金) 16:03:05.42ID:koUnNQGJ
> > ある情報があなたには有益ではなくても他の人には有益な可能性もある
>
> とか言い出す奴がいなければ、グダグダしょうもない書き込みはしなかったけどね
意味不明な行動原理ワロ
0963デフォルトの名無しさん2016/01/29(金) 17:40:13.82ID:vhRbN74r
>>958
お前が見たい奴こそがYoutubeにとってノイズだよ
0964デフォルトの名無しさん2016/01/29(金) 18:02:18.10ID:E1SYsv9d
>>949
誰か誰にとっても有害だって前提で話をしてるか?
そんなもの世の中のありとあらゆる有害なものを調べてもほとんどないだろうよ
世の中にとって有害だって話もそんなことはないと言ってる人しか言及してないように思うよ
「誰が」とか「誰にとって」の部分が省略されてるときに何でもかんでも「世の中の人すべて」をあてはめて読んじゃだめだよ
0965デフォルトの名無しさん2016/01/29(金) 18:16:21.31ID:w5vE0Dwg
「プログラマの三大美徳」も
勘違いすると俺様思考になるんだって例

気に入らなきゃ見なけりゃいいだけじゃん
0966デフォルトの名無しさん2016/01/29(金) 20:56:20.22ID:E1SYsv9d
見なきゃわからないからこそ困るって話なんだけどな
ここまで頓珍漢なこと良く言えるわ
0967デフォルトの名無しさん2016/01/29(金) 21:13:47.97ID:sTsCbzbH
みんな元気で何よりです
0968デフォルトの名無しさん2016/01/29(金) 21:15:15.33ID:4RN5yrs8
>>966
別にお前が困ったところで切り捨てればいいだけの話だよね
「こんな記事のせいで俺様の時間が無駄になった」というなら斜め読み能力のなさが原因なだけ

ネットの情報が玉石混交なのは当たり前の話なんだから、それぐらい織り込んどけ
0969デフォルトの名無しさん2016/01/29(金) 22:48:15.52ID:E1SYsv9d
別に困ったところで知ったこっちゃないというならそれでいいし、困らないような能力がないせいだというのもいいし
そんな当たり前のことをいちいち愚痴っても仕方がないというのもいいが
そんな理由でいちいち愚痴に突っかかってこられたらたまったもんじゃないだろうね
0970デフォルトの名無しさん2016/01/29(金) 22:59:00.31ID:4RN5yrs8
嫌なら2chじゃなくてブログに愚痴こぼしとけばいいのに

どうもネットリテラシーに欠けるきらいがあるねえ
0971デフォルトの名無しさん2016/01/29(金) 23:01:57.82ID:ocau8PiP
自分で勝手に火に油注いでおいて何を言ってるんだろう
そんな叩かれたくないならチラシの裏にでも書くに留めておけばいいのに
0972デフォルトの名無しさん2016/01/29(金) 23:37:02.09ID:o83v3zl0
しかもここRuby初心者スレっていうね
0973デフォルトの名無しさん2016/01/30(土) 01:23:45.76ID:tN64rwpC
嫌なら見なきゃいいのに
叩くこと自体が趣味の性格が悪い人たちなのかな?
0974デフォルトの名無しさん2016/01/30(土) 09:41:10.38ID:uXFVRCYk
>>973
ID:E1SYsv9d だろお前
いい加減しつこいぞ
0975デフォルトの名無しさん2016/01/30(土) 12:51:22.28ID:/T0e1x1G
お前平田だろ
0976デフォルトの名無しさん2016/01/30(土) 18:28:49.50ID:FojFAs7d
時々思い出したように Ruby でスクリプト書くといつもインクリメントで syntax error になる
なぜ忘れてしまうのか
0977デフォルトの名無しさん2016/01/30(土) 21:45:32.06ID:QMlo5tQL
他の言語でインクリメントをよく書いてるからでしょ
そんなにインクリメントを書く機会ってあるのか
0978デフォルトの名無しさん2016/01/30(土) 21:49:31.70ID:NWwyNWcX
Rubyはeachがあるからほとんど書かなくていいよな
0979デフォルトの名無しさん2016/01/31(日) 13:52:09.13ID:XXEMiKnQ
まぁ他の言語でも使わなくて済むなら使わないわな
for拡張なりsemaphore的なものなりでインクリメントデクリメントを使わなきゃいけない場面もかなり減ったし

インクリメントデクリメントは登場回数の割にバグを産みやすすぎる
0980デフォルトの名無しさん2016/01/31(日) 14:28:47.18ID:Q+LCs9MU
例えばこんなの
n=0; f=filesize; while(f/1024.0>=1){ f/=1024.0; n++; } return [f, " KMG"[n]]
再帰や対数でも書けるだろうけどさすがにちょっと
ruby ならあるだろうという謎の信頼感

ところでループ内で最後の要素だけ別の処理するみたいな場合にスマートな書き方ある?
0981デフォルトの名無しさん2016/01/31(日) 15:13:59.27ID:IomQZ6/B
こういうとき俺も困るわ
n += 1で凌いでるけどいい書き方あるの?
0982sage2016/01/31(日) 17:39:08.12ID:cEIhLW7n
>>980
0983sage2016/01/31(日) 17:41:00.39ID:cEIhLW7n
ごめん、本文抜けてた
" KMG#".each_char {|kmg|
  return f, kmg if f < 1024.0 || kmg == '#'
  f /= 1024.0
}
0984sage2016/01/31(日) 17:44:27.63ID:cEIhLW7n
バグってる、番兵の'#'はいらなくって、kmg=='G'までだったね。
0985デフォルトの名無しさん2016/01/31(日) 19:20:47.09ID:iwDB+Nos
簡単な書き方思いつかんね

f = 100000
%w(B KB MB GB).map.with_index{|u,i|[f/1024**i,u]}.reverse.find{|n,u|n>=1}
=> [97, "KB"]

最後だけ別ってのも直接そういうやり方は知らないなあ
a[0..-2].処理
a[-1].処理
って分けるくらいか
0986デフォルトの名無しさん2016/01/31(日) 19:41:35.09ID:oGNCocg8
本題からは反れるけど、この種のアルゴリズムとしては、除算より乗算、乗算よりビット演算か定数比較を推したいなぁ。
0987デフォルトの名無しさん2016/01/31(日) 22:13:03.97ID:DPmT4LpP
def vp(value, unit, prefixes)
value < unit || prefixes.size <= 1 ? [value, prefixes.first] : vp(value / unit, unit, prefixes.drop(1))
end
p vp(1023, 1024.0, %w(B KB MB GB))
p vp(1024 ** 1, 1024.0, %w(B KB MB GB))
p vp(1024 ** 2, 1024.0, %w(B KB MB GB))
p vp(1024 ** 3, 1024.0, %w(B KB MB GB))
p vp(1024 ** 4, 1024.0, %w(B KB MB GB))
↓
[1023, "B"]
[1.0, "KB"]
[1.0, "MB"]
[1.0, "GB"]
[1024.0, "GB"]
0988デフォルトの名無しさん2016/02/01(月) 21:06:53.32ID:LsZlPhNI
うーん 981 の n+=1 でいくわ
ありがと
0989デフォルトの名無しさん2016/02/01(月) 21:55:23.68ID:d5xPHHkz
ruby は範囲が決まってないループについてスマートに処理書けなくてもやもやする
0990sage2016/02/01(月) 22:42:16.05ID:0IqKHljv
対数で行くと、こうかな?
scale =
0991sage2016/02/01(月) 22:44:12.56ID:0IqKHljv
scale = " KMG"
n = [[Math.log( val.abs, 1024 ), scale.size-1].min, 0].max.to_i
return val/1024.0**n, scale[n]
# 0や負でもいける

なんでうまくい書けないんだろう?
0992デフォルトの名無しさん2016/02/01(月) 22:58:58.20ID:FfN537Ew
log_2()の計算するときはたまにFixnum#bit_lengthを使うことがある
0993デフォルトの名無しさん2016/02/01(月) 23:02:48.11ID:0uPvYgHa
>>991
ダブルクォーテーションが入ってるとなぜかそこでレスが途切れることがある
ただし、そのあとなぜかレス投稿に成功したりするからイラつく
レス数が950を超えています。1000を超えると書き込みができなくなります。