TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
pythonがこの先生きのこるには
数学者が技術者にプログラムを書いてもらうスレ
Go language part 2
Message Passing Interface (MPI) 統合スレ
Google App Engine for java
Kotlin 5
【StarSuite Basic/OpenOffice.org Basic】
PHPがいかに駄目言語であるかをちゃんと説明 Part.2
シェルスクリプト総合 その33
次世代言語18 V Julia 他

Ruby 初心者スレッド Part 57©2ch.sc


1 :2015/03/12 〜 最終レス :
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

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

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

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

逆引きRuby
http://www.namaraii.com/rubytips/

2 :
前スレ
Ruby 初心者スレッド Part 56
http://peace.2ch.sc/test/read.cgi/tech/1418430552/

いろいろミスった すまん

3 :
>>1

4 :
Ruby 2.2.1 リリース

5 :
>>1-2


6 :
rubyで開発環境にMac使ってる人って
どの機種を買ってるの?
ノートでもいけるもんなの

7 :
Rubyプログラム実行したくて今日はじめてDLしたんですが、
実行したら、

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

って出るのはなんでですか?
他の人はたぶん実行できてるみたいなんです
ジャバはインストール済みです

8 :
$ gem install json

9 :
CentOS7上でRedmine動かそうとしてるんだけど、SELinuxを有効にしたままだと

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

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

include ActiveModelHelper

で, 上のほうで

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

autoload :ActiveModelHelper

などと書かれているんだけれども、これはActiveModuleHelperが読み込まれてないとみるべき?

10 :
includeで読み込むのはC言語

11 :
>>10
Rubyさんは初めて触るんですわ・・・・(主にPerl)


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

/* RedmineのインストールガイドにとりあえずSELinuxを切りましょうとかあるのはどうかと思う */

12 :
SELinuxを切るというのは、
どのプログラミング言語でも書いてある


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

9bitだと、2バイト(16bit)で使うのか?

13 :
ビットセットってなんぞ。
Cのビットフィールドのことか?ネーヨ。

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

Fixnumのサイズはsizeof(long)なんで実装依存な。
http://docs.ruby-lang.org/ja/2.2.0/method/Fixnum/i/size.html

14 :
Rubyを始めようと思い、Ruby 2.2.1 のwindows installerをダウンロードしました。
しかし、このインストーラーがダブルクリックしてもさっぱり起動しません。ずっと読み込みマークが出たまま
何がまずいのかさっぱりわかりません

15 :
UACじゃない?

16 :
>>15
それでした。ありがとうございます
まったく、一言「ブロックしました」とか出ればいいのに、何も表示されないからどうしたかと思いました

ついでにもう一つ聞きたいんですが、自分のパソコンが64bitだから64bitのを落とせばいいですよね

17 :
おっと、15氏宛てだったか
危うく俺が答えそうになったわ

18 :
>>17
そんな意地悪しないで下さいよ
サイトを見てまわったら64bitだと環境を構築するのに面倒だというのがいくつかあって不安なんですよ

19 :
>>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のときは、開発期間が長かったこともあって、非互換は多くても、糞みたいなバグに悩んだりしなかったかったんだけどなー。

20 :
>>19
りょ、両方入れろ…ですか…
最新バージョンが必ずしもいいわけではないんですね(; ・`д・´)
まずは32bitでやってみようと思います
ありがとうございました

21 :
Rubyはオワコン

22 :
メタプログラミングを覚えてからが
rubyのrubyたる始まり
なので
終わってない

23 :
win版なんか入れずに
win上の仮想linuxでruby使えばいいよ

導入法はドットインストールを参考にすれば猿でも出来る

24 :
Ruby の文法がかなり安定するのはバージョンがいくつになってからなのかなー.
自分のプログラムはいつも 1.8.7 から一通り動くのを試してる.
ついこないだまで 1.9 が最新だったのに,1.9.3 以前はもうサポートしないって,信じられんな.
Rails とかで追従するのは私の能力だともう無理.
Ruby にはレガシーオプションってのがないのかな?
つか,性能はおいといて言語仕様として Common Lisp レベル(とまでいかなくてもいいけど)
のものを作って,せめて言語仕様の開発は止めて欲しい.
Ruby はプログラミングのし易さがとても好きなんで使ってるけど,これだけがなー.

25 :
自分だけのプログラムなら良いけど,
公開してるといろんなバージョン環境で使われるからなー.

26 :
a=%W(a b c)
x=%W(x y z)
p a
p x
{a,x}.clear
p a
p x

#a, x を clearしたいのですが、できません
#どう書けばいいですか

27 :
a.clear

28 :
[a, b].each(&:clear)

29 :
>>27,28
できた、ありがとうございます
>>28 のような書き方があるんですね

30 :
ary = bool ? [x, y] : [y, x]
xとyが長くなると読みにくくなっちゃうんですけど、何かスマートな方法はあるでしょうか?

31 :
2行で良いんじゃないの

ary = [x, y]
ary.reverse! unless bool

32 :
プログラミング初心者です。
Ruby とRuby on Railsを習得したいのですが、どうやったらいいですか?

33 :
>>32
入門サイトを探して、そこを見ながら動かしてみるのが一番

34 :
http://dotinstall.com/lessons

35 :
たのしいRuby 第4版、2013

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

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

以下の本を、順に読んで
ttp://peace.2ch.sc/test/read.cgi/tech/1419964623/309

36 :
>>31
ary = [x, y].tap{|i| i.reverse! unless bool}
とか色々考えてみたんですけど2行に分けて書くのが一番見易そうですね
どうもありがとうございました!

37 :
たのしいRuby読んで
物足りない、複雑なことがしたいと感じてから
他の本に手を出した方が良いと思うけどね

まず
http://dotinstall.com/lessons



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

↓ 生産性の高いコードを目指す、
--
4.Rubyによるデザインパターン
5.UML
6.Git
or
進みたい分野の専門知識

38 :
Ruby/mswinからグラフを書くとしたらやっぱりgnuplotあたりが定石ですか?
他にもっと使いやすいツールとかあれば教えてもらえるとうれしいです

ググるとgruffと言うのもあるようですがRMagick依存らしいのでインストールが
かなり面倒・・・

39 :
質問スレみたいなのなかったのでここで質問させていただきたいです
今までずっと1.9.3と2.0.0使ってたんですが、
最近2.2.1がリリースされたと聞いたんでそろそろいれておこうとRubyInstallerを落として実行したんですけど、
一向にインストールが始まる気配が無くて困っています、どうしたらよいでしょうか?

40 :
UACじゃない?

41 :
それがUACも出てこないんですよ……って思ってもう一回実行してみたら、
ちゃんとUAC出てきて普通にインストールできてあれぇ〜!?状態
すみません、お騒がせいたしました……

42 :
mswinは上級者バージョン

43 :
ちょっと上で似たようなやりとりがあったよ

44 :
windows8.1でruby2.2.1を使用している超初心者です。
メモ帳に簡単なプログラムを書いてrubyのコマンドプロントで
実行すると一瞬だけコマンドプロントが表示されて終了してしまいます。
どうしたら治りますか?

45 :
>>44
知るか( ゚Д゚)ヴォケ
まず、テメーのカスみたいなソースをさらせ

46 :
>>44
Windowsキー+R→「cmd」と入力→出てきた黒いウィンドウに「ruby ファイル名(絶対パス)」

47 :
>>35
>>37

これどっちが妥当なの

48 :
これが漏れの編み出した、最速メソッドである!
1. スッキリわかる Java入門 第2版、2014

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

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

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

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

一方、 >>37 は手を動かしながら試行錯誤する。
どちらでもお好きに

49 :
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なんだけどどうしてなんでしょうか?

50 :
2.2.1では次のようになっていました…
1970年1月3日午前8時59分59秒 + 1秒 = 1970年1月4日午前9時0分0秒

51 :
調べてみると1月2日と3日の午前9時までが、本来なら時差+9時間になるところが、-15時間になってる
これだと24時間分時間が前にずれるはずだけどずれないようになってるみたい
一方で、1月4日も午前9時以降は正常だから、本来1970年1月2日と3日にだけ適用するはずの処理を間違えて掛けてるのかな?

52 :
>>51
前スレで似たような話しをみた気がする。

53 :
<a =href="http://hogehoge.com">のhogehoge.comだけ正規表現で抜き出したいんだけど
どうすればいいんだろう?

54 :
>>53だけど抜き出したいのはhogehoge.comじゃなくてhttp://hogehoge.com

55 :
>>53
http://ideone.com/1vwuLr

56 :
>>55 おお!ありがとう!

57 :
x=a[i] if true == a.key?(i)
初歩レベルの質問ですが、もっとよい書き方はありますか?
(a は Hash)

ハッシュを二回調べるのを、一回にしたいです。

58 :
>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 は偽。それら以外は真。
!真偽値で、真偽値を反転する

59 :
>>57
begin
x = a.fetch(i)
rescue
end
とか

>>58
{}[:foo]
=> nil
{:foo=>nil}[:foo]
=> nil
の区別がつかない

60 :
FROM_ARY = ["AA","BB","CC"] # 置換前
TO_ARY = ["aa","bb","cc"] # 置換後

置換前後の文字列の組が、複数あるとき、
文字列(またはファイル)をどうやって置換するの?

61 :
FROM_ARY.map(&:downcase)

62 :
anemoneについて質問
http://blog.nogizaka46.com/
このサイトのブログ画像だけanemoneで取得したいんだけど
画像が他のサイトにおいてあるからどうすればいいのかわからない
教えてください

63 :
>>57
x = a.fetch(i, x)
とか

64 :
質問です
p /a/.! # => false
p !/a/ # => true
後者の挙動が把握できません
CRuby 2.0.0, 2.1.5 で確認しています

65 :
前者はBoolean negateで、
後者は$_とのマッチを取っている。
$_ = 'a'
p !/a/ #=> false

66 :
http://docs.ruby-lang.org/ja/2.2.0/method/Regexp/i/=7e.html

67 :
>>65-66
おお、なるほど。ありがとうございます
警告が出なかったのではなんででしょうね

68 :
独学なんで聞くのだけど
ユニットテストってどんな時に使うのかな

もちろん想定外の挙動を認識するためだとは思うのだけど
工程の流れ的にどんな時に、どのように用いのだろう。

69 :
テスト駆動開発では、
コーディングとユニットテストは、同時に行う

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

Coberturaでコードカバレッジを測定する。
命令網羅(C0)100%・分岐網羅(C1)90%以上かどうかをチェック

70 :
>>60-61
もっと一般的な話で、置換表のようなファイルに、
(置換前, 置換後)のような文字列の組が、
複数定義してあって、それを配列に読み込むと、

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

この置換表を使って、
文字列(またはファイル)をどうやって置換するの?

71 :
s.gsub!(Regexp.union(*FROM_ARY), FROM_ARY.zip(TO_ARY).to_h)

72 :
>>60の内容でそこまで察しろと言うのも酷な話だな

73 :
FROM_ARY.zip(TO_ARY) do |sFROM, sTO|

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

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

>>71
Regexp.union(配列)は、
配列中のどれかの要素と一致したら、
という意味だから、漏れの想定とは違う

74 :
>>70
そんなもんHashでやれよ。
ゴルフのネタでも提供してるつもりなのか。おまいは。

75 :
想定が違うだのなんだの後から条件小出しにされたんじゃかなわんわ

76 :
>>58 >>59 >>63
ありがとうございます。
fetch 試してみます、使ったことないです。

77 :
>>35
その手順で読んでみたけど理解出来た気がしなかった

78 :
先生、RubyでGUIって作れますか?

79 :
webをguiと認識するなら出来るんじゃないの

80 :
webをguiと認識するってどういうことっすか?
プログラミングのスーパー初心者の僕にわかりやすくおしえてくだせえ…

81 :
>>80
そういう奴はGUI自体が分かってないから、何言っても無駄

82 :
コマンドプロンプトからテキスト落として読んでるやつなんて少数だろ

83 :
>>81
そう言わずに、兄さぁぁん!!

84 :
よっしゃ、俺が教えたる

85 :
はよ

86 :
まずMVCはわかるよな?

87 :
>>77
繰り返し読むと、最初は20Hかかっていたのが、
次には10Hで読める

まあ、2,3回読めばよいと思う

88 :
んだ、繰り返し読むことは大事

89 :
>>78
どれがいいかは知らない

Rubyist Magazine - Ruby de GUI
http://magazine.rubyist.net/?0001-RubyGUI

90 :
>>先生、分りません。
プログラミング始めたばかりです。
GUIつくるとかレベル高杉ますか?

91 :
>>89
ありがとうございます!
ちょい読んでみる!

92 :
htmlとCSS、eruby覚えた方が
使いまわし効くと思うけどね

93 :
下のマージソートを真似してやると成功するんだけど、ちょっと理解できない・・・
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

94 :
具体例考えてみれば納得行くんじゃない。

95 :
再帰で結果待ちのe.mergesortに整列されたのが帰ってきて
それがa,bに渡されて整列されていくのかな

96 :
再帰は理解するのが難しいから、

図や表に描いて、一つずつ考える

97 :
最小まで分割されて整列されたのがresとしてどんどん帰ってきてゴニョゴニョ

98 :
8.6秒バズーカ「ラッスンゴレライの振り付けですけど、戦火があるんですよ、前に。よけるんです。熱いの嫌やと」 [586999347]
ttp://maguro.2ch・sc/test/read.cgi/poverty/1427532738/
> 6:18〜「南京の」←うっかり言い間違いかける、女の子達は意味不明でだんまり

> 53 名前:番組の途中ですがアフィサイトへの\(^o^)/です[] 投稿日:2015/03/29(日) 14:00:01.90 ID:RpK1u1Kg0.net
>   >> 37
>   これ、長崎のこれも加えないと
>  ttp://www.kantei.go.jp/jp/koizumiphoto/2001/08/images/09nagasaki1.jpg
>  これと広島の原爆の子を合わせたのがこいつらのポスターって、
>  8.6秒という一見イミフなネーミングと合わせると、ガチだったんだと戦慄したわ
>  ttp://www.hiroshima-navi.or.jp/sightseeing/assets_c/2012/11/genbakunoko-thumb-355x266-13229.jpg
>  ttp://pbs.twimg.com/media/CAtrv5YUkAAuDli.jpg

99 :
配列の1要素だけ別名を付けることってできないでしょうか?
例えば、$a[1]を$bという名前で扱いたいです。
$bに変更をかけると$a[1]も変更される、aliasのような扱いが望ましいのですが、
alias $b $a[1] と書くとエラーが出てしまいます。
どなたかご教授くださいますようお願いいたします。

100 :
できない

101 :
>>99
条件付きでできる
配列の要素に別名を付けるというわけではなく
配列の要素であるオブジェクトを別の変数名でも参照するようにする(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]]

102 :
hashじゃダメなん

103 :
そういう扱いにして解決したい問題は何?

104 :
クラスでラップすればええんやで

105 :
横だけど、クラスでラップってどういうこと??

106 :
(共通語訳)クラスメイトみんなでラップミュージックを歌えばよいのですよ

107 :
皆様ありがとうございます。

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

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

>>101、103、その他ご検討いただいた皆様。
ありがとうございました。
ご意見は手法のひとつとして参考にさせていただきましたが、
今回Ruby初心者の私が安全に実装できるかは少し疑問だったので
結局、hashでの管理に落ち着くことにいたしました。

108 :
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、名前空間などは無いの?

109 :
<<

110 :
>>108
モジュールや関数もファーストクラスオブジェクトなんだから変数に代入すれば別名になる
もしくは関数ならaliasやalias_methodで別名を付けられる

オブジェクトチェーンって言ってるのと名前空間は別な気がするが・・・
オブジェクトチェーンって言ってるやつはネストした構造体でしょ?Rubyはもちろん大体どの言語でもできるのでは
Rubyで名前空間っていうならModuleやClass内Classかな

111 :
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/

112 :
よく知らんのだけどマイコンをノートPCに近づけたとして
ノートPCと比べて何が嬉しいもの?
マイコンは小ささが大きな利点だと思ってたんだけど違うのか

113 :
作るのが楽しいんだよ

114 :
取り外ししながらイジる遊びでしょ
PCの前だけで完結する訳じゃないから
出先で稼働チェック、バグ発見できるじゃないの

115 :
配列にメソッドを入れて呼び出す書き方を教えて下さい。


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

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

eval を使えばできましたが遅くなりそうです。
他の方法はありますでしょうか

116 :
[:aa0,:aa1].each{|i|send i}

117 :
>>116
ありがとうございます。
send(:メソッド名)でできました。
ぐぐったら method(変数).call という方法もありました。
どれもマニュアル本にのっていなかった。

118 :
sendメソッドの存在は、3冊目に“メタプログラミングRuby”呼んで始めて知ったわ
たのしいRubyにもパーフェクトRubyにも無かったのに…
便利だからもっと布教して欲しいな

119 :
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]みたいな感じで返ってくると思うんだけど
なんでだろ?

120 :
これで何も返ってこないのは確かにおかしいですね
最低でもrow=""くらいは出力されそうですが…
コンソールの故障ではないでしょうか?

121 :
すみません
row =
これは返ってきます

122 :
DBIって知らないけど、rowのクラスのto_sを調べてみたら?

123 :
>>119だけどto_sとか調べてみてもよくわからないし諦める
答えてくれた人ありがとう

124 :
.class か .inspectだとどうなるんでしょうか

125 :
to_sとinspectの出力が違うんでしょ。

126 :
え、いや出力してる対象がそもそも違いますし

127 :
p row

なら、配列の中身を表示してくれる

128 :
rowがArrayならそうだけど118の場合はそうじゃない
DBI::Rowのto_sがnilか何かを返すから何も表示されなく見えるんでしょう

129 :
(0..9).to_a + ('A'..'Z').to_a

これもっと短くかけない?

130 :
[*0..9,*?A..?Z]

131 :
>>130
ありがとう。

これなんて言葉でググったら出てくるのかさっぱりわからんw

132 :
あぁ、なるほど。配列を引数に展開するあれと一緒なわけか?

133 :
YES
splat展開とか*をsplat演算子とかいう

134 :
>>130
?
syntax error

135 :
さして短いように感じないけどw

136 :
>>135ゴルファー解答は任せた

137 :
>>133
一生に三回くらいしか使わなさそうだからいいや
うっかり使ってしまうと5年後、自分で読めなくなりそう

使った方がいい人もいるのだろうが

138 :
>>137
そうか?結構使うぞ

139 :
以下のような文字列で人名部分のみ正規表現でマッチさせるには
どのように記述すればよろしいのでしょうか?

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

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

よろしくお願いします。

140 :
もっと上手い方法があるかもしれないが。

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

[]の中の日本語は用途に合わせて
\p{Han}\p{Hiragana}\p{Katakana} なり
[亜-熙ぁ-んァ-ヶ] なり適宜入れ替えてくれ。

141 :
名前に半角数字が含まれないならこっちの方が良いかも。

/(?!_)[\D]*[^_\d]/

142 :
連投すまん。こっちの方が意味が明瞭で良いと思う。

/(?!_)[_日本語]+(?<!_)/
/(?!_)\D+(?<!_)/

143 :
正規表現で、\r\n と \r と \n を
同一視してくれるメタキャラクタってないですよね・・・?

144 :
>>142
マッチできました!

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

ありがとうございました!

145 :
railsで今一番おススメの書籍はどれですかね?

146 :
>>143
出来なければ、universal_newline で、

\r, \r\nを、\nに置き換えたら?

147 :
逆引きレシピ(2009)は今のバージョンでも役に立ちますか?

148 :
>>146
そうも行かんのよ。

なぜなら、hogehoge(\r|\n|\r\n) のhogehogeを置き換えたいが、
それ以外の\r, \n, \r\n はそのままにしておきたいから。

149 :
a = ['a','b','c']
a.values_at(* a.each_index.select {|i| i.even?})

配列の要素のうち、インデックス番号が奇数のものだけ取り出したいとき、
うえのようにすればよいみたいだ、というのはわかったのですが、
この values_at(* ... )の "*" はどういう処理を行っているのでしょうか

150 :
すいません>>130とかで出てました。。。こういうのggるときはどうすればよいんだろ

151 :
ruby * array
ruby * 引数
ruby 記号
などで検索する

* は余りとか、配列にまとめて扱う、
数のわからない引数リスト

152 :
ruby でネットワークのお勉強したいです。
オススメの教科書ありますか?

153 :
appleという文字列の文字と文字の間にカンマを挿入して
それを全て表示するにはどういう処理を書けばいいんだろ?
具体的には
a,pple
ap,ple
app,le
appl,e
apple,
みたいな感じにしたい

154 :
str[0...i] + "," + str[i..-1]
でstrのi番目にカンマを挿入した文字列になる

155 :
>>154
説明不足だったごめん
それはわかる
俺の知識だとこれを全部表示したいときに

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

みたいにしか書けなくてこれだと面倒だし汎用性低いから
うまく繰り返しの処理使って書けないかなと

156 :
>>154
を使って書くと、

str = 'apple'

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

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

[0..-1], [0..-2]ではなく、[i..-1]だよ

157 :
>>156
ありがとう

ここにでてくるメソッドとか構文は全部知ってたし
コード読めば理解できるんだけど、自分では全く
思いつかなかった
どうしたら思いつくように、というか自分でコードが書けるように
なるんだろう
コツとか勉強法とかあったら教えて欲しい

158 :
str[0...i] + "," + str[i..-1]がわかって、それを繰り返す術がわからないとなると
コードを書く経験が圧倒的に不足しているんじゃない

159 :
>>157
forとifとwhileでかなりのことはできるから、まずそれを思い通りに使えるようにする

160 :
>>158,158
なるほど、たしかにコードはあまり書いてないし
whileとかもちゃんと理解してないな...

アドバイスありがとう
参考にさせてもらいます

161 :
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]

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

特に再帰では、表にしないと理解できないよ

162 :
>>153
https://ideone.com/6LVi8s

163 :
puts "apple".gsub(/\G./, "\\`\\&,\\'|").split("|")

164 :
文字列にもeach使えるんだな
iを見ると何故か反射的にtimesが思い浮かんでしまう

165 :
>>163
\G なんて使ったことない
処理速度的にも each などを使うより速いのでしょうか

166 :
\Gなんてリファレンスマニュアルに記載がないものを使わないでいただけますか

167 :
確かにリファレンスマニュアルには載ってない
oniguruma or onigmo の機能なら書いてないけど使えるってことなのかな
柔軟な発想ですごいなあ
まあ実際にコードかくなら155で十分な気がするけど

168 :
http://peace.2ch.sc/test/read.cgi/tech/1418430552/80
> [ プログラム ] Ruby 初心者スレッド Part 56©2ch.sc
> 80 名前:デフォルトの名無しさん [sage]: 2014/12/28(日) 19:00:20.64 ID:EhJlAFnh (2)
> \Gなんて使ってるのは見たことないんですがどういう時に使うものなのか何かサンプルはありませんか?


http://peace.2ch.sc/test/read.cgi/tech/1418430552/81
> [ プログラム ] Ruby 初心者スレッド Part 56©2ch.sc
> 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

169 :
載ってたわ。メンゴ
tp://docs.ruby-lang.org/ja/1.8.7/doc/spec=2fregexp.html#regexp

170 :
一歩遅かった…

171 :
すまん載ってたのか
なんで1.9.3マニュアルからは消えたんだろう?
それとも自分が見つけれてないだけで載ってる?

172 :
>>168で引用された者だが、そのレスをした時点では(そして今も)1.8.7にしかなかったよ

173 :
>>171
利用者が少ないので、そのうち機能削除と推定

174 :
利用者と言う観測しがたい対象の多寡で機能の有無は決まるのか?

175 :
Ruby-Doc.orgの方には明記されてるのが興味深い

176 :
erbで画像を表示する方法を教えてください
ファイル名をfoo.erbとして以下のプログラムを
書いたのですがうまく表示されません
<html>
<head>
<title>foo</title>
</head>
<body>
<% a = rand 5 %>
<%= <img src="#{a}.jpg"> %>
</body>
</html>

177 :
>>176
<img src=<%= "\"#{a}.jpg\"" %>>

178 :
>>177
できました!
ありがとうございます!

179 :
http://www.r-labs.org/projects/r-labs/wiki/
 └プラグインインターナル

Redmineにて、上の「Redmine の本体機能のオーバーロード」をviewsで行いたいと思ってます
そこで複数のプラグインでの同一viewのオーバーロードを試したら
どうもプラグイン名のアルファベットが後のものが優先される気がするのですが、
若いものを優先させる方法はないでしょうか?

180 :
数独を解くプログラムをrubyで簡単に作れますか?

181 :
総当りでいいなら簡単

182 :
>>180
ちょうど数ヶ月前に作ったことがあるけど簡単にできるよ

183 :
rubyじゃなくてもほぼ全ての言語で作れるな

184 :
どの言語が簡単なのか書かないと意味がないような

185 :
http://www.lifehacker.jp/2015/04/150427slush_asia_linda_liukas.html
プログラミングは画用紙とクレヨンと同じ:『Hello Ruby』の著者が語る成長の物語 #SlushAsia
Lifehacker

186 :
>>181
総当たり式だと、他に解が無いか(複数解)の確認が必要になり、
かえって複雑になるような気がする。

187 :
んなこたーない

188 :
結構複雑な解法アルゴリズムは背理法より時間かかったから適度に適用するのが良い
解の一意性を仮定するかどうかでも多少変わってくるが

189 :
数独ぐらいだったら全パターンのデータベースを作っておいて照会するのが一番早いよな
おもしろくないけどw

190 :
数独の全パターンを網羅するデータベースって

191 :
対象性を考慮したとしてもデータベース照会が速いとは思えない

192 :
9^81件のデータベース…

193 :
>>192
解のある場合だけだとそんなに多くない
行や列や数字の入れ替え、回転、裏返し操作で同じ物を除くと更に減る
どれくらいになるかは面白そうだけどrubyではなく、数学の問題かな

194 :
確か数独の解答パターンは60000通りぐらいだと聞いたことがある
それなら十分パターン照会の方が早いかな
まぁそこまでやるならRubyにこだわる必要性は皆無だけど

195 :
ふつうに解く方法考えなよ・・・
万が一パターン漏れてたらどうすんの

196 :
あと、ヒューリスティックに解くプログラムも昔組んだことがあるけど、そんな難しくはなかったね
RCCはちょっと計算時間を要するけど、それ以外は大した計算時間も必要なかったし
(枝刈りはちゃんとやらないと計算量が爆発するけど)

197 :
>>195
そういうパターンを数え上げるのはコンピュータの得意とするところでしょ
枝刈りをきちんとやれば現実的な時間で数え上げられるよ

198 :
>>194
互いに影響を受けずに独立に値を決められるマスが9マスあるから少なくとも9^9通り以上だろう。

199 :
http://homepage3.nifty.com/imura/23sudoku/sudokuS/sudokuS.html
並べ替え・反転・回転・数字の入れ替えを考慮して5472730538通りだそうだ
データベース作れなくはないな

200 :
こういう場合のデータベースってどんな設計にするの?
キーにできる値って何になるのか

201 :
数字の入れ替えありだと検索も一筋縄ではいかんな。
盤面をマス間の同値関係で表現してビットマップインデックスでも使うか。

202 :
>>200
{x,y,n} を key とするlookupテーブルを用意すればいいんじゃないの?

203 :
x,y,nって座標とマスの値ってこと?
1マスだけ指定して何が取れるテーブルにするの?

204 :
>>203
解答パターンIDみたいなもんじゃない?
複数のx,y,nをANDでつないでいけばパターンIDがひとつに絞り込める、みたいな

205 :
凡人の俺には回答の数値を左上から順番に9 * 9 = 81列のデータベースに入れる方法しか思いつかないんだけどダメなのか

206 :
>>205
それでもいいんじゃない?
計算量的にはどちらでも同じになりそうな気がするし

207 :
>>205
数字の入れ替えで得られるものは本質的に同じなので、データベース上の局面はすべて1行目が123456789となってる可能性もある
入れ替えと回転・反転だけなら総当りで、どれがデータベースに登録されてるか調べることはできそうだけど
リンク先を見ると総局面はユニークな局面の1兆倍ほどだから、どの局面として登録されてるかを判断するのも一苦労

208 :
こういう問題があったとして

 ABCD
a1 2
b   3

d 2

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

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

単純にやろうとすると81*(81-1)/2=3240個のフィールドが必要になるけど。

209 :
なるほど
後は対称な局面を調べればいいだけか

210 :
>>207
これで言おうとしてる事って、完成状態から9種の数字の個々を入れ替えても同様に完成状態として成立するって事かな?
データベースとしては1行目を一般化してa〜iという記号で固定しておけば件数かなり減りそうだ
反転とかあるから1/9!とまではいかないけど数桁削れそう

211 :
最近勉強始めたんだけどProcクラスってなんて発音してるの

212 :
ぷろっく

213 :
「ふろく」は無いのか

214 :
>>211
読まない、見るだけが8割
プロック
心に余裕がある時はプロセジャー

215 :
もしかしてプロシージャ?

216 :
プロシジャーじゃない?

217 :
>>215 >>216 >>217
つ ttp://www.merriam-webster.com/dictionary/procedure
ということで、日本語からカタカナ表記がすべて無くなればいいと思います。

218 :
カタカナ表記が無くなって皆が正確な発音を覚えるならいいけど
結局英語を見ても適当に発音して混乱するしなあ
どうなるのが良いんだろう?

>>217
発音記号だけ見るとプロセヤーに見えてしまう そこの発音記号間違ってない?

219 :
nullは正しくはナルと発音するけど日本でナルって言っても通じない
一人だけ正しい発音してもねー

220 :
pingも泣く泣くピングと言ってる。

221 :
>>218
IPA準拠でない発音記号は数多くある。
というか英単語の発音でIPA準拠しているものに遭遇した記憶がない

222 :
欧米人自体ラテン文字綴りは、自国語のルールで読んでると聞いたが。
日本人ならラテン文字綴りを全部訓令式ローマ字読むようなもん。
コンピュータ言語の予約語とかは違うかも知れないけど。

223 :
×コンピュータ言語
◯プログラミング言語

224 :
どの言語にも異音があるからIPAじゃなくて音素で表現するのが普通だよね

225 :
λをlambdaと書かなければならない所にASCIIコードの悲しむべき限界がある。
まぁAPLみたいになられても困るのだが・・・

226 :
>>225
Jの立場がw

227 :
>>225
,\ をパースできるようにするパッチを送るチャンスだ!

228 :
lambdaあるんだったらblockなんて要らなくね?
関数っぽいのに()で呼べないのおかしくね?
とか考え出すとscalaやC#に近づいていってしまう。

229 :
あげ

230 :
node-webkitみたいな感じでSinatraで書いたウェブアプリをデスクトップアプリみたいに動かしたいんだがそういうライブラリとかあらぬ?

231 :
複数行の文字列をソースに入力する場合にヒアドキュメントを使う意味ってなんですか?
ダブルクォーテーションやシングルクォーテーションでも改行含んでいても普通に文字列作れますが

232 :
あと配列やハッシュを作るときに要素ごとにコンマを打つのがすごくめんどくさいんですけど
改行で要素を分ける仕様じゃダメだったんですか?

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

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

でいいんじゃないかということです。
一行で書くならもちろん必要ですが、改行で要素が分かれていることは自明なわけで。

233 :
俺俺言語作れや

234 :
>>231
ヒアドキュメントだと最初の行をその行じゃなく次の行の行頭から書けるという違いはある

>>232
JSONやYAMLとかほかの言語とかとあえて違う記述を可能にする理由が無かったんでしょ
それに個人的な感想としてはブロックみたいな雰囲気を出してるからそのままだと最後の行の値を返しそうにも見える

235 :
C言語以来多くの言語では文字列リテラルは改行を含む空白で
区切られていても一つのリテラルにまとめられることになっている

[
"aaa"
"bbb"
"ccc"
]

ruby でも ["aaabbbccc"] として扱われるわけであるが、
自分はこちらの挙動のほうがしっくり来る。

236 :
>>231
ヒアドキュメントはうっかり閉じてしまう確率が格段に低い。

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

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

積極的に推し進める人がいないので話が進んでないみたいだけど
強い反対もなさそうなのでそのうち採用されるのかもね

237 :
その程度の内容であればパーサ書いて自分だけ使っとけ
面倒に感じるほど配列をソース中に埋め込まなければならない
設計なんか見たら俺はリジェクトする

238 :
>>236
さすがにうっかり閉じてしまうようなケースはエディタのハイライトで気づけると思うが…
それすらできないようなエディタは窓からポイーだろうし

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

なのでそんな違いはないので好きな方を使っとけ、ってのが結論じゃないかと

239 :
>>232
%W(aaa bbb ccc)

240 :
文字列リテラルの間が空白類だと連結された一つの文字列になるんじゃなかったっけ?
空白類は改行も含む

241 :
>>231
>>232

ary = <<EOT.split
aaa
bbb
ccc
EOT

みたいに書けることは意外に知られていない気がする

242 :
>>238
いちいちエスケープするの面倒だろ
ほぼそのまま書けるのがヒアドキュメントのメリット

243 :
>>242
%記法ってのもあるんですが…

244 :
PCを買い替えたのでrubyの環境構築していたのですが
Ruby2.2.2 にてbyebugのgemインストールにてdevkit入れろとエラーがでてしまいます
2.2系のDevkitが探しても無いようなのですが
まだないということでしょうか?

245 :
>244
こんなとこに書き込む暇があったら試せよ

246 :
>>244
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でもいけるんじゃない?

247 :
>245
ダウンロードページを少し読めばすぐ分かるようなことを簡単に教えちゃダメだって…。
初心者スレとはいえ、ここの住人は優しすぎると思うよ。

248 :
安価間違えたカコワルイ

249 :
保守

250 :
>>247

>>245は教えてないじゃん
初心者スレだと、installするのがやっとで、何日もかけて何とか成功する人もいるので。

251 :
安価間違えたって書いてるでしょ。

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

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

ないしは、gemがきちんと整備されてる1.9系をまず使うように案内するとか。

252 :
1.9以降はみんなgithubで好き勝手に作ってて整備なんかされてない気がする

253 :
Rubyのリファレンスなどに出てくる「::」が何を表しているのかよくわかりません
例えばNokogiri::XML::NodeSetというのは何を表しているのですか?
親子関係なのかメソッド呼び出しによる返り値からさらにメソッドを呼び出してるのか……
::は一体なんなのですか?調べてもしっくりするものが出てきません
PHPであれば::はstaticのメソッドやプロパティにアクセスするための記号だなぁとわかるのですが。
手元にある「たのしいRuby」には「.」と「::」同じ意味と書いてありましたがどうもライブラリのリファレンスなどでは::と.を使い分けてるように感じます

254 :
>>253
http://melborne.github.io/2013/09/24/rubys-scope/

255 :
>>254
リンクありがとうございます
すごくわかりやすいです。助かりました感謝致します。

256 :
Rakeでファイルがローカルにすでにあればそれを使って
なければwgetするタスクってないのん?

257 :
rake単体でできない事もないがBundlerを使った方が簡単だろう

258 :
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半年前に全部見た程度です。

259 :
curb関係ない
"$()"が"$(")になってる
コマンドプロンプトで"$()"はおそらく使えない
curlで得たHTMLをRubyでevalする意味が分からない

260 :
とりあえずダブルクォーテーションの対応おかしくね

261 :
なんでって、そうなるように書かれたから

262 :
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?

263 :
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?

264 :
Yes.

265 :
p '! 1 2 3'.scan(/(!)(\s\d)+/)

[['!', ' 1', ' 2', ' 3']]
ではなく
[['!', ' 3']]
になるのはなんで?

266 :
!と連続してるから当然だろ。
p '! 1 2 3'.scan(/\s?[!\d]/)

267 :
テスト
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"]

268 :
'! 1 2 3'.scan(/(!)(\s\d)(\s\d)(\s\d)/)
なら
[["!", " 1", " 2", " 3"]]
なのにね

'! 1 2 3'.scan(/(!)(\s\d){3}/)

[["!", " 3"]]

269 :
いや, キャプチャを量指定子で繰り返したらキャプチャ対象なるのはキャプチャ部分に対する最後のマッチだけだろ(正規表現の一般論として)

270 :
繰り返し何回マッチしたかによってそれ以降のキャプチャを参照する番号が変わるなんてことになったらいやすぎる

271 :
>>269
それが結論のようですね

p '1234'.scan(/(.)/) #→ [["1"],[" 2"], [" 3"], [" 4"]]
p '1234'.scan(/(.)+/) #→ [[" 4"]]

272 :
>>271
これと逆なんですけど

p "1234".slice(/./) # "1"
p "1234".slice(/.+/) # "1234"

273 :
それの何が問題なの

274 :
そりゃ逆に書いてるんだから逆になるだろ

275 :
scanとsliceを比較する意味が分らん

276 :
すいません
+があると出力が少なくなる場合と多くなる場合があったのを発見

277 :

意味不

278 :
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 を使用しています

279 :
>278
【RoR】Ruby on Rails Part19
http://kanae.2ch.sc/test/read.cgi/php/1409423461/

280 :
1 && 2がなんで1になるんでしょうか?

281 :
1 は真だから、2 は評価しない
偽は nil か false だけ

282 :
>>280
ならんぜよ
http://ideone.com/HeMIED

>>281
それは||ぜよ

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

284 :
すいません、頭がごっちゃになってたみたいです

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

x && yは、xが真ならyの値を返す仕様と理解しました

285 :
「x && y」は結果が
真の時にyを
偽の時にxを
返すみたいだね。

286 :
逆に x || y はxが真ならxの値を返す仕様です

これらの仕様はちょっとした条件分岐のイディオムとして使ったりする
多用すると糞コードだけど

287 :
&&も||も真偽が確定した時の値を返すってことだね

288 :
>>285-287
知らなかった、これから使おう

x=false
y=true

p x && y #false
p y && x #false
p x || y #true
p y || x #true

289 :
&&は、且つ。||は、または。
x && yの場合、xがnot falseなら、次にyが評価される
x || yの場合、xがfalseなら、次にyが評価される。
&&、||ともに条件式の真偽値が確定した段階で評価を終了する

290 :
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 だ。


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

・・・わかりづらいかw

291 :
長い
3行にまとめろ

292 :
話をややこしくするけど C とかだと && や || は 0 か 1 しか返さないから 1 && 2 とか 2 || 1 みたいなのも 1 になるんだよな
Ruby だとどっちも 2 になるのな

http://ideone.com/X28ve7
https://ideone.com/90E5kx

293 :
Perl 由来なんじゃない?

294 :
Perlだと open or die とかやるよね

295 :
>>293
OSSで配布されるshスクリプトを覗けばわかるけど、&&や||なんて幾らでも見かけるよ
こうい評価式に関しては、一度、schemeやelispを触ってからだと理解しやすいのかも
(and () ())
(or () ())

296 :
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>'

297 :
停止っていうのが何のかよくわからんが
['INT', 'TERM'].each{|i| Signal.trap(i){puts"Hello, world!"}}
とかじゃダメなのかな

298 :
>>297
それではサービスが稼働しっぱなしなのでよろしくないのです
やりたいのは、webrickを生かしたままで任意の時点で改造すること
弄っている最中はなるべくリクエストを受けたくないわけでして
Rubyを使わずファイヤーウォールで止める手もあるけれども……


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

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

もしや2.2はlisten portを閉じてるから、再startでaccept出来なくなってる?

299 :
自己解決 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

300 :
文字列 "abxcd(exfgxhij)klmnxoxpq" で
かっこ内のxだけ削除する簡単な記法はありまでしょうか?

これまで "("でsplitして削除し、最後にjoin("(")を していました。

301 :
文字列が"abxcd(exfgxhij)klmnxoxpq"ってあらかじめ分かってるんだから
削除済みの文字列リテラルを書けばOK。
意図が分かりずらくなりそうならコメントに # かっこ内のxだけ削除 とか書けばよい。

302 :
>>301
どう曲解したら文字列が固定になるんだよ。頭弱いのか?それとも295を煽ってるつもりか?

295の提示した条件も曖昧過ぎだけどさ。

303 :
>>300
こんな感じでどう?
str="abxcd(exfgxhij)klmnxoxpq"
puts str.gsub(/((?<=\().*(?=\)))/){|c| c.gsub(/x/,"")}

304 :
改めて読むとsplitとjoinで元に戻るということは、

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

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

・・・と思ったけど295のやり方だと、splitしたあとの"("後ろの文字列は
"exfgxhij)klmnxoxpq"
になる。これからxを消してしまうと")"の後ろのxも消えない?

305 :
>>303
その正規表現において、先読み・後読みは不要

素直に /\(.*\)/ でOK

306 :
>>305
本当だ。キャプチャするんだから必要ないですよねw

307 :
教えてください。

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

よろしくお願いします。

308 :
いや
あえて的外れな答を提示しておいて反論として正答を引き出すのが狙いだ

309 :
>>302-306
ありがとうございます。
gsub(/ /){|c| c.gsub(/x/,"")}
でトライしてみます。 そんなやり方があるのを知りませんでした。

じっさいは htmlソース中の <a ..> のカギ括弧内から
不要な要素を削り、必要な要素(たとえばhref)だけを残すすっきりした書き方がわからなかったからでした。

<a title="**" href="http://**"target="** rel="**" class='**' onmouseout="**">

>>304
>これからxを消してしまうと")"の後ろのxも消えない?
ありゃ、そうでした、バグでした。

310 :
>>309
その目的ならnokogiri を使った方がいい。

311 :
p %q(#{a+1})実行した時に、"#"の前に出力される"\"ってなぜ出力されるのですか?

irb(main):002:0> p %q(#{a+1})
"\#{a+1}"
=> "\#{a+1}"

312 :
そう出力されるようになってるからじゃない?
p
inspect

313 :
p は出力したものをそのままRubyに食わせてもいいように変換しているから(デバッグ用)

314 :
p '"'実行した時に、"の前に出力される\ってなぜ出力されるのですか?
ってのと同じこと。

315 :
>>314
p '"'の結果の\はエスケープ(?)って理解したのですが、
p '#'とした時に\が出力されないのって何でなんでしょうか?

irb(main):019:0> p '#'
"#"
=> "#"

316 :
#じゃなくて#{}などとして初めてエスケープする必要があるから

317 :
puts "#" #=> #
puts "#{1+2}" #=> 3
puts "\#{1+2}" #=> #{1+2}
これで分からない?

318 :
'#{'は'#'と'{'で別々じゃなくて、'#{'でまとめて処理すると理解しました。

irb(main):033:0> p '#{'
"\#{"
=> "\#{"

319 :
これで完全に理解しました

1. pメソッドはputsとinspectの機能を併せ持ったメソッド
2. inspectメソッドは制御文字や非アスキー文字をバックスラッシュ記法に置き換えた文字列を返すので
"#{"は"#{"に置き換わる

320 :
"#$foo", "#@foo", "#@@foo"なんかもあるけどね

321 :
ary = [1, 2, 2, 3, 4]
ary2 = Array.new

以上のようなaryって配列があったとしてここから2(数値)の位置を
ary2に入れる方法ってありますか?
ary2 << ary.find_index(2)だと1しか入りませんでした
この場合だと1,2が入っていてほしいのですが

322 :
>>321 ですが
ary.each_index.select{|i| ary[i] == 2}
で、できました

323 :
俺も昔同じ事したことある!って思って確かめてみたらずっと劣悪な方法だったww

324 :
Rubyのような無駄に電力使う言語は使うべきではない
Rubyは人類の地球の敵

325 :
と、無駄にサーバに負荷をかけているお前はより害悪

326 :
Array.selectのブロック内部でary[i]とか使いたくないな

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

人それぞれ

327 :
ちなみに>>323で言った俺バージョンはこちら。

ary.each_with_index.reduce([]){|s, i| i[0] == arg ? s << i[1] : s}

328 :
>>321 をみて、最初に思いついたやつ
ary.each_with_index.select{|a,b| a==2}.map(&:last)

329 :
utf8が\nnnの8進数エスケープに変換されてしまっている時に
お手軽に元のutf8に戻すやり方はありますか?

330 :
pythonだと
.decode('string_escape')
でできるみたいなんですが
rubyだとstring_escapeがないみたいです

331 :
pack/unpackじゃね

332 :
gsub(/(\\\d{3})+/){|str| str.force_encoding("UTF-8").scrub}
みたいな感じでできることはできるんですが
irbで直接入力したら表示できるので
eval使ったりしてシンプルにならないかなぁと

333 :
ソースを書き換えたいの?

334 :
>>332
> '\343\201\273\343\201\222'
=> "\\343\\201\\273\\343\\201\\222"
> eval '"' + '\343\201\273\343\201\222' + '"'
=> "ほげ"

335 :
すいません、書き方悪かったです
irb上で"\nnn"表記の文字列を評価すると
正しく日本語表示できるので
上に書いたみたいな直接的なやり方でなくて
eval使えないかなと思った次第です

336 :
意味が分らん

337 :
解決しました
普通にpなりputsなりするだけでokでした

338 :
x 書き方悪かった
o 頭が悪かった

339 :
できたと思ったらできてませんでした
結局、以下のような感じで無理やりやってます
str.gsub(/((\\\d{3})+)/) do
$1[1..-1].split("\\").map{|b| b.to_i(8)}.pack("C*").force_encoding("UTF-8").scrub
end
賢い方にシンプルな方法を教えていただけると嬉しいです

340 :
str='A \343\201\202'
puts str

str.gsub!(/\\([0-7]{3})/){ [$1.to_i(8)].pack("C")}
puts str
とか?

341 :
>>340
ありがとうございます!
なんか無駄なことしてますね、自分
文字数制限で途中のバイトで切れてしまうことがあるので
force_encoding('UTF-8').scrub
つけてバッチリです

342 :
t = Thread.new {p "test"}
で"test"と表示されないのですが、なぜでしょうか?

t = Thread.new {p "test"}
t.join
だと"test"と表示されます。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


343 :
メインスレッドが終わったらプロセスも終わるから

344 :
理解しました、ありがとうございます。

345 :
>>280-295
Pythonでもそうだけど、A && B, A || B は、
先にAを評価して、答えが決まれば、Bを評価しない短絡評価

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

C() && D() のような関数(メソッド)の場合には、
後のD()が、実行されるかされないのか、
一目でわからないため、バグを生みやすく、
こういう書き方は推奨されない

346 :
> C() && D() のような関数(メソッド)の場合には、
> 後のD()が、実行されるかされないのか、
> 一目でわからないため
わかるよ…w

347 :
>>345
推奨されないって、何かのガイド?
それとも君の感じた雰囲気?
今時、短絡評価すら理解してないプログラマ向けの事まで気にしながら書くんじゃあ、COBOL並の表現力しか無くなるだろ。

348 :
>>345
なぜ関数なら一目でわからず変数なら一目で分かるの?

349 :
あんまりいじめるなよ

350 :
変数なら一目でわかるから問題ないのではなく、変数なら一目でわからなくても構わないから問題ないということでしょ

351 :
そんなこと
内部状態を変更するメソッドと
真偽判定するためだけの関数を
見てすぐ判るようにしておけばいい
そのために Ruby は ! を選んだ

352 :
だからさ、関数に副作用があろうが短絡評価に何の影響もないでしょ
内部状態を変更しようが返り値がわかればいいんだから

353 :
デフォルト値を代入するイディオムとか君使ってないの?

そもそもrubyでメソッドっていうと
内部状態を変更する意図の全くないアクセサとかさえも
メソッドなんだけど?

354 :
話が噛み合っていない人が混ざると全てがカオスに見えてくる

355 :
おまいら忘れてるかも知れないが、ここは初心者スレだぜ。
その程度のドカタであるおまいらに向けて、337さんが、テストも書かずにカスみたいなバグを量産してで同僚を困らせるなよ。
と忠告してあげてるんだ。
ありがたく聞きなさい。

356 :
>>351
驚き最小の原則のためにビックリマークを増やした訳か

357 :
そして、ビックリマークがついてるのに内部状態が変わっていない!
ビックリマークがついてないのに内部状態が変わってる!

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


そんなルールを作る前に、ビックリマークがついている時だけ
内部状態が変わるような仕組みを言語自体に搭載しろよ・・・。

358 :
>>357
自分は経験無いんだけど、参考までに具体例が出せれば教えてください。

359 :
String#clearとかいくらでもあるだろうに

360 :
http://qiita.com/tadsan/items/7baab2605a4d8ac1858e
> みなさまだいすきな Ruby on Rails さんは「!は破壊的」なんて虚構の原則にはまるっきり従ってません。

ワロタw

361 :
定期的にこの話題になるな

362 :
Railsはメソッドどころか言語体系を破壊しているな

363 :
>>359
いわれればそうだな
出力のないメソド
他動詞と自動詞

364 :
hashメソッドで取得した値は何に使うんでしょうか?
(何か使い道ってありますか?)

irb(main):001:0> "string".hash
=> 1997604647

365 :
>>364
文字列の比較を何度も行うときは
hashで比較して一致するときだけ文字列でもう一度比較

366 :
ruby3.0出たら本気出す

367 :
ruby 2.1.6p336 (2015-04-13 revision 50298) [x64-mingw32]
win7 64
を使用しています

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

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

よろしくおねがいします。

368 :
nokogiriはutf8だろうから、sjisに変換すればいいんじゃないかな
と何も調べずに書いてみる

369 :
逆にコマンドプロンプトを、UTF-8に出来ないのか?


それか、コマンドプロンプトに出力せずに、
ファイルに出力するとか

370 :
スレチかも知れんがコマンドプロンプトなら
「chcp 932」でsjisへ
「chcp 65001」でutf8へ
文字コードを変更できるよ。

371 :
chcp 65001 バグがあって
右端まで表示するとボロボロになるんだよなー

372 :
comspecをpowershellに変更する(超適当)

373 :
powershell または、powershell_ise は、

.NET環境だけど、Rubyも動くの?

374 :
>>367
cygwinを使えばいいんじゃね?

375 :
ruby 2.2.2を使っている状態で
$ bundle install --path vendor/bundle
すると、vendor/bundle/ruby/2.2.0
が作られるんだけど、なんで2.2.0なの?
Gemfileにrubyのバージョンは指定していない

376 :
最後の0はワイルドカードみたいなもの

377 :
d

378 :
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入門をそのまま試してみた感じです)

379 :
ruby 2.1.6 でやったらいけた
んー

380 :
bundler gem GEM [OPTIONS]
の、オプションの仕様が書かれてるサイトを教えてくれ。
1.10系のドキュメントはこれしか見つからない。
http://bundler.io/v1.10/man/gemfile.5.html

381 :
bunder のソースコードを嫁!

382 :
質問なのですが
配列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 でできそうなんですがそれ以降の書き方が分からないので教えて下さい
よろしくお願いします

383 :
>>382
a.product(b).map{|item| item.inject(:+)}

こんなかんじ?

384 :
計算したいだけならproductに直接ブロック渡せる
https://ideone.com/ihpSvW

回答者が求めていたのはこういう感じのコードな気がする
http://ideone.com/1bx9cp

385 :
回答者じゃなくて質問者ね

386 :
>>384
求めていたのはまさしくその下のプログラムです
しかしプロダクトも勉強してみます
ありがとうございました

387 :
関数型プログラミングが流行りだからね
product使う方がこれからの中心になっていくのかな

388 :
わざわざ、method用意されてるのに、eachで回す意味がわかんない

389 :
何をするかじゃなくて何ができるかが問題
組み合わせは列挙出来たけど二重ループは書けませんじゃ困る

390 :
ちょっと何言ってるのかわかんないです

391 :
そりゃ、ソースコードが少ない方が、バグが少ないから、
関数が使えるなら、それを使えばよい

逆に、異なるバージョンなどで、
使えないなら、自作すればよい

392 :
自作もできないうちはバグなんてどうでもいいでしょ

393 :
荒らす気はないんだけど、Rspecの書き方なんかわからずに
ソース探すのに疲れて、rubyMine買うと決めたんだけど、
参考までに、皆 pryで調べてるんですか?

394 :
やべえ、3回読み返したけど、さっぱり分からんw
解読班はよ

395 :
>>393
rspec の記法はちゃんとドキュメントあるから、RubyMine 使わなくても大丈夫だ。
github とかにホスティングされてるgemのspec を読むのが手っ取り早い。

396 :
>>395
ありがとうございます。すごく丁寧に書かれてました。

397 :
ruby xxx.rb でエラーが出て
ruby -U xxx.rb でエラーが出なくなるコードがあるのですが、
このオプション-Uに関する記述はどこにあるのでしょうか

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2frubycmd.html#cmd_option
にも-Uの記述が全く有りません。

398 :
>>397
man ruby

399 :
単純にリファレンスがメンテしきれてないだけでしょうね
manには書いてあるね
Sets the default value for internal encodings (Encoding.default_internal) to UTF-8.
だそうな

400 :
保守

401 :
rubyからTeraTermを制御(逐次入力、出力結果取得)したいんですが、どうやれば。
出力結果は最悪TeraTermでログ出力したファイルを読み込むのでもかまいません。

Open3.popen3を使う? でもこれって標準入力閉じずに標準出力取得できないと聞きました。
TeraTerm出力結果をもとにruby側で判断、TeraTermに再度入力したいのです。

402 :
TeraTermいらね

403 :
puttyじゃいかんのか?

404 :
複数人にTeraTermがインストールされている状況なのでTeraTermが望ましいですが、
PuTTyでもかまいません。

405 :
先輩方、お世話になります。

Ruby 2.0.0.481
Windows8.1
であります。

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

つまり、エディタでから数値データを取り出して、計算して、返す、という動きであります。

406 :
なんのエディタかによるがたとえばEmacsやJEDなら可能
テキストエディタのバッファの中身を読み書きするメソッドが用意されてるかどうかによる

407 :
windowsならxyzzyで簡単にできるよ

408 :
>>406,396
どうもです。
エディタによるんですね。
すると、いきなり、ノートパッドでやるなんてのは無茶ということですね。

409 :
あるアプリと別のアプリ(スクリプト)を連携させる場合、AutoHotKey使うと便利

{Home}+{END}^c
でカレント行をコピーしてからRubyスクリプト起動してあれこれ計算して
クリップボードにコピーしてから
^vで結果を書き戻すというのも可能

410 :
スクリプトが動いている間自分は操作できないとか
動作が重くなるとタイミングがずれて芋づる式に変な操作してしまうとか

AutoHotKeyってそうはならない?

411 :
そういう時私ならほっときーますね。

412 :
AutoHotkeyは力技過ぎて最終手段だなあ
使い所を間違えなければいいツールだとは思うが

413 :
>>408
win32ole

414 :
>401
net-ssh gemとか標準のtelnetじゃだめなの?

415 :
>>414
おーこれでなんとかやれそうです。
外部ツールに頼らないでやればよかったんですね。
対象機器はtelnet接続は許可されていないのでsshでやってみます。
net-sshはdl/*を使っているので2.2.xでは使えないようで…ひとまずRubyのバージョン落としてみます。
先に進めそうです。ありがとうございました。

416 :
なんと、そういうことだったのか…w

417 :
390です。

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

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

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

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

※ サーバ上で、gdbでa.outを動かしているプロセスは居ました。(別口でサーバにログイン、"ps -ef"で確認)

418 :
あああコメントアウト外すの忘れてました
Net::SSH.start 〜 の行はコメントアウトしていないものとして見てください。すいません。

419 :
たびたび申し訳ありません。390=406です。
サーバ再起動させたあとはうまく動きました…。何かゴミプロセスが残っていたのかもしれません。
強制終了させてもプロセスきちんと片付けるような修正を加えようと思います。
今後はもう少し色々試してから聞くようにします…連投失礼しました。

420 :
質問です。

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同様の結果が欲しい場合どのように記述したらよいでしょうか?

421 :
409です。
以下の記述でできました。

require 'bigdecimal'
puts (BigDecimal("1.0") - BigDecimal("0.92")).to_f

422 :
環境に関わらず統一したいならRational使うしかないんじゃないの

423 :
>>422
Rationalは2.1以上じゃなかったっけ?

424 :
じゃあNationalは?

425 :
>>423
1 + 1/3rみたいなことはできないけど、あるよー
ttp://docs.ruby-lang.org/ja/1.8.7/class/Rational.html

426 :
Ruby Tools for Visual Studio 2015マダー

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

428 :
まちがい
×記述したrbファイルで開いてから

○記述したrbファイルを開いてから

429 :
>>427
エスパーするとeval

430 :
メソッド定義を
class Hello
end
でくるめばいいんじゃね?

431 :
>>427
eval "#{yourname} = Hello.new"
としたいということ?

432 :
テキストファイルに名前その横に点数が書いてあるファイルがあって
それを左から国語、算数、理科、社会、合計、平均点を計算するプログラムを作らないといないのですが
カラの配列つくってファイルを読み込むとこまでやったんですがこの先ちんぷんかんぷんです
助けてぇ・・・・・

433 :
宿題なら宿題スレで

434 :
array.inject(:+) で合計を求める

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

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


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

でも、こういうファイルでは、科目はわからないだろう

435 :
イニシャライザに渡すブロックについて教えてください。

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

↑ここのブロック { text 'exit' ... } が
{|w| w.text 'exit' ... } (これでも動きます) と同等に機能する仕組みを教えてください。

436 :
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だと最初からやり直し) 的な書き方があるんでしょうか?

437 :
def initialize(&block)
self.instance_exec(self, &block)
end

438 :
>>437
ありがとうございます

439 :
(a,b),c =[1,2,3]

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

なぜこういう結果になるのか仕組みが分かる方いらっしゃったら教えてください。

440 :
(a, b) = 1
c = 2
cyberspace = 3

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

442 :
ありがとうございます。

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

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

ここで、やっと「ネストした配列」の意味が分かりました。

443 :
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になってしまっている。

よろしくお願いします。

444 :
rubyのつかえるオススメサーバーってどこ?
っていう質問はここでいいのかな。

445 :
自宅に眠ったノートPC

446 :
>>443
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? })

447 :
むしろ数値のままで何が問題なのか

448 :
>>446
つうか普通に read とか open を headers: true 付けて呼べばいいんじゃね。

449 :
>>444
さくらのレンタルサ−バ

ただし、新しいversionは自分でinstallする必要がある

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

windows 7
ruby 1.9.3
宜しくお願いします

451 :
>>450
自己解決しましたのでレスはもう要りません

452 :
>>367
rubyバージョン同じ
win7 32bit
同じく文字化けします。

解決策が見つかりそうもないので
諦めてcentosかmacでやっています。

453 :
UTF-8のソースをそのままコマンドプロンプトに出力したらそりゃあ文字化けするわ
出力前にShift-JISに変換すればいい

454 :
「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メソッドはどのように記述すればいいですかね。

455 :
rubyのバージョンを書き忘れていました。
2.2.0p0
です。

456 :
to_sの中でputsしちゃいかんがなw
…いけないことはないが、使う人からしたらギョッとするでしょ
to_sは普通にstringを返すだけにしたら?

それで呼び出し側で puts my_library みたいにすれば十分では?

457 :
>>456
なるほど、ギョッとしました!
確かにstringを返すのが自然ですね。
ありがとうございました。

458 :
終了時リターンコードって、正常に終われば0、
文法ミスなどのエラー終了は1でいいですか。

459 :
関数のこと言ってるなら例外あげろ
プロセスならそれでいいんじゃね?

460 :
そういうの気にしてやる言語じゃなくね
作法学ぶならJAVA,C#で

461 :
シェルスクリプトなどの戻り値は、0〜255を使う

0が正常で、1以上がエラー

462 :
shのように0が真ならいいんだけど、偽として扱われる言語で関数の戻り値に
使っちゃうような悪習が蔓延っているのはなんでなんだろうな。

463 :
コードは上から下へ。例外的な処理を if 文の中へ入れるのだ。なんてな

464 :
スレ違いかもだけど、何処で聞いたらいいのか分からないので、ちと質問です

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

公式に書いてある手順の「gpg --keyserver hkp://key〜」とかと関係あるんすかね?

465 :
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
のところとかも強引にエスケープするのはどうやればいいですか

466 :
置換
"A".ord.to_s(16) # => "41"

467 :
1文字ずつ自力でやれということですね
ありがとうございます

468 :
tapって盗聴するって意味らしいけど
ブロック変数で破壊的に操作できるから
盗聴ってよりspyじゃね?

469 :
有識者の方、教えて下さい。

1.Rubyのグラフィカルなデバッグ環境って何がお薦めなんですか?
2.apache経由で動いているRubyにアタッチしながらデバッグする、お薦めの環境ありますか?

470 :
有識者「にゃーん」

471 :
javascript覚えて結構便利で使いやすいなあと感じてるんですが、ruby覚えるとそれ以上の感動有りますか?

472 :
何をするのかによる
文字列操作するならとても便利で感動するかも
javascript何に使ってるの?

473 :
JavaScriptは標準ライブラリがクソだからなぁ

474 :
>>472
webサイトです

475 :
>>474
ほとんど何も言ってないに等しいぞ。

476 :
以下の様な数値群から、重複しない要素を使って任意の数値(例えば2360)に最も近い和を求めるにはどうしたら良いでしょう?
115,135,215,352,358,655,885,925,936,1250,1285,1620,1850

477 :
>>476
お題スレ行けよ!

478 :
では、お題スレにいってみます。

479 :
linuxで一からインスコしてたけど
挫折した
もういいおwinでやるよ

gemがエラー吐きすぎ

480 :
RubyはWindowsの方が茨の道じゃないか?

481 :
英数字の全角半角変換方法がわからなかったが
require 'jcode'
で trを使って全角半角ができた
(初心者の発見)

482 :
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に入れてるんですか?

483 :
>>482
mechanizeのインスタンスのaがどっかアクセスするときに使うuser-agentをmacのsafariで使われる感じの文字列に設定してる
a = Mechanize.new
a.user_agent_alias = 'Mac Safari'
と同じ意味

484 :
ブロック引数の扱いはライブラリ実装によってまちまちで
Mechanize#initialize がたまたま self を引数にブロックを呼んでるだけ。
初期化をまとめて明示的に書けるイディオム

485 :
>>482のような
block付きinitializerはどうも好きになれなかったが
Class.initializeの仕様を知って驚いた。

486 :
自分自身をブロックパラメータにもらえるのってある?
1.tap{|i| break [i, i*2]}
みたいなことを素直にできる
1.xxx{|i| [i, i*2]}
みたいなxxxってある?

487 :
nilだと動かないけどrailsのtry!

488 :
れすとん!
railsにはあるんやね
ttp://api.rubyonrails.org/classes/Object.html#method-i-try

489 :
>>481
String#upcaseで大文字に、
String#downcaseで小文字に変換します

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

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

「ruby 大文字 小文字 変換」で検索する

490 :
大文字小文字じゃなくて全角半角やって言ってんやろーが

ruby2.0以降ならrequire'jcode'は非推奨だし不要

491 :
神調教 → ネ申 言周 孝攵 みたいにしたいの

492 :
たのしいrubyの8章と9章の抜粋されたサンプルコードってどう書き換えればいいの?

493 :
>>490-491
Windowsには、LCMapString という、
半角/全角を変換する関数がある

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


>>492
抜粋された箇所だけを、見ればよい

494 :
>>490-491

nkf ライブラリで、できるかも

495 :
>>493
書き写して実行したいときは点々の部分は気にしないでいいのね
一応すべてのサンプルを打ち込んで実行してるんだけどそこだけ解らなかった

496 :
スレ違いかもしれませんが、質問場所が分からないので、こちらでさせてもらいます。
環境構築でつまずいてます。

■症状
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']

リンクは間違ってないようですが、何か思い当たることなどありませんか?

497 :
>>496
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 {
..
}

みたいにやった、素人芸なのでもっといい方法があるのかも知れない

498 :
>>497
ありがとうございます。少し変更して、下記の形で行けた気がします。
助かりました。

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

499 :
railsとかsinatraってプログラムはどこに記述するの?
コントローラーやテンプレートには変数もらったりイテレーターとか条件文しか書けないみたいだし

500 :
すみません、変数について教えてください。
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回目

501 :
>>500
.object_id

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

503 :
>>501
慣れが必要そうですが、何となく分かりました。ありがとうございます。

504 :
自己解決しました。
サンプルのRubyのコードでは不十分で、
server = TCPServer.open(2000)
とするとlocalhostをlistenするので、他のIPからの接続を受け付けていませんでした。
server = TCPServer.open('IP address',2000)
IP addressはServerとなるPCのIP
で接続出来ました。

505 :
>>500
Array.sort!、 String.slice! など、
メソッド名の最後に「!」が付いているものを、
破壊的メソッドと言って、
そのオブジェクト自体を変更してしまう、メソッドを言う
(「!」が付いていない破壊的メソッドもある!)

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

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

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

だから変数xを、メソッドa()に渡して、そこからb()に渡して、
さらにc()に渡しても、参照渡しなので、
同じオブジェクトを指すため、
元のxを変更すると、すべてが変更される!

506 :
ruby2.2.3入れていくつかgems入れたら
全くエラー出る事なくインストールできやがった・・・・
何事だよ・・・

507 :
rubyってどこで使われてるんですか?

508 :
ネエネエwwww ドコデwwww るbywwww ツカワレテルノーwwwwwwwwwwwwwwんんんんんっwwwwwww

509 :
>>507
rails

510 :
レレレレレイルッズwwwwwwwwwwww

511 :
>>507
個人用途だとDOS画面から、
こまごまとした身の回りの処理や日曜プログラム

512 :
質問です


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 に引数ついてる場合も考慮してスマートに実装する方法ないですか?

513 :
>>507
自治体HP

514 :
Ruby資格の教科書を見たが、5年前の求人割合では、
Java:Ruby = 10:1 だが、今では、5:1 で、
5年後には、2:1 と予測されている

JavaからRubyへの流れが、止まらない

515 :
もしその予測通りなら失業者が10倍くらいになってるかな

516 :
cronでの実行で質問です。

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

起動時のパスが動かない原因だと考えているのですが、エラーの吐き出し方が分からず困っています。
こういったときは、どうデバッグすべきでしょうか?

517 :
>>509
レンタルサーバーやlinuxスレの方がいいと思うが

/... /test.rb 引数 >/dev/null 2>&1
みたいにしている

518 :
>/dev/null 2>&1
もし上記のようにして、エラーを捨てているのなら、
エラーを捨てないで、cron, rubyのエラーを見る

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

まあ、Linux板で聞いた方がよさそう

519 :
ディストリに最初から入っている、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

520 :
>>516
STDERR.reopen() でSTDERRをファイルに書き出す

521 :
Fiber(笑)使ってる奴いる?
スレッドの壁超えられない

522 :
GILあるならFiberが適当

523 :
OS X El Capitan‎をクリーンインストールしてSassとかCompassを入れたあと
$ gem update --systemしたら、そのあとパーミッションの問題で
$ gem install ***ができなくなってしまいました

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

わかる方がいらっしゃったらご教示ください!

524 :
単にOS標準のgem(ruby)が使われているだけじゃないん?
以前が/usr/local/binだったならたぶんHomebrewでいれたんだろうね。
さらにいうとrvmやrbenvとbundler使ったほうがいい。

525 :
GILとFiberって何か関係あるの?

526 :
何も関係ない

527 :
railsのエラー処理で挫けそうになるんだけど
バージョンいっぱいあるせいでエラーググっても意味を成さない事が殆ど
一回安定した環境にしたら二度とアップデート出来ないな
その前にrailsやめそうだけど

528 :
わかります

529 :
・アップデート?アップグレードでしょ?
・railsやめたところで他の言語やプラットフォームでも同じこと
・エラー?ソース読めばわかる(他のOSSでも同じ)
・ソース読めない?じゃあ使うな(他のOSSでも同じ)
・安定した環境にしたらアップグレードできない?
 ・テスト書いてないってことじゃん。そんなの今は安定っていわねーんだよw

530 :
gem upgrade rails?

いやもうrailsとかほんと良いんで・・・・・
他の手段でWebサイトは現状管理出来てるけど
ruby繋がりでrails一応やっとくかー → あーーーーーー・・・・・・もうやんね
と、なったのでした。おしまい。

531 :
Ruby対Scala
http://b.hatena.ne.jp/entry/tech.cm55.com/wiki/scala/ruby

532 :
趣味だから扱い易いのでいいや

533 :
今の時代に個人サイトでCGI使う必要性すらなくなってきてるな
CGI動かなくてもかなりのものが外部委託
大体動的なページ生成とか、あらかじめメタするかjsでページ内変更で十分出来るし
それはサーバーサイドにやらせなくても実現出来るけど管理が楽だからって理由でサーバーサイドにやらせてるだけ
URLに?とか=くっつけてparam受け取るのって脆弱性しか残らんよ
いずれURLからparam受け取る情弱設計は淘汰される運命

534 :
jsだとソース見られるけど
jsで済んでしまうんだよな

535 :
初心者スレで初心者が知識を披露して自分の知識のバグ取りする流れは飽きたな

536 :
飽きるほど2ch張り付いてる事に驚く
よっぽど暇なんだな

537 :
うん、最近は仕事も順調でかなり暇

538 :
コテでもやれよ

539 :
>>537
紹介して

540 :
んんんんwwwwwwwwww

541 :
rubyinstallerでruby&nbsp;2.2.3をインストールしたのですが、
irbなどでコンソールから日本語を入力すると
Error:&nbsp;Invalid&nbsp;argument&nbsp;@&nbsp;io_write
というエラーが出ます
なんとかなりませんか?

542 :
Windowsだとコマンドプロンプトの入力はShift_JISになるからじゃね?

543 :
つーか今試したらマルチバイト文字をなに入力しても
bbbbbなってワロタw
Windowsからirb使えないじゃん

544 :
ゴミ

545 :
便利すぎる
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -app=http://fatiherikli.github.io/fil/

546 :
ブラクラ貼るなぼけ

547 :
100万行ある日本語まじりの、カンマ区切りで30フィールドもあるようなファイルを読み込んで、
2行目以降が、きっちり、1行目とまったく同じだけのフィールドの数で統一されてるかをチェックしたいんだけど、
こういうのってRubyでは出来るもんでしょうか?

548 :
出来るか出来ないかで言えば出来るにきまってるだろ

549 :
rubyでもexcelでも

550 :
後ろから前から

551 :
ただし、巨大なファイルは、File.read()などで、
一度に全部読み込んじゃダメ

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

io.each_line do |line|
line.chomp!
処理
end

552 :
仕事でちょっとしたツールを書いているのですが
同じようなコードを再利用する場合は
モジュール化すれば良いのでしょうか?

553 :
コード使い回したいだけなら単にそのファイルをrequireするだけ
使いまわしたいコード(関数)が増えてきたらmoduleやclassで囲って用途ごとにグルーピングする

554 :
再帰関数の中でrequireをたくさん使いたいのですけど
requireってスタック消費しますか?

555 :
ruby初心者です
あるソースコードで以下のようなメソッドを見かけたんですが
どういう意味でしょうか?
教えて下さい

def self.[](key)
{
'test1' => 'aaa',
'test2' => 'bbb'
}[key]
end

556 :
>>555
Ruby のクラスメソッド定義まとめ
http://qiita.com/Linda_pp/items/b7135ae1f0def6058c6c

557 :
[ ]演算子を、再定義しているのかも

558 :
ご無沙汰しております。前スレ982です。
前スレで問題を解決していただき、無事にVistaで運用しておりましたが、
8.1のマシンで同じRBファイルを実行しようとすると以下のようなエラーが…どなたかお分かりになりませんでしょうか?

ttp://imgur.com/z4S2yUE.png

559 :
エラーメッセージを読もう

560 :
エラーメッセージが何を指しているのかが分からないのですw

561 :
「エラーメッセージの言っていることはわかるがどうしてエラーが起こっているのかわからない」のか、
「エラーメッセージの英語が読めないまたは読んでない」のか、
「そもそもどれがエラーメッセージかわかってない」のか

562 :
>>561
すみません、全部です…

563 :
>>561
いや、最初のパターンですね!

564 :
no such file or directory が読めないのか

565 :
Vista機と同じように運用しようとしてる(つもり)なのにエラーが出る理由が知りたいとです…

566 :
C:\調教分析\temp\kol_den2.kd3 がないと言っている
どっかから拾ってきたスクリプトなんだったらきっとあなたが使い方を間違えてるので作者に聞いて下さい

567 :
C:\調教分析\temp\kol_den2.kd3 が見つからないってエラーじゃないですか
エクスプローラでそのファイルが存在するか確認しました?

568 :
>>566
>>567
わざわざありがとうございます!
検証してみたらVista機からdropbox経由でコピーしてきたtempフォルダの中身がいつの間にか消えてしまうんです。

569 :
temp (一時ファイル) っていうくらいだしスクリプトが最後にtempフォルダの中身を消す仕様なんじゃない?
Vista機で正常に実行し終えたあとにはtempフォルダの中身は残ってるの?

570 :
>>555-557
def func(overwrites = {}){
:a => AAA
:b => BBB
}.merge(overwrites)

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

この関数の引数に、ハッシュを渡すことで、
任意のフィールドを上書きできたり、
新たなキーと値を追加できる

571 :
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(笑)だっけ?

572 :
Hi マッツ

573 :
>>569
レスありがとうございます。Vista機ではtempフォルダの中身は残ったままなんです。8.1だと本当に「いつの間にか」消えてしまってるんです。

574 :
8.1だめだな。添付ファイルが消えるなんてメールも送れないじゃない。
というとでも思ったのか? 
いつの間にか消えるのを臨時スペースや一時スペースといいます。

575 :
tempフォルダは消して良いものか定期的(プログラムの終了とか)に消すものを入れておくフォルダですよ

576 :
RubyでPython風のインデントでブロックを書くやりかたしたいんだけど
やり方教えてよ

577 :
まずPhyhonを覚えます。
覚えたら教えて。

578 :
>>576
CoffeeScriptはendのないrubyだよ


AA テスト
  ┴ァ 
  イヽ

579 :
質問です
物凄くネストしたコードを書きたいんですけど

lambda do
 lambda do
  lambda do
   ...

これってスタック使っているんですか?
いくつくらいまでのネストが可能ですか?

580 :
もういいです

プログラミング飽きた

581 :
質問です

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

582 :
もういいです

レス来る前に
実装終わっちゃった

583 :
初めましての方は初めまして 西行寺 うゆと申します

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

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

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

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


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

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

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

o.extend Class
は出来ないです

584 :
よって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の違いからなる制約が頻発します

585 :
なので、このような煩雑な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 でメソッドを作っても、
「引数」ではなく、内部変数等の「状態保存」%まで% しか出来ない、

586 :
そしてそれを打開するために、このようにしました
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.sc/test/read.cgi/tech/1443578172/l50

   こちらまでメールをお願いします 

587 :
Rubyのしくみ、2014

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

この2冊を読め!

588 :
>>587
ruby関連の書籍で読んでない本が自分にあると思ってんの?

全部読んでるから

589 :
Rubyプログラミング基礎講座(広瀬雄二)も?

590 :
10万3000冊の技術書を暗記してる

591 :
何そのゼロみたいな人

592 :
>>581
よくわかんないけど、こういうんじゃダメなの?

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"

593 :
>>592
その発想なかったです、
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

594 :
refineってモジュールに対して使えないみたいですけど
moduleの特異クラスに適用する方法ってありますか?

595 :
>>594
クラスと同じようにできるみたい。

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

596 :
基本的な質問ですみません。
Windowsのコマンドプロンプトからruby(main.rb)を実行するとき、あるファイル(stdin.txt)から標準入力を与えるにはどうすればいいですか?

一応こんなコマンドを指定してみましたが、なぜか標準入力がmain.rb自身になってしまいます。
ruby main.rb < stdin.txt

597 :
>>596
すみません、勘違いのようでした。質問取り消しでお願いします

598 :
前から疑問なんだけど、デストラクタ (゚听)イラネ のruby使いさんたちは、

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

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

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


時にはデストラクタに処理直接書いたほうが楽なケースってあるんですけどぉ

599 :
>>597
良いよ
今度から気をつけろよ

600 :
def f
5.instance_exec do
p to_s # => 5
yield
end
end

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

こんなの書いてみたんですけど
ブロック側から 5のselfを得るのって無理ですか?

601 :
>>600
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

602 :
>>601
f do |s|
 ...
end
ここに多くのコードを書く場合にs. が何度も登場して冗長だからです

603 :
こんなこともわからない奴いるってマジ?


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

604 :
>>602
じゃあ、こんな感じで。

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

f{ to_s } #=> "5"

605 :
>>603-604
凄いですね・・・
流石にここまでrubyで出来るとは思いませんでした
ありがとうございます

606 :
def f
5.instance_exec &amp;proc
end
f {p to_s}

はいわろ

607 :
あれ?このスレちょくちょく文字化けしてる
どのエンコード選べば読めるようになるの?

608 :
スマホが文字化けする

609 :
オブジェクト思考はゴミ

610 :
高度なオブジェクト思考が出来て、関数型思考が出来て
ruby並に記述が簡潔で再帰の速い言語ください

rubyの再帰はマジでおそいと思う

611 :
>>610
なければ作っちゃえばいいんじゃなーい?
Matzだって自分好みの言語がなかったから作っちゃったんだしー

612 :
Matzほど暇人じゃないんで。

VM関連のソースは漁るかもしれない

613 :
>>612
まるでヒマがあれば作れるみたいな言い方じゃなーい
だとしたらあとは必要なのは時間じゃなくて情熱だよねー

614 :
時間ねーっつってんだろタコ

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

なのですが、これ以上高速に動く記述法は無いでしょうか?

616 :
離散フーリエ変換を自分で作ってみたんだけど適当に直してくれ
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)]

617 :
>>616
どうでもいいけど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)]

618 :
>>612
crystal 以上のものができるとは思えない。

619 :
>>614
2ちゃんやってる時間はあるのにねw

620 :
>>615
元は、
pngl += line[pos+2] + line[pos+1] + line[pos]
と、
pngi += [line[0]].pack("C")+line[1]
としてて、
これを>>615に変えたら3割ほど早くなったのですが、
そこからどうすれば時間削減できるか思いつきませんでした
全コードは以下です
http://codepad.org/RMuparfO
どなたか高速化のアイデアありましたらご意見お願いいたします

621 :
Core i7-6700、DDR4-2133 8GBメモリ、GeForce GTX960
より低スペックだったら買い替える

622 :
興味も向かず金にもならない事をやらない事が逃げみたいな風潮

ひとりでやってろよ暇人

623 :
>>622
まさに>>613の言ってる通りじゃん
足りないのは時間じゃなくて情熱でしょ

624 :
>>615,608
rubyならCで書いてモジュール化したら?

625 :
では、適当な有名人を思い浮かべてください。

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

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

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

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

言わないでしょ。
そのレベル

626 :
>>625
キレてる意味が分かんない
「自分が作れよ」とか「情熱がない」をけなし言葉だと受け取っちゃったのかな?

627 :
ぼくには知識がありますけれど、それは「とある魔術のINDEX」のインデックス

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

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

でも何があっても絶対に、他人の為・社会の為に技術力を使いません

628 :
             ,.'´        ``ヽ、
        /              `ヽ
        /              ヽ  \
      |   /              _」    |
      |  }ー----------…… '´/.: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   ∧,

629 :
 発 者 同         . 。_   ____           争
 生 同 .じ     .    /´ |  (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`|  }⌒j     
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   |∨ ` ̄
            /   ..:.:./    |   丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          |、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/|.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:|    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>

630 :
人間っていうデバイス使ってるくせに「同じレベルじゃない」とか思ってる奴のほうが痛いな

ゴキブリやカメムシか何かですか?(生命力強い的な意味で)

631 :
>>620
0.2秒くらい
http://codepad.org/E9uNOvQ6

632 :
NG一つで快適快適

633 :
>>632
このスレで名無しの自演がどんだけ含まれてると思ってる?
誰もuyから逃げられないんだよ

634 :
>>633
ちくわ大明神

これも覚えたな?

635 :
そんな単語覚えたところで何の意味もない

636 :
ちなみに自分は、紫色より「もう一段階」波長の短い「色」を見る事が出来る
コウモリは赤外線を見れるけど、その逆側の波長だ

普通の人は見る事が出来ない、可視光線の外側
これが「紫の鏡」なのでは無いかな?

637 :
>>636
鳥の目は4原色対応
人間は3原色だが女性に少数だが4原色がいるらしい
女性ホルモンが多いとそうなるのかな
色覚障害の人は2原色やモノクロ
猫は2原色

638 :
入力した整数が2のべき乗かどうかを効率的に判定するにはどうしたらいいですか?

639 :
2で割っていけばいいんじゃないの?

640 :
>>639
ありがとうございます
やってみます

641 :
>>631
Rubyはインストール可能だけどXnViewは使用可能なソフト一覧に含まれてないしZlibも使用可能なライブラリには名前ないので(汗
同じ理由でRubyの拡張ライブラリでという手も打てません

>>640
たっているビットが1ビットのみかを判定するでもいけますね

642 :
>>620
92行目〜96行目

http://codepad.org/17iMUscM

643 :
おい、おまえら、

「誰もuyから逃げられないんだよ 」

644 :
>>642
ありがとうございます・・・
計測してみましたが1%ほど早くなっているようです
やり方根本的に変えないとこれ以上は無理かもしれません、う〜ん

645 :
問題はループ回数だろうね
誰もuyから逃げられないんだよ

646 :
>>615
String の += は破壊的連結ではなくて使った分だけオブジェクトができる
なのでループ中とかでたくさん呼び出すと速度低下の原因になる
破壊的連結でいい場合は String#<< というメソッドがあるのでそっちを使いましょう

あとは、String#[] には Range を渡す使い方もできるので、
pngl[posp..posp+2] = line[pos..pos+2].reverse!
とすると String#[] の呼び出し回数を1/3にできる

647 :
>>646
^^;



>>642 更新

  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

648 :
速度は出ないけど変数減らしてみるとこうなる

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

649 :
申請すれば許可してくれるんじゃね?
趣味でやってて公けにできないんなら別だが

650 :
>>642 , 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の :+ ってカスだわ

651 :
同じの貼ってしまった上のは間違い。


  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

652 :
速くなってきた

653 :
http://codepad.org/dP52ktEI

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


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

文字連結には:+=ではなく:<<を使うべき

654 :
Rubyでは配列の添え字を0からさらに1をひいて-1を指定すると
後ろから参照されます
MatzもHPがゼロになると声が裏返るんでしょうか?

655 :
>>654
https://www.youtube.com/watch?v=EToMOmP4oRw

656 :
>>646
ありがとうございます、 << は存じませんでした
来週実環境で計測してみます

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

>>653
png_to_binaryは>>615で述べてるように手を入れてましたよ
修正前と後で30%違ってましたが、なるほど、+が減った分で効いていたのですね

657 :
質問です。

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

658 :
rubyじゃ無理

659 :
ID:VP0GkkkJ=キチガイ

660 :
>>656 の結果
http://codepad.org/nktsZViC
1920x1200サイズの画像が1枚1.2秒で変換できるようになりました。

一番最初のコードからすると8〜10倍くらい早くなって十分実用できる出来になりました。
いろいろと教えてくださった方に感謝いたします。

661 :
効率には関係ないですけど
"〜".force_encoding("ASCII-8BIT")

"〜".b
でOK

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


ぼくの考えた静的型チェック

663 :
まじかよ! 天才じゃねーの?!

664 :
見つけたバグを報告しようかどうか迷う

665 :
とりあえず、>>660
PNGSIG = "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A".force_encoding("ASCII-8BIT")
res = [PNGSIG]
↑ これ複数のbmp変換の時にバグる

666 :
新型Ruby開発へ 設計者表明、IT高度化・複雑化に対応
2015/11/13 9:56

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

松江発のプログラミング言語「Ruby(ルビー)」を開発した、
まつもとゆきひろ氏が新しいバージョンとなる「ルビー3.0」の開発に着手した。
12日に松江市で開幕した「Rubyワールドカンファレンス」の基調講演で、
IT(情報技術)環境の高度化・複雑化にルビーを対応させる実験を進めていると述べた。

667 :
>>665
ありがとうございます。
たまたま1起動で1枚の変換だったので発覚しませんでしたが複数枚を一度に変換した場合、
png1
png1+png2
png1+png2+png3
のように次々と連結されたファイルに変換されてしまってました(汗

res = [PNGSIG.dup]
で修正できました。

668 :
RubyでGUIアプリを作るなら、JRuby+JavaFX+Rawrで決まり!
ttp://blog.supermomonga.com/articles/jruby/javafx-rawr.html


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

Rubyで出来ないのなら、Python, Groovyかな?

669 :
初心者スレってことは新たにRubyを使い始めたいって人がいるってことなの?(´・ω・`)
なんで先のないことを始めようなんて思ったの?(´・ω・`)

670 :
綺麗なコードっていうけどスレだけ見てたらPerlと大差ないね

671 :
>>668
ルビー()をウインドウズ()で使うと不幸になるよ

672 :
>>668
以前ならRuby+VCLのApolloがオススメだった……
1.8ベースであることを気にしないなら今でも使えるけどね

673 :
>>668
dxrubyサンプルかいた
http://www1.axfc.net/uploader/so/3566728

674 :
職種別、資格別、スキル別の平均最低月給リスト(ほぼ毎日更新)
http://jobinjapan.jp/cate/
全掲載求人109,160件の平均最低月給195,800円

Rubyの求人 の平均最低月給221,800円
http://jobinjapan.jp/job-listing/keyword-ruby.html

675 :
IT業界の初任給
日本500万円、シリコンバレー1500万円って最近どっかにあった

676 :
RBGとHSVの変換をエレガントに書いてください

677 :
よくわかんないけどまずお風呂に入って
真っ白いバスローブ着て猫を膝に乗せて書けばいいの?

678 :
それは私の思うエレガントとは違います

679 :
エレガンスC、でググッてはいけない。

680 :
HSV→RGBなら前に書いたけど逆方向?

681 :
Rubyスレにソースコードや計算式貼ると
著作権ガーって言ってたひとは居なくなったの?

682 :
RGB→HSVみたいな対称性のあるものって対称性を保ったままコーディングできないのかな

683 :
ファイルを開きたいのですが
パスの区切り文字ってwindowsとlinuxは違うんですけど
どちらでもいいのですか?

684 :
殆どのものはどっちでも動く
たまに \\ か / の片方でしか動かないものがあるだけ

685 :
どちらでもいいなんて事は無い。
require 'pathname'
してPathnameクラスを使うのが正しい。

686 :
やだ

687 :
頼まれても使いたくないですね

688 :
なんでやねん

689 :
BOM付きutf-8を書き出すにはどうすればよいのでしょうか

690 :
Encoding クラス

nkf ライブラリ

691 :
jsonでハッシュテーブルからpretty_generateするには
ハッシュテーブルをアンパースしてパースして
pretty_generateするしかないのですか?
3段階もあるので
2段階か1段階に縮めたいです

692 :
次のようなことが起こってしまうのですが、どなたか原因や解決法をご教示願えませんか。

コマンドプロンプト上で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)

693 :
irb --noreadline

694 :
>>693
ありがとうございます。
確かにreadlineを切れば文字化けは起きなくなりますが、1つ目の問題は解決しないようです。
また履歴機能も使いたいのでreadlineは切らずに済ませたいです。

695 :
http://qiita.com/kidach1/items/d0137d96bed9ac381fd5

696 :
既存のcsvファイルを読み込み
a,c列だけ残したcsvファイルを作ろうと思っています

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

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

CSV.open(

697 :
途中送信失礼しました
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

698 :
v.gsub!(/(\r\n|\r)/, '\n')
or
v=v.gsub(/(\r\n|\r)/, '\n')

699 :
>>698
変化無しでした

700 :
row.each{ |k, v| v.chomp! unless v.nil? }
csv << [row[0]+"\r\n",row[2]+"\n"]

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

これでなんとかなりました。ありがとうございました

702 :
Perlより汚い

703 :
vimで配列に<<を使うと文字列として認識してしまうから
pushを使うようにしている

704 :
私は ruby 初心者以下の phper でSASS を触った際の質問です。

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

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

もしそのような仕組みがないのなら諦めます。
よろしくご教授下さい。

705 :
ちなみに

$value: null;

$value: nil;

では目的を果たせません。

706 :
Railsスレで聞いた方がいいんじゃね?

707 :
>>706
そうなんですか。
移動します。有難うございました。

708 :
>>704
スコープ
http://lab.sonicmoov.com/markup/sass-variable/

709 :
プログラムを使って2chに書き込むにはどうすればいいですか?
いわゆるスクリプトとか呼ばれてるやつを作りたいんですけど

710 :
ググればすぐにわかるよ
注意としては秘密のキーと値はクッキーにセットしないと書き込めないということくらいかな

711 :
>>709
selenium / watir
あるいはwshとかでブラウザの自動操作が一番楽

712 :
>>709
http://anago.2ch.sc/test/read.cgi/software/1434991857/

713 :
板移転してた
http://potato.2ch.sc/test/read.cgi/software/1434991857/

714 :
おまいら、スクリプトが書きたいとか言う明らかな荒らしにいちいち相手するなよ

715 :
<<をpush扱いは嫌いな仕様の一つだ
シフト演算子もいらんよなInteger#bitshiftとか作ればいいし

716 :
rubyで、ぷよぷよの最大連鎖数を計算するプログラムを組もうかと思ったらどう書く?
https://ideone.com/qMs43L

717 :
音声認識でダイアキュートなら4連鎖と判断

718 :
queueが2つくらいなら全検索でもそんなに時間かからんのちゃうか

719 :
>>717
なんつー無駄な処理をww

>>718
2つだけなら全探索でも良いんだけど、10個20個になるとだんだん辛くなってくる

720 :
ぷよぷよってあんまり詳しくないんだけど、queueってなんのこと?

721 :
理解したんでスルーしてください

722 :
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J




キュ・・・クエウェwwwwwwwwwwwww

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

724 :
>>723
Rubyとして使わなくなったとしても、プロセスがOSにメモリを返すかどうかはOS依存

725 :
100MBレベルで、繰り返し残るので、使っているようなんですが

726 :
100MBレベルでまだ返さなくていいとOSが判断してるんだろ

727 :
そもそも、ガベージコレクトしたからといって、その空きメモリをRubyのVMが即座にOSに返却するかどうかなんて実装しだいだろ。
自分でソース読むか本家のメーリングリストで聞いた方がいいよ。
あるいは変数Aに1GBくらいのデータを入れて検証してみれば?

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

後は勝手に調べろや

728 :
>727 どうもです
nil代入するだけでいいのか、よくわからないレベルなので
>>自分でソース読むか本家のメーリングリストで聞いた方がいいよ。
こういうのは敷居が高いです。

制限付きGCらしいとは、読んだのですが、何かスクリプト上の工夫余地があるのかが
知りたかったのです。

729 :
自分で調べろといったものの、気になったので調べてみた。

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

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

なお、環境変数変更の結果、頻繁にGCが動作してしまうようになるリスクもあるので、本当にそのチューニングが必要なのかどうか考えた方がいいんじゃね?
おまいさんが暇でGCに興味があるのなら、好きなだけ実験すればよいけど。

730 :
上記のページ 難しいですね。
速度と、メモリ使用量のトレードオフのチューニングっぽいですが、
やりたいことは、使わなくなったデータ領域を、OSに還元さえできれば、満足なんです

class Dat
def datain
 da=["2"]*50000000
end
end
とした場合は、200MBが、GC後5MB位まで、減りますね。。。

731 :
nilを代入するだけで、解放されるというのは間違いです

732 :
GCっても結局Cのfree呼んでるだけで、CのfreeがOSに返すかどうかは環境依存だよね

733 :
>>730
無知なプログラマーの独りよがりだと思いますよ。

返却しなくてもOSも他のプロセスも誰も困らない。
むしろ何かしようと変なことをして、システム全体の効率を落としますよ。

734 :
喧嘩しないでね?

735 :
ルビーの組み込み型のデータのファイルに書き込みって
全部書き込むんじゃなくて
増えた分だけ追加書き込みって出来ないの?

736 :
>>735
http://docs.ruby-lang.org/ja/2.2.0/method/Kernel/m/open.html

737 :
だめだこりゃ

738 :
日本語だから読めよ

739 :
空気読めよ
マーシャルダンプで追加書き込みするにきまってるだろ

740 :
24時間年中無休でスクリプトぶん回して
一定時間毎に処理するよりも
必ず一回毎に終了してcronで何度も起動した方が
OSには優しいですか?

741 :
OSに優しいとはどういうことか

742 :
>>739
なにそれ

743 :
Marshalで追加書き込みとかありえなさ過ぎて
空気読んだら誰も言い出さない

744 :
OSに優しいがツボに入って腹がやばい

745 :
MarshalといってもYAMLとかいろいろあるわけだが(www

746 :
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だとこうなるのが普通なのでしょうか?

747 :
RubyをWindowsで使おうと思わない方が良い

748 :
>>746
puts nil
みたいなこと?
putsは to_sが勝手に呼ばれるから
nil.to_sで空文字列に変換された後出力されることになる
nilと表示したいなら p nilで

749 :
たのしいRuby3版p46
irb --simple-prompt
/Ruby/=~"ruby"
/Ruby/=~"RUBY"
/Ruby/i=~"ruby"
/Ruby/i=~"RUBY"
/Ruby/i=~"rUbY"
などの例文でirbだとirbの後に色々入力するのが大変なので全部 printを頭に付けてファイルにしてました
pにしたらnil出ました
少しまた分かってきました ありがとうございます

750 :
>>745そんなわけ分からないこと言ってないでもう書くのやめときなよ

751 :
>>723
Javaでも、使用メモリを増やすと、
メモリがまだ十分にあるから、GCを呼ばなくなるらしい

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

Rubyのしくみ、2014も読んで

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

>>746
えー!。Windows8.1 64ビット版で、Ruby動くの?

752 :
ちなみに僕がbbs等を荒らす為のスクリプトを書く時に標準ライブラリ以外も使ってると
一定時間起動していたり、同じインスタンス使ってるとバグを触る事あるので
書き込み毎に新しくインスタンス生成するコードにしてます
それでも落ちる場合は定期的にプロセス起動し直すコードにします


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

rescue

end
で囲ったりして
謎の例外拾ったらプロセスrestartしてます
カス過ぎるとSEGV出すから、これでもダメだったりするよね(′・ω・`)

753 :
このスレのひとにはなじみが薄いかもしれませんが
32ビットと64ビット両方に対応しないとWindows対応を名乗っちゃダメなんです。
ソフトもパーツも全部そうです。

754 :
型チェックなしで大規模プログラミングはできる?

755 :
やりにくくなるだけで、できることはできる。

756 :
ひとによっては出来る

757 :
文字列メソッドの殆どがinvalid multibyte char (UTF-8)になってしまう
irbではちゃんと動作するのに

758 :
>>754
テストちゃんと書こう
テストがなければ型チェックあり言語でもろくなものはできない

759 :
>>754
テストをちゃんと書こうとすると型チェックあり言語の何倍も書かないといけない

760 :
変更→テストがコケる→修正→グリーン
で、本当にこれで十分なのか?っていうね
自信を持ってyesと言えるレベルのテストを書くには相当なコストをかけなきゃいけないわけ
型チェックの有無でそのコストに大きな差が出るとは思わないけど、
テストにそこまでのコストをかけるなら相対的に本体のコーディングの比重はとても小さくなるから
LLを使うメリットってほとんど無くなっちゃうんたよね

761 :
デスクトップ上のフォルダ内に
1.csv, 2.csv, 3csv…と名前を連番で大きくしていくファイルを出力したいのですがどのように書いたらいいですか

762 :
perl -e 'for $i (1..5) { `touch $i.csv`; }'

763 :
この前起こったバグだけど
@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
これだとバグらなかった

報告しようにも公開出来ないソースコードなのでここに簡易コードだけ

764 :
まずは実際に再現するコードを出せ

765 :
同じ振る舞いなら同じハッシュであることを期待するというならまだわかるが、逆を期待するのは普通じゃない
それともobject_idの比較のつもりなのか?

766 :
>>765
は・・・?

>>764
コードは出せないけどバグったもん
rubyのバグ

767 :
精神障害っぽいな

768 :
uyだからしょうがないよ

769 :
そもそも他の場所のバグが、
そこで表面化したのかもしれないし
klassを飛び越えるローカル変数か
メンバ変数か
オーバーライドか
arrayあたり
ちなみに再帰も使ってる
あとloadもつかってguiアプリ
いろいろ要素ありすぎて
ソースコードはアップできないのだよ
ただ何かそこら辺にバグがあるということは掴んでる

770 :
切り分けちゃんとしてから書こうぜ

771 :
>>761
カレントフォルダに、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にするので要注意

772 :
ダメだendって見るだけで吐き気がしてくる
よくこんなクソ言語使ってられるわ

773 :
>>762
module MyModule
class MyClass
def my_method
begin
10.times do |i|
if i % 2 == 0
puts i
end
end
end
end
end
end

774 :
>>761
ファイル名の文字列内で
#{数値変数}.csv

775 :
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/

776 :
>>771

3.times do |i| { File.open("#{i+1}.csv", 'w').close() }

777 :
「Rubyによるクローラー開発技法」が送料込み1000円で売られてるぞ

   <(´`c_,'`)>
     ) )
 (((( > ̄ > ))))

778 :
http://page22.auctions.yahoo.co.jp/jp/auction/l332728499
ここな

779 :
http://confreaks.tv/videos/elixirconf2014-introduction-to-elixir-for-rubyists

ドローンのデモわろた

780 :
rubyってどこらへんが良いの?
python使いの俺にもわかるように教えてくれ

781 :
オフサイドルールじゃないところかな

782 :
Pythonと比較するなら実質的に特に良いところはない
3.times do を美しいと感じるか一貫性がなくて無駄に複雑なだけだと感じるか、純粋に好みの問題
日本人はExcel方眼紙に見られるように論理性よりも体裁を重視する傾向があるからRubyを好む人が多い

783 :
体裁についてはむしろPythonの方がうるさい感じだけどなー
Rubyは全体的にゆるい

そのゆるさを気持ち悪いと感じるか心地いいと感じるかかな

784 :
Rubyはゆるい に同感
だから個人的にはでかいプログラムには向いてないと思う
小さい処理したり、成果物を機械的チェックしたりをさっと書くのによく使う

まあ別に小さいのはPythonでもなんでもいいだろうけどね
しいて言えばコンソール上コマンド引数に直接コードを書くのも簡単ってとこか

785 :
Pythonとあまり差異が無ければ
あとは日本語資料多いほうの言語が楽

786 :
Windowsならpythonのがよい
macならruby
linuxは知らん

787 :
Python使いがあえてRubyをやる理由はRailsだけだと思う
Pythonで書くにはちょっと大袈裟な簡単な自動化とかに使うならRubyよりPerlの方がどこでも使えるしシェル呼びやすい

788 :
読みやすさではPerlが僅差で上?

789 :
Perlは確実に読みにくい
PythonとRubyは同程度かな

790 :
読みやすさ
自分が書いたRuby >= 自分が書いたPython = 他人が書いたPython > 他人が書いたRuby > 自分が書いたPerl >>>(解読不能の壁)>>>他人が書いたPerl

791 :
言語によって調べやすい情報の種類が違うから
やるメリットが0って事はないけどぬ

rubyでやりたい事探して見つからない時にPyrhon Perl で調べると見つかるとかはある
で、出てきたライブラリ名とかを今度はrubyで探してrubyで書くというのが上級者様の検索技術です

792 :
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()じゃなくても、関数型っぽく書く方法があれば教えてください。

793 :
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}

関数型はよくわからないけど、たぶんこんなのが関数型っぽいんでしょ

794 :
二つ目はmapの前にsortがないとほかではうまく動かないかもしれなかったね

795 :
別に全部1行で書くのが関数型っぽいというわけじゃないだろ
arr1, arr2or3 = (1..100).partition{|i|condition i}
arr2, arr3 = arr2or3.partition{|i|condition2 i}

796 :
>>793
ありがとう。reduceを使うのね。

>>795
説明が足りませんでした。1回のループで複数の作業を行う必要がある場合、
関数型ではどうやるのかを知りたかったです。partition()だと2回のループに
なるのが気になりました。

797 :
関数型だとそもそもループっていう概念もないに近いだろう
気にするのは計算量
計算量はどっちも変わらない

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

関数型は素直に書くのが一番

799 :
計算量は多くなるけどそれもありだね

800 :
それなら上の partition の良くね?

801 :
大差ないだろ
中途半端なハックするよりは素直に>>799
自分でpartition_by_keyみたいなメソッドを自作したほうがいい

802 :
その自作するメソッドの中身を聞かれているのでは

786と783は定数倍しか違わないので大差ない(ということは素直な方がよいことが多い)のは同意

803 :
メモリが許すならconditionやcondition2をメモ化させておけば定数倍の差も出なくなるか

804 :
>>792
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]

805 :
・・何が起こったのだろう・・

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

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

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

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

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

----

806 :
Windows環境の人、cmd.exeでこれ実行してエラーになる?
自分の環境だとErrno::EINVALとかいうエラー出るんだけどおま環なのか知りたい

> ruby -e "p gets"


807 :
でない

808 :
普通に"あ\n"が出力された

809 :
Windows 8.1 64 bit
ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]

810 :
ごめん。ミスった。
>>809の環境では"あ\n"だったよ。

811 :
配列aをn個の部分集合に分割するすべての組み合わせを列挙したい。
とりあえず空集合は許す、戻り値はEnumurable or Arrayとして。

これをできるだけ短くRubyで書くとどうなる?
aが大きい場合に効率の良い書き方は?

812 :
定期的にpermutationネタ出るけど宿題かなんかで流行ってんのか

813 :
>>806
むかしハマったわ

814 :
ansiconが原因でした

815 :
permutations ではなく、
Groovyの、List#subsequences のことだろ

1, 2, 3,
12, 13, 23,
123

816 :
それだと各集合のサイズ指定だからちがうんじゃない?(Array#combination)
n=2:
[], 123
1, 23
2, 13
3, 12
にしたいのだとおもう。

817 :
質問です。
$a = gets.to_i
def calc(other)
$a * other
end
puts calc(4)
puts calc(2)

要は標準入力から取り込んだ値を関数に使いたいのですが、これだとグローバル変数が汚染されるのでスマートでない気がします。
グローバル変数を汚染せずにする方法はありますでしょうか?

818 :
あります

819 :
あるのですか、良かったです!
教えてもらえたら助かります!

820 :
カリー化して部分適用すりゃいいんじゃないの?

821 :
>>798 はDRYじゃないのが嫌。
これなら >>795 の方がいい。
でも関数型だと通常リストと再帰使うけど、
そうやって書いたのを ruby に翻訳すると、
>>792 が一番近い気がする。

822 :
>>817
c = -> a , b { a * b }.curry
c = c[2]
p c[4]
p c[8]

823 :
$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

824 :
>>816
irb(main):001:0> require 'array_partition'
=> true
irb(main):002:0> a=[*1..3];n=2;a.partition(n).map{|x|case x.size;when n-1;x<<[];when n;x;end}.compact
=> [[[1, 2, 3], []], [[1, 2], [3]], [[1, 3], [2]], [[1], [2, 3]]]

825 :
>>820>>822>>823
ありがとうございます!すっきり解決しました!
カリー化は初めて聞いた言葉だったのでググって勉強になりました。
いい休日が過ごせそうです。

826 :
>>821
発言内容的にLisp系の人かな?
好みと違うかも知らんが、こんなのどうかね

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

827 :
>>822
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

828 :
>>826
この程度の処理で:ary1,2,3とか余計なシンボル作るとか冗談みたいなコードですね^^;

829 :
>>815, >>816
実行結果は>>816みたいになる処理を想定してました。
実際に必要だった処理では、配列aも分割数nも小さかったので再帰で済ませたけど、
重複要素がある大きな配列に試すと遅い。
配列の比較を最小限にする書き方はどんなかな、
とか途中配列に溜めないでEnumurableないかな、とか考えた上での質問です。

830 :
つ Lazy

831 :
>>826
かっこいい。
>>828
0、1、2で事足りるとは言え、シンボル3つ如きで何を言っとる。

832 :
>831
基地外の相手するなよ。喜ぶから。

833 :
>>831
変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。

834 :
スマートじゃないってことでしょ
数字でええがな

835 :
マジックナンバーを使うよりシンボル使った方がスマートだと思うけどな。まあ感性の違いか

836 :
こういうのは?
key = -> x { condition(x) ? 1 : condition2(x) ? 2 : 3 }
ary1, ary2, ary3 = (0..100).group_by(&key).sort.map(&:last)

837 :
こういうのもなにも最初の回答にそれあるじゃん

838 :
あ、ほんとだ。^^;

839 :
>>835
0,1,2 の役割は位置を示すものなので、マジックナンバーじゃないよ。
逆にシンボルにすればマジックナンバーでなくなる訳でもない。

840 :
Ruby3でシンボル廃止してくれ
シンボルGC(笑)とか完全に当初の意味を失ってる

841 :
連想配列のキーにシンボルと文字列混在させて死ぬパターン多し

842 :
位置だからマジックナンバーではない? 意味が分からない。
位置を即値で埋め込んだらそれはマジックナンバーだろう。やるなら定数を定義しないと。
しかしそれは大げさなので、シンボルを使うのがスマートな選択。
もちろん:ary0とかではマジックナンバーと変わらないが、
本番のコード当然意味のわかる名前を使うだろう。

843 :
>>833

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
>>831
変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。






844 :
                         ∧_∧         ミ ギャハッハッ 変数名のシンボルはどうせパーサが作るので、そのコードでシンボルが新たに増えることはないよ。。
                              o/⌒(. ;´∀`)つ >>833
                              と_)__つノ  ☆ バンバン


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

# => [:ary1, :ary2, :ary3]
                         ∧_∧
                              o/⌒( ゚д゚ )つ >>833
                              と_)__つノ

845 :
僕のコードが動きません!
引数のファイルを開いて、一行ずつ読んで
パターンマッチした文を表示させたいだけなのに



#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

846 :
File.open
処理
end
だけでいい。file.close は書かない

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

バグが起こったときは、もっとコードを少なくして、
正常に動く所まで戻ること

847 :
      ,, -─‐-、,,-─-,、
     /        ,'⌒ヽ\
    〈  ,‐-⌒-、ノ,,,  |.  \
    /, ミ、Vヽl〉| | |,,,  |.   \
     '|\Nヘ「ヽ||_|__,|.     \
              |L.|  |       ヽ、
            | | ,,,|,        .l
.              |_|_,||        .ノ
                |::|::: :|_|       ,ノ |
             rrr´‐::: :j. L,,---‐‐'´ ノ
            i´^^i´ ̄~    ̄ ̄ ̄~i‐⌒ヽ,
            ヽ、__ヽ、______」-、__.⌒っ
                           ̄

848 :
ary1 = ary2 = ary3 = 42
p Symbol.all_symbols.grep(/ary\d/)
#=> [:ary1, :ary2, :ary3]

849 :
おいuy元の質問に対してその回答が良いかどうかは置いといて
uy変数名のシンボルはどうせパーサが作るから実質増えないってのは合ってるだろうがuy

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

# => [:ary1]

uy煽りたいならuy正確な内容で煽れやuy

850 :
ちがうわボケ
end一つ忘れとんねヤンケ
こんな池沼先生の棲み家には二度と来ねーよ




ふふふ ごめんなさいネ

851 :
死にますごめんなさい ノシ

852 :
くやしいのうwwwくやしいのうwww

853 :
で、スレの何番と何番のコードがきれいなの?
教科書的なコードが読みやすいのはわかったけど
現実はPerl以下だよね。

854 :
言語で比較してる時点でお察し
読みやすいコードを書く人はどっちの言語で書いても読みやすいコードになるだけ

855 :
AptanaStudio3を使うと
puts乱発でエラーチェックするレベルを超えれるのですか?

856 :
rubyじゃ無理

857 :
elixir おぬぬめ

858 :
1.8で作ったUTF-8、CP932、バイナリ間で相互にデータをやりとりするスクリプトを2.1に移植しようとして地獄を見た
Encoding例外の嵐で片っ端から文字コードとencodingをチェックしてすりあわせないと動かなかった・・・orz

859 :
新春初食糞はいつもに増して苦かったです><
みなさんはいかがでしたか?

860 :
>>859
誤爆です。板汚しすみません。

861 :
UTF-8からSJISに変換する場合に変換出来ない文字だけエスケープしてその後戻す簡単な方法ってないですか?

862 :
座標、x:12, y:3 があるとき、
Hashのキーを、DBみたいに、数値の連結キー(x, y)にできる?

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

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

>861
CP932には、丸で囲んだ数字などの環境依存文字があるけど、
UTF-8には、CP932に変換できない文字があるの?

863 :
1=>2

864 :
>>861
CGI.unescapeHTML("\xE8\x8C\xA4".encode('SJIS', :xml => :text).encode('UTF-8'))

865 :
>>862
ハートマークとか

美しくない&簡単じゃないけどこんな感じになった
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"

866 :
つ primitive_convert

867 :
Encoding::Converter が使えるんじゃない?

868 :
>>862
自己レスですが、2次元のハッシュ(ハッシュのハッシュ)がありました

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

{3=>{10=>"x", 5=>"y"}}

869 :
>>868
他にArrayをキーにしてしまう方法もあるよ
ただしキーに破壊的操作するとか変なことすると取り出せなくなったりする罠もあるけど

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

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

870 :
WindowsでUnicodeでしか表記出来ない引数を受け取るにはどうしたらいいですか?
普通にARGVで読み出すとSJISに変換されて破壊されてしまいます

871 :
最近、Fiberを使ってみようとしてるんだが、

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

上記みたいにブロック内でFiberオブジェクトへの参照をnilにした場合
GCが走っても安全なのか知っていたら教えて欲しい。
ちなみに目的はNilクラスに空のresumeを定義してalive?チェックを省くだけ。

872 :
>>870
コマンドラインはUnicodeを受け取れる
-Ku

873 :
>>872
thx
それでもダメっぽいです。強制的に?へ変換されてしまいます

874 :
>>872をヒントにこんな感じになった
#!/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)と書いても例外吐いちゃうし
他の方法が見つからなかったです

875 :
>>843
これじゃね?

C:\>chcp 932
現在のコード ページ: 932
C:\>ruby -e 'p "".encoding; p ARGV[0].encoding' ''
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>

C:\>chcp 95001
Active code page: 65001
C:\>ruby -e 'p "".encoding; p ARGV[0].encoding' ''
#<Encoding:UTF-8>
#<Encoding:UTF-8>

876 :
アンカミスった
× >>843
>>874

877 :
shebangに書くんじゃなくて
ruby -Ku hoge.rb とかやってもだめ?

878 :
>>874
Win32API で lpCmdLine とか後から unicode 版のを取れなかったっけ

879 :
GetCommandLineW() だったかな

880 :
>>878-879
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でも同じでした
使い方が間違っているのだろうか?

881 :
自己レスです。解決しました
>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"
>>874より正攻法ですがコードは長いですね

882 :
>>871
仕様上は安全だろうけど
その手のコードはバグを触りやすい
それひとつのコードではバグらなくても幾重にもネストしたり再帰したりすると突然何かが起こるのがruby

883 :
>>881
すごい無駄なことしてるコードに見える

884 :
>>883大先生が効率的なコードを披露してくれると聞いて

885 :
コードを披露しないまでもどこら辺が無駄でどういった改善の余地があるのか言ってくれたらためになるね

886 :
いちいち書式指定してstrftimeするのが面倒なんですが
Time.now.to_sの書式を強引に書き換えて読みやすくするのってどうやればいいですか

ローカルの小物ツールくらいしか書かないので影響範囲が大きくても問題無いです

887 :
モンキーパッチ、class Time ... endで上書きするメソッドを再定義する

888 :
>>886
Timeのto_sをオーバーライドすれば良いんじゃね

889 :
moduleを使えば、継承チェーンに割り込める

子 → 親
子 → module → 親

890 :
Rubyに、BitSetってある?

メモリを節約したいので、
9, 9, 4, 1 bitのように、自由に定義したい

891 :
メモリを節約したい要求のある場所でRubyを選択したのが間違い

892 :
ビット演算は出来るんだから作れば?
というか昔の8bitマイコンならともかく今時そこまで省メモリを求められる用途って何だろう
フラグが何百万個もあるのだろうか

893 :
俺のPC数年前のモデルだけどそれでも8GB積んでるもんな
メモリって8MB, 16MBの世界だと思ってたのにいつの間にやら千倍だな…

894 :
例えば、400ある各マス目に、1〜5は置けて、6〜9は置けないなど、
置けない数字を、各マス目に持つのは、もったいない

これをbitにして、1〜5には0、6〜9には1とすると、たった9bit!

895 :
>>894
400万マスならわかるけど400マスやそこらならたかだかキロバイト単位のメモリ消費だろ、そんな節約になんの意味がある?
それでソースコードが読みにくくなったら百害あって一利なしだから普通に書いたら?
普通に書いたらメモリにのらないようなサイズのデータを扱うなら>>891の言うとおりRubyでやるなって話で

896 :
ちょっと前までメモリ1.5GByteでWin7を使っていたメモリドケチな俺でも
PCなのにビット単位で操作しようとは思わないなw

あと今時のプロセッサのアクセス単位は64bit?だからそれから外れると
遅くなりそうだよね

897 :
a = 2
puts 4.downto(0).map { |n| a[n]; p a[n]}.join

0
0
0
1
0
00010

なんじゃこれ。
整数[ ]で、その位置のビットを取れるの?

898 :
>>897
http://docs.ruby-lang.org/ja/2.1.0/class/Fixnum.html#I_--5B--5D

899 :
stringをdumpしてバックスラッシュ記法に置き換えた文字列をまたもとに戻すにはどうやるんですか?

900 :
evalでいいのかな、処理重そうだけど。

901 :
p sprintf("%#b", 1 << 32)
p sprintf("%#x", 1 << 32)

0b100000000000000000000000000000000
0x100000000

sprintfは、桁区切りできないようだが、
これを、_ で4桁区切りにするには、どうするの?

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

903 :
Windowsの32bit用のバイナリはどっかに無いのか? 2.3

904 :
まだないと思うよ

905 :
そうか

906 :
>>901-902
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) 数字以外

907 :
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を回しているところとかもうちょっと何とか出来ないかなと・・・

908 :
>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を作ってキーと値を格納する
みたいな動作って出来ないでしょうか?

909 :
Hash#[]=をモンキーパッチしちゃえば

910 :
>>908-909
:C までは [] が呼ばれるから無理よ。
2.3 で追加された dig の setter 版を作るのが無難だと思う。

911 :
ありがとうございます。[]で何とかするのは無理がありますか
digのセッターを作ってみようとしましたが、ひょっとして
h.dig(:A, :B, :C) = 11みたいに使えるメソッドは定義出来ない・・・?

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

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

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

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

エラー処理をどう書けばいい?

913 :
>912 自己レス

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/, '')

914 :
バグでもなんでもないがな

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.

915 :
>>911
deep_merge でよくね?

916 :
>>915
そういう問題ではなくね?そもそもそのメソッドは標準で付いていないだろ

917 :
>>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.

918 :
結局Hash#[]とHash#[]=を書き換えて:A, :B, :Cみたいな複数のキーも受け取れるようにしました
これでことあるごとに||= Hash.newを書かなくて済むかなl

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

一つも置換されなかった時は、nilが返るので、
どういうようにエラー処理を書けばいい?

920 :
>>918
Refinement とか使ってるの?
自分のコードや使ってるライブラリが盛大にぶっ壊れても知らんぞ。

921 :
そのときはそんな言語使ってる自分が悪いと思う

922 :
>>920
後学のためにどのように盛大にぶっ壊れるのか具体例をplz
Hashは何でも受け付けるしリファレンスマニュアルどおりの動作をさせた上で
拡張するなら問題はないように思うけど。>>918も「も」って書いているしな

923 :
>>919
str.gsub!(/^#.*$/, ‘’)&.gsub!(/^¥r¥n|^¥n|^¥r/, '')

2.3な

924 :
>>919 自己レス
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)

925 :
別に深くないけど
nilが返ってくるかもしれんものをメソッドチェーンで呼び出す方がどうかしてる

926 :
でも、メソッドチェーンにせず、
単独の命令文に分割すると、nilが返ってこない

全く置換されなくても、そのまま置換前の文字列が返ってくる。
わけわからん

927 :
そんなにメソッドチェーンにしたければgsub!じゃなくてgsubを使えばいいだけなのに
わけわからん

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

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

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

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

こう書いてみたらわかるんじゃない?

929 :
strがどう変わるかとメソッドの戻り値は別物なんだよ
メソッドの戻り値がnilでもstrがnilになるわけじゃないんだよ

930 :
>>926
gsub!の戻り値が変換後のstrだと期待してるからおかしなことになるんだよね
君が期待してることを達成するメソッドはgsub!じゃなくてgsubだと気づけばすべて解決

931 :
こういう作法ってどのくらい現実的なんですか
上級者ならみんなやってるよって感じですか

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

932 :
そうか、gsub!の戻り値は、変換後のstrでは無かったのか。
それとは別に、戻り値があったのか

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

gsubよりも、使うメモリが少なそうな、gsub! を使いますわ

933 :
>>932
>>914で既出なんですが

934 :
>>931
> 関数型プログラミングへの際立った潜在能力があるのだから、 それらを
> いつどのように使うか(そして、いつ使わないか)を知っておくべきである。

この括弧内を意識できるなら、まぁいいんじゃない?って感じ
でもそこまで意識できるようになるには、関数型プログラミングにある程度親しんでおく必要はありそうだ

935 :
>>932
は?

936 :
>>931
Rubyはオブジェクト指向原理主義だから、関数型のレコードやリストのような、
オブジェクトを振る舞いを持たない単なる値として扱うというのは好まれない
変数やフィールドを再代入不可にできなかったりブロックが式じゃなかったり、関数型に向いてるとも言いづらい

937 :
>>931
再帰やブロックでより宣言的に書くとか、破壊的メソッドの呼び出しに注意する(特にメソッドの引数として受け取ったオブジェクトに破壊的メソッドを適用する場合)とか
作法ってほどルール化されてないけど、有益な考え方は多い

938 :
f.call(a)とかf.(a)とかf[a]とか萎え萎えですやん
Common Lispの(funcall f a)の形も嫌
Standard MLやOCamlやSchemeの(f a)の形が好き

939 :
どっちでもいいよ。
俺らは使って便利なものを作りたいだけなんだから
そんな些細な違いは方言程度にしか思ってない。

940 :
俺らは 言語を 使って便利なものを作りたいだけなんだから

941 :
関数とクロージャを区別せずに書けるのは気持ちいいでしょ

942 :
ご苦労じゃな

943 :
最近は大分マシになったけど本質的にオブジェクトの生成は高コストだから
積極的にオブジェクトを増やす実装は推奨されないのでは

944 :
レスありがとうございます

いくつかの書き方は参考になりましたが
やはり状態変更は悪などと極端に走らず
Rubyとして効率的なコードを書くように心がけるのが良さそうですね

945 :
Rubyは本質的にクソ遅いからそんなことは問題にならないよ
どうせIOがボトルネックのケースか処理時間が重要でないケースにしか使えないんだから

946 :
そうやっていつもすぐどうせどうせってゆうのよくないよ

947 :
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とかに投稿するな!!!

わざわざクリックして最後まで読ませやがって。

948 :
お前のために他人がいる訳じゃない

他人が発信した情報あてにしないと問題解決もできない奴が
他人の記事に文句言うな

949 :
qiitaは既に糞まみれ
残念ながら

950 :
意識高い系はもうRubyから引揚げてるしな

951 :
それって皮肉なのか?

952 :
>>948 の性格の悪さがディスられてるだけ

953 :
>>948
「rbenvで2.1.2をインストールしようとしたら、readline_develが無いと怒られた」

というタイトルだったら、まだギリ許せた。

954 :
玉石混交の情報から自分に必要な情報をピックアップする技術ってのはエンジニアには
必須だと思うけどなー

んなことぐらいでキレてたらやってられんと思うんだが

955 :
想像だけど>>947はたぶんフェイスブックみたいなSNSもやってて
ふさわしくないなと思ったから2chに思いのたけをぶつけたのだと思う。
エンジニアとして適切な行為だと思う。

956 :
2chに愚痴を書き込むのがエンジニアとして適切って…どこまでが釣り針なんだろう?

957 :
そもそもエンジニアとはなんなのか

958 :
教えてください。

959 :
>>953
QiitaとかStack Overflowとかは、投稿数に応じてなんらかのステータスが上がる仕組みになってたり、
投稿数を増やそうと誘導する仕組みになってたりするから、ゴミ記事が増えるのは仕方がないよ。

NG機能があればいいんだけどね。

960 :
>>959
情報が多い分には別に構わんでしょ
それが役に立つかどうかは読む人によって変わるんだから

「俺にとって役に立たないからクソ記事だ」とか叫ぶ方が異常なだけなんだよ

961 :
こういうのが新参者をバサバサ切る老害の思考なんだなと分かる例ですね

962 :
いや、役に立たない情報が多いのは大いに困るだろ
読んでみないと役に立たないかわからないような紛らわしい情報ならなおさら
一つや二つの記事でそれを言い出すのはどうかと思うが、これを否定するのは無理がある

963 :
>>962
>>948

964 :
何が言いたいんだろう
お前のために公開した情報じゃないんだから、その情報のせいでお前が困っても関係ないってこと?

965 :
自分基準でしか物事考えられないなら明らかに向いてないんだから転職をオススメするよ

966 :
>>964
>>960の通りでしょ。
ある情報があなたには有益ではなくても他の人には有益な可能性もあるのに、
自分の役に立たない情報は世の中にも不要な情報と決めつけているだけ。

967 :
話ループさせてるやつはなんなんだ。
ループが上手でこの職に向いてるのか。
もう一度言うが元レス書いた人は
2手先を読んで「2ch.sc」に書いたのであればなんの問題もないじゃん。
ここは2ちゃんねるというゴーストタウン。
スマホで見たらエロ漫画の広告しかないよ。
こんな辺鄙とこでも炭鉱があったころはにぎわってたらしいけどな。

968 :
> > Try running `yum install -y readline-devel` to fetch missing dependencies.
>
> ってでたのでredline-develをインストールしたら2.1.2をインストールできました。

という内容をありがたがる奴なんているんだ
それは盲点だったわ

969 :
記事書いてると気合いいれたのは全然延びなくて
そんなんあたりまえやろ、自分で試せばいいちゃん
って思うような記事が伸びるのはみんな経験すること。
むしろ盲点しかない。

970 :
どうしてruby触ってる人はうんこ臭いの??

971 :
>>969
別にその記事伸びてないし
Qiitaでは、普通に良記事が伸びる

972 :
>>971
じゃあなおさらなんのもんだいもない

973 :
>>972
いやだから「rbenv で Ruby2.1.2 がインストールできなかった話」というタイトルに釣られて
クリックして、最後まで読んでやっとクソ記事だったとわかった俺の時間が無駄になった
(同様の奴けっこういるかもよ)

974 :
さらに言うなら、なぜそのステップが必要なのかも書かずに、だらだらどうやったか
だけを書いた「○○をインストールしてみた系」の記事も、いいかげんにして欲しい
(Qiitaに限らず)

975 :
>>974
健全なネット環境のための法案を作って
ノイズをうpした連中とその家族を焼き払ってほしい
youtubeとか検索してでてくる「歌ってみた」「カバー」
とかもう半笑いで殺意湧く

976 :
こんなところでいつもでもグダグダしょうもない書き込みをしておきながら
俺の時間がムダになったとかwww

977 :
> ある情報があなたには有益ではなくても他の人には有益な可能性もある

とか言い出す奴がいなければ、グダグダしょうもない書き込みはしなかったけどね
マジで驚いた

978 :
ぼかした言い方でも誰かが実行したら>>975
が罪に問われる法律なら結構前に施行されてる

979 :
> > ある情報があなたには有益ではなくても他の人には有益な可能性もある
>
> とか言い出す奴がいなければ、グダグダしょうもない書き込みはしなかったけどね
意味不明な行動原理ワロ

980 :
>>975
お前が見たい奴こそがYoutubeにとってノイズだよ

981 :
>>966
誰か誰にとっても有害だって前提で話をしてるか?
そんなもの世の中のありとあらゆる有害なものを調べてもほとんどないだろうよ
世の中にとって有害だって話もそんなことはないと言ってる人しか言及してないように思うよ
「誰が」とか「誰にとって」の部分が省略されてるときに何でもかんでも「世の中の人すべて」をあてはめて読んじゃだめだよ

982 :
「プログラマの三大美徳」も
勘違いすると俺様思考になるんだって例

気に入らなきゃ見なけりゃいいだけじゃん

983 :
見なきゃわからないからこそ困るって話なんだけどな
ここまで頓珍漢なこと良く言えるわ

984 :
みんな元気で何よりです

985 :
>>983
別にお前が困ったところで切り捨てればいいだけの話だよね
「こんな記事のせいで俺様の時間が無駄になった」というなら斜め読み能力のなさが原因なだけ

ネットの情報が玉石混交なのは当たり前の話なんだから、それぐらい織り込んどけ

986 :
別に困ったところで知ったこっちゃないというならそれでいいし、困らないような能力がないせいだというのもいいし
そんな当たり前のことをいちいち愚痴っても仕方がないというのもいいが
そんな理由でいちいち愚痴に突っかかってこられたらたまったもんじゃないだろうね

987 :
嫌なら2chじゃなくてブログに愚痴こぼしとけばいいのに

どうもネットリテラシーに欠けるきらいがあるねえ

988 :
自分で勝手に火に油注いでおいて何を言ってるんだろう
そんな叩かれたくないならチラシの裏にでも書くに留めておけばいいのに

989 :
しかもここRuby初心者スレっていうね

990 :
嫌なら見なきゃいいのに
叩くこと自体が趣味の性格が悪い人たちなのかな?

991 :
>>990
ID:E1SYsv9d だろお前
いい加減しつこいぞ

992 :
お前平田だろ

993 :
時々思い出したように Ruby でスクリプト書くといつもインクリメントで syntax error になる
なぜ忘れてしまうのか

994 :
他の言語でインクリメントをよく書いてるからでしょ
そんなにインクリメントを書く機会ってあるのか

995 :
Rubyはeachがあるからほとんど書かなくていいよな

996 :
まぁ他の言語でも使わなくて済むなら使わないわな
for拡張なりsemaphore的なものなりでインクリメントデクリメントを使わなきゃいけない場面もかなり減ったし

インクリメントデクリメントは登場回数の割にバグを産みやすすぎる

997 :
例えばこんなの
n=0; f=filesize; while(f/1024.0>=1){ f/=1024.0; n++; } return [f, " KMG"[n]]
再帰や対数でも書けるだろうけどさすがにちょっと
ruby ならあるだろうという謎の信頼感

ところでループ内で最後の要素だけ別の処理するみたいな場合にスマートな書き方ある?

998 :
こういうとき俺も困るわ
n += 1で凌いでるけどいい書き方あるの?

999 :
>>997

1000 :
ごめん、本文抜けてた
" KMG#".each_char {|kmg|
  return f, kmg if f < 1024.0 || kmg == '#'
  f /= 1024.0
}

1001 :
バグってる、番兵の'#'はいらなくって、kmg=='G'までだったね。

1002 :
簡単な書き方思いつかんね

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].処理
って分けるくらいか

1003 :
本題からは反れるけど、この種のアルゴリズムとしては、除算より乗算、乗算よりビット演算か定数比較を推したいなぁ。

1004 :
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"]

1005 :
うーん 981 の n+=1 でいくわ
ありがと

1006 :
ruby は範囲が決まってないループについてスマートに処理書けなくてもやもやする

1007 :
対数で行くと、こうかな?
scale =

1008 :
scale = " KMG"
n = [[Math.log( val.abs, 1024 ), scale.size-1].min, 0].max.to_i
return val/1024.0**n, scale[n]
# 0や負でもいける

なんでうまくい書けないんだろう?

1009 :
log_2()の計算するときはたまにFixnum#bit_lengthを使うことがある

1010 :
>>1008
ダブルクォーテーションが入ってるとなぜかそこでレスが途切れることがある
ただし、そのあとなぜかレス投稿に成功したりするからイラつく

文字コード総合スレ Part11
文字コードの種類は何故複数あるのでしょうか?
HSPだって
国産オープンソースDIコンテナSeasar2 その16
Kotlin 6
【PHP】下らねぇ質問はここに書き込みやがれ 2
OpenCLプログラミング#1
C++相談室 part137
[RPA]PC自動化技術総合スレ[効率化] Part.5
MFC vs .NET
--------------------
かまいたちの夜 総合203
【日テレ系木曜プラチナイト】 ラブリラン 【中村アン・古川雄輝・大谷亮平】
【ウマ娘 プリティーダービー】サイレンススズカはこしあん派かわいい4
ドラえもんの秘密道具で何が欲しかった?
  五 七 五  最後は必ず もうだめぽ
【芸能】渡部建 妻・佐々木希に「死ぬほど怒られた」ことは…
◎モテる男の特徴◎
【五輪】共産・小池氏 森元首相のサマータイムの導入申し入れに「朝だけやるわけじゃないんだから」「暑さ対策なら9月か10月開催を」
木下優樹菜、タピオカ離婚で電撃ヌード&AVデビューでB88W56H86があらわに
【報告】使い切りを目指すスレ【決意表明】 8 [無断転載禁止]&copy;2ch.net
【アニメ】蒼き鋼のアルペジオ 2ノット【漫画】
TSUTAYA DISCAS part56
☆バレエを題材にした漫画を語ろう5☆
【SCAR-H】VFCファンクラブ総合24【HK416A6】
キハチってどうですか?
モンベル◇◆◇mont-bell◇◆◇Part117
大学生と文房具
特価品6183
【リングワ・フランカ】共通語の歴史 2=U=二
人類学板は地方民が必死にがんばるスレだらけ
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼