2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 45

1 :デフォルトの名無しさん:2011/07/27(水) 02:07:40.78
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ Part 44
http://hibari.2ch.net/test/read.cgi/tech/1307845568/


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

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

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

2 :デフォルトの名無しさん:2011/07/27(水) 02:11:01.40
※テンプレはくだらないから貼らないように

3 :デフォルトの名無しさん:2011/07/27(水) 03:16:06.15
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレにようこそ
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |

4 :デフォルトの名無しさん:2011/07/27(水) 05:39:54.74
Railsの話題はWebProg板のRailsスレで
http://hibari.2ch.net/test/read.cgi/php/1311050686/
Windowsスレ
http://hibari.2ch.net/test/read.cgi/tech/1155031689/

書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」(初心者向け、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/

現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要
1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意

Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在
http://rubyinstaller.org/downloads/
何が必要なのかわからない人はとりあえずActiveScriptRuby使っと毛
chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利
http://www.ruby-lang.org/ja/documentation/

5 :デフォルトの名無しさん:2011/07/27(水) 08:52:56.52
もう、さすがに、1.9.2を初心者に勧めてもいいよね?

6 :デフォルトの名無しさん:2011/07/27(水) 09:18:45.81
Windows以外で、UTF-8中心の生活をしているならあまり困らないと思う。


7 :1/2:2011/07/27(水) 14:11:20.15
initalizeからメソッドを呼びたいのですが、どうやったらいいですか?

Class A

Class A_A < A

Class A_B < A

という派生クラスの関係があって、

Aの派生クラスのA_AとA_Bで、初期値が共通のインスタンス変数があるのですが、
それを初期化する場合、A_AとA_Bで一々インスタンス変数への代入を
宣言しないといけない訳ですが、この代入処理をAのメソッドにして
A_A、A_Bどちらからでも呼べるようにしたいのですが。


8 :1.5/2:2011/07/27(水) 14:12:02.48

通常はクラス変数で共有すれば良いのですが、
そうすると、外部クラスからアクセスできなくなるので問題になります。

Class Aにアクセッサメソッドを追加したり、あとでもう一度メソッドを呼び出して
処理する手もあるんですが、煩雑な気がするので良い方法はありますか?



9 :2/2:2011/07/27(水) 14:12:21.48
コードとしてはこんな感じです

Class A
 @@a="0"
 @b=@@a

Class A_A < A
 def initialize()
  @b=@@a
attr_accessor :b

Class A_B < A
 def initialize()
  @b=@@a
attr_accessor :b

@b=@@aが常に出てくるのがうっとおしいなと。
他にはクラスを初期化したり、さらに複雑な変化もやってるので、すっきりさせたいのですが。


10 :デフォルトの名無しさん:2011/07/27(水) 16:27:44.00
>>7-9
superじゃだめなん?
class A
 @@a = "O"
 attr_accessor :b
 def initialize ; @b = @@a ; end
end
class A_A < A
 def initialize ; super ; end
end

とここまで書いて思ったんだけど
class A
@b = @@a
end
はクラスインスタンス変数の定義であってインスタンス変数ではないよ、って事かな?

11 :デフォルトの名無しさん:2011/07/27(水) 21:24:36.98
char はシャーだろ

12 :デフォルトの名無しさん:2011/07/27(水) 21:32:43.42
キャーだろ

13 :デフォルトの名無しさん:2011/07/28(木) 06:06:58.93
チャル

14 :デフォルトの名無しさん:2011/07/28(木) 06:20:29.13
シャアだな

15 :デフォルトの名無しさん:2011/07/28(木) 06:34:44.97
キャラ以外なら何でも

16 :sage:2011/07/28(木) 07:30:04.47
すみません助けて下さい。
windows7 64ビットでqtruby4を使おうとしています。
公式のQtインストーラと、qtruby4-2.1.0-x86-mswin32.gemをgemでインストールしました。
インストール自体は終わったのですが、irbで
irb(main):001:0> require 'Qt4'
を書くと、


17 :デフォルトの名無しさん:2011/07/28(木) 07:32:26.18
LoadError: no such file to load -- qtruby4
from C:/Ruby191/lib/ruby/gems/1.9.1/gems/qtruby4-2.1.0-x86-mswin32/lib/Q
t4.rb:5:in `require'
from C:/Ruby191/lib/ruby/gems/1.9.1/gems/qtruby4-2.1.0-x86-mswin32/lib/Q
t4.rb:5:in `rescue in <top (required)>'
from C:/Ruby191/lib/ruby/gems/1.9.1/gems/qtruby4-2.1.0-x86-mswin32/lib/Q
t4.rb:1:in `<top (required)>'


18 :デフォルトの名無しさん:2011/07/28(木) 07:34:26.23
from (irb):1:in `require'
from (irb):1
from C:/Ruby191/bin/irb:12:in `<main>'
と出て動きません…
Qt4のロードに失敗しているのでは無く、qtruby4のロードに失敗しているのが原因不明です…
一応Qt4.rbのあるディレクトリには、qtruby4.dllが存在するのですが…

19 :デフォルトの名無しさん:2011/07/28(木) 10:22:37.83
qtruby4って動作しないgemなんじゃなかったっけ
他の使え

20 :デフォルトの名無しさん:2011/07/28(木) 11:48:04.31
昔は動いたんだけどね…

21 :デフォルトの名無しさん:2011/07/28(木) 12:53:45.91
qtruby4がマトモに動作してた時代なんてねーよw

22 :デフォルトの名無しさん:2011/07/28(木) 14:11:24.95
def func
....
end

def func()
.....
end


この2つの違いってなに?



23 :デフォルトの名無しさん:2011/07/28(木) 14:12:18.81
同じ
省略可能なだけ

24 :デフォルトの名無しさん:2011/07/28(木) 16:06:14.40
Marshal.dump した文字列に magic 文字列付くようにならないかな?
file(1) で「data」としか出なくてさびしい。

25 :デフォルトの名無しさん:2011/07/28(木) 16:21:12.78
そういうのは自前でつけて自前で外してくれ
dumpの返り値はeval可能文字列という以上の役目はないので

26 :デフォルトの名無しさん:2011/07/28(木) 16:24:29.92
>>25
「eval 可能文字列」ってどういう意味ですか?

27 :デフォルトの名無しさん:2011/07/28(木) 16:27:55.72
今んとこ先頭 2 バイトが 0x04 0x08 だったら、で判定できるが、
各OSの /etc/magic に登録してまわるにはしのびないな。

28 :デフォルトの名無しさん:2011/07/28(木) 16:34:43.08
>>27
ですよね。バージョン番号だから、今後変わる可能性がありますし。

29 :デフォルトの名無しさん:2011/07/28(木) 16:41:00.69
たとえば、 R U B Y 0x05 0x00 みたいに 4 バイト増えたとして、
困る人いないと思うのですが、いかがなもんでしょうか?

30 :デフォルトの名無しさん:2011/07/28(木) 16:53:33.89
>>26
irb> 'にゃんこ' == eval('にゃんこ'.dump)
=> true

このへんの話かと思う

31 :886:2011/07/28(木) 20:17:26.01
Rubyで、ファイルに書き込むような処理をwhile文で繰り返し走らせて、一定時間がたつと別のファイルをオープンしてそこに書き込み、また一定時間がたつと別のファイルへ
という処理をしたいのですがどうすればいいでしょうか?お願いします

32 :デフォルトの名無しさん:2011/07/28(木) 20:39:09.84
(可能なら)evalで元のオブジェクトが得られる文字列表現を返すのは……
to_s にも inspect にもそういうことは書いてないな。確かそういう解説を
どこかで見かけたような気もするんだが。

33 :デフォルトの名無しさん:2011/07/28(木) 20:59:23.65
誰に教えられたか知らないけど、とりあえず while は忘れろ
Ruby で while なんて使う人はいない(while gets を除く)

常に起動したままにしてタイマー処理するというのも Ruby はあまり得意ではない
素直にタスクスケジューラとか cron とかの外部のスケジューラに登録しとけ

で、超一般論としては ”日付_24時間制.txt” とかいうファイル名にしておいてそれに追加書きする
本日夜 9時までなら 2011-07-28_20.txt だし、9時からは 2011-07-28_21.txt に書き込まれる
時刻を文字列にするには Date#strftime とか使う、まあ Date のメソッドならなんでもいい
これの欠点は1日経過でファイルが24個になることで、まとめたり固めたりするのは別のスクリプトの仕事だったりする
何をやるかがわからないので、それ以上はなんとも

34 :デフォルトの名無しさん:2011/07/28(木) 21:15:43.36
Rubyソースコード完全解説のサポートページが見れないんだけどなんで?
http://i.loveruby.net/ja/ rhg/book/

35 :7:2011/07/28(木) 21:52:39.81
>>10
ありがとうございます。
superなんて便利な命令があるんですね・・・ってOOPの基本ですねw



36 :デフォルトの名無しさん:2011/07/28(木) 21:56:10.85
>>31

File::open("hoge.txt","w"){|f|
 f.puts "hoge"
}
sleep 100035
File::open("hogehoge.txt","w"){|f|
 f.puts "hoge"
}


37 :デフォルトの名無しさん:2011/07/28(木) 22:34:10.86
こんなんでどうでしょ?

38 :デフォルトの名無しさん:2011/07/28(木) 23:03:36.38
>>33
色々とありがとうございます!
やってみます

39 :デフォルトの名無しさん:2011/07/29(金) 00:46:06.28
こんなの作ってみた。
応用すれば指定時まで休むタイマーくらい簡単に作れるよ。
精度を求めるなら、whileループにして適当に補正掛ければいいし。

class Timer
def self.waitToSec(sec) # 指定秒が来るまで休む
remain = sec - Time.now.sec.to_i
remain += 60 if remain < 0
sleep remain
end
def self.waitToMin(min) # 指定分が来るまで休む
remain = min - Time.now.min.to_i
remain += 60 if remain < 0
sleep remain *60
end
end


40 :デフォルトの名無しさん:2011/07/29(金) 12:53:41.77
Active Recordのデータを使って基本(要約)統計量を求めるメソッドかライブラリはありますか?
平均値はあるようですが,他の最頻値とか中央値等々を求めたいのですが,見つけられませんでした。(自作しか無い?)


41 :デフォルトの名無しさん:2011/07/29(金) 18:11:48.64
Ruby使用者は普段どのコーディング規約に従って書いてるのか教えてくれ
とりあえずぐぐったらこんなの出てきたけども・・・
ttp://shugo.net/ruby-codeconv/codeconv.html

42 :デフォルトの名無しさん:2011/07/29(金) 18:26:16.87
普段と言われると自分用スクリプトがメインだから
自分の好きな感覚で書いてるだけだな

43 :デフォルトの名無しさん:2011/07/29(金) 20:38:59.33
>>42
んー・・・用途を考えるとそんなもんか
ありがとう

44 :デフォルトの名無しさん:2011/07/29(金) 20:40:46.01
リンク先のサーバーが落ちているかどうか判断させるにはどうしたら良い?

45 :デフォルトの名無しさん:2011/07/29(金) 21:09:52.09
名前が引けないのか、
経路がないのか、
80番が応答しないことなのか、
どこからどこまでが「落ちている」なのかな。


46 :デフォルトの名無しさん:2011/07/30(土) 13:15:30.90
hoge = "a = #{a} b = #{b}"
という書き方じゃなくて、
hoge = "a = %1 b = %2".arg(a).arg(b)
みたいな書き方をしたいです。文字列と変数を分離することができるからです。
こうしたいとき、rubyではどう書けば良いでしょうか?

47 :デフォルトの名無しさん:2011/07/30(土) 13:22:56.79
hoge = "a = %s b = %s" % [a, b]
みたいな感じで、詳しくはsprintf参照


48 :デフォルトの名無しさん:2011/07/30(土) 15:15:34.86
rubyってメルツバウみたいなのつくれんの?

49 :デフォルトの名無しさん:2011/07/30(土) 15:27:15.56
可能だと言わないと怒る馬鹿がまだ常駐しているかもしれないので、可能だと答えておく
普通はそんな爪楊枝で鉄球をつまむような芸はやらない

50 :デフォルトの名無しさん:2011/07/30(土) 15:35:41.28
まあバイナリ入力が可能でバイナリ操作ができてバイナリ出力ができる言語だからな
実際になにをどう作るかは知らんが、実現可能性だけで言えばどんなことでもYESだ
宇宙すら作れると言ってもいい


俺が宇宙作るならCで作るけどな

51 :デフォルトの名無しさん:2011/07/30(土) 15:55:57.18
>>46
erb

52 :デフォルトの名無しさん:2011/07/30(土) 17:11:02.34
>>48
ぐぐってもよくわからんノイズ音楽のことか?
詳しくないがジェネレイティブな音の生成ならルビーに限らず言語があったはず
ルビーで使えるライブラリはどこかあったかな
メルツバウは他にも建築や映画もあるようだが

53 :デフォルトの名無しさん:2011/07/30(土) 17:18:37.37
>>40
まずActiveRecordと統計処理は切り離して考えるといいんじゃないかな
"統計処理"や"ruby 統計処理"でググるとR言語のruby実装が見つかったが使ったことないから今のrubyで使えるかは知らない

最頻値や中央値だけなら実装したほうが早いとは思う

54 :46:2011/07/30(土) 19:50:48.31
>>47
ありがとうございます

55 :デフォルトの名無しさん:2011/07/30(土) 20:08:31.54
試しに実装してみたけど、モードはともかくメジアンをSQLでやるのは結構めんどかった。


56 :デフォルトの名無しさん:2011/07/31(日) 01:40:58.29
PHP しか書けなかった僕が Ruby を始めたころに思ったこと10点 ≪ blog.udzura.jp
http://blog.udzura.jp/2011/07/30/what-i-thought-when-i-start-ruby/

9) Symbol ってなんなの?


String と Symbolを教えてください。



57 :デフォルトの名無しさん:2011/07/31(日) 05:55:55.45
>>56
SymbolはStringのように見える整数。
"foobar" == "foobar" は、文字列が長くなるほど時間がかかるけど、
:foobar == :foobar は、実際には整数同士の比較なので一瞬で終わる。
ハッシュのキーには、文字列を使うよりSymbolを使った方が速いのはそのせい。

58 :デフォルトの名無しさん:2011/07/31(日) 16:25:03.85
>>53
ありがとうございました。
繰り返しで処理するのも若干,芸が無いかなと思い,質問しました。
地味にがんばります。

59 :デフォルトの名無しさん:2011/08/02(火) 17:34:22.93
Symbol は GC で回収されないので、
Hash のキーに Symbol を使うのってどうなんだろ、って思う。
例えば、キーをどんどん変えていってメモリを枯渇させる攻撃とかできそうで。
まあもっと効率的な攻撃はいくらでもあるだろうから気にならないかもしれないけど。

60 :デフォルトの名無しさん:2011/08/02(火) 18:10:45.94
ディレクトリが空かどうか判定できるメソッドはありませんか?


61 :デフォルトの名無しさん:2011/08/02(火) 20:20:05.69
ないみたいだな。

判定内容的には、
Dir.entries(dir).sort == %w(. ..)
Dir.entries(dir).join == '...'
Dir.entries(dir).size == 2
あたりになるのかな。


62 :デフォルトの名無しさん:2011/08/02(火) 20:40:03.44
ルートの場合の..ってあったっけ?(Windowsならドライブルートか)

63 :デフォルトの名無しさん:2011/08/02(火) 20:44:30.49
って書いてから思った

UNIX系なら正常動作してる状況でルートが空なワケないわなw
Windowsのドライブルート(Cは空じゃないだろうから、Dとか)ってどうなるんだろか

64 :デフォルトの名無しさん:2011/08/02(火) 20:51:01.24
OSX Lion(Darwin)のdient(5)には
the system root directory `/', has no parent and dot-dot points to itself like dot.
とあったが、Dir.entries('/') は .. も含んでるな。


65 :デフォルトの名無しさん:2011/08/02(火) 20:51:47.74
あ、誤読しちゃった。

.. は . と同じように自身を指してるってことか。


66 :デフォルトの名無しさん:2011/08/02(火) 22:27:27.76
>>59
ユーザ入力値からSymbolを作らなければいい。
59は、ハッシュのキーにSymbolを使うことと、ユーザ入力値からSymbolを作ることを混同している残念な子。


67 :59:2011/08/03(水) 12:16:56.93
>>66
そうかあ。
query_string.split(/&/).inject({}){|h,e|k,v=e.split(/=/);h[k.intern]=v;h}
とか思わずやってたりしない?しないか。これは失礼。

68 :59:2011/08/03(水) 13:20:46.92
ActiveSupport::HashWithIndifferentAccess なんかはどうやってるんだろう、
と思ってみてみたら、中ではキーを String にして扱ってるんだね。
これじゃあ Symbol で高速にするというメリットは全然無くて
何やってんだこれって感じだなあ。
「速い」以外で Hash のキーを Symbol にするメリットって何かあるのかな?

69 :デフォルトの名無しさん:2011/08/03(水) 22:30:37.08
ハッシュのキーって文字列とシンボルでほんとに速度に差があるんだっけ?


70 :デフォルトの名無しさん:2011/08/03(水) 23:36:39.64
うーんと、キーの Object#hash の計算にどれだけ時間がかかるかがポイント
String#hash は現在の内部文字列を見ていちいち計算してるから遅い
Symbol#hash は生成されたときに決まった一定の値を常に返すから速い

でどう

71 :デフォルトの名無しさん:2011/08/04(木) 00:30:50.39
>>67-68
>>67みたいなことはやんないなあ。intern自体の使用頻度が稀だと思う。
Symbolは基本的にはコードに直書きするときか、直書きされたシンボルを扱う前提の処理にしか使わないや。

「内部的に数値な文字列」という解釈も「文字列ではない」というのを強調する意味で確かにアリなんだけど
その本質は「処理上の名前、ラベル」だと思う。
いずれにせよ、文字列とは根本的に違うもの、というのが強調できるのがポイント。

例えば:
・x.hoge = fuga というのを成り立たせるようなオブジェクトxをclass文とかattr_系使ってわざわざ作成するのがだるい場合に属性名をキーに置き換えたハッシュで使う
→ x[:hoge] = fuga
・メソッド名やモジュール名などを引数とするメソッドで、名前の指定に
→ attr_accessor :hoge
・メソッドの引数を「パラメータ名=値」の形式で欲しいとき(パラメータとなり得る要素が多い場合や省略可能な引数が多い場合など)にパラメータ名をキーとしたハッシュとして指定してもらう
→ create_foo(:title=>'bar', :height=>480, :width=>640)
・引数として数種類の「名のある、順序のない値」を要求したい場合にシンボルで渡してもらう
→ change_mode(:FOOBAR_MODE)

72 :デフォルトの名無しさん:2011/08/04(木) 19:05:56.58
ブロックとProcとlamdaの違いを教えて下さい。nextとbreakとか

73 :デフォルトの名無しさん:2011/08/04(木) 22:14:34.51
>>71
>その本質は「処理上の名前、ラベル」だと思う。
ふつうは、Symbolが「名前」や「ラベル」なら、やっぱり文字列と同じじゃん、と思うよ。
こんな説明で「文字列とは根本的に違うもの」と言われても、納得できない。

74 :デフォルトの名無しさん:2011/08/04(木) 23:52:54.16
C言語でいうdefine定義した定数とか、enumとかでしょ
文字列とは大違い

75 :デフォルトの名無しさん:2011/08/05(金) 01:22:16.51
>>72
ttp://doc.ruby-lang.org/ja/1.8.7/class/Proc.html
ttp://doc.ruby-lang.org/ja/1.9.2/class/Proc.html

76 :デフォルトの名無しさん:2011/08/05(金) 09:26:38.37
>>73
理解力のない馬鹿はほっときゃいいんだよ
遅かれ早かれどうせ脱落するんだから

77 :デフォルトの名無しさん:2011/08/05(金) 11:39:33.79
Ruby に alarm(3) を呼ぶ機能って無いですか?

78 :デフォルトの名無しさん:2011/08/05(金) 15:26:50.72
下記のソースでclass Aの名前が変更されたときにA.bが動くようにしようと思い、
A.b('hoge')をself.b('hoge')に変更しましたが、ArgumentErrorが発生してしまい、
希望と違う結果になりました。
どのようにするのが正解なのでしょうか?

class A
 class << self
  def b(param)
   puts "#{param}"
  end
 end

 def b
  A.b('hoge')
 end
end

A.new.b

79 :デフォルトの名無しさん:2011/08/05(金) 15:32:15.31
>>78
self.class.b('hoge')

80 :デフォルトの名無しさん:2011/08/05(金) 15:34:33.09
> class A の名前が変更されたとき
ぬーん…?

まあ、ともあれ、
class A
def self.cls; puts "#{self}です"end
def main
A.cls
end
end
としたとき、 A.new.main は「Aです」と表示するが、
class B < A; end
B.new.main
であっても「Aです」と表示する
いわゆるクラスメソッドはクラスオブジェクトに属するインスタンスメソッドなので、
継承後のクラスオブジェクトのインスタンスメソッドclsを呼ぶようにすればいい

class A
def self.cls; puts "#{self}です"end
def main
self.class.cls
end
end


81 :デフォルトの名無しさん:2011/08/05(金) 15:41:55.84
>>79-80
ありがとうございます。

82 :77:2011/08/05(金) 16:10:34.76
ソースを grep alarm したけど無いっすね。
スレッドの実装で使ってる setitimer(2) と競合するからですかね。
RubyInline で alarm(3) しようかとも思いましたが、
何が起こるかわからなくて怖いので、まあ諦めます。

83 :デフォルトの名無しさん:2011/08/05(金) 16:25:54.42
>>82
Process.killでSIGALRMを送るってのはどうですか?

84 :デフォルトの名無しさん:2011/08/05(金) 17:18:06.71
class myClass

def myMethod()
myOtherObject
end

end


myMethod()の意味がわからないんだけど
return myOtherObject.new()
と同じ意味?



85 :デフォルトの名無しさん:2011/08/05(金) 17:27:11.37
>>84
return myOtherObject


86 :デフォルトの名無しさん:2011/08/05(金) 17:37:18.30
>>85

"return"は省略できるの?



87 :デフォルトの名無しさん:2011/08/05(金) 17:41:31.17
return の省略はできない

ただし、それとは別に、メソッドの戻り値は自動的に最後の処理の値になる
処理が1個しかないから、my_method の戻り値は my_other_object になる

あと、Rubyではローワーキャメルケースは全く使わない
(使ってるのは、他の言語から来てこの傾向をまだ知らされてない人)
アンダースコアで区切ってくれ

88 :デフォルトの名無しさん:2011/08/05(金) 17:48:50.75
>>87

ふむふ、了解、トンクス



89 :デフォルトの名無しさん:2011/08/05(金) 18:33:07.11
うん、returnを書く必要が通常そもそもないんであって、return を省略できるというのとはちょっと違うな

90 :デフォルトの名無しさん:2011/08/05(金) 20:25:46.61
sqlite3の使い方を勉強したいのですが、
あまり大きくないアプリでオープンソースなものありませんか?

91 :デフォルトの名無しさん:2011/08/05(金) 22:04:11.49
いみふ

92 :90:2011/08/05(金) 22:44:12.09
>>91
読み返すと確かに。
sqlite3を使ってるサンプルソースを見たいのです。

93 :デフォルトの名無しさん:2011/08/05(金) 22:45:24.71
軽量Rubyのα版ってのが7月末ごろにリリースされたんじゃなかったっけ?
どこで手に入れることができるの?

94 :デフォルトの名無しさん:2011/08/05(金) 23:51:23.28
>>93
来年春頃。
RubyKaigi 2011でRiteについてmatzが話している。

95 :デフォルトの名無しさん:2011/08/06(土) 07:56:19.96
ファイルの情報を取得するctimeとmtimeって何が違うんですか?

96 :デフォルトの名無しさん:2011/08/06(土) 08:19:35.76
内容がmtimeで属性がctime。


97 :デフォルトの名無しさん:2011/08/06(土) 09:28:32.05
ていうか、これはたいてい説明がついてると思うのだが
説明すらないんか

98 :デフォルトの名無しさん:2011/08/06(土) 09:44:34.74
mtime のほうは不親切かも?

新リファレンス
ctime(filename) -> Time
状態が最後に変更された時刻を返します。 状態の変更とは chmod などによるものです。
mtime(filename) -> Time
最終更新時刻を返します。

とはいえmtimeだけだと分からんかもな。

旧リファレンス
ctime は状態が最後に変更された時刻、 mtime は最終更新時刻を Time オブジェクトとして返します。
なお、ctime における状態の変更とは chmod などによるものです。


99 :デフォルトの名無しさん:2011/08/06(土) 10:22:20.70
そもそもの mtime と ctime そのものだからな…
ファイルを作成すると、mtime と ctime が更新される
ファイル内容を編集しても、mtime と ctime が更新される
ファイルの読み書き実行や所有者、リンク数などの属性を変更したら、ctime だけ変更される
ファイルを普通に通常コピーすると、mtimeは保持され、ctime はコピー時刻になる

100 :デフォルトの名無しさん:2011/08/06(土) 18:16:15.84
UNIX の man をそつなく調べれるレベルじゃないとこのへん辛いよね。

101 :デフォルトの名無しさん:2011/08/06(土) 19:07:21.31
「select(2) と同じ」とかな・・・


102 :95:2011/08/06(土) 19:28:11.97
回答ありがとうございます。
Unixに疎いのでmtime、ctimeという存在自体知りませんでした。
勉強になりました。

103 :デフォルトの名無しさん:2011/08/06(土) 20:58:09.06
ctimeを作成(creation)時刻と説明している書籍・記事は窓から投げ捨てよう。


104 :デフォルトの名無しさん:2011/08/06(土) 23:05:05.55
>>103
ホントは何のCなの?

105 :デフォルトの名無しさん:2011/08/06(土) 23:08:37.64
change だね。


106 :デフォルトの名無しさん:2011/08/06(土) 23:38:39.98
ってことはmはmake?

107 :デフォルトの名無しさん:2011/08/06(土) 23:44:50.72
modifyじゃね

108 :デフォルトの名無しさん:2011/08/07(日) 00:12:13.17
…じゃあ、作成日は何timeなのでしょうか

109 :デフォルトの名無しさん:2011/08/07(日) 01:09:48.03
UNIXのファイルシステムには作成時刻は記録されていません。


110 :デフォルトの名無しさん:2011/08/07(日) 03:53:36.30
Windowsだと
作成日時と更新日時
なんじゃね?


111 :デフォルトの名無しさん:2011/08/07(日) 04:33:30.87
紛らわしいからmacで統一しろ

112 :デフォルトの名無しさん:2011/08/07(日) 04:37:22.97
WIndows では Modify と Access と Created と Entry Modifiied の4つ
Entry Modified は内部値で、エクスプローラでは表示されない
編集アプリケーションによっては時々空っぽになってる不思議値ちゃんだが

慣習として、 NTFS に対する ctime 相当は Etime を読んでるは…ず

113 :デフォルトの名無しさん:2011/08/07(日) 10:44:19.34
作成日ないのか、ちょっと意外
ちょっと自分でも調べてみたけど、使い分けがよく解らん…
…が、これ以上はUnix板かどっかで聞こうと思います、ありがとうございました

114 :デフォルトの名無しさん:2011/08/07(日) 11:16:00.13
ファイルの本文内容が編集され変更された場合はmtimeが更新される
ファイルがコピーされたり移動されたりして来た場合は、ctime にコピーや移動の時刻が記録される(mtimeは不変)
ユーザーがファイルの所有権をコマンドで変更した場合も、ctime にコマンドの実行時刻が記録される(mtimeは不変)

いちいち ctime 変更すんなカス、という需要(など)向けに cpio と呼ばれるコマンドがあり、これはコピーしても ctime を変更しない

いわゆるファイル変更の検知は mtime でいいはず
そのファイルがいつからそこにあるのかの値が ctime

これだと一般向けではたいへん不便なので、マッコスXではファイル作成時刻も独自に記録している

115 :デフォルトの名無しさん:2011/08/07(日) 11:17:45.47
作成日がわからないってUNIXって欠陥OSなんですね

116 :デフォルトの名無しさん:2011/08/07(日) 12:19:17.32
>>115
そうですね。
世の中に欠陥のないOSはありませんしね。

117 :デフォルトの名無しさん:2011/08/07(日) 13:28:35.88
作成日がわかったらなにかいいことあるのか?
実用上は更新日だけで充分だよ

118 :デフォルトの名無しさん:2011/08/07(日) 13:29:57.53
一番しょうもない意見言っちゃったな

119 :デフォルトの名無しさん:2011/08/07(日) 15:04:42.68
自分なりにいろいろ調べたつもりなのですが、
cgi/session の session_path の指定方法がわからなくて困っています。
どう設定したらよいのでしょうか?
教えてください、お願いします。

120 :デフォルトの名無しさん:2011/08/07(日) 17:19:16.88
http://www.ruby-lang.org/ja/downloads/に何種類かwindows用バイナリへのリンクがあるけど、
今1.9.2-p290に追従してるのはone-click ruby installer for windowsだけだよね
公式リンクされてるのに他はメンテ止まってるの?

121 :デフォルトの名無しさん:2011/08/07(日) 18:45:53.86
公式で紹介があるだけで、別に公式じゃないからなあ
超緊急なセキュリティフィックスがあるわけでもないし、こんなもんじゃね

122 :120:2011/08/07(日) 21:04:11.25
>>121
そういうものか、ありがとう
英語版ではruby installer一択になってるし、ruby installerにしときます
しかし公式ページは英語版の方が充実してるんだなぁ

123 :デフォルトの名無しさん:2011/08/08(月) 02:51:35.78
devkitも入れとこうぜ!

124 :デフォルトの名無しさん:2011/08/09(火) 00:03:34.50
バグ報告をしたいのですが、どなたか教えていただけないでしょうか?

Ruby バグレポートガイドラインには、
「3. 以下のページを開き、New Issues をクリックする。 」
と書いてありますが、ページの先に「New Issues」がなくて…


125 :デフォルトの名無しさん:2011/08/09(火) 00:28:54.44
>>124
Redmimeに登録してログインすると「新しいチケット」というメニューが表示される。

126 :124:2011/08/09(火) 00:53:11.17
>>125
早速登録してみることにします。

登録しないと駄目なのかな?とは思いつつも、登録ページに説明が全くないので、
いきなり登録とかしていいのかな?と及び腰になっていました。

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


127 :デフォルトの名無しさん:2011/08/09(火) 02:13:08.01
解説書くような人は普段から常にログイン状態になっててそれが普通のことだと思ってるからな
まあ、テスト重要ってことだ

128 :デフォルトの名無しさん:2011/08/09(火) 08:58:05.54
あー、redmine に登録しないでも ML 連携機能で一応作れたりはするんだが、
いろいろややこしくて、事実上非推奨だからな。

あと、まずは ruby-dev に投げる、というのもとりあえず悪くはない。

129 :デフォルトの名無しさん:2011/08/09(火) 10:41:43.22
redmineってrails3では使えないから使わない。


130 :デフォルトの名無しさん:2011/08/09(火) 11:36:14.65
>>129
別にそういう話をしてるわけじゃないっつーの。

131 :デフォルトの名無しさん:2011/08/09(火) 11:45:24.39
Net::HTTP.version_1_2

これって何してるんでしょうか?
「おまじない」って説明ばかりで...

132 :デフォルトの名無しさん:2011/08/09(火) 11:49:32.42
とても古いメソッドを破棄して、新メソッドを使用するように設定する記述

Ruby 1.8 からはこれ相当がデフォルトで有効になってるので。記述する必要はまったくない

133 :131:2011/08/09(火) 12:01:36.80
>>132
ありがとうございます。

134 :デフォルトの名無しさん:2011/08/09(火) 12:02:42.43
Net::HTTP の バージョン 1.1 ってのは、太古の昔の ruby 1.6 と呼ばれるものに付属してたやつ
Net::HTTP の バージョン 1.2 は、ruby 1.8 と 1.9 以降の現行に付属してるやつ

ruby 1.6 上で Net::HTTP.version_1_2 と書くと、Net::HTTP の バージョン 1.2 の内部メソッドが使用されるように切り替わる
ruby 1.8 上で Net::HTTP.version_1_1 と書くと、Net::HTTP の バージョン 1.1 の内部メソッドが使用されるように切り替わる

現行の ruby 1.8 と ruby 1.9 において、Net::HTTP.version_1_2 を起動させる必要はまったくない
まあ、誰も解説しないのも良くないんだけど、誰もソース読まないのも正直どうかと思う

135 :デフォルトの名無しさん:2011/08/09(火) 12:04:51.88
require 'rubygems'も1.9では要らないんだっけ?

136 :デフォルトの名無しさん:2011/08/09(火) 12:10:38.71
>>135
いらない
require 'rubygems' と書いてあったときは、ほぼコストゼロで、単に無視される

Ruby 1.8.x でも書かずに済むようにしようという草の根運動があったんだけど、まあ見事に頓挫した
Ruby 1.8.x でも動作するスクリプトの場合は書かないとものすごく不親切
Ruby 1.9.x でしか動作しないスクリプトであるなら、書く必要はないというか「もしかして1.8でも動く?」とか期待させるのでよくない

137 :デフォルトの名無しさん:2011/08/09(火) 12:13:44.00
shebangに#!/usr/local/bin/ruby1.9とか書いちゃう俺
「ああ、これ1.9前提のコードなんだな…」って思ってくれる…よね?

138 :デフォルトの名無しさん:2011/08/10(水) 08:46:14.54
マジックコメントでいいじゃん

139 :デフォルトの名無しさん:2011/08/10(水) 09:10:54.20
Emacs使ってない人はこれだから

140 :デフォルトの名無しさん:2011/08/10(水) 09:11:34.82
Emacs使いは初心者ではない

141 :デフォルトの名無しさん:2011/08/10(水) 09:15:06.79
>>139
そんなこと言うと
# -*- encoding: utf-8 -*-
という書き方を標準にするぞ

>>140
Emacs の使用と Ruby 初心者かどうかには相関はない

142 :デフォルトの名無しさん:2011/08/10(水) 10:54:45.76
> Emacs の使用と Ruby 初心者かどうかには相関はない

根拠は?

143 :デフォルトの名無しさん:2011/08/10(水) 10:57:16.77
そりゃ Ruby は単体でプログラム言語だからだろ
Emacs に習熟しないと Ruby が使えず、Ruby が使えないと Emacs を活用できないというのならその論理は成り立つが

144 :デフォルトの名無しさん:2011/08/10(水) 11:05:02.70
おまえ確率・統計と集合理論の区別がついてないだろ

145 :デフォルトの名無しさん:2011/08/10(水) 11:08:03.50
何もそんな難しいこと言わなくても
Emacs使ってます。今日からRuby始めます
そんな人がお前はRuby初心者じゃないなんて言われたら驚くだろう

146 :デフォルトの名無しさん:2011/08/10(水) 11:22:17.47
Emacs使ってます。今日からLisp始めます。
でも成り立つかも。

147 :デフォルトの名無しさん:2011/08/10(水) 11:47:41.19
>>145

おまえ確率・統計と集合理論の区別がついてないだろ

148 :デフォルトの名無しさん:2011/08/10(水) 13:57:50.65
Emacs使ってます。今日からプログラミング始めます。
でも成り立つだろ。

日本じゃ馴染み薄いけど、あっちじゃ執筆ツールとしてEmacs使われてるんだから。

149 :デフォルトの名無しさん:2011/08/10(水) 19:18:53.47
system(cmd)のcmd部分をエスケープ処理したいのですが、
何かライブラリ等ご存知ないでしょうか。

150 :デフォルトの名無しさん:2011/08/10(水) 19:29:39.56
>>148
標準添付の shellwords とか。

下手にやると簡単にセキュリティホール作り込むことになりかねないので注意してな。

151 :デフォルトの名無しさん:2011/08/10(水) 21:01:55.64
複数引数のsystemならシェルは経由されない

152 :デフォルトの名無しさん:2011/08/10(水) 21:19:50.74
シェル経由されないってなんだろうね

153 :デフォルトの名無しさん:2011/08/10(水) 21:24:42.86
リダイレクト記号やらグロブやらがシェルで解釈されてしまうことがない、かな。


154 :デフォルトの名無しさん:2011/08/11(木) 15:47:32.78
ruby 1.87 を使っています。
rubyのプログラムからmysqlにデータを書き込んでいたら、
突然フリーズし、再起動後
ファイルを実行しても
ruby: No such file or directory -- hallo.rb;(LoadError)
と表示されて動かなくなりました。

ruby -v
と打つと、 ruby 1.87と表示はされます。
この状態を治すにはどこをいじればよいでしょうか?

155 :154:2011/08/11(木) 16:04:43.82
自己解決しました。
ruby file.rb;
とやっていました。;これがいりませんでした。

156 :デフォルトの名無しさん:2011/08/11(木) 16:16:53.23
require 'rubygems'
require 'mysql'

doc = Mysql::new('localhost', 'root', 'pass','test')
doc.query("insert into table_d values ('2006-12-13')")

上のようなファイルでmysqlに書き込んでいるのですが、下記のように日付を変数として扱いたいのですが、
下のようにするとエラーがでます。どうやって変数にできますでしょうか?

require 'rubygems'
require 'mysql'

y = '2006-12-13'

doc = Mysql::new('localhost', 'root', 'pass','test')
doc.query("insert into table_d values (y)")

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

157 :デフォルトの名無しさん:2011/08/11(木) 16:26:12.19
Rubyに関する基本的な解説を何かでまとめて学ぶことをお勧めする
それに回答したとしても、間違いなく、5分後にまた別の質問が来るだろう

158 :デフォルトの名無しさん:2011/08/11(木) 16:37:33.14
いくらRubyを学んだところで、拡張ライブラリの使い方はわからんだろう

159 :デフォルトの名無しさん:2011/08/11(木) 17:06:14.39
>>158
mysql関係ないぞ

160 :デフォルトの名無しさん:2011/08/11(木) 17:52:53.90
他の言語でも同じだと思うが
文字列の中に変数名を書いてもただの文字列だ
文字列中に展開したいなら#{}でくくればよい

というかまずはググレ
文字列 変数 Ruby とでもググればでてくるだろ

161 :デフォルトの名無しさん:2011/08/11(木) 17:54:36.18
ただ問題は文字列がクエリ文字列だということだ

162 :デフォルトの名無しさん:2011/08/11(木) 17:57:16.45
ここまでなにがなんでもプレースホルダを教えてやらないおまえら最高。

163 :デフォルトの名無しさん:2011/08/11(木) 18:16:56.68
>>161
んなこと言ったら query メソッドなんて使うなという話になるぞ

164 :デフォルトの名無しさん:2011/08/11(木) 18:19:27.40
ならんがな

165 :デフォルトの名無しさん:2011/08/11(木) 18:29:24.71
#{}とか言っちゃう人はもっと勉強しましょう

166 :デフォルトの名無しさん:2011/08/11(木) 18:30:47.62
すまんかった
SQLなんて使ったことないもんで

167 :デフォルトの名無しさん:2011/08/11(木) 20:11:45.53
ここって初心者以外の人いるの?
初心者同士で回答しあってるだけ?

168 :デフォルトの名無しさん:2011/08/11(木) 20:17:55.30
Rubyそのものについては明らかに初心者ではない詳しい人がいるよ

169 :デフォルトの名無しさん:2011/08/11(木) 20:35:41.74
ひとくちにRuby使いと言っても、根本の部分以外の
各種ライブラリとかに関しての知識/経験は人それぞれだからな
俺はあまり経験が無い分野に関してはレスせずに見守ってる

170 :デフォルトの名無しさん:2011/08/11(木) 20:46:23.17
別に埋め込みでも動作するぞ
まあ、全部自前でエスケープしないといけないが

171 :デフォルトの名無しさん:2011/08/11(木) 21:47:30.17
で、生成される文字列がエスケープする必要ないのでそのまま書くことについて是非をうだうだと

>>167
この板のRuby初心者を集めて隔離するスレ

なので、すくなくとも書き込む人の中に初心者はいる
「回答」する人はあんまり初心者でもない
まあ、分野によっては初心者以下だったりもするが

見たとこ、科学や計算分野は弱い模様

172 :156:2011/08/11(木) 22:14:10.22
みなさまいろいろなお返事ありがとうございます。
プレースホルダというヒントをくださり、感謝です。
ぐぐって自分なりに調べていますが、まだ、解決できません。
もう少しがんばります。

173 :デフォルトの名無しさん:2011/08/11(木) 23:58:38.50
ActiveRecordとかSequelとか使えばいいんじゃないかと。

174 :156:2011/08/12(金) 02:22:50.61
>>173
ありがとうございます。さっそくSequelインストールしましたが、使いかってのよさを感じております。
MYSQLのtableの文字列(varchar)には、#{ }で変数を代入できるのですが、日付(date)や数字(int)
の場合の変数がわかりません。

175 :デフォルトの名無しさん:2011/08/12(金) 02:57:12.09
リファレンス読めばいいじゃん
http://sequel.rubyforge.org/documentation.html

176 :デフォルトの名無しさん:2011/08/12(金) 06:15:24.43
>>160
今さらだが、PerlやPHPだとそのまま変数名を書いても展開される。

$var = "Variable";
print "\$var: $var";

で $var: Variable と出力される。

177 :デフォルトの名無しさん:2011/08/12(金) 06:21:46.48
そのまま書くというか、変数表記自体がプレフィックスつきだからなあ

この理屈だとRubyもインスタンス変数あたりは埋め込みなしで書けてもいいことになるが

178 :デフォルトの名無しさん:2011/08/12(金) 06:29:28.36
変数に普段付けるプレフィックスと、文字列リテラル中のエスケープの
プレフィックスを一致させてるという謎設計、って解釈すればいいんですかね?

179 :デフォルトの名無しさん:2011/08/12(金) 06:35:00.95
トークンとして変数であることがかなりの確度で保証されているから、そのまま書くだけで置換されるようにしたのだろう
便利でいいことだ
利便性をどこに置くかの話で、特段、謎仕様でもない

厳密言うんだったら、文字列の生成と連結しか許さなくしてもよかったわけだし

180 :デフォルトの名無しさん:2011/08/12(金) 07:40:47.40
よく考えてあるんだな、角度とか

181 :デフォルトの名無しさん:2011/08/12(金) 08:08:12.97
あれ、Struct で読み込み専用アクセサ作ることってできたっけ?

182 :デフォルトの名無しさん:2011/08/12(金) 08:54:19.15
PerlやPHPほどでないにしても、sigil付きの変数なら#だけでいけるね

@var = "an instance variable"
print "@var is #@var"

183 :デフォルトの名無しさん:2011/08/12(金) 08:58:34.84
S = Struct.new(:a, :b) do
undef :b=
end

s = S.new(10, 20)
s.a #=> 10
s.b #=> 20
s.a = 100 #=> 100
s.b = 200 #=> undefined method `b='

でよければ。


184 :デフォルトの名無しさん:2011/08/12(金) 09:03:36.63
s[:b] = 100 や s[1] = 100 は出来るな…
[]= も再定義して引数チェックしないとダメか。


185 :デフォルトの名無しさん:2011/08/12(金) 09:45:34.48
Ruby において、メソッドを直接除去してしまうのは一般に「できる」と言っていいレベルではない気がしないでもない

ちょっと前に調べた限りでは、attr_reader みたいなオプションがあれば楽なんだけど、ないんだよね
代入しないでくださいとでっかくマジックで書いとけという結論になった

186 :デフォルトの名無しさん:2011/08/12(金) 13:10:39.74
何だかんだでクラス作っちゃうのが楽だったり

187 :デフォルトの名無しさん:2011/08/12(金) 14:07:59.90
この言語でゲームとかって作れるんですか?

188 :デフォルトの名無しさん:2011/08/12(金) 14:15:08.93
はい作れます

189 :デフォルトの名無しさん:2011/08/12(金) 16:20:05.99
最初に作ったのは、ヒット&ブローだった。

190 :デフォルトの名無しさん:2011/08/12(金) 18:06:24.31
FPSとか3Dグラが動くようじゃなきゃ『ゲームが作れる』とは言えないでしょういまどき

191 :デフォルトの名無しさん:2011/08/12(金) 18:09:32.97
いいえ、作れません

>>190
ほれ、これで満足かい?

192 :デフォルトの名無しさん:2011/08/12(金) 18:18:40.36
いいえ、作りません。

193 :デフォルトの名無しさん:2011/08/12(金) 18:25:46.14
3Dのも作れるで

194 :デフォルトの名無しさん:2011/08/12(金) 19:00:19.80
3Dというものは存在しない
お前は1970年代の新聞か

195 :デフォルトの名無しさん:2011/08/12(金) 19:06:22.54
できるかできないかといわれたらできる

あれ?これ何度も見てる気がする

196 :デフォルトの名無しさん:2011/08/12(金) 19:25:54.63
>>194
人間の目が2.5次元しか見えてないんだっけか

197 :デフォルトの名無しさん:2011/08/12(金) 19:40:41.33
特定の3Dオブジェクト表示プログラム用のデータを書き出させることを自力でやろうと思えばできます、みたいな慎重な表現になるな

198 :デフォルトの名無しさん:2011/08/12(金) 20:34:37.35
ライブラリをラップしたやつあるんだって

199 :デフォルトの名無しさん:2011/08/12(金) 20:40:10.97
ゲーム分野はよく知らんのだが、昔のRubyKaigiで
StarRubyとかが紹介されてなかったっけ?
軽いゲームなら何とかなりそうだったが

200 :デフォルトの名無しさん:2011/08/13(土) 16:37:49.44
Windows7 64bit Ruby1.9.2p290
下記の画像のコードを実行すると
http://sakurasite.homeip.net/imgboard/img-box/img20110813162555.png
下記のエラーが発生しました
http://sakurasite.homeip.net/imgboard/img-box/img20110813162912.png
C:\Users\*>"C:\Users\*\Desktop\tes.rb"
["C:\\Users\\*\\desktop\\文字化け"]#←文字化けの部分は実際は化けてる。念のため置き換え
C:/Ruby192/lib/ruby/1.9.1/fileutils.rb:243:in `mkdir': "\x85\xE3" from Windows-31J to UTF-8 (Encoding::UndefinedConversionError)
from C:/Ruby192/lib/ruby/1.9.1/fileutils.rb:243:in `fu_mkdir'
from C:/Ruby192/lib/ruby/1.9.1/fileutils.rb:204:in `block in mkdir_p'
from C:/Ruby192/lib/ruby/1.9.1/fileutils.rb:201:in `each'
from C:/Ruby192/lib/ruby/1.9.1/fileutils.rb:201:in `mkdir_p'
from C:/Users/*/Desktop/tes.rb:33:in `mkdirR'
from C:/Users/*/Desktop/tes.rb:27:in `getImage'
from C:/Users/*/Desktop/tes.rb:13:in `block in analizeGigazine'
from C:/Users/*/Desktop/tes.rb:9:in `scan'
from C:/Users/*/Desktop/tes.rb:9:in `analizeGigazine'
from C:/Users/*/Desktop/tes.rb:46:in `<main>'
#--ここまで
文字コードはUTF-8です。
rbファイルに直接path="ほげほげ"と書き込んだ時は正常にFileUtils.makedirs出来たのに
Net::HTTPでutf-8のHPを取得し、そのソースから文字を抽出し、その抽出した文字をフォルダ名と指定してFileUtils.makedirsすると
上記のエラーが出る理由が分かりませんでした

rbは以下のURLです。実行すると38行目のパスにフォルダを作るので(これは成功するはず)適当にパスを書き換えて下さい
http://sakuraweb.homeip.net/uploader/src/up156600.zip

201 :デフォルトの名無しさん:2011/08/13(土) 17:27:50.84
Ruby 1.9 のNet::HTTP の HTTPResponse#body は、文字エンコーディングが ASCII_8BIT のままだ
人間が適当に文字エンコーディング情報をつけてやる必要がある
ファイルのマジックコメントが UTF-8 だからといって、Net::HTTP で取得するファイルの文字エンコーディングが自動で書き込まれたりはしない(むしろ怖い)

analizeGigazine(res.body.force_encoding('UTF-8'))

とでも書いとけ

「ファイルパスをWindows-31Jに変換したいと思ったが、
渡された文字列がそもそもどんな文字エンコーディングで書いてあるかわからないので変換できません」というエラーだ

202 :デフォルトの名無しさん:2011/08/13(土) 17:38:16.05
>>201
でもそれだったら>>200のエラーメッセージのfromとtoが逆じゃね?


203 :デフォルトの名無しさん:2011/08/13(土) 17:40:41.31
1.9は知らないがUTF-8に"\x85\xE3"に対応する文字がありますんエラーに見える
それはともかくユーザ名が画像の中に入っちゃってるぞ>>200

204 :デフォルトの名無しさん:2011/08/13(土) 18:14:59.04
>>201-203
rubyは変数に個別に「この文字コードはxxだ」って指定しないといけないのか
ありがとうございます、出来ました

>>203
消した後に気付いて直すのめんどいからまあいいや〜って

205 :デフォルトの名無しさん:2011/08/13(土) 18:47:49.82
いや、普通は継続される
UTF-8 のマジックコメントのあるスクリプトファイルに書いた "文字列リテラル" は何もしなくても UTF-8 だし、
UTF-8 の文字列から正規表現や String#scan で抜きだした文字列も(普通は)そのまんま UTF-8 だ

Net::HTTP が「なんだかよくわからない外部」から文字列を持ってくるという、Ruby の文字列から見て特殊な動作をしているだけ

206 :デフォルトの名無しさん:2011/08/13(土) 19:10:05.84
継続?

207 :デフォルトの名無しさん:2011/08/13(土) 21:29:40.36
継承とか伝搬とか、言いたいことは分かった。


208 :156:2011/08/14(日) 14:15:07.98
ここの人はだいたい何歳ぐらい?
おいらは31歳

209 :156:2011/08/14(日) 14:16:01.20
誤爆失礼しました。

210 :デフォルトの名無しさん:2011/08/15(月) 11:28:14.39
Emacs23でruby-mode使って書いています。
(ttp://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/misc/ ここからDL)
たのしいRuby 第3版 P.136のpoint.rb
class Point
attr_accessor :x, :y
protected :x=, :y=
このあとに、\C-j で改行+インデントするとインデントがずれてしまいます。
protected :x=, :y=; のように';'を追加すれば問題ないのですが・・・。
どなたか解決策ご存じの方、教えてください。よろしくお願いします。

211 :デフォルトの名無しさん:2011/08/15(月) 11:41:15.57
OSを再インストールする時、rubyはどこをバックアップすれば元の環境に復元できるのでしょうか
そのままrubyフォルダを上書きで大丈夫でしょうか
通したパスやファイルの関連付けは分かるのですが、例えばgemでインストールした機能も正常に動作してくれるのでしょうか

212 :デフォルトの名無しさん:2011/08/15(月) 11:48:27.38
OS とインストール方法を書いた方が良いよ。

213 :デフォルトの名無しさん:2011/08/15(月) 11:50:35.04
>>210
そのへんいつまで経っても直らないんだよね
っていうかruby-mode.elはEmacsの管轄になったんじゃなかったっけ

…Emacsのほうが古いな
http://git.savannah.gnu.org/cgit/emacs.git/log/lisp/progmodes/ruby-mode.el

214 :デフォルトの名無しさん:2011/08/15(月) 11:57:54.15
>>213
昔からあるバグでしたか・・・。
Emacsの方が古いので、新しいのを試しましたが直ってないようですね。

とりあえずこの問題は置いといて先に進もうと思います。

215 :デフォルトの名無しさん:2011/08/16(火) 00:57:14.08
WINのコマンドプロントで、irbモードにしたときに、コピペが使えるようになる方法はありますか?

216 :デフォルトの名無しさん:2011/08/16(火) 01:29:15.23
>>215
コマンドプロンプトのタイトルバーで右クリック、編集→貼り付け

217 :デフォルトの名無しさん:2011/08/16(火) 01:32:59.48
>>216
出来ました。ありがとうございます!!!!(^ ^)

218 :デフォルトの名無しさん:2011/08/18(木) 03:57:18.38
Rubyではメソッドをネストで定義できますがどういう時に役立つのでしょうか?

219 :デフォルトの名無しさん:2011/08/18(木) 05:35:49.70
ネストで定義はできません
単に「def ... end はメソッド定義機構としてどこででも書ける」だけです

def aaa
 def bbb
  ...
 end
end



def aaa
 このタイミングでメソッドbbbを追加する()
end

と同じような意味しかないです
「aaaメソッドの動作中にメソッドbbbを(現在のselfに対するインスタンスメソッドとして)追加で定義する」以上のなにものでもないです

220 :デフォルトの名無しさん:2011/08/18(木) 09:48:46.59
それがどういうときに役立つか、応用例を聞いているのでは?

221 :デフォルトの名無しさん:2011/08/18(木) 11:33:15.30
aaaの中で定義したbbbはaaaの外からでも使えますか?

222 :デフォルトの名無しさん:2011/08/18(木) 11:37:08.92
メソッドのスコープはクラスにはりつくので、

class Foo

def aaa
 def bbb
  ...
 end
end

end

における bbb は Foo#bbb なわけです。

223 :デフォルトの名無しさん:2011/08/18(木) 11:38:03.08
>>220
あとからメソッドの中身を決めたい時とか?(定義しないという判断も含めて)

>>221
使える。

224 :デフォルトの名無しさん:2011/08/18(木) 11:41:59.22
>>222
Foo#aaa#bbb
とかにならないんですか?

225 :デフォルトの名無しさん:2011/08/18(木) 12:11:52.80
>>224
ならない。
Rubyのdef文は関数を作るのではなく、常にメソッドを作る文だからね。
ローカル関数のようなものが欲しいなら、Procクラスを利用する。(proc{}やlambda{}で簡単に利用出来る)

226 :デフォルトの名無しさん:2011/08/18(木) 12:18:10.24
>>220
ぶっちゃけ、これ単体ではあんまりない
まあ。これが機能するからこそ、メソッド名とかをその場で決められる

def aaa
 instance_eval "def hoge_#{name}; ...; end"
end

みたいなのが動作するんだけどね

あと、ちょっとでも馴れてる人は def を eval するのはやめて define_method 使いましょう

227 :デフォルトの名無しさん:2011/08/18(木) 13:06:24.21
初回だけ処理するとか。

class Foo
def hoge
def hoge
end
puts "The 1st hoge"
end
end


228 :デフォルトの名無しさん:2011/08/18(木) 13:26:09.92
class Foo

def aaa
 def bbb
  ...
 end
end

def ccc
 def bbb
  ...
 end
end

end

f = Foo.new # bbbの再定義エラーにならず
f.bbb # エラー
f.aaa
f.bbb # 正常(1)
f.ccc
f.bbb # 正常(結果が(1)と違う)

やってみて判りました
馬鹿ですみません

229 :デフォルトの名無しさん:2011/08/18(木) 13:49:48.37
>>228
f.bbb # エラー
何でエラーになるかわからない。

f.ccc
f.bbb

f.aaa
f.bbb
の順番だとエラーにはならないのに。
f.bbbを先に書くとエラーになる。

230 :デフォルトの名無しさん:2011/08/18(木) 14:07:41.30
実行していないからでしょ

231 :デフォルトの名無しさん:2011/08/18(木) 14:12:46.04
aaaのメソッドを呼ばない限りbbbは定義されないって事?

232 :デフォルトの名無しさん:2011/08/18(木) 14:14:35.86
class Foo
def aaa
def bbb
end
end
end
f = Foo.new
f.bbb
f.aaa

C:/Users/hi/AppData/Local/Temp/rbDF46.tmp:8:in `<main>':
undefined method `bbb' for #<Foo:0x96d4e4> (NoMethodError)
Complete(1)

こうなるのは仕様なのかな?

233 :デフォルトの名無しさん:2011/08/18(木) 14:22:44.06
仕様。

module とか class は実はその場で実行されてるが、def は、ここから先対応する end までは
この場では実行しませんよ、メソッドとして呼び出されたら実行しますよ、というのが
Ruby の基本的な設計なので、そのあたりの意味が違ってたほうがいい、というのは、
事実上別の言語を設計する感じになる。

234 :デフォルトの名無しさん:2011/08/18(木) 14:43:39.09
def がネストできるように見えるというこのへんは批判されることがないでもない
便利なんだけど、一見さんには不親切だしキモい
一度理解してしまえば便利なんだけど、ネストの記法でなくてもよかったはずではあるのだ

class C
def aaa
def bbb; end
end
end

p C.instance_methods - Object.instance_methods #=> ["aaa"]
C.new.aaa
p C.instance_methods - Object.instance_methods #=> ["aaa", "bbb"]

きめえ!

235 :デフォルトの名無しさん:2011/08/18(木) 14:44:34.07
>>231
そゆこと。
Rubyのdef文はあくまで「そこに到達したときに、書かれた内容をメソッドとして作成する文」でしかないんだよ。
classやmodule文はそれを作成して、そのスコープで中身を実行するだけ。
だから、def bbbを実行するまではbbbは存在しないんだ。

236 :デフォルトの名無しさん:2011/08/18(木) 17:17:13.10
class は実行文、 def は定義文、と憶えてる。

237 :デフォルトの名無しさん:2011/08/18(木) 17:20:58.67
>>236
classは完璧にただの定数定義だよ

238 :デフォルトの名無しさん:2011/08/18(木) 17:59:00.75
class Main
puts "hello world"
end
でも、実行されるってことでしょ

そもそもincludeやattr_accessor
とか単なるメソッドなので
実行されないと困る


239 :デフォルトの名無しさん:2011/08/18(木) 18:59:50.72
負の数を2の補数で16進文字列にしようとすると先頭に..が付いてしまいます。
..無しで出力する方法はないでしょうか?
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
> "%.08x" % -10
=> "..fffff6"

240 :デフォルトの名無しさん:2011/08/18(木) 19:06:28.66
意味的にそういうものなので、文字列操作で消すのがいいと思う

241 :デフォルトの名無しさん:2011/08/18(木) 19:10:55.87
補数が欲しいなら、文字列メソッドで取ればいい
補数でなく-0000000aでいいなら、+を付けてそもそも補数表現をやめてしまう

242 :デフォルトの名無しさん:2011/08/18(木) 19:19:08.04
るりま曰く:
# 「精度」を指定した場合、".." は付加されません
p sprintf("%.10x", -1) #=> "ffffffffff"


嘘ばっかりや

243 :デフォルトの名無しさん:2011/08/18(木) 19:36:00.25
1.8.7 だとそうなるな。
どっかで変更が入ってる。

244 :デフォルトの名無しさん:2011/08/18(木) 21:34:20.03
Rubyは標準で多倍長整数が扱えるので補数表現で限られた桁数に切詰めるのはおかしい
という議論がバグトラッキングにあった気がする

245 :デフォルトの名無しさん:2011/08/18(木) 22:46:15.32
---文字列ここから----
≪書籍情報≫<br>

著者:尾田栄一郎<br>

出版社:集英社<br>

版型:新書版<br>

カテゴリー:少年コミックス<br>

連載雑誌:週刊少年ジャンプ<br>

最新刊発売日:2011年8月4日</p>
----ここまで----
今Mechanizeを勉強しててこの文字列をRubyで処理したいんですが
上記の複数行にわたってある文字列をpとして、
この文字列を<br>で区切って渡したいんですが
puts p.scan(/[^(<br>)]+/)とやっても
35:in `<main>': undefined method `scan' for #<Nokogiri::XML::Element:0x27e9358> (NoMethodError)
とエラーがでて上手くできない
\r\nとか\nを含めて考えてもエラーが出るばかりでうまくいきません

どなたかご教授願います(^p^)


246 :デフォルトの名無しさん:2011/08/18(木) 22:56:16.16
>>245
エラー内容からするとpの中身は文字列ではなく
Nokogiri::XML::Element のインスタンスみたいだぞ
まずはそいつから欲しい文字列を取り出さなきゃ

247 :デフォルトの名無しさん:2011/08/18(木) 23:04:27.53
>>245
Nokogiri のマニュアルくらい読め
英語な上に構造が恐ろしくわかりにくいけどな

at (やsearch)の戻り値は Nokogiri::XML::Document オブジェクト(の集まり)だ
String オブジェクトを利用するにはさらに inner_text メソッドか inner_html メソッドが必要

というか、Ruby に関する一般的な知識が不足してるように見受けられる

248 :デフォルトの名無しさん:2011/08/18(木) 23:09:00.67
どこまで「用意」してから臨めばいいのかってのは事前にはわからんしなあ
でもまあ
> undefined method `scan' for #<Nokogiri::XML::Element:0x27e9358> (NoMethodError)
くらい一般的なエラーは読み解いて欲しくはある
「ああ文字列じゃないのか、文字列にするメソッドは何だろう?」くらいは一発でわかって欲しい

249 :デフォルトの名無しさん:2011/08/18(木) 23:28:47.52
ところで /[^(<br>)]+/ という正規表現は
(、<、b、r、>、) 以外の文字の並び
だな。


250 :デフォルトの名無しさん:2011/08/18(木) 23:29:22.77
>>246
>>247
おお、inner_htmlつけたらできた
サンクス(^q^)

2日前からRubyはじめたけどMechanize楽しすぎ

251 :デフォルトの名無しさん:2011/08/18(木) 23:45:12.22
rubyである文字列を含まない正規表現ってクソ難しいんだな

252 :デフォルトの名無しさん:2011/08/19(金) 00:00:17.03
Ruby以外では簡単なのか?
Rubyでも!~や?!使えば簡単だと思うけど

253 :デフォルトの名無しさん:2011/08/19(金) 00:34:42.19
ある文字列を含む、の not じゃダメな理由を詳しく

254 :デフォルトの名無しさん:2011/08/19(金) 01:34:29.62
>>253
ごたごた細かいこといってんじゃねーよ
お前が考えろ、馬鹿

255 :デフォルトの名無しさん:2011/08/19(金) 10:33:34.96
not じゃダメと判断した理由を聞いているんだから、本人に聞くしかないでしょ。
お前が考えろ、とかいうのはおかしい。

256 :デフォルトの名無しさん:2011/08/19(金) 10:42:54.97
前もどっかで話した気がするが、いっこの「正規表現オブジェクト」として持ち歩けないのはめんどくさいと言えばめんどくさい
いつもは if @reg =~ str でいいのに、この場合だけ unless @reg =~ str や if @reg =! str としなければならない、みたいな

257 :デフォルトの名無しさん:2011/08/19(金) 11:57:51.05
だから否定の先読みがあるっつってんだろうがよ

258 :デフォルトの名無しさん:2011/08/19(金) 12:11:24.05
それを一般的には「めんどくさい」と言う

259 :デフォルトの名無しさん:2011/08/19(金) 12:30:19.30
確かに否定の先読みをいちいち設定していくのは俺もめんどくさいと思うが
>>256は、いっこの「正規表現オブジェクト」として持ち歩けないのはめんどくさいと言ってるからそこ注意な

260 :デフォルトの名無しさん:2011/08/19(金) 13:24:06.95
re = /[abc]/
er = /(?!#{re})./
re =~ "abc" # => 0
er =~ "abc" # => nil

こういうこと?

261 :デフォルトの名無しさん:2011/08/19(金) 18:14:54.24
abcdxyzjdusxyzgregregxyzzzzzzz
この文字列をxyzで区切るのメンドクサイよね

262 :デフォルトの名無しさん:2011/08/19(金) 18:18:29.44
区切り文字も必要で、しかもくっつけたり独立要素として保持したりしなければならない場合はとてもめんどくさい
区切り文字を捨ててもいいなら気楽なんだけど、そんなことばっかりじゃないしな

263 :デフォルトの名無しさん:2011/08/19(金) 18:23:29.89
>>261
s.split(/xyz/)
s.split(/(?<=xyz)/)

外れてたら欲しい結果も書いてくれ

264 :デフォルトの名無しさん:2011/08/19(金) 18:39:37.11
s.split(/(xyz)/)

265 :デフォルトの名無しさん:2011/08/19(金) 20:19:58.17
splitなんてもんがあったのかよ・・・
scanで一生懸命どうやってやるか考えてたわ

266 :デフォルトの名無しさん:2011/08/19(金) 20:22:52.20
いやsplitでどうやるかという話だろ

267 :デフォルトの名無しさん:2011/08/19(金) 20:39:58.88
最低限の実装すら知らないのに文句言うやつってメンドクサイよね

268 :デフォルトの名無しさん:2011/08/19(金) 20:49:07.20
なんでもいいので、StringとArrayとHashとEnumerableのメソッドは、どこにどんなのがあるか暗記するくらいの勢いで勉強してくだち
おーざっぱに用途を覚えるだけでいいです
実際の引数とか戻り値は使うときにマニュアル読めばいいだけなので、そんなのにわざわざカロリー使わないでいいです
スクリプト書く効率上、この4つのクラスのメソッドを覚えることは絶対に損をしないので

269 :デフォルトの名無しさん:2011/08/19(金) 20:59:40.98
scan使う場合はどうすればいい?考えてみたんだけど最後に空文字列が入ってしまう

"abcdxyzjdusxyzgregregxyzzzzzzz".scan(/(.*?(?:xyz|$))/).flatten
=> ["abcdxyz", "jdusxyz", "gregregxyz", "zzzzzz", ""]

270 :デフォルトの名無しさん:2011/08/19(金) 21:03:48.75
s.scan(/.+?(?:xyz|\z)/) かなあ
いかにもバグってそうで怖くて使えないけど

271 :デフォルトの名無しさん:2011/08/19(金) 21:07:56.69
scanではやらない

以上

272 :デフォルトの名無しさん:2011/08/19(金) 21:17:26.88
linesでデリミネータ指定でも一緒かな

273 :デフォルトの名無しさん:2011/08/19(金) 21:24:07.24
splitとscanはかなり直交してるからな
どっちかをどっちかで補うのは至難の業

274 :デフォルトの名無しさん:2011/08/19(金) 22:17:50.38
デリミタ?

275 :デフォルトの名無しさん:2011/08/19(金) 22:37:00.85
"abcdxyzjdusxyzgregregxyzzzzzzz".scan(/(.+?(?:xyz|\z))/).flatten
=> ["abcdxyz", "jdusxyz", "gregregxyz", "zzzzzz"]
"abcdxyzjdusxyzgregregxyzzzzzzz".lines("xyz").to_a
=> ["abcdxyz", "jdusxyz", "gregregxyz", "zzzzzz"]


276 :デフォルトの名無しさん:2011/08/20(土) 09:46:55.20
クラスを継承する利点ってどういうところでしょうか?
入門書を読んでいると継承せずにスーパークラスになる所に全部書き加えてしまえば良いのではないかと思ってしまうのですが・・・
何かRubyの質問というよりはプログラミング全般の質問みたいになってすいません。

277 :デフォルトの名無しさん:2011/08/20(土) 10:01:43.35
継承の利点は既に存在してるものに任せることができること、という利点はわかってる
ようなので、「スーパークラスになる所に全部書き加えてしまえば良いのではないか」の
ほうにコメントするけど。

そういうことはJavaではできなかったりするんだけど、Rubyではできちゃったりするけど、
なんでスーパークラスを直接書き換える、ということを普通はしないか、というと、
たとえば String に run_away というメソッドを追加したら、もしかしたら自分の使ってる
ライブラリのどこかが、String に run_away というメソッドがあったらおかしくなるかも
しれない。だから普通は継承したうえでメソッドを追加する。

Matz曰「継承は最後の武器だ」という言葉の通り、
http://www.rubyist.net/~matz/20030806.html を見ること)
あまりむやみに使うものでもない、ってのもある。

278 :デフォルトの名無しさん:2011/08/20(土) 10:06:09.06
>>276
子が親を継承しても、(その子以外の)親の利用者は影響を受けない
一方、親を直接変更したらその親の利用者すべてに影響が出る

279 :デフォルトの名無しさん:2011/08/20(土) 10:18:38.14
>>276
継承の必要度は言語にもよるし、やりたいことにもよる。
大規模なクラスライブラリを構築するなら継承は必須だが、少し自作するだけならあまり要らない。
特にduck-typingとmix-inを採用したRubyではあまり乱用すべきものじゃない。
Javaはduck-typingではないが、interfaceを使えば継承はそれほど必要でない。
C++はそれらを継承で賄わなければならないので、必須になるが慎重に行う必要がある。

280 :デフォルトの名無しさん:2011/08/20(土) 10:33:44.03
ういっす
「オブジェクト指向言語」なんてものは実際のところうまく存在し得なくて、
「オブジェクト指向の考え方を導入した独自言語C++」
「オブジェクト指向の考え方を導入した独自言語Java」
「オブジェクト指向の考え方を導入した独自言語Ruby」
でしかないのだな

あるオブジェクト指向(の考え方を導入した独自)言語でのやりかたは、オブジェクト指向そのもののやりかたとは違う
あくまで現実の実装に引っ張られまくった「C++の文法」「Javaの文法」「Rubyの文法」でしかない

281 :デフォルトの名無しさん:2011/08/20(土) 10:46:47.83
>>277-279
大規模なプログラムを作る時に、思わぬバグを避けるためという感じでしょうか。
なんとなくわかりました。ありがとうございます。


282 :デフォルトの名無しさん:2011/08/23(火) 18:30:39.59
マニュアルには『改行は行が明らかに次の行に継続する時だけ、空白文字として、
それ以外では文の区切りとして解釈されます。』と書いてあるけど、
foo + bar は+の前で改行するとNGで foo.each{…} は.の前後どちらでもOKなのはなんで?


283 :デフォルトの名無しさん:2011/08/23(火) 19:00:38.89
>>282
+の前で改行した場合は、単項演算子(+bar)として解釈されるってことじゃないの

284 :デフォルトの名無しさん:2011/08/23(火) 19:14:07.84
>>282
「記号の前の改行は文区切り、記号の後の改行は空白文字」
を原則にしてくだされ

つまり、改行するなら記号のあと

285 :デフォルトの名無しさん:2011/08/23(火) 19:19:56.51
>>282
行頭の.eachは1.8では通らなかったが、通るようになった
行頭の + bar は >>283 の通り単項と見分けがつかない

foo
+ bar

は「fooを呼び出し、barの正負をそのままに戻り値とする」と読めてしまうよ

286 :デフォルトの名無しさん:2011/08/23(火) 20:43:54.39
それって.だけ特別扱いなのか?
行頭が2項演算子としか解釈できないものならいけるかと思ったけど
2
** 3
はダメだった

287 :デフォルトの名無しさん:2011/08/23(火) 20:50:30.01
「記号の前の改行は文区切り、記号の後の改行は空白文字」
を原則にしてくだされ

つまり、改行するなら記号のあと

288 :デフォルトの名無しさん:2011/08/23(火) 20:52:09.69
だから>>284だって

289 :デフォルトの名無しさん:2011/08/23(火) 20:55:45.35
それはいいんだけど、.はなんで前でもOKなのか、
前でいけるのが他にもあるのかが知りたいんです

290 :デフォルトの名無しさん:2011/08/23(火) 21:00:06.65
.も記号なのに前で改行できるって面白いな
.は演算子じゃないから+とかとは別なのかな

291 :デフォルトの名無しさん:2011/08/23(火) 21:02:16.51
>>289
ドットは後で変更されたワケだから、どっかに理由載ってるかもね

292 :デフォルトの名無しさん:2011/08/23(火) 21:04:49.78
おまいら - のことを忘れてないか

293 :デフォルトの名無しさん:2011/08/23(火) 21:12:45.88
>>289
ドットと条件演算子は1.9で挙動が変更された

あと、記号の前で改行「してはいけない」

294 :デフォルトの名無しさん:2011/08/23(火) 22:34:03.31
.は特別なのね
皆の衆サンクス

295 :デフォルトの名無しさん:2011/08/23(火) 23:36:56.13
長いメソッドチェーンを複数行で書きたいからとか?
. の前で改行できると メソッドチェーンが続いてることがわかりやすいだろうし


296 :デフォルトの名無しさん:2011/08/24(水) 10:08:12.21
いくら改行を入れられるからといって、
改行を入れなきゃいけないほどメソッドチェーンを続けるのは良くないと思いまーす!

297 :デフォルトの名無しさん:2011/08/24(水) 10:32:36.20
> 記号の前で改行「してはいけない」
うむ

>>296
中途半端な変数よりはメソッドチェーンのほうが好ましい場合もある
そもそも「よくわかる変数名」「わかりやすいメソッド名」を使えば使うほど、
zzz =aaa(x,y,z).bbb 程度の処理でもヨコに長くなったりする

まあ、なんかどうしてもメソッドチェーン繋げようとする人も世の中にいることはいるんだが
バックスラッシュで改行を2回消した時点でなにかおかしいかなと思って欲しいところ
変数使え変数

298 :デフォルトの名無しさん:2011/08/24(水) 10:33:07.55
Kernelの特異メソッドはどこからでも呼べますが、どのような仕組みなのでしょうか?
自分で以下のように特異メソッドを定義しても呼び出せません。

def Kernel.my_method
end


299 :デフォルトの名無しさん:2011/08/24(水) 10:36:16.92
変数といえば思いだした

if aaa && bbb(x).ccc == ddd.eee.fff(y) then
...

みたいなのを

hoge_condition_is_ok = aaa && bbb(x).ccc == ddd.eee.fff(y)
if hoge_condition_is_ok then
...

と読み下しやすいような説明変数に帚き出して書くことについての是非プリーズ

300 :デフォルトの名無しさん:2011/08/24(水) 10:37:28.44
「どこからでも呼べる」のは「Kernelの特異メソッド」ではないから。

module Kernel
 def my_method
 end
end

301 :デフォルトの名無しさん:2011/08/24(水) 10:43:12.95
>>298
いわゆる「関数的メソッド」は Kernel モジュールのインスタンスメソッドで、Object クラスに include されてると思ってくれ

module Kernel
def open(...)
...
end
end

class Object
include Kernel
end

こんな感じ
実際は C で書かれてるから、こういう Ruby スクリプトがどこかにあるわけではないけど

302 :デフォルトの名無しさん:2011/08/24(水) 10:54:32.80
'http://www.2ch.net/'と'tech'を連結してURLを作りたい場合、
末尾に/をつけたかどうかがいつも困ってしまいます。
'http://www.2ch.net/' + '/' + 'tech'しちゃうと、/が2つになってしまうんですよね。

File.joinのURL版ってないでしょうか?
もしくは良い書き方...
皆さんどうされていますか?

303 :デフォルトの名無しさん:2011/08/24(水) 11:24:41.24
勘で適当に答えてみる
URIライブラリとかでやるのかな?と、るりまを見てみた
require 'uri'
URI.join('http://www.2ch.net/','tech').to_s
=> "http://www.2ch.net/tech"
URI.join('http://www.2ch.net','tech').to_s
=> "http://www.2ch.net/tech"

これでいいのかな?


304 :デフォルトの名無しさん:2011/08/24(水) 11:27:45.34
>>300-301
なるほど、そういうことですか。
全てのクラスがObejctを継承しているからどこからでも呼べるんですね。
d


305 :302:2011/08/24(水) 11:42:07.09
>>303
ありがとうございます

306 :デフォルトの名無しさん:2011/08/24(水) 11:42:31.89
>>302
require 'uri'

uri = URI.parse("http://example.com/")
uri.path = '/tech'
p uri.to_s
uri = URI.parse("http://example.com")
uri.path = '/tech'
p uri.to_s
uri = URI.parse("http://example.com/dir1/dir2")
uri.path = '/tech'
p uri.to_s


307 :デフォルトの名無しさん:2011/08/24(水) 14:44:21.15
先生しつもん。

id=>falseして、set_primary_keyで主キー変えてるんだけど、
この場合別途、add_indexしなきゃいけないもの?それとも勝手に張ってくれるもの?

あと、railsをどうしてもライルズって読んじゃうんだけど、だめ?

308 :デフォルトの名無しさん:2011/08/24(水) 15:44:57.10
>>1から抜いた愉快犯がいるんだよな
出会ったら殴られても文句は言えない

>>307
Railsの話題はRailsスレで
【RoR】Ruby on Rails Part12
http://hibari.2ch.net/test/read.cgi/php/1311050686/

309 :デフォルトの名無しさん:2011/08/24(水) 16:10:44.90
1.9に関する記述を外したときに
Railsスレへのリンクが>>3に移っただけかと

つかこのスレも前スレ埋まってから立てられたわけで愉快犯以前の問題だ

310 :デフォルトの名無しさん:2011/08/25(木) 19:14:11.99
それなりに巨大なオブジェクトをファイルに書き込みをする際、
「完了」か「書き込みなし」を保証する方法はありませんでしょうか?

現在のオブジェクトの内容をYAMLで保存する際、
書き込みを途中で失敗するぐらいなら、前回の書き込み内容を保存しておいて欲しいのです。
プロセスを外部から殺されることがあるので、せっかくの保存が消えてしまいます。
# Unixでいう、Ctrl-Cとかで殺されてしまいます...

何か良い案があれば教えて下さいm(__)m

311 :デフォルトの名無しさん:2011/08/25(木) 19:20:06.73
>>310
別のファイル名に出力してからmvするとか。

312 :デフォルトの名無しさん:2011/08/25(木) 19:21:25.29
>>311でFA
Ruby無関係の、ポピュラーなテクニック

313 :デフォルトの名無しさん:2011/08/25(木) 19:49:06.36
ですな
電源喪失とかの可能性まで考えたら、なんとかして確実に書き込もう、ってのは無駄な努力

314 :デフォルトの名無しさん:2011/08/25(木) 23:02:46.64
同じファイルシステム内のmvは1システムコール(rename(2))だから、
カーネルレベルではアトミックに行われると思っていいよね?
Maildirのtmpからの移動がそんな感じだし。

315 :デフォルトの名無しさん:2011/08/26(金) 09:54:12.28
よっこら

316 :デフォルトの名無しさん:2011/08/26(金) 09:56:58.85
んで

>>314
うん
mv以上に「安全」かつ慎重にやる手段は、通常はない

317 :デフォルトの名無しさん:2011/08/26(金) 10:32:23.45
mvって言うとFileUtils.mvを連想してしまう (こっちはファイルシステムが違うとアトミックにならない) ので、 File.renameと言って欲しいところ。 ところで、元の質問では「Unixでいう」と言ってるけど、 UNIX以外の例えばWindowsなんかでもFile.renameはアトミックなん?

318 :317:2011/08/26(金) 11:00:43.00
w3mから書き込んだら改行が無くなったでござる。

聞くだけではなんなので調べてみた。

DOSISHやWin95は多分ダメ。
WinNT以降だとFile.renameのメインの処理はwin32/win32.cのrb_w32_rename()でやってお
り、
ここではMoveFileEx()をMOVEFILE_REPLACE_EXISTINGフラグ指定で呼んでいて、
これだとアトミックな上書きになるっぽい。
なのでFile.renameでおっけーと。

間違ってたら指摘してください。


319 :デフォルトの名無しさん:2011/08/26(金) 23:45:28.80
これはスゴイぜ。↓

竹藪焼けた
伊藤は疎い
天狗の軍手
僕小久保
たいやきやいた
天狗の苦しむシルクの軍手
年末はつまんね
AKASAKA
けだるき一日生きるだけ
やずややずや
IKKO OKKI
女子コンパでパン粉所持
ロリコン外科医いい加減懲りろ
世界を崩したいなら泣いた雫を生かせ
やきいもおとすとおもいきや
ママのリアルなアナルありのまま
野茂の尻もタモリ氏のもの
お菓子が好きスガシカオ
すきのしるしのきす
旦那もホモなんだ

320 :デフォルトの名無しさん:2011/08/27(土) 00:45:43.01
'aabbcc'[/b+/]
=> "bb"

これは期待通りの結果です。
しかし

'aabbcc'[/b*/]
=> ""
これは何故bbにマッチしないのでしょうか?

'aabbcc'[/bb*/]
=> "bb"
こうすればマッチするのですが、何が起きてるのか理解できません。

321 :デフォルトの名無しさん:2011/08/27(土) 01:10:22.80
bbより先に""(bが0個)にマッチしたのでは?

322 :デフォルトの名無しさん:2011/08/27(土) 01:18:54.34
/b*/ は bが0個以上という意味だから。0個つまりbがなくともマッチする。
'aabbcc' =~ /b*/ #=> 0
なので、aの前の行頭とマッチしている。
bb とマッチしないのは、最初にマッチする場所を返すから。
bの前に何もなければ、'bb'[/b*/] #=> "bb"

'aabbcc'[/bb*/] だけど、*のデフォルトは「欲張りマッチ」なので、できるだけ長くマッチしようとする。
なので 'b' とではなく 'bb' とマッチする。

323 :デフォルトの名無しさん:2011/08/27(土) 01:25:12.60
最左最長ってやつだな

324 :320:2011/08/27(土) 01:37:40.04
>>321
>>322
おおなるほど、/b*/だと空文字を含めて何でもマッチしてしまうわけですね。
そしてaの前に""があると認識されてしまうと。。
ちょっと目から鱗でした。ありがとうございました。

325 :デフォルトの名無しさん:2011/08/28(日) 00:24:16.75
プログラム自体初心者です。たのしいRubyを買って一通り目を通しましたがさっぱり分かりません。
挫折しそうです。
他の分かりやすい入門書は何かあるんでしょうか。それともたのしいRubyを元にしてそこで頑張ってみるべきなんでしょうか。
教えてください。

326 :デフォルトの名無しさん:2011/08/28(日) 00:35:08.33
わからないところをここで聞けばいいよ
一通り目を通せたなら何もかもわからないってことはないだろうし

327 :デフォルトの名無しさん:2011/08/28(日) 00:46:25.92
Rubyに関係なく、プログラミングの勉強するのに読むだけってのがまずダメ。
まずは実際に入力して動かしてみなきゃ。

328 :デフォルトの名無しさん:2011/08/28(日) 00:59:55.38
riというドキュメントツールの使い方について教えてください。
ruby自体はrvmでインストールしたのですが、
riとコマンドするとクラスやメソッドの一覧が表示されるので、riコマンド自体はインストールされているようです。
しかし、表示されるクラスが、SQLite3など別途gem installでインストールしたものだけなのです。

具体的には
# gem install libsqlite3
というコマンドでSQLite3をインストールした際に、
Installing ri documentation for sqlite3-1.3.3...
Installing RDoc documentation for sqlite3-1.3.3...
といった出力があったのでこのタイミングでriのドキュメントがインストールされたようです。

しかし標準のクラスなどをriで参照することができません。
これはどのようにインストールすればいいのでしょうか。

329 :デフォルトの名無しさん:2011/08/28(日) 01:01:00.86
レスありがとうございます。
入力は一部しました。配列やハッシュのページはこれがいったい何の役に立つのかとさっぱり分からずやる気がでませんでした。
Rubyの仕様を教えて貰っても実作のプログラムで配列やハッシュがどのように使われるのかが分かりません。
しかし知識のある正規表現や実際のものを動かすIOやFileは楽しく読めました。
たぶん自分に必要なのはRubyでできることを羅列した逆引きリファレンスなのかもしれません。

330 :デフォルトの名無しさん:2011/08/28(日) 02:00:14.75
>>329
プログラミング自体の初心者さんだな?
配列は多くのプログラミング言語の基本だからね。

配列の特徴は添字(配列名の後の[この部分]な)の中に
式や変数を書けるってこと。
だから、ループと組み合わせれば大量のデータを扱ったり(for i in 0..10 do a[i]=0 end とか)
式を書けば何番目の要素にアクセスするかを実行中に決められるのさ。(a[x+1] とか)

これ以上はプログラミング自体の入門サイトで
配列についての説明を読むことをオススメする。
だいたいどの言語でも扱い方は似たようなもんだから。

331 :デフォルトの名無しさん:2011/08/28(日) 03:14:42.61
たとえば2chのスレッド一覧を定期的に監視して、レス数が急増したスレを抽出したいときには
スレッド一覧をスレッドのURLとかをキーにしたハッシュにすると便利だったりする。

たのしいRubyにも配列の実用例は載ってなかったかな。
他のクラスでもよく使われるものだから、配列の章以外でもちょこちょこ登場してた気がする。
eachメソッドとかを通して知らないうちに使ってたりして。

332 :デフォルトの名無しさん:2011/08/28(日) 05:46:07.45
>>329
プログラミングは学校の勉強でも資格の勉強でもない
必要ではないものを学ぶ必要はない

30種類入り工具セットの1つ1つの用途をいちいち実際に確かめたりしないだろ
動作一覧だけ覚えて、詳細は忘れろ
必要になったら、そのとき必ず戻ってくる
それまではプログラミングなんて辛気臭いことは忘れて秋のピクニックでもしとけ

333 :デフォルトの名無しさん:2011/08/28(日) 05:54:18.88
>>328
rvm docs generate

334 :デフォルトの名無しさん:2011/08/28(日) 09:41:06.87
たのしいRubyを初心者にすすめる人いるけど、
あれってRuby初心者にはいいだろうけど、
プログラム初心者向けじゃねーよなとは思う。

335 :デフォルトの名無しさん:2011/08/28(日) 09:53:44.26
しかしプログラミング初心者向けの本というのもあまり無く…
5冊くらい買って、自分の感覚に合うものを自爆覚悟で探してもらうしかないな

対面で教えるなら相手の反応見て話題変えたりなんとでもなるんだけど、
書籍という一方的なかたちになると途端に面倒になる

336 :デフォルトの名無しさん:2011/08/28(日) 10:15:52.38
最近はプログラミングの入門書で言語にRubyを採用してるのが何冊も出てるよね。
例えば・・・、忘れた。

337 :デフォルトの名無しさん:2011/08/28(日) 10:22:52.34
思い出せ。

338 :デフォルトの名無しさん:2011/08/28(日) 11:30:32.48
すまん、思い出せん。
パッと思い付くのはこれかな。

初めてのプログラミング 第2版
http://www.amazon.co.jp/dp/4873114691

あと、昨日立ち読みしてたら小波セソセイの本を見つけた。
内容はちゃんと見てないので不明。

楽しいプログラミング―オブジェクト指向言語Rubyを使って
http://www.amazon.co.jp/dp/4780602246

339 :uy:2011/08/28(日) 22:17:54.53
dxrubyでもやらせてろカス



340 :デフォルトの名無しさん:2011/08/28(日) 22:31:36.23
ゆとりって言われるのを承知の上で愚痴るんだけどさ・・・
rubyって日本産なのにろくにライブラリのドキュメントが
日本語化されてないよね
そのうえマニュアルだって説明不足・・・
わざわざruby使う意味あるのか?
結局ライブラリやその他もろもろ書籍に頼るしかないから
飼料の豊富なphpや英語ができる人ならpythonいくんじゃね?

341 :デフォルトの名無しさん:2011/08/28(日) 22:38:59.31
python最強

342 :uy:2011/08/28(日) 22:44:13.42
>ライブラリのドキュメントが
日本語化されてないよね

そのライブラリが国外産なんだろ?

日本産言語なのに、日本のプログラマーがゴミカスすぎてライブラリをそろえられないゴミカス国家

343 :デフォルトの名無しさん:2011/08/28(日) 23:02:10.75
"ruby".delete("rb")

いま気づいた

344 :uy:2011/08/28(日) 23:05:49.89
>>340
ゴミが何をやってもゴミは結局のところゴミだしゴミでしかない
ゴミみたいなゴミにゴミを捨ててもゴミがそれに気づけるわけも無く
ゴミに目もないしゴミはゴミにすら気づけずゴミゴミしたままのゴミだから
ゴミをゴミと呼ぶことはゴミにたいしてのゴミをゴミにするゴミだったゴミカス
お前みたいなゴミにゴミすらゴミの目の前のゴミ

>>341
ゴミみたいな奴だなゴミは結局いつまでたってもゴミなんだからはやくゴミはゴミ処理場ゴミ
ゴミは人間じゃないゴミはゴミとして扱うべきゴミが何かいってきてもそれはゴミだから
ゴミが何か反論してこうとゴミでいいしゴミがゴミを見下してゴミ社会を作っているのがゴミIT
ゴミによくにたそのゴミカスに月曜日の朝のゴミ収集車にゴミは回収させゴミをなくして綺麗な街つくりをしよう

>>343
ゴミ

345 :デフォルトの名無しさん:2011/08/28(日) 23:22:20.62
>>340
日本で「作られ」た部分は日本語になってると思うが…
標準ライブラリのマニュアルとか日本語だろ

言語本体が日本語ユーザーによって作られたからといって、
外国語ユーザーの作ったマニュアルが日本語になるわけじゃない
Rubyにはそんな機能はない

346 :uy:2011/08/28(日) 23:43:45.84
>>345
s
はぁ?
342 ここでもういってんのに名に同じこと復唱しちゃってんの?じs
じもよめないごmになの?>

347 :デフォルトの名無しさん:2011/08/28(日) 23:44:38.13
書籍が不満ということは、
オライリーのプログラミング言語Rubyくらいの内容は、
ほぼすべてものにしてるんだろうな。

348 :デフォルトの名無しさん:2011/08/28(日) 23:47:05.53
お前は突然何を言い出すんだ

349 :デフォルトの名無しさん:2011/08/28(日) 23:49:03.68
どこがどう突然なんだよ

350 :デフォルトの名無しさん:2011/08/28(日) 23:50:54.15
>>345
>言語本体が日本語ユーザーによって作られたからといって、
>外国語ユーザーの作ったマニュアルが日本語になるわけじゃない
なんか稀〜に勘違いしてる人がいるよね
日本人が開発したんだから全部日本語だろうと

「全部」ではない
あなたが使うのはおそらくは第三者の作ったライブラリで、それはたぶん英語で書かれているはずだ
いちおう理屈上は、日本語のマニュアルの部分でだけプログラミングすることは可能だが…

351 :デフォルトの名無しさん:2011/08/28(日) 23:53:41.69
>>349
書籍が不満なんてそんな主張してる人いないじゃん。どのレスのこと?

352 :uy:2011/08/28(日) 23:58:49.90
>>351
ハッァアアアアアアアアアアアアアアア????
どう考えてもさっきから
340の話してんのにそれすら「お前だけ」分からないで横レスしてきてなんでそんなに偉そうなの???????

353 :uy:2011/08/29(月) 00:00:06.04
>>350
ハァアアアアアアアアアアアア?????
中学生はもう寝ろ

何が

「全部」ではない (キリッ)
だよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

マジ文章も気持ち悪いし、IQも低そう 市ねゴミカス

354 :uy:2011/08/29(月) 00:01:47.98
>>349
はぁあ?
>>348
ハアアアアアアアアアアアアアアアああああ?
ここにも文盲がwwwwwwww

もう実は視力うしなってて、機会音声で2ch読み上げて2chやってんじゃないかと思うレベルwwww

>>347
ハア???あああああああああ????・
オライリーとかいうゴミ本まだよんでんの・・・

355 :デフォルトの名無しさん:2011/08/29(月) 00:03:09.49
まじきち が あらわれた
どうする?
→NG
→逃げる
→逃げる
→逃げる
→逃げる
→逃げる


356 :デフォルトの名無しさん:2011/08/29(月) 00:03:12.06
>>350
まあ、残念なことではあるのは間違いない
理想論を言えば。自国語のマニュアルくらいはさくっと入手できることが望ましい
自動生成させるにはもう一段階上のコンピュータが必要だけど…

理由のもうひとつは。マニュアルシステムが多国語または言語アドオンに対応してないこと
これがもし「他人が訳すだけ」でマニュアルを維持できるようなモノなら、人気ライブラリの翻訳マニュアルはもっとあったはず

357 :デフォルトの名無しさん:2011/08/29(月) 00:07:25.42
>>352
>>340はライブラリの日本語ドキュメント不足が不満って言ってるんじゃん
書籍自体に不満があるとは言ってない

358 :デフォルトの名無しさん:2011/08/29(月) 00:08:30.73
GTKの轍を踏めと申すか…

359 :デフォルトの名無しさん:2011/08/29(月) 00:11:10.04
>>357
お前だけは明らかにIQやばいぞ

360 :デフォルトの名無しさん:2011/08/29(月) 00:12:06.89
外国の人に日本語対応任すと自動翻訳の結果「だけ」を寄越してきたりするという罠が
そんなんいらないから英語の原文ください原文

361 :デフォルトの名無しさん:2011/08/29(月) 00:16:24.08
>>354
めちゃぶつけかよ。もう寝ろ

362 :デフォルトの名無しさん:2011/08/29(月) 00:23:55.17
>>359
書籍に不満があるんじゃなくて、マニュアルが未整備で書籍に頼らざるをえない状況に不満があるって話でしょう
ま、話の本筋は>>350のほうなんでどうでもいいけどさ

363 :デフォルトの名無しさん:2011/08/29(月) 00:33:42.86
>>362
で、最後の行でRubyの資料不足を書いてるよな。
当然流れから、ネットも書籍もひっくるめた不足具合のはずだが。

不足というならおまえは出てる書籍の内容はちゃんと理解してるんだろうなということなのだが、
おまえほんとに理解できんの?3行以上の文章は読めないの?

364 :デフォルトの名無しさん:2011/08/29(月) 00:47:26.30
英語くらい読めよ。技術英語なんて単語さえ分かれば読めるんだからさ。

365 :uy:2011/08/29(月) 01:04:23.82
英語くらい読めよ。技術英語なんて単語さえ分かれば読めるんだからさ。
ウクライナ語くらい読めよ。技術ウクライナ語なんて単語さえ分かれば読めるんだからさ。
アラビア語くらい読めよ。技術アラビア語なんて単語さえ分かれば読めるんだからさ。
チャハル・モンゴル語くらい読めよ。技術チャハル・モンゴル語なんて単語さえ分かれば読めるんだからさ。
ユラツ語くらい読めよ。技術ユラツ語なんて単語さえ分かれば読めるんだからさ。
コイバル語くらい読めよ。技術コイバル語なんて単語さえ分かれば読めるんだからさ。
膠着語くらい読めよ。技術膠着語なんて単語さえ分かれば読めるんだからさ。
エストニア語くらい読めよ。技術エストニア語なんて単語さえ分かれば読めるんだからさ。
上ビチェグダ方言くらい読めよ。技術上ビチェグダ方言なんて単語さえ分かれば読めるんだからさ。
ルザ・レトカ方言くらい読めよ。技術ルザ・レトカ方言なんて単語さえ分かれば読めるんだからさ。
上スィソラ方言くらい読めよ。技術上スィソラ方言なんて単語さえ分かれば読めるんだからさ。
リヴォニア語くらい読めよ。技術リヴォニア語なんて単語さえ分かれば読めるんだからさ。
長沙語くらい読めよ。技術長沙語なんて単語さえ分かれば読めるんだからさ。
北部サーミ語くらい読めよ。技術北部サーミ語なんて単語さえ分かれば読めるんだからさ。
北東コーカサス語くらい読めよ。技術北東コーカサス語なんて単語さえ分かれば読めるんだからさ。
ウドムルト語くらい読めよ。技術ウドムルト語なんて単語さえ分かれば読めるんだからさ。
アリュートル語くらい読めよ。技術アリュートル語なんて単語さえ分かれば読めるんだからさ。
チュクチ・カムチャツカ語くらい読めよ。技術チュクチ・カムチャツカ語なんて単語さえ分かれば読めるんだからさ。
フィン・ウゴル語くらい読めよ。技術フィン・ウゴル語なんて単語さえ分かれば読めるんだからさ。
カレリア語くらい読めよ。技術カレリア語なんて単語さえ分かれば読めるんだからさ。
ヴェプス語くらい読めよ。技術ヴェプス語なんて単語さえ分かれば読めるんだからさ。

366 :uy:2011/08/29(月) 01:04:49.54


コミ・ペルミャク語くらい読めよ。技術コミ・ペルミャク語なんて単語さえ分かれば読めるんだからさ。
ヴォチャーク語くらい読めよ。技術ヴォチャーク語なんて単語さえ分かれば読めるんだからさ。
ヴェプス語くらい読めよ。技術ヴェプス語なんて単語さえ分かれば読めるんだからさ。
エルジャ・モルドヴィン語くらい読めよ。技術エルジャ・モルドヴィン語なんて単語さえ分かれば読めるんだからさ。
モルドヴァ語くらい読めよ。技術モルドヴァ語なんて単語さえ分かれば読めるんだからさ。
ブルシャスキー語くらい読めよ。技術ブルシャスキー語なんて単語さえ分かれば読めるんだからさ。
シュメール語 くらい読めよ。技術シュメール語 なんて単語さえ分かれば読めるんだからさ。
近年エラム語くらい読めよ。技術近年エラム語なんて単語さえ分かれば読めるんだからさ。
ケット語くらい読めよ。技術ケット語なんて単語さえ分かれば読めるんだからさ。
リンガラ語くらい読めよ。技術リンガラ語なんて単語さえ分かれば読めるんだからさ。
南ンデベレ語くらい読めよ。技術南ンデベレ語なんて単語さえ分かれば読めるんだからさ。
北部ソト語くらい読めよ。技術北部ソト語なんて単語さえ分かれば読めるんだからさ。
ミノア語くらい読めよ。技術ミノア語なんて単語さえ分かれば読めるんだからさ。
純正クレタ語くらい読めよ。技術純正クレタ語なんて単語さえ分かれば読めるんだからさ。
南アルタイ語くらい読めよ。技術南アルタイ語なんて単語さえ分かれば読めるんだからさ。
ショル語くらい読めよ。技術ショル語なんて単語さえ分かれば読めるんだからさ。
エヴェンキ語くらい読めよ。技術エヴェンキ語なんて単語さえ分かれば読めるんだからさ。
オセット語くらい読めよ。技術オセット語なんて単語さえ分かれば読めるんだからさ。
トゥバ語くらい読めよ。技術トゥバ語なんて単語さえ分かれば読めるんだからさ。
オイロト語くらい読めよ。技術オイロト語なんて単語さえ分かれば読めるんだからさ。
ハカス語くらい読めよ。技術ハカス語なんて単語さえ分かれば読めるんだからさ。

367 :uy:2011/08/29(月) 01:05:25.20
オロチ語くらい読めよ。技術オロチ語なんて単語さえ分かれば読めるんだからさ。
ネギダール語くらい読めよ。技術ネギダール語なんて単語さえ分かれば読めるんだからさ。
ソロン語くらい読めよ。技術ソロン語なんて単語さえ分かれば読めるんだからさ。
突厥諸語くらい読めよ。技術突厥諸語なんて単語さえ分かれば読めるんだからさ。
トルクメン語くらい読めよ。技術トルクメン語なんて単語さえ分かれば読めるんだからさ。
タタール語くらい読めよ。技術タタール語なんて単語さえ分かれば読めるんだからさ。
バシュキール語くらい読めよ。技術バシュキール語なんて単語さえ分かれば読めるんだからさ。
クリミア・タタール語くらい読めよ。技術クリミア・タタール語なんて単語さえ分かれば読めるんだからさ。
ウズベク語くらい読めよ。技術ウズベク語なんて単語さえ分かれば読めるんだからさ。
現代ウイグル語くらい読めよ。技術現代ウイグル語なんて単語さえ分かれば読めるんだからさ。
エイヌ語くらい読めよ。技術エイヌ語なんて単語さえ分かれば読めるんだからさ。
カライム語くらい読めよ。技術カライム語なんて単語さえ分かれば読めるんだからさ。
カラチャイ・バルカル語くらい読めよ。技術カラチャイ・バルカル語なんて単語さえ分かれば読めるんだからさ。
カラカルパク語くらい読めよ。技術カラカルパク語なんて単語さえ分かれば読めるんだからさ。
カザフ語くらい読めよ。技術カザフ語なんて単語さえ分かれば読めるんだからさ。
キルギス語くらい読めよ。技術キルギス語なんて単語さえ分かれば読めるんだからさ。
クムク語くらい読めよ。技術クムク語なんて単語さえ分かれば読めるんだからさ。
ノガイ語くらい読めよ。技術ノガイ語なんて単語さえ分かれば読めるんだからさ。
くらい読めよ。技術なんて単語さえ分かれば読めるんだからさ。
オルチャ語くらい読めよ。技術オルチャ語なんて単語さえ分かれば読めるんだからさ。
ホジェン語くらい読めよ。技術ホジェン語なんて単語さえ分かれば読めるんだからさ。
アル=サイード・ベドウィン手話くらい読めよ。技術アル=サイード・ベドウィン手話なんて単語さえ分かれば読めるんだからさ。

368 :362:2011/08/29(月) 01:14:46.18
>>363
日本発って聞いてきたのに日本語解説が欲しけりゃ書籍買え、では
phpやpythonに流れる >>340みたいなゆとり(つか初心者)は特に

あー敷居の低い日本語情報が増えるといいですね
つか初心者レスの細部の解釈程度で何でそこまで喧嘩腰なの?びっくりするわ

369 :デフォルトの名無しさん:2011/08/29(月) 01:26:53.07
ASCIIが256倍本フォーマットでnokogiri本とかtreetop本を出せばいいんだ

370 :uy:2011/08/29(月) 01:29:17.29

  (笑) (笑)  (笑)
    \ ↓ /
(笑)→ >>368 ← (笑)
    /  ↑ \
  (笑)  (笑)  (笑)

プギャーwwwwwwwwwwww

371 :デフォルトの名無しさん:2011/08/29(月) 01:49:33.71
>>369
ライトノベルの会社に過剰な期待をしちゃいかんよ

372 :デフォルトの名無しさん:2011/08/29(月) 06:25:49.91
>>364
 ・ 我々がふだん必ずしも定型の技術日本語でマニュアルを記述してはいないのと同様、
   どっかの複数人の誰かがよってたかって作った英語マニュアルが技術英語できちんと書かれているとは限らない
 ・ マニュアルがライブラリ初心者に有用であるとは限らない(クラスやメソッドはマニュアル見せるために分かれているのではないから)
 ・ 本当に必要だったのはREADMEや(外部の)HOWTOの翻訳や日本語情報だったりする

ということで、普段よく見るその指摘はわりと的外れだ

ちなみに、日本語情報をブログなんかで公開しても、1年後には時代遅れまたはむしろ害悪になってたりもする
適度にキャッチアップし続けないと意味がないのは、難しいとこだと思う

373 :デフォルトの名無しさん:2011/08/29(月) 06:37:39.40
TCL/TKと比べて優れているところはどこですか?

374 :デフォルトの名無しさん:2011/08/29(月) 07:19:45.10
>>373
tkはRubyからでも使えるので、Tclに対する利点を挙げると
・オブジェクト志向が言語レベルでサポートされている
・Perlゆずりのテキスト処理能力
・式やリストやハッシュを手軽に扱える

辺りがパッと思い付くかな

375 :デフォルトの名無しさん:2011/08/29(月) 07:23:30.64
>>372
最近話題になったのだとNet::HTTP.version_1_2みたいなもんか
2011年になってもまだ書いてる人がいるしな
「おまじない」ではなくきちんと「Ruby1.6用」と説明しててくれればよかったのに

376 :デフォルトの名無しさん:2011/08/29(月) 07:50:33.89
ヒアドキュメントの配列ってどう書いたらいいの。
[
<<_A
hogehoge
_A
,
<<_A
jajaja
_A
]
みたいに書いても構文エラーになるんだけど。

377 :デフォルトの名無しさん:2011/08/29(月) 07:55:32.83
とりあえず、こうした。
aas = []
aas << <<_A
hogehoge
_A
aas << <<_A
jajaja
_A


378 :デフォルトの名無しさん:2011/08/29(月) 07:56:02.69
>>376
a = [<<H, <<HH]
111
H
222
HH

p a #=> ["111\n", "222\n"]


379 :デフォルトの名無しさん:2011/08/29(月) 08:05:37.86
>>378
一貫性がありつつもきめえ

380 :デフォルトの名無しさん:2011/08/29(月) 08:45:58.53
>>379
Perlに文句言え。


381 :デフォルトの名無しさん:2011/08/29(月) 09:16:46.81
>>376
[
<<_A,
hogehoge
_A
<<_A,
jajaja
_A
]


382 :デフォルトの名無しさん:2011/08/29(月) 15:17:15.79
moduleの名前の衝突を、皆さんはどのように解決してるのでしょうか?
A#echoは知っているのにB#echoの存在を知らない場合、
意図したものとは違う結果が出てしまいます。

module A
 def echo
  puts 'A'
 end
end

module B
 def echo
  puts 'B'
 end
end

class C
 include A
 include B
end

hoge = C.new
hoge.echo # => B

また、上記の場合、hogeからA#echoを呼ぶ方法はあるのでしょうか?

383 :デフォルトの名無しさん:2011/08/29(月) 16:05:12.00
aliasで別名を作れば、別名のほうは上書きされないことを利用し
class C
    include A
    alias a_echo echo
    include B
end
hoge = C.new
hoge.a_echo # => A

ってのじゃ…ダメ?

384 :デフォルトの名無しさん:2011/08/29(月) 16:06:11.68
>A#echoは知っているのにB#echoの存在を知らない場合
無意味な仮定

以上

385 :デフォルトの名無しさん:2011/08/29(月) 16:06:35.21
二次元配列で列の数を返してくれるメソッドはありますか?

386 :デフォルトの名無しさん:2011/08/29(月) 16:14:25.67
二次元配列は標準ではオブジェクトとして存在しない
ので、通常は単に配列の配列として処理する

m = [[1,2], [3,4]]
p m.map{|r| r[0]} #=> [1,3]

Matrixクラスが存在することはするんだが、おそらく用途は満たさないだろう

387 :デフォルトの名無しさん:2011/08/29(月) 16:27:30.06
まあ確かにミキシンしておきながら結果に文句言うとかありえないのは責務上確かなんだが

>>382
include したあとでは残念ながらできない
include する前に(またはincludeそのものを)なんとかしてくれ

388 :デフォルトの名無しさん:2011/08/29(月) 16:33:31.94
いえ、そうではなく列のサイズを返してくれるメソッドです
例えば[[1,2,3],[4,5,6]]の時に3と返ってくるような

389 :デフォルトの名無しさん:2011/08/29(月) 16:39:22.24
>>388
ary[0].size

390 :デフォルトの名無しさん:2011/08/29(月) 16:40:36.58
ありがとうございます

391 :デフォルトの名無しさん:2011/08/29(月) 17:08:48.59
モジュールだけのメソッドがあるの?


392 :デフォルトの名無しさん:2011/08/29(月) 17:14:58.45
>>391
「Ruby module Mix-in」あたりでぐぐって自分で調べてよ。

393 :デフォルトの名無しさん:2011/08/29(月) 17:41:40.26
>>382
メソッドを取り出して、それにオブジェクトをバインドするとか

A.instance_method(:echo).bind(hoge).call

394 :デフォルトの名無しさん:2011/08/29(月) 17:59:07.31
モジュールがクラスの一種なのですか?
クラスがモジュールの一種なのですか?

395 :デフォルトの名無しさん:2011/08/29(月) 18:05:42.72
さびしいからって人を集めようとするなよ

396 :デフォルトの名無しさん:2011/08/29(月) 18:09:58.53
$ ruby -e 'p Class.superclass'
Module

397 :382:2011/08/29(月) 19:52:19.66
>>383>>384>>387
コメントいろいろありがとうございます。
Mix-inする人が責任を持つべき事柄なのですね。
例えばmodule内のインスタンス変数を初期化できるinitというメソッドを定義した場合、
他のmoduleでもinitを定義している可能性を考えて悩んでいました。
# moduleに状態を持たせるのも正しいかどうかよくわかってないのですが..

使いやすい設計ってのがなかなか判断つかないですねぇ...

398 :デフォルトの名無しさん:2011/08/29(月) 20:03:52.46
過去に数回挫折したけど再挑戦します。
1.8.7と1.9.2、どちらを学ぶべきでしょうか。
目標は、データベースを使ったcgiの公開。
又、お勧めの開発環境も助言戴きたく。

現状は、昨年、市の火災情報を1分毎に取得し、
特定の文言があればログに記録、登録者にはメイル、
という物を目論んで、ログに書くところまで出来ました(ローカルで)。
※市が同様のことを始めて頓挫

htmlとcssは手打ち可ですが、プログラミングはRubyが初です。
「たのしいRuby」第2版(1.8.4)と、rails(1.8.6)の書籍を所有。

10.4搭載の古いMacで作ってましたが、
win7 starterのネットブックでやりたいです。

399 :デフォルトの名無しさん:2011/08/29(月) 20:27:26.62
>>397
言語レベルで何らかの支援が必要だという話はあるんだが
まだうまい解決策が定まっていないのと、経験的に

・それほど頻繁に名前は衝突しない
・もし衝突していたら明らかに挙動が変わるのでテストで気づく

というわけで、極端に神経質になることはないかと思う

400 :デフォルトの名無しさん:2011/08/29(月) 21:00:29.14
>>397
>module内のインスタンス変数を初期化できるinitというメソッドを定義した場合、
>他のmoduleでもinitを定義している可能性
それはないでもないが、initみたいなのがあるモジュールを2回以上includeする機会はたぶんまず無いと思う
ぶつかったらぶつかったとき考えたいなあ

401 :デフォルトの名無しさん:2011/08/29(月) 21:08:12.50
まあわりとどうでもいいんだけど

>>398
>市の火災情報を1分毎に取得し
それが迷惑だったから自前で似たようなサービス公開したんだと思う
ものにもよるが、1日に1400回フルでHTMLを取得してる人が来たら俺ならちょっと考える

で、まあ、RailsやるならいまのところRuby1.8.7しか選択肢がない
Rails2とRuby1.8.7の両方に造詣が深いならRuby1.9.2でもいいけど、要件として不整合だな
開発環境は使い慣れてて色つけと自動インデントのできるエディタならなんでもいいです
Rubyのために別途開発環境をインストールするなんて愚行はおやめなさい

402 :デフォルトの名無しさん:2011/08/29(月) 21:52:38.81
天災現る

403 :デフォルトの名無しさん:2011/08/29(月) 22:13:03.40
>まあ、RailsやるならいまのところRuby1.8.7しか選択肢がない

え?

404 :デフォルトの名無しさん:2011/08/29(月) 22:21:26.75
彼は1.9に(逆)恨みがあるんだよ

Windows版のインストールで配布元に難癖つけて、
一時Windows版の配布が止まったくらい。

405 :デフォルトの名無しさん:2011/08/29(月) 22:43:24.96
p BasicObject.superclass
p Object.superclass
p Module.superclass
p Class.superclass

nil
BasicObject
Object
Module
Complete(0)


406 :デフォルトの名無しさん:2011/08/30(火) 00:03:27.17
今ならRails3と1.9.2が普通じゃないか?

407 :デフォルトの名無しさん:2011/08/30(火) 05:53:30.75
railsはこれからは1.8.6以下をサポートしません。

408 :デフォルトの名無しさん:2011/08/30(火) 07:12:32.90
Prototype.jsは非難されるのにActiveSupportは歓迎されるのがわからない

409 :デフォルトの名無しさん:2011/08/30(火) 07:15:34.52
prototype.jsってそんなに非難されてるか?

410 :デフォルトの名無しさん:2011/08/30(火) 15:43:53.00
派遣がもうJqueryにうつったし、Pjaxに時代がうつるし、prototype.jsは過去の遺物レベル。

411 :デフォルトの名無しさん:2011/08/30(火) 16:10:23.69
ばいばい

412 :デフォルトの名無しさん:2011/09/01(木) 08:55:28.31
prototype.jsってperlみたい

413 :デフォルトの名無しさん:2011/09/01(木) 14:24:38.59
CSS構造化のLESSをgemで導入したいのですが
gem install less とすると
Failed to build gem native extension.
というエラーで出来ません。
どなたか解決方法知っている方いたら教えて下さい。
WindowsXP、Ruby installerで 1.8.7 1.9.1 1.9.2
それぞれでやってみましたが同様です。

414 :デフォルトの名無しさん:2011/09/01(木) 14:51:15.00
>>413
http://www.google.com/search?q=Failed+to+build+gem+native+extension+RubyInstaller&ie=utf-8&oe=utf-8

415 :デフォルトの名無しさん:2011/09/01(木) 14:56:43.42
>>414
ありがとうございます!
とりあえずトップで出た
http://d.hatena.ne.jp/kitamomonga/20110208/ruby_gem_install_requires_make_on_windows
を参考にひととおりやってみます。
devkitは入れてやってみてたんですがダメでした。

416 :デフォルトの名無しさん:2011/09/01(木) 15:56:04.46
2.0.0以降はダメっぽいぞ
gem install less --version 1.2.21

417 :デフォルトの名無しさん:2011/09/01(木) 18:47:12.57
>>416
おー、出来ました!ありがとうございます!
最近は主軸がnode.jsに移ったらしくもうRuby用は捨てられて
しまったのか?とか思いつつ、バージョン指定とか分かりませんでした。
助かりました!

418 :デフォルトの名無しさん:2011/09/01(木) 21:33:39.63
>>410
海外じゃprototypeの方が主流ってどっかで読んだんだけど、何で日本じゃ流行らなかったんだろ。。。


419 :デフォルトの名無しさん:2011/09/01(木) 22:37:07.57
諸兄の知恵と知識で助けてください。


Ruby 1.8で書かれたWinXP向けのアプリを改造しなければならなくなって、
今までは仮想COMとやらでシリアルだったのがDLL呼び出しになりました。

ネットで調べてみたんですがRubyでDLL呼び出しの仕方の情報があまりなく、あっても今ひとつ判らないです。

エクセルのVBAでカンタンなツール作るぐらいはできます。
その程度でもなんとかできそうなぐらいに分かりやすく書いてるサイトや書籍、心あたりあったら教えてください。

420 :デフォルトの名無しさん:2011/09/01(木) 23:08:57.82
>>418
日本はデザイナーが馬鹿だから

421 :デフォルトの名無しさん:2011/09/01(木) 23:10:28.04
>>419
http://tanta.noblog.net/blog/a/10353039.html

422 :デフォルトの名無しさん:2011/09/01(木) 23:23:00.90
こっちの Win32Proxy をまねするのが良いかも
http://blog.cles.jp/item/3310


423 :419:2011/09/02(金) 14:42:06.01
ありがとうございます。
何とかなりそうです。



424 :デフォルトの名無しさん:2011/09/02(金) 15:10:11.83
RDE(with Active Scriput Ruby 1.8.7)を使っていると、突然
システムリソースが足りません、Access violation at addressなんちゃら、canvasを描画できません
などなどのエラーメッセージが次々に出てきて操作不能に陥ることが良くあるのですが、これって仕様ですか?

425 :デフォルトの名無しさん:2011/09/02(金) 16:00:44.97
まあ、RDEだし…としか
初心者でRDE使ってる人はいないんじゃないかな?

426 :デフォルトの名無しさん:2011/09/02(金) 16:58:42.27
いやいると思うよ
とりあえずIDE環境を探してRDEにたどり着く人は多そう
IDEなんていらないってことに気がつくと使わなくなるけど

>>424
数年更新されていないソフトなのでしょうがない

427 :uy:2011/09/02(金) 19:07:34.27
最初の1時間は落ちないんだから
1時間以内に組みたてりゃ良い話だろゴミかお前

428 :デフォルトの名無しさん:2011/09/03(土) 08:35:53.59
>>426
そーなのですかー・・・

今は主流はRDEでは無いのでしょうか?やはり時代はイクリプス?
イクリプス=Java というイメージがあるのですが

429 :デフォルトの名無しさん:2011/09/03(土) 08:36:40.94
vimじゃね?

430 :デフォルトの名無しさん:2011/09/03(土) 09:12:10.84
redcarとか。

431 :デフォルトの名無しさん:2011/09/03(土) 10:36:05.43
sublime textは?

432 :デフォルトの名無しさん:2011/09/03(土) 10:42:43.92
Ruby用でまともに使えるIDEってないよね。
ただ書くだけならNetBeansが設定含め楽でいいかなとは思うけど、
テストだったり、Railsの追従って点で見ると、どのIDEもやる気ない感じ。
で、みんなVim/Emacs+Screen+Growl系で頑張ってるんじゃないかなぁ。
Windowzerはどうやってんのか知らんけど。

433 :デフォルトの名無しさん:2011/09/03(土) 10:51:34.56
emacsだろ

434 :デフォルトの名無しさん:2011/09/03(土) 10:57:01.11
やる気ないというか、Rubyの性質上ものすごくめんどくさいということが露見してしまったので、
誰もサポートやろうとしなくなったというのが正解

435 :デフォルトの名無しさん:2011/09/03(土) 12:23:54.70
ありがとうございます。
今は時間が無いのでこのままRDEで頑張ろうと思いますが
後でそれらのIDEもためして見ます。

ところで変数のスコープについてなのですが
下のようなプログラムで、メソッドbとその中で入れ子になっているメソッドの中だけで参照出来る変数vを扱いたいのですが
bの中でローカル変数で定義すると、cの中で参照出来ませんし(逆も)、
かといってインスタンス変数で定義すると、b以下と全く関係無い同じインスタンスのメソッドaから参照出来てしまうので困っています
bから、cを呼び出す際にcに対して引数として与えるしか方法は無いのでしょうか?
class A
def a

end
def b
def c
変数vについての処理
end
変数vについての処理
end
end

436 :uy:2011/09/03(土) 12:57:54.13
>>435
やっぱりただのゴミだったんだな
class A

 def a
  v = nil
  d =lambda do
   v = 9
  end
  d.call
  p v
 end
end

A.new.a

437 :uy:2011/09/03(土) 13:05:38.37
ゴミは何をやってもゴミ

438 :デフォルトの名無しさん:2011/09/03(土) 13:50:46.86
>>435
メソッドは入れ子にできない
bもcもクラスAのインスタンスメソッドにしかならない

で、仮にそのへんわかんなかったとしても、
Rubyの変数はオブジェクトにつけられたラベルのようなもので、
なおかつローカル変数はメソッドを越えられず、
メソッド定義は定義だけでは動作しないので

class A
def b
v=1
def c(v); p v; end
c(v)
end
end

とか書くはずで、これならたまたま動く
後定義型(cメソッドを使ってからその後ろのほうでメソッドを定義するタイプの書き方)だと動かないけどな

439 :デフォルトの名無しさん:2011/09/03(土) 14:07:29.47
そもそも「ひとつのメソッドからしか呼ばないメソッド」を作ることに抵抗感ないからなRuby
「メソッドにするからには共通処理であるべき」なんて考えはさらさらない(逆はあるが)
1回だけ呼ばれるメソッドや1個だけ作られるオブジェクトのためのクラスがザラにあるのがRuby
しかもpublicだったりするので、Javaとかの潔癖さんが発狂したりする

440 :デフォルトの名無しさん:2011/09/03(土) 15:15:04.17
ありがとうございます。
>>436でlambdaを始めて知り、いま調べてみて、試しに以下のようなプログラムを書いてみました
やりたいことはだいたい出来るような気がするのですが、
Test1でcの前で定義した変数xはc内でも参照でき、cの外(かつbの中)でもcで操作した値は変わらないことが分かったのですが、なぜcの後ろでxを定義するとその後呼び出したcで参照出来ないのかが分かりません
x=0をc=Proc.new do〜end前に置くとcの中でxをいじることができたのですが、後ろに置くといじれませんでした。
cの後ろにおいた変数をcの中で参照するにはxをcに引数として与えなければいけないみたいですがそうするとcの中でいじくったxをcの外で参照できません
PASCALでいうところのprocedure c(x)みたいな感じにしたいのですが・・・

class Test1
def a
p x
end
def b(step)
x = 0 #cの後ろに置くとダメ?
c = Proc.new do |step|
x = step
if x < 100 then
c.call(step)
end
end
c.call(step)
return x
end
end
v1 = Test1.new
p v1.b(2)
# v1.a #=>エラーを吐く(aからbのxを参照できないことを確認)

441 :デフォルトの名無しさん:2011/09/03(土) 16:35:45.12
>>440
ローカル変数って知ってる?


442 :デフォルトの名無しさん:2011/09/03(土) 17:00:22.10
>>441
ローカル変数と、インスタンス変数の狭間で困っているのですが・・・。
bで定義されたローカル変数だと、cで参照できない、インスタンス変数だと、bでもcでも参照できるが全く関係ないaで参照できてしまうということです

443 :デフォルトの名無しさん:2011/09/03(土) 17:01:32.64
とりあえずやりたいことはこれでできると思うけど
最終的に何がやりたいか書いてもらったほうがうまく説明できると思う

class T
def closure
b = lambda do |x|
p x.x
x.x = 10
p x.x
end

callByReference = Struct.new(:x)
x = callByReference.new(1)
p x.x
b.call(x)
p x.x
end
end

t = T.new
t.closure


444 :デフォルトの名無しさん:2011/09/03(土) 17:06:27.48
injectという便利なメソッドがあるよ

445 :デフォルトの名無しさん:2011/09/03(土) 17:18:51.55
ああ、連鎖あぼーんの対象になって見てもらえない可能性が高いから、名前欄に何か書いてあるレスは参照しないほうがいいぞ

446 :デフォルトの名無しさん:2011/09/03(土) 17:20:04.83
>>440
違う環境においてメソッドbの環境で実行したいなら環境を引数に取ってevalを使うしかないかな?

def b(step)
c = Proc.new do |bind|
eval <<-EOS, bind
x = step
if x < 100 then
c.call(binding)
end
EOS
end
x = 0 #cの後ろに置くとダメ?
c.call(binding)
return x
end

447 :デフォルトの名無しさん:2011/09/03(土) 17:51:54.88
>>442
aで参照できたっていいじゃん
俺も最初の頃そういうのでごちゃごちゃ考えたことあるけどさ、結局参照できたって参照しなきゃいいだけの話で
そんなところにこだわる暇があったら処理自体とか変数名とか気にしたほうがいいだろ
たとえばsearch_text(text, word)ってメソッドから@img_widthが参照できたとして、普通に考えたら使わないのは一目瞭然なわけで

448 :uy:2011/09/04(日) 03:15:45.76
>>440
初心者なのにそこに目を付けるとかセンスもってるじゃん
貴様の疑問点は的を射てる

449 :uy:2011/09/04(日) 04:17:06.94
lambda周辺のつくりはRubyに限らず甘い
将来的に正される場所だと思っている
貴様が言語設計者になったつもりで、
その部分をどういう書き方にすれば自然になるかを考えるがよい

450 :デフォルトの名無しさん:2011/09/04(日) 04:44:35.22
初心者がlambdaがどうこう考えるかよ

451 :デフォルトの名無しさん:2011/09/04(日) 05:29:31.12
とりあえず今は知ってることが少なすぎて細かいこと考えてもしょうがないような気がしてきたので
後でProcとかlambdaのあたりをちゃんとやったときに改めて考えることにして先に進もうと思います
みなさんありがとうございました。

452 :デフォルトの名無しさん:2011/09/04(日) 05:51:50.20
あ、あと>>440でx = stepじゃなくてx = stepの間違いでした

453 :デフォルトの名無しさん:2011/09/04(日) 05:52:43.86
あれ、書くときに消えちゃうみたい・・・
全角なら大丈夫かなぁ
=じゃなくて+=です

454 :デフォルトの名無しさん:2011/09/04(日) 08:48:59.60
以下の現象で1週間ほど悩んでいます.何か分かりましたらご教示をお願いします.
コードは以下です.
def do_crawling(logger, uri)
Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) do |http|
request = http.get(uri.request_uri)
request.basic_auth(USER_NAME, PASSWORD)

結果は以下です.
/usr/local/lib/ruby/1.9.1/net/http.rb:1102:in `request': undefined method `set_body_internal' for #<Net::HTTPUnauthorized 401 Unauthorized readbody=true> (NoMethodError)

401 Unauthorizedが出ているということは,urlにアクセスはできているということだと思いますが,
basic_authの認証に失敗します.ユーザ名,パスワードに間違いはなく,端末から,curlで接続すると
普通にアクセスできます.



455 :uy:2011/09/04(日) 09:16:31.54
バグだろ
通報しろ


if proxy_user()
 req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl?
end
req.set_body_internal body

たぶんSSL使われてるとバグるんだろ

456 :454:2011/09/04(日) 09:28:26.40
>>455
ありがとうございます.
通報してもたぶん無視されて先に進まないと思いますので,
現状の対応策があれば教えて頂けませんか?
初心者につき,申し訳ないです.

457 :デフォルトの名無しさん:2011/09/04(日) 09:33:03.93
>>456
反応する奴は荒らし

458 :uy:2011/09/04(日) 09:35:57.84
>>456
手段1
俺のRubyでは
http.rb:1102: にコードはかかれてなくコメント行だった
つまりバージョンごとにファイル内容が微妙に違う
どこのRubyをインストールしたかはわからないが、別バージョンRubyだったら動く可能性は僅かにある

手段2
もうひとつの方法はNet::HTTP::Proxyと同じことできるライブラリをgemsから探してなんとかする
貴様が何をやろうとしているのかは知らないが、mechanizeではプロキシー経由するコードは動かした事はある

459 :デフォルトの名無しさん:2011/09/04(日) 09:42:18.29
>>457
というか、仮に出鱈目なこと書いてあっても助けてあげることも検証してあげることもできないからな
間違ったまま帰りたくなければそもそも表示しないでおくことが最善

460 :デフォルトの名無しさん:2011/09/04(日) 10:07:02.86
>>456
>通報してもたぶん無視されて先に進まないと思いますので

なにこの勝手な決めつけ


461 :uy:2011/09/04(日) 10:15:00.24
>>457,459
ハァ?
ゴミが朝から元気じゃん
俺にレスをさせる暇も与えずとっとと答えりゃいいのに誰も答えられない()
どちらが上かくらいわかって欲しいかな^^;;;;;;;;;;;;;

>>460
ハァ?
初心者のぼくにも1分でわかるよう通報フォーム案内してくださいよおおぉぉ^^;;;;;

462 :デフォルトの名無しさん:2011/09/04(日) 10:41:58.81
>>454
http.get しちゃってから basic_auth してもダメじゃない?
Net::HTTP::Get オブジェクト生成してそれに対して basic_auth しないと。
リファレンスマニュアルの library net/http の「Basic 認証」のとこよく見て。

463 :454:2011/09/04(日) 11:39:53.71
皆さんありがとうございます.
>>462
request = Net::HTTP::Get.new(uri.request_uri)
Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) do |http|
request.basic_auth(USER_NAME, PASSWORD)
http.get(uri.request_uri)
いろいろ調べて上のようにしてみましたが,今度はエラーも帰ってこず,無反応です.
初心者なもので,もう少しヒントをいただけると幸いです.よろしくお願いします.

464 :デフォルトの名無しさん:2011/09/04(日) 12:13:56.25
>>463
そこまでいったらもうひといきだべさ。

Net::HTTP とかは登場するクラスの種類がいっぱいあるので混乱すると思うけど、
そこは、引数に与えるべきクラスはどれか、メソッドを呼んで返ってくるクラスはどれか、
そのクラスで呼べるメソッドはどれか、などを、
いちいち p メソッドでクラスを確認したりしていくようにすると良いんじゃないかな。

たとえば >>454 の例外メッセージを見ると、
request が返るべきところに Net::HTTPUnauthorized クラスのオブジェクトが返ってきてて、
これなんか良いヒントになってたはず。

Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USER_NAME, PASSWORD)
response = http.request(request)
response.body
end


465 :454:2011/09/04(日) 15:06:50.47
>>464
ありがとうございます.
その後も調べていろいろやったのですが,うまくいかないですね..
proxyを経由する場合は,
http://l-w-i.net/t/ruby/net_001.txt
にあるように,
request = Net::HTTP::Get.new(uri.request_uri)
とするのではなく,
request = http.get(uri.request_uri)
とするようなのですが,それだと464さんのご指摘のとおり,
Net::HTTP::Get.new(uri.request_uri)をしていないので,
http.get しちゃってから basic_auth していることになっています.

Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) do |http|
request = http.get(uri.request_uri)
#request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USER_NAME, PASSWORD)
http.request(request) do |response|

現状,上のようなコードでうまくいきません.
proxyを超えつつ,basic_authも超える方法がどう考えてもわかりません.
いろいろ検索したのですが..

466 :デフォルトの名無しさん:2011/09/04(日) 15:51:36.89
>>465
> request = Net::HTTP::Get.new(uri.request_uri)
> とするのではなく,
> request = http.get(uri.request_uri)
> とするようなのですが,

いや、だから http.get で返ってくるのは request (HTTPRequest オブジェクト) じゃなくて
response (HTTPResponse オブジェクト) なの。
response オブジェクトに対して闇雲に request オブジェクトのメソッドの
basic_auth 投げてもそれはうまくいかないよ。

http.get は、 http.request(Net::HTTP::Get.new(...)) の略記法みたいなもので、
認証の無い場合はその URL の方法で良いんだけど、
認証が必要な場合には、 Net::HTTP::Get.new して basic_auth して http.request して、
っていうふうにしないといけない。

で、手元では >>464 に挙げたコードでうまくいくんだが、どんな結果 (エラー) になるかね?

467 :デフォルトの名無しさん:2011/09/04(日) 20:19:40.84
複数ファイルをリネームしたいもですが"piyo-"が二回でてきてちょっと冗長になってしまいます

File::glob("C:/**/piyo-*.exe").each {|f|
  File::rename(f, File::dirname(f) + $1) if (f =~ /.*piyo-(.*)/)
}

なにかかっこいい書きかたありますか?


468 :デフォルトの名無しさん:2011/09/04(日) 21:01:39.37
経験上、ファイル操作のファイル名マッチングは多少冗長なほうがいい
1行短かくするたびにバグがひとつ増えると思ったほうが

469 :デフォルトの名無しさん:2011/09/04(日) 21:38:30.04
>>467
perl -MFile::Find -e 'find sub{rename $_, $1 if $_ =~ /piyo-(.+\.exe)/}, @ARGV' C:/

470 :454:2011/09/04(日) 22:02:29.17
>>466
お忙しいと思いますが,ご親切にありがとうございます.

Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USER_NAME, PASSWORD)
http.request(request) do |response|

としているのですが,認証はうまくいっているのかもしれませんが,どうもresponseが
帰ってこないです..proxy無しだと,すぐ帰ってくるのですが..




471 :デフォルトの名無しさん:2011/09/04(日) 22:18:46.52
>>467
Dir.glob("C:/**/*.exe") {|f|
File.rename(f, File.dirname(f) + $1) if /\/piyo-(.*\.exe)\z/ =~ f
}

余計なお世話かもしれないけど、File.dirnameで末尾の/を削った状態で + $1してるけど、
このままでいいんだよね?
FIle.dirname("aaa/bbb") # => "aaa"


472 :454:2011/09/05(月) 04:37:52.79
>>466
今,結果を確認しましたら,responseが帰っていました!これで一つ知識が増えました.ありがとうございました.

473 :デフォルトの名無しさん:2011/09/05(月) 08:06:42.19
>>476
それ途中のディレクトリに「piyo-」があったらおかしくなるよね
まあ無い事が前提なんだろうけど中途半端なスクリプトで
かっこいい書き方とか考えるより、冗長かもしれないけど
読んで意味のわかる書き方を身につけた方がいいと思うぞ

File.glob("C:/**/piyo-*.exe").each do |filename|
 dirname = File.dirname(filename)
 basename = File.basename(filename).sub(/piyo-/,'')
 File.rename(filename,File.join(dirname,basename))
end

474 :デフォルトの名無しさん:2011/09/05(月) 10:25:46.40
ワイルドカードと正規表現と、似て非なるものを同じ目的に使おうとしてるから、
冗長になってしまうのは仕方ないよね。
どうしてもパターンを共通にしたいとすると Find で正規表現でマッチしてまわる、
とかになりそうだけど、それはそれで面倒そうだし。

475 :デフォルトの名無しさん:2011/09/06(火) 13:35:27.78
質問です。

ブロックは中括弧を使って表現することができると思いますが、
文字列中の中括弧#{some_variable}や、
連想配列で使う中括弧{ name => 'John', age => 25}はブロックの仲間ですか?
それともただ単に中括弧を使っているだけですか?

476 :デフォルトの名無しさん:2011/09/06(火) 13:40:44.36
うん、ただの波括弧(中括弧という言い方は最近はしないし、紛らわしいのであまり勧めない)の流用
記号が少ないのでこんなことに

477 :デフォルトの名無しさん:2011/09/06(火) 13:45:06.20
>>476

なるほど、ありがとうございます。波括弧も気をつけます。

連想配列の方はともかく、文字列中の#{some_variable}に関しては、
変数の埋め込みだけでなくRubyの式を好きなように入れられるようなので、
てっきりブロックの仲間なのかと思いました。

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

478 :デフォルトの名無しさん:2011/09/06(火) 14:27:26.49
昭和に生まれた人は大括弧や中括弧という言葉を算数(や数学)で使ったはず
今はあまり使わないんだ

479 :デフォルトの名無しさん:2011/09/06(火) 19:27:34.17
マジで?今はなんて?

480 :デフォルトの名無しさん:2011/09/06(火) 19:39:13.46
かくかっこ・なみかっこじゃないん?

そもそもブレースが2番目の括弧なのは日本くらいだろ
大学でいきなり世界のデファクトスタンダードの { [ ( ) ] } になって困惑した人は多いはずだ

481 :デフォルトの名無しさん:2011/09/06(火) 20:27:47.41
>>404
kwsk

>>432
開発当初からIDEの利用を前提としている言語とそうではない言語の違いは仕方がないんじゃ
IDEを使いたい人はテストや、Railsを使う時にこそIDEが欲しくなるかもしれんが、さすがに流れが早すぎる
IDEの開発者に同情する

482 :デフォルトの名無しさん:2011/09/06(火) 21:48:24.50
stringからcomplexに変換するのって
自分でメソッド定義しなきゃダメですか?

483 :デフォルトの名無しさん:2011/09/06(火) 21:57:30.13
> RUBY_DESCRIPTION
=> "ruby 1.9.4dev (2011-09-03 trunk 33167) [x86_64-darwin11.0.1]"
> '1.0i'.to_c
=> (0+1.0i)

1.9のいつごろからあるかは知らない。


484 :デフォルトの名無しさん:2011/09/06(火) 22:22:11.82
いけたよ〜

ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

>irb
irb(main):001:0> '1.0i'.to_c
=> (0+1.0i)

485 :432:2011/09/06(火) 23:36:21.37
>>481
確かにそうなんだけどなぁ。
Win機でこれ!って簡単に進められないのは痛いよ。
別に世界中の誰にも使って欲しいとは思ってないけど、
ある程度間口が広がらないと、企業では排除されるんだよね。
RubyWorldConferenceである人と話したんだけど、
テロ的に、「いやもうこれ(Ruby/Rails)でやっちゃいましたよ」的な既成事実で
攻めるしかないってどうよって思った。
というか完全にスレ違いだね。ごめん。

486 :デフォルトの名無しさん:2011/09/07(水) 06:11:54.35
・rubyはwindowsに対応しておりません。

487 :デフォルトの名無しさん:2011/09/07(水) 06:29:11.15
padrinoの話題ってこのスレでいいのかな

padrinoって、プロジェクトの生成時に
アダプタやDBエンジン、ビューなどの種類を指定するようになってるけど
そのとき設定したものを、あとから別の物に切り替えることってできますか?
(例:最初にActiveRecordを使うように設定し、途中からSequelに切り替える)

488 :デフォルトの名無しさん:2011/09/07(水) 20:37:39.71
>>487
それくらいの切り替えはできるけど、データベーステーブルの構造を切り替えるとか、そういうことまではしてくれない。
あとactiverecordより最初からsequelやるのがおすすめ。英語必要だけど。

489 :デフォルトの名無しさん:2011/09/07(水) 23:29:57.19
>>486
それ >>1 のテンプレに入れようぜ

490 :デフォルトの名無しさん:2011/09/07(水) 23:40:19.73
程度の低いやつだな

491 :デフォルトの名無しさん:2011/09/08(木) 02:13:56.76
>>483-484
ありがとうございます、すみません1.8じゃ無理ですか?

492 :デフォルトの名無しさん:2011/09/08(木) 07:30:23.04
知らんがな
やってみてダメなら無いんだろ

493 :デフォルトの名無しさん:2011/09/08(木) 09:27:43.53
Classの特異メソッドnewはどこにあるのでしょうか?

p Class.singleton_methods # => [:nesting, :constants]

494 :デフォルトの名無しさん:2011/09/08(木) 09:39:09.78
newというメソッドはない
クラスをnewする行為はRubyで特別扱いされていて、initializeが呼ばれる
そんだけ

495 :デフォルトの名無しさん:2011/09/08(木) 09:44:20.92
そうそう
だから、newという名前のクラスメソッドを作るとRubyが発狂する
irb> class Object; def Object.new; puts "new!"; end; end
ruby-1.8.7-p334 :002 > "str"
/home/ch2/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/irb/ruby-token.rb:104:in `new': stack level too deep (SystemStackError)

496 :デフォルトの名無しさん:2011/09/08(木) 09:49:29.14
>>494-495
そうなんだ。
d


497 :デフォルトの名無しさん:2011/09/08(木) 09:53:10.24
いや、new メソッドは特異メソッドじゃなくて、Class#new だから。
Object.methods (あるいは Class.methods )で :new も出てくるでそ。

>>494 まだ半分 Java 脳?

498 :デフォルトの名無しさん:2011/09/08(木) 10:19:53.39
特異メソッドのほうのnewもその特異クラスの中では存在しているように見えるけど、どうなんだろう?

class << Class
alias org_new new
def new
print "Class.new is called"
org_new
end
end

Class.new

499 :デフォルトの名無しさん:2011/09/08(木) 11:24:54.83
singleton_methodsのCソースを見た。

rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj)
(class.c)

ここから呼ばれる実際に検索している関数method_entry(class.c)で、ID_ALLOCATOR(newのこと)
だとスキップしてる。だから実在はするけど、singleton_methodsでは見えない。

method_entry(ID key, const rb_method_entry_t *me, st_table *list)
{
long type;

if (key == ID_ALLOCATOR) {
return ST_CONTINUE;
}

if (!st_lookup(list, key, 0)) {
if (UNDEFINED_METHOD_ENTRY_P(me)) {
type = -1; /* none */
}
else {
type = VISI(me->flag);
}
st_add_direct(list, key, type);
}
return ST_CONTINUE;
}

500 :デフォルトの名無しさん:2011/09/08(木) 13:26:34.89
def foo
 def bar
  puts :bar_called
 end

 puts :foo_called
end

というコードでテスト中にちょっと内部のbarを直接呼び出したいんですが
うまいやり方ってありますか?

foo.bar

とやってみたところ

foo_called
bar_called

というよくわからない結果になってしまいました。

501 :デフォルトの名無しさん:2011/09/08(木) 13:51:12.33
そもそもメソッド内のメソッドは君が想像してる物と別物。
ただ単純にfooが実行された時にbarを定義するという意味でしかない。
つまり、↑のコードは
1. def fooによりObject#fooが定義される
2. foo.barのfooの部分でObject#fooが呼ばれる
3. def barが実行されるためObject#barが定義される
4. puts :foo_calledによりfoo_calledが出力される
5. puts :foo_calledはnilを返すためfooの返り値はnilになる
6. foo.barに戻る。実際はfooの帰り値はnilなためnil.barの意味。よってObject#barが呼ばれる
7. メソッドbar内でbar_calledが出力される
という風に実行される。

502 :デフォルトの名無しさん:2011/09/08(木) 15:39:27.91
んむ、オブジェクトに関する理解がまだないんだと思う
メソドチェーンは処理そのものの連なりではない

503 :デフォルトの名無しさん:2011/09/08(木) 21:08:47.47
>>495
しんでるのはirbのtokenizerだけだろ
ファイルから直接読ませればなにも影響ない

>>498
特異クラスもClassインスタンス

>>499
ID_ALLOCATORはClass#allocateだからClass#newとは別物


504 :デフォルトの名無しさん:2011/09/09(金) 08:56:08.82
>>503
なるほど、Class.newもSomeclass.newも同じClass#newが呼ばれてるね。
Classの特異クラスに元々newという特異メソッドはないね。

Class#newでレシーバーがClassなら(無名)クラスを作って、
そうでない場合は通常のインスタンスを作ってると。

Rubyで実装するとこんな感じかな。

class Class
def new
instance = allocate # allocate内でクラスか通常のインスタンスを生成
instance.instance_eval{ initialize }
instance
end
end

505 :デフォルトの名無しさん:2011/09/09(金) 12:22:47.20
HPC Rubyがすごいぞ、ほぼCと同じ速度で動くってよ、
現在の最新Rubyの100倍以上の高速化だぞ。

506 :デフォルトの名無しさん:2011/09/09(金) 22:49:52.53
ttp://ci.nii.ac.jp/naid/110008583419

   ∧_∧
⊂(#・ω・)  論文に金なんか出せるか!!
 /   ノ∪
 し―-J |l| |
         人ペシッ!!
       __
       \  \


507 :デフォルトの名無しさん:2011/09/09(金) 23:14:01.97
研究会報告なら大学図書館とかにある所もあるかな

508 :デフォルトの名無しさん:2011/09/10(土) 00:02:34.20
図書館が論文購入費用に長年悩まされているって話を最近見たな、
もう何百年も前から学会が論文に高い値段つけて売っているとか


509 :デフォルトの名無しさん:2011/09/10(土) 00:05:08.67
非会員 : \630-・・・まぁこんなものか。


510 :デフォルトの名無しさん:2011/09/10(土) 01:23:59.34
>>508
売りつけてるのは学会じゃなくて出版社じゃなかったっけ?


511 :デフォルトの名無しさん:2011/09/10(土) 02:42:28.14
印刷やめて全部電子化して、必要な人だけオンデマンド印刷とかにすれば、
今よりずっと安くなる気がするんだが、それだとやっぱり箔が付かないんだろうか。

512 :デフォルトの名無しさん:2011/09/10(土) 09:59:26.12
Rubyが速くなるのはうれしいけど
HPCのような純粋に速度を求められる分野は普通にCやアセンブリでやったほうがいいのでは


513 :デフォルトの名無しさん:2011/09/10(土) 10:08:10.26
何百台のマシンにタスク振り分けたりまとめたり、という、
・そこまでアセンブラで書いてたら頭が痛い
・汎用ライブラリでは性能が出ない
というタイプのコードが近年のHPCでは無くてはならないものになってますので。

514 :デフォルトの名無しさん:2011/09/10(土) 10:41:41.62
でも何故Ruby?っていう。もっと向いた言語がありそうなのに。

515 :デフォルトの名無しさん:2011/09/10(土) 10:52:11.03
Erlangとか?
(てきとうにいってます)


516 :デフォルトの名無しさん:2011/09/10(土) 11:11:49.44
>>511
団体運営の貴重な収入ですので、そう安易に値下げするわけにもまいりません
ただでさえ年会費払うような会員が減っていってるのに

517 :デフォルトの名無しさん:2011/09/10(土) 11:20:26.07
初心者の質問はどこですか?

518 :デフォルトの名無しさん:2011/09/10(土) 11:23:19.73
初心者さんのご来場まで今しばらく歓談でお待ちください

519 :デフォルトの名無しさん:2011/09/10(土) 12:28:25.39
本当にRubyならいいけど
どうせ妙な制約が付きまとうんだろ


520 :デフォルトの名無しさん:2011/09/10(土) 15:22:11.53
人間が設定する必要がある部分がすこしずつ減っていっているだけだ。

コンピュータは賢くなっていって最終的には

521 :デフォルトの名無しさん:2011/09/10(土) 15:44:42.45
バカになる


522 :デフォルトの名無しさん:2011/09/10(土) 15:52:30.06
まぁ脳型コンピュータが実現すれば、コンピュータは人間の支持なしで解決すべき問題を自分で見つけて解決出来るようになるだろう。
宇宙の根源も、世界の理も、これからはアインシュタインのような科学者ではなく、コンピュータが導き出す時代になるのさ

523 :デフォルトの名無しさん:2011/09/10(土) 16:01:20.60
それは人間と何が違うんだ?

524 :デフォルトの名無しさん:2011/09/10(土) 16:13:08.17
>>523
人間と違って、物忘れもしないし、計算ミスもしないから、求めるべき解を、最も早くそして最も確実に求めることができるのさ

525 :デフォルトの名無しさん:2011/09/10(土) 16:46:12.48
忘れる機能を組み込まないと、
脳型コンピュータは実現できないかもしれんぞ。

忘れるというのはすごく重要な機能だと思う。
データに重要度をつけて、重要度が低いデータを奥に押しやったり、
そもそも記憶の対象から外したりするんだから。

526 :デフォルトの名無しさん:2011/09/10(土) 18:38:34.48
住人の中に質問のある初心者さんはいらっしゃいませんかー?

527 :デフォルトの名無しさん:2011/09/10(土) 19:39:58.06
>>526
はい
Rubyをコンソールで動かす時にコマンドラインから入力を得るにはどうすればいいんでしょうか?
pascalでいう
write("x:");
readln(x);
みたいな感じで

528 :デフォルトの名無しさん:2011/09/10(土) 20:59:15.01
gets?


529 :デフォルトの名無しさん:2011/09/10(土) 21:19:11.00
args = ["", "", ""]
args[0] = ARGV.shift
args[1] = ARGV.shift
args[2] = ARGV.shift

530 :デフォルトの名無しさん:2011/09/10(土) 21:24:03.24
line = ARGF.gets

531 :デフォルトの名無しさん:2011/09/10(土) 22:57:59.28
print "x: "
x = gets

532 :487:2011/09/11(日) 15:49:17.37
>>488
ありがとうございます
とりあえずsequel使って進めてみます

533 :デフォルトの名無しさん:2011/09/11(日) 16:28:21.65
Padrinoを使って、管理画面を生成し
「ip_address」という名前のモデルを作って、管理画面からレコードを1件新規作成したところ
管理画面の一覧表示で以下のようなエラーが発生するようになりました
このエラーの解決方法をご存じの方はおられないでしょうか?

Padrino::Routing::UnrecognizedException - route mapping for url(:ip_addresses_edit) could not be found!:
d:/ruby/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.2/lib/padrino-core/application/routing.rb:395:in `rescue in url'
d:/ruby/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.2/lib/padrino-core/application/routing.rb:370:in `url'
d:/ruby/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.2/lib/padrino-core/application/routing.rb:723:in `url'
D:/work/padrino-test/admin/views/ip_addresses/index.slim:26:in `block in evaluate_source'
(以下略)

URLのルーティングに失敗して、エラーが出ているということは分かるのですが
padrino、Sinatra、HTTPRouter、自分の設定のうちどれに問題があるのか
切り分けがうまくできない状態です

534 :533:2011/09/11(日) 16:30:38.42
なお、テンプレート内でエラーとなっている箇所では
以下のようにしてurlメソッドを呼び出しています
(padrino側が自動生成したコードです)

url(:ip_addresses, :edit, :id => ip_address.id)

環境は以下の通りです
Windows XP
ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32]
padrino 0.10.2


535 :デフォルトの名無しさん:2011/09/11(日) 19:01:56.39
質問です。

class Sample
def methodName1
処理
end
end



class Sample
def methodName2
処理
end
end

こんな風に2回、同様のクラス名で別個のメソッドを定義して
インスタンス化し、methodName1とmethodName2を実行したら
両方とも呼べたのですが、このように最初に定義しておいた
クラスに対して、後で宣言を追加するのって、わりと
よく使われるのでしょうか?

なんとなく、宣言ははじめにまとめてやるべきな気がするのですが
お仕事で使うようなプログラムでも、普通に上記のような
クラスを再定義するような形で機能追加とかしたりしますか?

536 :デフォルトの名無しさん:2011/09/11(日) 19:14:26.34
まとめてやるのが基本ではある。

だけどRailsみたいに組み込みクラスとかまでそうやってあれこれいじってる
例もある。

537 :デフォルトの名無しさん:2011/09/11(日) 19:24:18.11
まとめるべき
(どこかで)requireするたびに(どこかの)クラスのメソッドが書き変わるという運用も可能だが、おおむねバグの元だ

538 :デフォルトの名無しさん:2011/09/11(日) 19:36:53.00
その場だけの自分用スクリプトを書くときに
既存のクラスにちょっと機能追加して使ってみたりする

539 :uy:2011/09/11(日) 22:18:34.31
>>535
前のlambdaの質問者はセンスあったが
お前はセンスない
その場所に疑問点が浮かぶ時点で・・・まだ見えてないぜ


540 :デフォルトの名無しさん:2011/09/12(月) 00:25:03.76
見えないレスが増えてきたと思ったら、また口だけのボクちゃんが戻ってきたのか
うざいな

541 :デフォルトの名無しさん:2011/09/12(月) 00:26:09.47
NGして見えねーようにして誇らしげにうぜえってレスしてる人のがうざいです

542 :デフォルトの名無しさん:2011/09/12(月) 00:54:00.21
>>535
その挙動はopen classと呼ばれていて以下のような用途に使われている。

・バグへのパッチ当て(既存メソッドの再定義)
・(継承して使うようには設計されていない)ライブラリの挙動をカスタマイズ(既存メソッドの再定義)
・既存クラスの拡張 (メソッドの追加など。例:ActiveSupprt)

継承、委譲では難しいことが可能。
元のコードには手を入れなくて良いというのがみそ。

543 :デフォルトの名無しさん:2011/09/12(月) 00:56:35.74
>>541
おまえが一番うざい

544 :デフォルトの名無しさん:2011/09/12(月) 05:08:19.02
>>528-531
ありがとうございます。
なるほどー色々やり方があるんですね
試してみようと思います

545 :デフォルトの名無しさん:2011/09/12(月) 08:05:27.02
>>543
お得意のNGしなよ

546 :デフォルトの名無しさん:2011/09/12(月) 09:11:24.20
>>545
コテよろ

547 :デフォルトの名無しさん:2011/09/12(月) 10:27:04.16
おなじ処理の繰り返しだけど
初回や最後だけ追加処理があるとかのばあい
どうするのがいいのでしょう

初回? = true
10.times do
#繰り返す処理1
if 初回?
#初回だけの処理
初回? = false
end
#繰り返す処理2
end

のようにしているのですが


548 :デフォルトの名無しさん:2011/09/12(月) 10:32:45.78
ああ、あると便利と言われつつもぜんぜん実装されないんだよね
最初の要素または最後の要素だけ特別処理する書き方って

>>547でおk

each でブン回す場合は

special_action(data[0])
data[1..-1].each do |x|
normal_action(x)
end

みたいに書くことが多い
どっちにしても、若干キモい

549 :uy:2011/09/12(月) 23:07:19.51
>>547


instance_exec 0..3 do | a |
  a.each do | x |
    p x
    p :first if x == a.first
    p :last  if x == a.last
  end
end


550 :デフォルトの名無しさん:2011/09/12(月) 23:22:57.42
>>547
10.times {|i| ... } 形式を使ってi == 0とi==9のときに追加処理

551 :デフォルトの名無しさん:2011/09/13(火) 00:45:10.44
>>549
配列の中身が全て違う値の時にしか動かないような(そういう前提なのかもしれんけど)。

>>550
each_with_indexも使えそう。

個人的には >>548 のように、特別な処理をする部分としない部分を分けた上でループさせるのがすきだな。
eachとかtimesなどは毎ループチェックが気にならないなら手軽そう。


552 :デフォルトの名無しさん:2011/09/13(火) 00:53:30.63
これよく悩むわ
何万回と処理されるループの中に初回とか最後とかの一回しかtrueにならない判定入れたくないんだよな
かといって >>548 みたいにするのもキモいし

553 :デフォルトの名無しさん:2011/09/13(火) 02:34:58.16
whileを常用してるから、こんなんで悩まねーな

554 :uy:2011/09/13(火) 02:39:15.39
これはプログラミングの暗部に触れてる。どうやっても綺麗にかけない類のアルゴリズム。


555 :デフォルトの名無しさん:2011/09/13(火) 07:41:04.91
>>553
kwsk

556 :デフォルトの名無しさん:2011/09/13(火) 07:53:10.01
初回処理
while文
最終処理
でいいんじゃねぇの?

557 :デフォルトの名無しさん:2011/09/13(火) 08:05:51.65
whileだといつもそんな感じになるから悩みようがないな

558 :デフォルトの名無しさん:2011/09/13(火) 10:09:54.29
>>556-557
そうじゃなくて、

while
 何か処理
 初回処理 if 初回
 最終処理 if 最後
 何か処理
end

だから悩んでるんじゃないの?

559 :デフォルトの名無しさん:2011/09/13(火) 10:15:33.30
ない。素直にifっとけで終わる話を長々と…

560 :デフォルトの名無しさん:2011/09/13(火) 10:23:42.24
速くしたいなら、最初と最後をループ外に出せばいい。
速度気にしないで、まとめときたいならループ内に置いておけばいい。
ただそれだけだろう。

561 :デフォルトの名無しさん:2011/09/13(火) 11:08:40.66
初回だけ変えるのは簡単だと思うけど、最後ってどうすれば良いんだろう。
Array みたいに最後がどれかわかるものはともかく、
Enumerable なオブジェクト一般だと。

562 :デフォルトの名無しさん:2011/09/13(火) 11:10:36.20
>>559
判定が面倒だという話だろ
繰り返しの初回と最後の真偽を返すプロパティがある言語もあるし(たとえばPHP)、
繰り返しの初回や最後に特別に実行されるルーチンを記述できる言語もある(見た時は凄い便利だと思ったんだが、言語名を思い出せない)
そういうのがRubyにないかという話だと思われる

で、まあ、無いw
一般的には>>549のように配列削る
each_with_indexでインデックスつきで処理してインデックスが0かlengthであるかどうかで分岐させたりもする

563 :デフォルトの名無しさん:2011/09/13(火) 12:08:36.79
俺ならprivateメソッドかprocの出番かな
共通処理を括り出して、初回限定処理や最終回限定処理はループの外へ

564 :デフォルトの名無しさん:2011/09/13(火) 12:17:09.64
generatorでループ回すときはどうするのが良いんだろ?

565 :デフォルトの名無しさん:2011/09/13(火) 12:24:32.97
>>549ではなく>>548だった
>>549は何書いてあるのかわからん

566 :デフォルトの名無しさん:2011/09/13(火) 12:29:41.13
新しい配列を生成しちゃうなんて最悪ぅ

567 :デフォルトの名無しさん:2011/09/13(火) 12:35:32.70
配列のsliceはコスト低いんじゃなかったっけ

568 :デフォルトの名無しさん:2011/09/13(火) 12:45:11.76
今の実装だと中身はコピーオンライトで共有してるんだっけ?

569 :デフォルトの名無しさん:2011/09/13(火) 12:57:33.52
元の配列のx番目からy番目までを参照してくださいという情報が入った特別な配列のフリをする物体を返すんだったはず
array.cのary_make_shared()を読むとええ

570 :デフォルトの名無しさん:2011/09/13(火) 17:41:23.69
ちょっと話ずれるけど、文字列のsliceもそうなってたりするの?

571 :デフォルトの名無しさん:2011/09/13(火) 20:29:25.82
>>570
そう。sliceはpythonの用語だけど。
つうか、配列もそうだったとは知らなかった。勉強になりました。

572 :デフォルトの名無しさん:2011/09/13(火) 20:58:50.53
>>571
Ruby にも String#slice あるよん。

573 :デフォルトの名無しさん:2011/09/14(水) 08:53:26.34
sliceしてreplaceするとどうなるのっと

574 :デフォルトの名無しさん:2011/09/14(水) 08:58:14.76
コピーオンライト

575 :デフォルトの名無しさん:2011/09/14(水) 16:26:44.45
コピーオンライトってコピー元が変更される時も働くのか
そりゃそうだよな

576 :uy:2011/09/15(木) 02:27:13.72
納得してんじゃねえよ
Rubyのそういうのを全部細かく設定できるようにさせるべきじゃね
こうするのとこうするのはどちらがよいか?って側面でRubyは片方を選んできてる
あくまでそれはデフォルト設定として、
設定変更すればもう片方の道を選べるようにしていくと、使用ユーザー層が広がる

577 :デフォルトの名無しさん:2011/09/15(木) 02:28:44.07
トリップつけろバカ

578 :デフォルトの名無しさん:2011/09/15(木) 05:10:51.30
>>577
表示してるのはお前だけ

579 :デフォルトの名無しさん:2011/09/15(木) 18:14:46.99
全部細かく設定とか、php.iniのウザさを知らないんだろう
言語設計者としてのセンスはゼロのようだな

580 :デフォルトの名無しさん:2011/09/15(木) 18:18:42.77
Webrickについて質問があります。
ローカルに置いてある、ファイル名が日本語のファイルの取得ができません。

サーバーは↓のものをそのまま使っています。
ttp://jp.rubyist.net/magazine/?0011-CGIProgrammingForRubyBeginners-2#l6

例えば、ttp://localhost:8080/にアクセスしたとして、表示しようとするディレクトリに日本語が含まれるファイル名が存在する場合に
Internal Server Error
invalid byte sequence in US-ASCI
となります。

OSはWindows7、Rubyのバージョンは1.9.2です。
おそらくファイル名の文字コードの関係かと思うのですが解決策がわかりません。

581 :デフォルトの名無しさん:2011/09/15(木) 18:19:52.35
ruby -r kconv -n -e 'print Kconv.toeuc($1+"\t"+$2+"\n") if /\((.*?)\) (.*)/ =~ $_;' *.txt > test.log

これをワンライナでない形式にしてください。お願いします。

582 :581:2011/09/15(木) 19:05:49.43
require 'kconv'

ARGV.each do |filename|
 file = open(filename)
 while line = file.gets do
  print Kconv.toeuc($1+"\t"+$2+"\n") if /\((.*?)\) (.*)/ =~ line;
 end
 file.close
end

書いてみました。これであってますか?

583 :デフォルトの名無しさん:2011/09/15(木) 19:28:08.04
require 'kconv'
while gets
 print Kconv.toeuc($1+"\t"+$2+"\n") if /\((.*?)\) (.*)/ =~ $_
end

584 :581:2011/09/15(木) 19:31:30.38
>>583
ありがとうございます

585 :uy:2011/09/16(金) 03:00:48.45
>>579
ハァ?
お前がRuby開発陣でないことを祈るよ


けどRubyはインクリメント、スタティック変数、デストラクタすら実装しない言語だからな

それを「センスある」と、勘違いしてるならマジでもうダメだな


確かにスタティック変数、デストラクタが必要なソースコードは式が甘いんだけど
そいつらをなくすんだったら、別の解決策を提示しておかないと、必要な装備がないただのマゾゲーになるわけだ

586 :uy:2011/09/16(金) 03:06:05.69
特にスタティック変数に関してはそこかしこで、意味不明なコード量産されている
いつになったらスタティック変数か、その代わりになるものが実装されるんだ?

言っちゃ悪いけどスタティック変数はバグの元であると同時に、プログラミングしていく上で必要な概念なんだ

ようは、スタティック変数は、メソッド内やクラス内に内包されていたとしても
手動GCによって初期化が可能な機構を作って初めてバグではなくなる

Cでいえば、スタティック変数はすべてアドレスを保存しておく感じ
それさえやっていないスタティック変数は、もうバグの1種として扱って良いレベル。
なくすことは正解であるが、別回答を用意していないから、素人が初心者が素のスタティック変数を使う以上に
ゴミカスなコードを書く事態に走っている

587 :デフォルトの名無しさん:2011/09/16(金) 11:16:58.13
>>585

> Rubyのそういうのを全部細かく設定できるようにさせるべきじゃね

> 全部細かく設定とか、php.iniのウザさを知らないんだろう

何がスタティック変数だ。話そらすなよクズがw
まずは挙動を細かく設定で制御できるという、
お前のクソアイディアについて議論しろ。

588 :デフォルトの名無しさん:2011/09/16(金) 12:54:41.84
ここでuyに反応するなぼけ

589 :uy:2011/09/17(土) 00:56:04.90
>>587
お前その程度で話しかけてきたの?

話をそらす → ×
話についてこれない → ○


100回レスよんで理解してからもう一度話しかけろよゴミ


本当にちょっと、高次元の話になるとすぐ話ズレたとか何とか言って、
耳から聴いた言葉が反対側の耳からとおりぬけてるように見えるよ

これだからマジレスする価値がこの板にはないんだ

自分の理解出来ない事 やった事のないこと
それを言ってる初心者は、本当に初心者? よく考えてからレスしろゴミ

590 :デフォルトの名無しさん:2011/09/17(土) 01:03:07.91
初心者スレッドでよくわからない高度なお話はやめていただけませんか

591 :デフォルトの名無しさん:2011/09/17(土) 01:31:54.67
統合失調症だから

592 :デフォルトの名無しさん:2011/09/17(土) 12:53:39.35
uyってつまらないな
Perl忍者のほうが1000倍おもしろいけど

593 :デフォルトの名無しさん:2011/09/17(土) 17:55:31.98
>>592
ここがおもしろい。
http://hibari.2ch.net/test/read.cgi/tech/1313183984/

594 :デフォルトの名無しさん:2011/09/18(日) 16:03:26.59
[ぁ-ん]
ひらがなだけ
[ァ-ヴ]
カタカナだけ
[一-龠]
UTF-8の漢字だけ
[亜-煕]
sjisの漢字だけ

sjisの2バイト文字にだけマッチっていうのはないんですか?

595 :デフォルトの名無しさん:2011/09/18(日) 16:57:17.64
それただの正規表現だぞ
正規表現がなにかわからないなら勉強してくれ

596 :デフォルトの名無しさん:2011/09/18(日) 17:30:44.74
> [一-龠]
> UTF-8の漢字だけ
> [亜-煕]
> sjisの漢字だけ

正確にはそれぞれ、
「UTF-8の時に、漢字にマッチ」
「sjisの時に、漢字にマッチ」
だ。

「UTF-8の漢字にマッチ」などというパターンはないし、BMP外の字にもマッチしない。
基本をどこかで勉強しろ。

597 :デフォルトの名無しさん:2011/09/18(日) 17:52:30.92
とはいえ、どっかのライブラリに代表的な正規表現として入ってねーかなと思うことはある
日本中で100時間くらい節約になると思う

598 :デフォルトの名無しさん:2011/09/18(日) 18:36:58.30
>>596
> 「UTF-8の漢字にマッチ」などというパターンはないし、

↓これはダメかな?
str.scan(/\p{Han}/)

599 :デフォルトの名無しさん:2011/09/18(日) 19:00:42.08
>>597
やりたいことは、
・まずStringをdupしてASCII-8BITにforce_encoding
・そいつに対して、あきらかにUTF-8ですあり(ry を判定するASCII-8BITなRegexpでmatch
・判定結果を返す
ということ?

600 :デフォルトの名無しさん:2011/09/18(日) 19:20:25.67
ひらがな、かたかなだけならpがいいんだけどねー


601 :デフォルトの名無しさん:2011/09/18(日) 19:35:37.13
>>598
"〆"にはマッチしない事に注意が必要だね

602 :デフォルトの名無しさん:2011/09/18(日) 21:30:30.54
>>601
それ漢字?

603 :デフォルトの名無しさん:2011/09/18(日) 21:51:04.59
今から学習しようとしてる素人ですが
1.9がオススメですか?

604 :デフォルトの名無しさん:2011/09/18(日) 21:53:51.21
>>602
漢字でよい

漢の国由来の文字という意味では違うが、国字として認定されてるので、現在ではきちんと漢字

605 :デフォルトの名無しさん:2011/09/18(日) 21:55:23.68
>>603
現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要
1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意

606 :デフォルトの名無しさん:2011/09/18(日) 22:02:03.54
1.8にします

607 :デフォルトの名無しさん:2011/09/18(日) 22:14:34.65
Railsでさえ、次のバージョンでは1.8を捨てると言ってるのに・・・

608 :デフォルトの名無しさん:2011/09/18(日) 23:16:52.85
1.9なのでしょうか?

609 :デフォルトの名無しさん:2011/09/18(日) 23:17:53.74
プログラム言語にあるまじき優柔不断さ

610 :デフォルトの名無しさん:2011/09/19(月) 00:07:25.13
道に迷って交番行ったら
優柔不断といわれても。
初心者スレではないのですか?

611 :デフォルトの名無しさん:2011/09/19(月) 00:18:25.01
特徴教えてそこからどうするかはお前次第だろ
甘えんな

612 :デフォルトの名無しさん:2011/09/19(月) 01:34:50.76
>>610
ここ交番じゃないです
そこら辺のドライバーに道を尋ねたようなもん

613 :デフォルトの名無しさん:2011/09/19(月) 03:24:46.63
これから始めるんなら1.9

614 :uy:2011/09/19(月) 07:25:25.38
1.8も1.9もゴミだからやらなくていい
Ruby2.0がでるまで待機してろ
やることないから俺もそうしてる

615 :デフォルトの名無しさん:2011/09/19(月) 11:07:46.32
>>614
2はゴミじゃないの?


616 :デフォルトの名無しさん:2011/09/19(月) 11:16:21.68
>>613
まあ、どっちも必要になるだろうというのが正直なとこだが
初心者が慣れる頃には1.9だらけになってたらいいなーという希望込み

1.8のマニュアルやガイド、書籍。Tips、テクニックは基本的に軒並み無効なので、対象バージョンの見極めだけは注意
古いサイトや古い本の記述を1.9でそのまま書いても動かないか、中途半端に途中まで動いて"不可思議"なエラーで止まるぞ
買ってきた本、借りてきた本、ぐぐったサイトの記述が1.8専用だったとしても責任は持てん

617 :デフォルトの名無しさん:2011/09/19(月) 11:26:47.39
1.8.7やってから1.9.2やれというのは
「これは1.8.7では動きませんエラー」はたいていメソッド不足でわりとわかりやすいのに対して
「これは1.9.2では動きませんエラー」はそもそも判別めんどくさいというのもあるかと思う

つきっきりでガイドするなら1.9.2がおそらくいちばん楽なのは間違いない
2番目以降の言語としてRubyをやる場合も、たぶん1.9.2でいいかと思う
(こんな人はどれがいいかなんて聞かないだろうから(聞かないよね??)、無視していいはず)

独学でなおかつプログラミング初心者となると話が面倒に

618 :デフォルトの名無しさん:2011/09/19(月) 11:30:37.91
そもそも初心者がrubyに手を出すなと


619 :デフォルトの名無しさん:2011/09/19(月) 11:34:02.67
なんかこの展開一億回ぐらい見た

620 :デフォルトの名無しさん:2011/09/19(月) 11:37:35.47
>>619
1.8.7が無くなるか、1.8シリーズにも外部知識にも依存しないガイドが無料で出るまで続くかと思う

621 :デフォルトの名無しさん:2011/09/19(月) 11:40:02.62
無難な方針はC89・C++・C99・C++0xの互換性問題と同じく、
基礎部分として1.8/1.9で互換の部分を教えることだと思う
ただ文字列・IOの仕様が厄介だが……

622 :デフォルトの名無しさん:2011/09/19(月) 11:46:32.87
>>620
1.9特有の質問があったらWikiにまとめとくぐらいのことはしてもいいかもね

623 :デフォルトの名無しさん:2011/09/19(月) 11:47:45.53
言いたくないけど、実質上の問題はエンコーディングのとこだけで、しかもそこが致命的
避けて通ることもごまかすこともできやしねえし、望んだ動作にならないのはたいていRubyのせいじゃないのがなんとも
「それは元ファイル作成者が悪いんです!!」「間違ってるのは世の中のほうなんです!!」「でも対処は自分で!!」
と言い続けるのはけっこうしんどい

624 :デフォルトの名無しさん:2011/09/19(月) 11:48:58.38
もちつけ

625 :デフォルトの名無しさん:2011/09/19(月) 11:54:54.66
>「それは元ファイル作成者が悪いんです!!」「間違ってるのは世の中のほうなんです!!」「でも対処は自分で!!」
WindowsのRuby1.9でサイトのHTMLを取得したんですが、で始まる質問は頭が痛い

626 :デフォルトの名無しさん:2011/09/19(月) 12:18:07.90
個人的には1.8から1.9への移行で一番苦労したのはDLだな。
ライブラリ名は同じなのに全く互換性がないから。
まあ初心者はDLなんか使わないかもしれないけど。

627 :デフォルトの名無しさん:2011/09/19(月) 12:23:41.86
あれはdl2とか名前変えた方がよかった

628 :デフォルトの名無しさん:2011/09/19(月) 12:48:51.52
1.9が2.0に向けての開発版だったから許された変更が、方針変わってもそのままにされた不幸ですな

629 :デフォルトの名無しさん:2011/09/19(月) 14:39:21.86
1.9.2に移行したときは、文字列の[]が数値ではなく、文字列を返すようになっていたのにハマった
バイナリと文字列が同じ型なのにStringを拡張されたのがつらい


630 :デフォルトの名無しさん:2011/09/19(月) 16:27:56.56
ありがたいことに漏れには気にならない

631 :デフォルトの名無しさん:2011/09/19(月) 16:46:36.30
おれはむしろうれしかった

632 :デフォルトの名無しさん:2011/09/19(月) 17:29:18.99
位置の定義自体も変わってるから、まったく別ものだし

633 :デフォルトの名無しさん:2011/09/19(月) 19:29:36.06
急にインクルードパスから'./'が除かれるとかな

634 :デフォルトの名無しさん:2011/09/19(月) 19:32:34.36
1.8使えばいいじゃん

635 :デフォルトの名無しさん:2011/09/19(月) 19:45:30.12
>>633 それはスクリプト処理系全般でみんなやってることだから

636 :デフォルトの名無しさん:2011/09/19(月) 19:51:06.91
どうして外されたんだろう?
便利だったと思うんだけど

637 :デフォルトの名無しさん:2011/09/19(月) 19:56:55.63
いや便利じゃないって
どう考えても誤爆のほうが多い

自力でカレントディレクトリのファイル require するなら require './hoge.rb' って書いてね

638 :デフォルトの名無しさん:2011/09/19(月) 20:04:59.41
ttp://www.ipa.go.jp/security/fy21/reports/tech1-tg/a_01.html
これでも読め

639 :デフォルトの名無しさん:2011/09/19(月) 20:07:30.92
>>637,638
!!
理解したつもりになれた
ありがとう

640 :デフォルトの名無しさん:2011/09/19(月) 21:26:51.11
WindowsでちょこっとしたGUIアプリ作るのには向かない? C#勉強すべき?

641 :デフォルトの名無しさん:2011/09/19(月) 21:46:50.92
使ったことなくて書くけど、最近リリースされたGreen Shoesとか試してみれば?
ぱっと見簡単そう


642 :デフォルトの名無しさん:2011/09/19(月) 21:52:26.45
>>640
デファクトスタンダードのGUIライブラリ無いから、情報量の多さからとGUIデザイナ標準搭載な環境からC#になるかな

何かGUIライブラリを既に知ってるならRubyでも良いと思うけど


643 :デフォルトの名無しさん:2011/09/19(月) 22:44:04.91
>>640
C#使え
いや、別にC#でなくてもいいけど、とりあえずRuby以外でやっとけ
Rubyである部分が何もないから

644 :デフォルトの名無しさん:2011/09/19(月) 23:26:42.43
C#はいい言語

645 :デフォルトの名無しさん:2011/09/19(月) 23:35:30.65
>>643
> Rubyである部分が何もないから
どういう意味?

646 :デフォルトの名無しさん:2011/09/20(火) 00:32:20.17
シンタックスシュガーとか動的型付けとかないよ

それがスタンダードなんだけど

647 :デフォルトの名無しさん:2011/09/20(火) 02:08:02.32
C#はシンタックスシュガーがわりといくつもあった気がしたが。
4.0ではdynamicキーワードによる動的型付けもサポートされたよ。

648 :デフォルトの名無しさん:2011/09/20(火) 02:25:08.01
以後構文糖とは何かで議論が続き散々もめたあと
コンパイラスレから遊びにきた通りすがりが一蹴する流れが

来ません

649 :デフォルトの名無しさん:2011/09/20(火) 03:18:22.93
>>640
Ruby + Windows + GUI は最悪の組み合わせ

650 :デフォルトの名無しさん:2011/09/20(火) 03:33:49.97
>>645
>>643 じゃないけど
Ruby が必要である部分が何もないから
Ruby で GUI するメリットって何もないから
っていう意味だと思う

651 :デフォルトの名無しさん:2011/09/20(火) 04:32:42.03
全部RubyのオブジェクトっぽいRubyっぽい引数データのように振舞ってくれていればいいけどな
実際はそうじゃないし
結局はGUIの部分だけ別言語で書くことと同じ

652 :デフォルトの名無しさん:2011/09/20(火) 05:45:34.39
>>649
そうなのか さようならルビー

653 :デフォルトの名無しさん:2011/09/20(火) 06:27:14.53
>>486をテンプレに入れようという流れもあるからな

654 :デフォルトの名無しさん:2011/09/20(火) 07:44:01.24
getsでささるとか1.8時代の話なんだが

655 :デフォルトの名無しさん:2011/09/20(火) 09:38:04.61
>>651
ラッパーとか作ってる人がものすごーく頑張ってくれているとどうにでもなるんだけどね
さすがにそんな人はいないし、「○○で書くところの××を」みたいな指示になる
じゃあ最初から○○で書いたほうがいい

656 :デフォルトの名無しさん:2011/09/20(火) 09:41:44.16
>>653
お前が言ってるだけだろアホ

657 :uy:2011/09/20(火) 16:06:54.23
>>615
ハァ?

球技での鉄則は「ボールに当てれば何が起こるかわからない」だ。
野球に然り、テニスに然り、
ボールに触れさえすれば勝てる可能性はそこにある

例えそれが限りなく0に近かろうとな 四角いものと違って、人は丸いものにかかる力を計算しきれない

658 :デフォルトの名無しさん:2011/09/20(火) 21:40:12.87
質問なのですが、
こんなふうに

for i in 1...10
puts i
end

とRubyで記述した場合、普通は1から10が順番に表示されますよね?
うちのRubyでは1から9までしか表示されません。
0...10とすれば、0から9。1...100とすれば、1から99といった具合です。
irbでもrubyでも同じ事が起こります。
これはインストールが上手くいっていないのでしょうか。それとも何か設定がうまくいってないのでしょうか。
Ruby1.9.2をWin732bitで使用しています。
宜しくお願いします。

659 :デフォルトの名無しさん:2011/09/20(火) 21:42:40.91
>>658
ピリオド2個と3個で意味が違う

660 :デフォルトの名無しさん:2011/09/20(火) 21:49:58.03
>>659
なんと、そんなことだったとは・・・
これのせいで1時間以上も時間を無駄にしてしまった・・・
本当に助かりました。ありがとうございました。

661 :デフォルトの名無しさん:2011/09/20(火) 22:39:50.81
>>660
初心者にはよくあることだ
0とOを間違えるとか
1とlとIと|を間違えるとか
'と`を間違えるとか
qとgを間違えるとか
だからこれにめげずに頑張れ

662 :デフォルトの名無しさん:2011/09/20(火) 23:31:36.18
>>658-660
Ruby最悪だな

663 :デフォルトの名無しさん:2011/09/20(火) 23:38:40.17
>>662
Perlに言えよ

664 :デフォルトの名無しさん:2011/09/20(火) 23:58:24.56
ていうかそもそもforなんて使わないので本気でどうでもいい
1.upto(10) do |x|
puts x
end

665 :デフォルトの名無しさん:2011/09/21(水) 00:05:32.11
もっと使わん

666 :デフォルトの名無しさん:2011/09/21(水) 00:08:06.97
今回の質問に関してはドットの個数が重要でfor使わないとかは瑣末な話

667 :デフォルトの名無しさん:2011/09/21(水) 00:11:43.33
いや、Rangeオブジェクトをリテラルで書く方法なんて知らなくてもしばらく生きていける
forを使うことはまず無いし、forを使わなければRangeのリテラル記法に悩むこともひとまず無い

668 :デフォルトの名無しさん:2011/09/21(水) 00:16:56.30
他の言語でかかれたプログラムからRubyのスクリプトを作成するとき
まずforを意識する

669 :デフォルトの名無しさん:2011/09/21(水) 00:18:41.54
>>667
「今回の質問に関しては」ってわざわざ書いたのにびっくりだわ

670 :デフォルトの名無しさん:2011/09/21(水) 00:22:02.61
forを使わなくても普通にRangeリテラルは使うぞよ
(1..10).each{|i| puts i}


671 :デフォルトの名無しさん:2011/09/21(水) 00:43:56.23
俺も1.upto(10)よりは(1..10).eachとしてしまうなあ
無駄オブジェクトなんて気にしない

672 :デフォルトの名無しさん:2011/09/21(水) 00:45:08.77
forはブロックを生成しない

673 :デフォルトの名無しさん:2011/09/21(水) 00:47:25.37
>>672
デメリットのほうが多いような気がする

674 :デフォルトの名無しさん:2011/09/21(水) 01:20:59.70
日本語が通じない・・・

675 :デフォルトの名無しさん:2011/09/21(水) 01:35:43.42
日本語はブロックを生成しない

676 :デフォルトの名無しさん:2011/09/21(水) 02:16:49.86
Rubyは海外でも結構ユーザがいるから
日本語が堪能じゃない人が来てるんだろう

677 :デフォルトの名無しさん:2011/09/21(水) 02:30:54.17
正数の配列を与えると3つ以上の連番を圧縮して文字列として返してくれる関数を書いてくれ

compaction([1, 2, 3, 10, 11, 20])
=> "1-3, 10, 11, 20"


678 :デフォルトの名無しさん:2011/09/21(水) 02:35:20.07
golfにその問題なかった?

679 :デフォルトの名無しさん:2011/09/21(水) 02:59:03.47
どこのゴルフ場での出題?回答公開されてるならそっちを参考にするけどできれば読めるコードがいい

680 :デフォルトの名無しさん:2011/09/21(水) 03:40:50.56
こりゃゴルファーのコードのほうが
マシかもしれん

http://codepad.org/HlmBJfE7

681 :デフォルトの名無しさん:2011/09/21(水) 03:46:23.42
こういうプログラマとしての能力が露になる問題は鬱になるNE
http://codepad.org/7lIh6ZsC

682 :681:2011/09/21(水) 04:05:10.77
あ、引数変更してた。これはだめだ

683 :デフォルトの名無しさん:2011/09/21(水) 04:05:31.60
>>681
すげえよこんなん思いつかねえ
普通に配列のインデックス+1とかして見ていって == で比較して連番かどうかチェックしようとしてたわ

684 :デフォルトの名無しさん:2011/09/21(水) 04:50:09.30
def compaction(a)
a = a.sort ; buf = [a.shift] ; ans = []
a << nil
a.each do |n|
( buf << n ; next ) if buf[-1].succ == n
ans << ( buf.size == 1 ? buf[0].to_s : '%d-%d'%[buf[0],buf[-1]] )
buf = [n]
end
ans.join(', ')
end

685 :デフォルトの名無しさん:2011/09/21(水) 05:06:42.39
訂正>>684
× ans << ( buf.size == 1 ? buf[0].to_s : '%d-%d'%[buf[0],buf[-1]] )
○ ans << ( 3 <= buf.size ? '%d-%d'%[buf[0],buf[-1]] : buf.join(', ') )

686 :デフォルトの名無しさん:2011/09/21(水) 05:39:38.59
なんか負けた気がしてくやしいので
もう少し頑張ってみた
あまりに手続き的でカオスだった680よりは良い

http://codepad.org/nkRHLxg8

687 :デフォルトの名無しさん:2011/09/21(水) 08:33:04.95
>>663
Perlは猫ちゃん演算子だからそんな間違いは起きないよ

688 :デフォルトの名無しさん:2011/09/21(水) 09:14:10.11
>>687

いやいや、.. と ... の区別を導入したのはPerlだろ、という話なんだが。

689 :デフォルトの名無しさん:2011/09/21(水) 09:49:51.46
neko operatorはPerl6だね

690 :デフォルトの名無しさん:2011/09/21(水) 10:09:42.39
Perlに ... なんてあったかな?と調べたら
print "equal" if ( 1..3 ) == ( 1...3 ); # equal
範囲としては同じだけど

フリップフロップとして動作するときに
左側の式が真になったとき、すぐには右側の式を評価せずに真を返し
次回から右側の式を評価するってものだった

で、Rubyでも同じ動作をするのであった
知らんことあるなぁ

フリップフロップとして..を使ったことなんてないのだけど


691 :デフォルトの名無しさん:2011/09/21(水) 10:15:36.55
Perlではフリップフロップとしてしか動作しないのに、それを範囲にも適用した創始者のセンスのなさを嘆いているのですね

692 :デフォルトの名無しさん:2011/09/21(水) 10:26:33.68
でも .. と ... が(特に初心者には)間違えられやすいことは
Perlの頃だってわかったんじゃないのかな。
なのに同じ問題をRubyにも持ち込むってのはどうなんだろう?
Perlに似てさえいればよかったの?

693 :デフォルトの名無しさん:2011/09/21(水) 10:34:47.23
>>677
http://codepad.org/v1aKdtQw

694 :デフォルトの名無しさん:2011/09/21(水) 10:39:08.36
>>692
ttp://doc.ruby-lang.org/ja/1.9.2/doc/spec=2foperator.html#range_cond
どちらかというと、sed のようにするか awk のようにするか両方にするかという問題
Perl はあんまし関係ない

695 :デフォルトの名無しさん:2011/09/21(水) 11:50:25.70
Signal モジュールでその環境でサポートしている
シグナル (シンボルでも番号の数値でも可) の一覧を得る方法ってありますか?
シグナル番号の最大値 (NSIG?) でもかまいません。

696 :デフォルトの名無しさん:2011/09/21(水) 12:21:20.79
>>690
>print "equal" if ( 1..3 ) == ( 1...3 ); # equal

これ↑って、多分スカラーコンテキストで評価されてるから
 
( 1..3 ) ⇒ $.との比較で偽と判定されて0
( 1...3 ) ⇒ $.との比較で偽と判定されて0

偽同士なのでif文の条件が成立。
以下のようにリストコンテキストで評価すれば意図した範囲演算子として動作するはず。

print "equal" if [ 0..3 ] ~~ [ 0...3 ];

697 :デフォルトの名無しさん:2011/09/21(水) 12:33:58.15
Signal.list …じゃ足りないんだろうな

698 :デフォルトの名無しさん:2011/09/21(水) 12:50:33.27
>>697
すみません、私の目が節穴でした。
それで十分でございます。ありがとうございました。

これでリストアップされない signal もあるかもしれませんが、
ひとまずこれでいきたいと思います。

699 :デフォルトの名無しさん:2011/09/21(水) 17:07:19.50
すみません。質問よろしいでしょうか。

some_method(1, 2, 3)



args = '2, 3'
some_method(1, eval(args))

みたいに実行したいのですが、何か方法はあるでしょうか。
evalでなくてもいいのですが、
一つの文字列から動的に複数の引数を渡したいです。

700 :デフォルトの名無しさん:2011/09/21(水) 17:20:38.94
ものすごく一般論としては、そういうときは配列にして、引数部分で*による展開を行なう

irb> def foo(x,y,z); puts x+y+z; end
irb> a = [2, 3]
irb> foo(1, *a)
6

どーしても文字列由来にしたいときは、文字列から配列をなんとかして作って、それで*展開をすればいい

irb> def foo(x,y,z); puts x+y+z; end
irb> s = "2, 3"
irb> a = s.split(/,/).map{|e| e.to_i}
irb> foo(1, *a)
6


701 :デフォルトの名無しさん:2011/09/21(水) 17:26:07.49
親クラスと子クラスで、同名のインスタンス変数を別々に持ちたいと考えています。
よく使う変数名なので、親クラスの利用者(子クラスの実装者)に、
命名の変更を余儀なくさせたくないからです。

下記で、B#b_de_changeのとき、A#@aを変更せずに、B#@aだけを変更したいです。
どうすれば宜しいでしょうか?

class A
 def a_out
  puts @a
 end
end

class B < A
 def b_de_change
  @a = 'b_de_change'
 end

 def b_out
  puts @a
 end
end

b = B.new
b.b_de_change
b.a_out # => b_de_change
b.b_out # => b_de_change

702 :デフォルトの名無しさん:2011/09/21(水) 17:27:08.87
>>700
どちらにしても最終的に配列にする必要があるんですね。

args = 'other_method(4, 5, 6), 7'
some_method(1, eval(args))

みたいに自由にやりたかったのですが、やり方を見直してみます。

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

703 :デフォルトの名無しさん:2011/09/21(水) 17:30:05.95
>>701
>親クラスと子クラスで、同名のインスタンス変数を別々に持ちたいと考えています。
クラスインスタンス変数じゃ駄目か?

704 :デフォルトの名無しさん:2011/09/21(水) 17:36:15.94
>>702
逆に全体を文字列化してevalすればよいのでは?
eval("some_method(1, #{args}")


705 :デフォルトの名無しさん:2011/09/21(水) 18:19:04.89
>>704
ありがとうございます!

あとでそれを思いついたのですが、
あまり自由度を高めすぎない方向でいくことにしました。

evalに頼りすぎず、きれいに書けるようがんばります。

706 :701:2011/09/21(水) 18:23:54.26
>>703
私が今悩んでる件については、クラスインスタンス変数でもOKなのですが、
# 考え直すと、クラスインスタンス変数のほうが良い気もしてきました...
インスタンス変数ではできないのでしょうか?
ニーズはある気もするのですが、実はないものなのでしょうか?

クラスインスタンス変数は、ぐぐると下記URLでやり方が紹介されておりました。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?ClassInstanceVariable

ありがとうございます。

707 :デフォルトの名無しさん:2011/09/21(水) 19:31:12.66
だから、クラスインスタンス単位でインスタンス変数を持てれば要望そのまんまだし、しかもそれはできるぞ、という話なのだろ
まあ、通常のインスタンス変数で用が済むなら、
こんなにクラスインスタンス変数がドヤ顔で紹介されるようなこともなかったんだろうけど…

708 :701:2011/09/21(水) 20:00:46.41
>>707
理解。
ありがとうございます。

709 :デフォルトの名無しさん:2011/09/21(水) 20:32:09.83
>>701-
何でクラスインスタンス変数が出てくるのかさっぱりわからんが
違う値を保持しておかなければならないなら変数は別にすべきだろう

class A
def a_out ; puts @a ; end
end
class B < A
def b_de_change ; @b = 'b_de_change' ; end
def b_out ; puts @b || @a ; end
end

710 :デフォルトの名無しさん:2011/09/21(水) 22:26:58.07
>>677
遅ればせながら書いてみた

module Enumerable
 def compaction(least = 3)
  inject([[]]) do |(result, prev), i|
   if prev == i
    result.last << i
   else
    result << [i]
   end
   [result, i.succ]
  end[0].map! {|i| i.size < least ? i : "#{i[0]}-#{i[-1]}"}.join(", ")
 end
end


711 :デフォルトの名無しさん:2011/09/21(水) 23:22:21.26
もう一つ。slice_before使ってるので1.9.2以降。

module Enumerable
 def compaction(least = 3)
  prev = nil
  slice_before do |i|
   (i != prev).tap {prev = i.succ}
  end.map do |i|
   i.size < least ? i : "#{i[0]}-#{i[-1]}"
  end.join(", ")
 end
end

p [1,2,3,4,5,10,11,20,200,201,202].compaction(2)
p ["a", "b", "c", "e", "f", "k", "l", "m"].compaction


712 :デフォルトの名無しさん:2011/09/22(木) 07:23:48.56
injectは相変わらず変態だなw
それでも出来ちゃうのが汎用性の高さを物語ってるが…

713 :デフォルトの名無しさん:2011/09/22(木) 07:42:59.88
result, prev = [[]]とかしれっと書いてるところが嫉ましい

714 :デフォルトの名無しさん:2011/09/22(木) 09:55:44.97
1..10
1...10

連番を生成するときに使うこれについて調べたいんですが
名称がわからないので教えてください

715 :デフォルトの名無しさん:2011/09/22(木) 09:57:35.34
>>714
範囲式 とか 範囲オブジェクト とか

716 :デフォルトの名無しさん:2011/09/22(木) 10:09:22.97
範囲演算子
それによってRangeクラスのオブジェクトが作られる

717 :デフォルトの名無しさん:2011/09/22(木) 10:12:02.37
>> (1..10).class
=> Range

718 :デフォルトの名無しさん:2011/09/22(木) 10:16:20.23
>>715-717
ありがとうございます
見つかりました

719 :デフォルトの名無しさん:2011/09/22(木) 11:26:31.76
これって言語仕様的にもやってもいいものなのでしょうか?

Array#eachのブロック中で要素追加 | OKWave
http://okwave.jp/qa/q7017605.html

720 :デフォルトの名無しさん:2011/09/22(木) 11:36:30.95
>>719
仕様としては良いが、マナーとしては悪いかな
あんまり良い印象はない

721 :デフォルトの名無しさん:2011/09/22(木) 11:37:39.07
>>720
なるほど。
d

722 :デフォルトの名無しさん:2011/09/22(木) 12:08:40.34
ハッシュの特定のキーに配列で値を追加したい場合、
配列があれば追加、配列がなければ配列を生成して追加という操作を
一括して書くことはできませんか?

result = {}
add_item = "hoge"
10.times do
 if result["piyo"] == nil
  result["piyo"] = [add_item]
 else
  result["piyo"].push(add_item)
 end
end

p result


PHPだとこう書ける部分です。

$add_item = "hoge";
for ($i = 0; $i < 10; $i++) {
  $result["piyo"][] = $add_item;
}

723 :デフォルトの名無しさん:2011/09/22(木) 12:19:17.11
(result["piyo"] ||= []).push(add_item)

724 :デフォルトの名無しさん:2011/09/22(木) 12:21:46.23
h = Hash.new{|h, k| h[k] = []}

[['k1', 'v1'], ['k2', 'v2']].each do |k,v|
h[k] << v
end

p h #=> {"k1"=>["v1"], "k2"=>["v2"]}


725 :デフォルトの名無しさん:2011/09/22(木) 12:23:25.87
result = Hash.new{|h, k| h[k] = []}
result["piyo"].push(item)

726 :uy:2011/09/22(木) 13:11:31.11
>>719
俺はよくやる
けどMatz()の気分によってエラーにされたりする範囲に見えるから

使い捨てコードじゃなく長く使うようなものだったら使わないほうが良い

727 :デフォルトの名無しさん:2011/09/22(木) 13:57:38.05
>>720
「次のようにすると core を吐きます。」祭りを思い出す。
ttp://jp.rubyist.net/magazine/?0002-RubyCore

728 :デフォルトの名無しさん:2011/09/22(木) 15:00:07.23
自作のある程度汎用的なライブラリの中に埋め込むデバッグ表示のコードってどう書くのがいいんでしょう。
今は

def add(a, b)
 $stderr.puts "add(#{a},#{b})" if $LIBDEBUG
 a+b
end

でやってるんですが。

729 :デフォルトの名無しさん:2011/09/22(木) 15:18:43.27
気を遣いたい場合はLoggerを使う

attr_accessor :log
def add
@log.info "add(#{a},#{b})" if @log
end
end

require 'logger'
c = C.new
c.log = Logger.new($stderr)
c.add(1,2)

require 'logger' を書く位置がどこだと好ましいのかについては諸説ある

730 :デフォルトの名無しさん:2011/09/22(木) 15:53:37.71
>>723-725
ありがとうございます。
>>723がシンプルで使いやすそうでいいですね。

731 :デフォルトの名無しさん:2011/09/22(木) 16:15:38.87
e-

>>723がちょろっと1行だけで書いてあったらとりあえず一発殴るぞ俺

732 :デフォルトの名無しさん:2011/09/22(木) 16:22:49.34
まあ、どれもそんなにわかりやすくはないな
ただ、ブロックつき Hash.new と ||= の場合、後者のほうが動作の知名度はある気はする
ブロックつき Hash はそのままだと dump できないし

733 :デフォルトの名無しさん:2011/09/22(木) 17:10:59.89
http://www.slideshare.net/kakutani/welcome-to-therealworld
> 「Q:Railsの最新の日本語情報がすくないが?」「A:そうですね」
> 「Q:Windowsだと開発大変」「A:そうですね」
> 「Q: おすすめの統合開発環境はあるのか?」「A:無いよ」

ワロタ

734 :uy:2011/09/22(木) 19:03:56.00
俺は>>723これがいい

735 :デフォルトの名無しさん:2011/09/23(金) 07:50:49.48
大きなサイズのファイルをダウンロードしてローカルファイルに保存するために
Net::HTTPResponse#read_bodyを使おうと、ネットで利用例を探して
見よう見まねでやっていますが使い方がよくわかりません

open("hoge","w"){|f| res.read_body(){|s| f.write(s)}}

↑のようにすると read_body called twice というエラーになります
他にres.read_bodyやres.bodyを呼んでるところはないのです
res[content-length]などのヘッダの参照はしています

736 :デフォルトの名無しさん:2011/09/23(金) 08:00:22.75
わかりにくくなりがちなので、1行で書こうとしないほうが…
read_body はレスポンスボディを単に String で返す

res = Net::HTTP.start('www.2ch.net',80){|http| http.get('/') }
body = res.read_body
File.open('output', 'wb'){|f| f.write(body) }

737 :デフォルトの名無しさん:2011/09/23(金) 08:52:53.70
大きなサイズのファイルをダウンロードするためには
res.bodyではなくres.read_body{block}を使ってblockの中で
少しずつ読みこめばいいと思ってるのですが
そのような方法は無いということですか?

738 :デフォルトの名無しさん:2011/09/23(金) 09:41:34.44
あ、get や post 使ってるな
こいつは内部で既に read_body を使って文字列を作ってるので、逐次取得を自力でやりたい場合は request_get とかを使ってくれ

739 :デフォルトの名無しさん:2011/09/23(金) 22:41:56.64
>>723
>(result["piyo"] ||= []).push(add_item)

個人的に、push より << おすすめ。
(result["piyo"] ||= []) << add_item

>>731
これはRuby(に限らずスクリプト言語)では普通に使われる。
このコードを見て相手を殴るなら、お前野存在はすごい大迷惑だから、Rubyに近寄るな。



740 :uy:2011/09/24(土) 05:31:17.03
>>739
愁の虚空に舞いあがりしコードにいと賛同して然り

741 :デフォルトの名無しさん:2011/09/24(土) 09:01:18.85
pushより<<がおすすめな理由は?
どちらでも同じなら、より多くの人が理解しやすいコードを書くべきだと思うが

742 :デフォルトの名無しさん:2011/09/24(土) 09:07:12.85
(result["piyo"] ||= []) を是とする人間にそんなポリシーあるわけないだろ

743 :デフォルトの名無しさん:2011/09/24(土) 09:59:29.67
>>742
それってそんなにまずい事なの?

744 :デフォルトの名無しさん:2011/09/24(土) 10:09:44.55
JavaScriptに慣れてると>>723が一番わかりやすいと思うんだが、
否定する人はどういう観点なんだろう?

745 :デフォルトの名無しさん:2011/09/24(土) 11:40:59.93
もともと一括して書きたいって要望に対する回答なんだから読みやすさは捨ててるんだよな
それとも一括して書きたいけどトリッキーな書き方は望んでないのか

俺は<<とpushだったらpush派だな

746 :uy:2011/09/24(土) 11:54:33.48
上級者のかくコード
re = {}
re.default = []
re["piyo"] << "add_item"

747 :デフォルトの名無しさん:2011/09/24(土) 12:15:43.69
わかりやすいかどうかで言えば圧倒的にわかりにくいが、短いかどうかで言えば圧倒的に短い
Hashに ||= でチェックつき代入をしてなおかつカッコで包んで戻り値をメソッドチェーンで利用するなんてカッコ悪いにもほどがあるが、
しかしその場の1行で機能を全部説明し切ってはいるw
どうせ外部に出すコードではないのだろうし、好きにせえとは思う

748 :デフォルトの名無しさん:2011/09/24(土) 12:16:04.58
>>746
% irb
irb(main):001:0> re = {}
{}
irb(main):002:0> re.default = []
[]
irb(main):003:0> re["piyo"] << "add_item"
["add_item"]
irb(main):004:0> re["hoge"] << "add_item"
["add_item", "add_item"]

アホ。

749 :デフォルトの名無しさん:2011/09/24(土) 12:23:02.42
そういう動作をするHashが作れるから使ってね、というのが、いちおうRubyとしての回答なんじゃなかろうか
メッセージをとりあえず受け入れてオブジェクト側で頑張る、というのがRubyっぽい気は、ちょっとする(ちょっとだけだけど)

750 :デフォルトの名無しさん:2011/09/24(土) 13:50:57.93
ブロック付きHash.new相当はdefault_procでございます。

h = {}
h.default_proc = ->(h,k) { h[k] = [] }
h[1] << 10
h[2] << 20
h # => {1=>[10], 2=>[20]}


751 :デフォルトの名無しさん:2011/09/24(土) 13:58:23.06
人の言う「より多くの人」の前には「一定の水準を満たした」が隠れてる
初心者にとって理解しやすいコードしか書かずにいたら初心者脱却出来んぞ

752 :uy:2011/09/24(土) 14:06:39.77
>>748
なんだこれ
この動作は知らなかったけど、この仕様だとhash.default使い道ないじゃん

753 :デフォルトの名無しさん:2011/09/24(土) 14:14:17.71
だからHash.newにブロック渡せというのだろ
> 配列があれば追加、配列がなければ配列を生成して追加
をRubyにおいていちばん端的に表現するのは>>724-725

Hash.new{|h, k| h[k] = []} した Hash に普通に追加


そのままだとdumpできないというめんどくさい制限があるが、dumpするようなデータとして残ることなんて稀だし、
>>750のようにHash#default_proc=にnil指定すればいい

754 :デフォルトの名無しさん:2011/09/24(土) 14:30:05.82
>>753
「自分の知ってる言語」に無い機能だから避けるんじゃないかという気がちょっとする
なぜか頑に for を使う人が最近いるっぽいのと併せて、そんな感じがする

755 :デフォルトの名無しさん:2011/09/24(土) 14:35:34.07
>>741
なんで << より push のほうが、「より多くの人が理解しやすいコード」なんだよww
Rubyの << を知らないだけじゃん。勉強しなおせwww

756 :デフォルトの名無しさん:2011/09/24(土) 14:48:11.07
破壊的に変更しない(できない)オブジェクトなら
h = {}
h.default = 1
h[:hoge] += 1
h[:fuga] += 10
p h # => {:hoge=>2, :fuga=>11}


757 :デフォルトの名無しさん:2011/09/24(土) 14:50:35.67
>>752
知らないとかいう問題じゃなくてRubyがまるでわかってないからそうなる。
「上級者のかくコード」とか笑わせんな。

758 :デフォルトの名無しさん:2011/09/24(土) 15:03:46.27
Ruby の << の優遇っぷりは異常
通常は適切な英単語メソッドのほうがわかりやすいとみなされるんだけど、<< に限っては例外だな

759 :デフォルトの名無しさん:2011/09/24(土) 15:08:06.62
C++と同じ誤謬に陥っているよね

760 :デフォルトの名無しさん:2011/09/24(土) 15:15:26.17
>>744
手続き型べったり vs. 関数型の経験がある人という図式だろう
前者にとってプログラムは文の並びで変数を書き換えていくもの
代入文の返り値を使うという発想には抵抗がある

後者にとってプログラムは式を組み合わせたもの
返り値はなるべく活用するので代入が値を返すなら捨てずに使う

>>723の(result["piyo"] ||= [])はイディオムだね
それに<<しようがpushしようが代入が値を返すことを知っていれば大差ない

761 :デフォルトの名無しさん:2011/09/24(土) 15:18:06.25
まとはずれだな

762 :デフォルトの名無しさん:2011/09/24(土) 15:18:55.14
戻り値を使う(ためにカッコすらを使う)のが気持ち悪いという話だろう
誰も ||= の是非なんぞ論じてはおらん

763 :デフォルトの名無しさん:2011/09/24(土) 15:19:04.25
驚き最小の法則を知らんのか

764 :デフォルトの名無しさん:2011/09/24(土) 15:20:59.19
NameError: undefined variable or method '驚き最小の法則'

765 :デフォルトの名無しさん:2011/09/24(土) 15:21:19.16
>>759
もともとは「C++の<<って便利なことが多くね?Rubyにももっといいのがあったら便利じゃね?」というノリだったのだと思う
まあ、便利であることは間違いない
ダックタイプなんかとの合わせ技で、オブジェクトがわからなくてもとりあえず << すればなんとなく追加されるという機能に

766 :デフォルトの名無しさん:2011/09/24(土) 15:23:37.59
>>762
>代入文の返り値を使うという発想には抵抗がある
って書いてあるじゃない

767 :デフォルトの名無しさん:2011/09/24(土) 15:24:35.81
shift unshift pop ときて push だけ << 使う奴の美的センスを疑う

768 :デフォルトの名無しさん:2011/09/24(土) 15:28:28.40
>>762
というか、比較対象が単なる Hash への追加だから問題外
なんでわざわざ処理を書き込まなければならないのか意味不明
処理をメソッドにして外に帚き出して見通しを良くする行為と全く同様に、私たちはブロックつきHash.newを使う

769 :デフォルトの名無しさん:2011/09/24(土) 15:30:58.67
>>767
String#<<があるんだからArray#<<があってもいいだろ(以下同文)
そもそもpushはそれら3つと同様にスタック由来の用語だから、配列に追加するという行為を表現するにはイマイチ

770 :デフォルトの名無しさん:2011/09/24(土) 15:34:12.75
スタックへのshift/unshiftは堺正章しか使えません

771 :デフォルトの名無しさん:2011/09/24(土) 15:35:14.17
その1
result = {}
add_item = "hoge"
10.times do
 if result["piyo"] == nil
  result["piyo"] = [add_item]
 else
  result["piyo"].push(add_item)
 end
end

その2
result = {}
add_item = "hoge"
10.times do
(result["piyo"] ||= []).push(add_item)
end

その3
result = Hash.new{|h, k| h[k] = []}
add_item = "hoge"
10.times do
result["piyo"] << item
end

見通しがよくてわかりやすいと思うものを使え

772 :デフォルトの名無しさん:2011/09/24(土) 15:40:19.15
Stringにあるからあってもいいだろって主張が苦しい上に
作るかどうかは松本の勝手だから許すにしてもそれを使うかどうかにセンスが問われる



773 :デフォルトの名無しさん:2011/09/24(土) 15:44:41.92
array << e を作るなら
array >> e; e << array; e >> array
もできるようにしてくれ

774 :デフォルトの名無しさん:2011/09/24(土) 16:02:39.99
>>771
下に行くほど「Rubyらしい」ように思う

775 :uy:2011/09/24(土) 16:18:21.77
>>757
なんだコイツ

そのRubyをまったくわかっていないというのは、どっちの意味で言っているかでお前のレベルがわかるよ
俺はただmethodsから適当に拾ってきた.defaultをリファレンス読まずに使っただけなんだから

俺の意図しない動作をするRubyが悪いんじゃね?

776 :711とは別人:2011/09/24(土) 16:23:03.61
(勝手に)その4
result = {}
add_item = "hoge"
10.times.do
 result["piyo"] ||= []
 result["piyo"] << add_item
end

777 :デフォルトの名無しさん:2011/09/24(土) 16:33:07.58
>>771
なるほど、納得した

778 :デフォルトの名無しさん:2011/09/24(土) 17:02:01.45
>>760
代入文(破壊的操作)の返り値を使う事こそ手続き型の発想じゃないかと思う。(C言語的?)
関数型言語(MLやHaskel)の経験があれば、「参照透明性の保存」を強く意識するはず。
>>723 の ||= は(nil から obj へ更新する)破壊的操作だから、参照透明性は保存されない。
関数型であれば、result = { "piyo" => ["hoge"] * 10 } の1行で済ませることを最初に考える。

779 :デフォルトの名無しさん:2011/09/24(土) 18:07:07.55
>>778
なるほど。確かにCでは代入の返り値を使うね
>>723を見て関数型っぽいとするのは無理があるか

>>760の「返り値を無駄にしない」と>>778の「参照透明性の保存」の
どちらがより関数型の特徴として強いかと言われれば
関数型の関数は数学的な関数という含意があるから自分も後者を選ぶよ

result = { "piyo" => ["hoge"] * 10 }は怖いかな
result['piyo'][0][1] = 'a' とかありうる

780 :デフォルトの名無しさん:2011/09/24(土) 18:45:55.11
よく使われるから hash.default_array! みたいなの実装しちゃえば

781 :デフォルトの名無しさん:2011/09/24(土) 19:39:56.68
数値だけが入っている配列(長さ固定)で、ソート後0を後ろにしたいです
[22,3,0,2,0,2,5] => [2,2,3,5,22,0,0]
どういう操作をしたら実現できますか?

782 :デフォルトの名無しさん:2011/09/24(土) 19:50:47.52
[
  22,3,0,2,0,2,5
].sort { |a, b|
  if a == 0 || b == 0
    1
  else
    a <=> b
  end
}

783 :デフォルトの名無しさん:2011/09/24(土) 19:55:02.33
a=[22,3,0,2,0,2,5]
b=a.sort
b.push(b.shift) while b[0]==0

配列に追加するとき<<は死んでも使わんで

784 :デフォルトの名無しさん:2011/09/24(土) 19:59:12.52
>>781
ary.sort{|a,b| a==0||b==0 ? (a==b ? 0 : (a==0 ? 1 : -1)) : a<=>b }

>>782
1に決めうちはいくない

785 :デフォルトの名無しさん:2011/09/24(土) 20:10:47.61
ちょっと三項演算子使い過ぎて読みにくいので整理

ary.sort{|a,b|
    case
        when a == b then 0
        when a == 0 then 1
        when b == 0 then -1
        else             a <=> b
    end
}

786 :デフォルトの名無しさん:2011/09/24(土) 20:15:17.28
あまり良くはないけど、超えない値が分かるのだったら
MAX = 9999
[22,3,0,2,0,2,5].sort_by{|i| i == 0 ? MAX : i}
みたいにしてしまうとか


787 :782:2011/09/24(土) 20:19:42.22
>>784
なぜ1の決めうちいかんの? NGになるような具体的な入力データを提示しておくんなさいまし

788 :デフォルトの名無しさん:2011/09/24(土) 21:00:01.68
>>787
[22,3,0,0,0,2,0,2,5]
仮にうまくいったとしても汚いコードに違いはない

789 :782:2011/09/24(土) 21:27:06.69
>>788
レスありがと。手元では [5, 0, 2, 2, 3, 22, 0, 0, 0] という実行結果を確認できた。
>>782 のコードはNGだ。うーん、なぜだろ。ソートのアルゴリズムと関係があるんだろか???


790 :デフォルトの名無しさん:2011/09/24(土) 21:36:40.66
[22,3,0,2,0,2,5].sort.partition{|e| e != 0}.flatten(1)

ソート後に、0じゃない要素と0を分離して、再び連結


791 :782:2011/09/24(土) 21:40:03.10
>>782がNGな原因が分からんかったので、別の素直な方法にしてみた。

irb(main):001:0> zr, nz = [22,3,0,0,0,2,0,2,5].partition { |x| x == 0 }
=> [[0, 0, 0, 0], [22, 3, 2, 2, 5]]
irb(main):002:0> nz.sort + zr
=> [2, 2, 3, 5, 22, 0, 0, 0, 0]

# >>790 のほうがスマートな気がする ... orz

792 :デフォルトの名無しさん:2011/09/24(土) 21:43:13.63
>>782がNGな原因
1と0を比較して1になり
0と1を比較しても1になる
これじゃソートできんだろ

793 :デフォルトの名無しさん:2011/09/24(土) 21:48:19.60
irb> p [22,3,0,2,0,2,5].sort_by{|x| [x.zero? ? 1 : -1, x]}
[2, 2, 3, 5, 22, 0, 0]


794 :デフォルトの名無しさん:2011/09/24(土) 21:58:54.74
>>782-791
レスありがとうございます
その後自分で
@ary.sort!
@ary.delete(0)
10.times{|i| @ary[i] ||= 0}
なんて方法は見つけはしたんですが、>>790のpartitionをいただこうと思います


795 :デフォルトの名無しさん:2011/09/24(土) 22:26:44.82
いちおう、>>793がいちばん妥当
sort のブロックの戻り値として配列 [x,y,z] があったら「xでソートしてからyでソートして最後にzでソートする」と
自動で読み下すように訓練されてるから(Array#<=> の動作は立ち止まって考えるには複雑過ぎる)、
伝わらないことを危惧する必要はない

ただし、ブロックの中は物凄い回数呼ばれるので、ブロック内を複雑にした場合、ソート完了までの速度の保障はしない

796 :デフォルトの名無しさん:2011/09/24(土) 22:55:56.14
sort_by のブロックはSchwartzian transformation用なので、呼ばれる回数は
高々要素数に等しい回数まで。比較そのものが呼ばれる回数じゃないよ。



797 :デフォルトの名無しさん:2011/09/25(日) 00:29:46.37
はやいのはどれでしょう(10点 複数選択可)

def expensive_getsize(s); sleep 1; s.size; end
ary = ['Oberon', 'Perl', 'Qt', 'Scala', 'Tcl']

# ソートそのいち
p ary.sort{|a, b| expensive_getsize(a) <=> expensive_getsize(b) }

# ソートそのに
m = ary.map{|e| [e, expensive_getsize(e)] }
p m.sort{|a, b| a[1] <=> b[1] }.map{|e| e[0] }

# ソートそのさん
p ary.sort_by{|e| expensive_getsize(e) }

798 :デフォルトの名無しさん:2011/09/25(日) 09:43:01.63
>>795
少し誤解を招きそうな表現な気がする。
[x,y,z]は、xで比較した結果が0なら、yで比較して、その結果も0なら、zで比較する。
と言ったほうがいいかも。

799 :uy:2011/09/25(日) 13:57:51.81
>>797
基本的に一番短いコードが一番速いんだよ

800 :デフォルトの名無しさん:2011/09/26(月) 16:03:21.09
> def expensive_getsize(s); print '.'; s.size; end
> ary = ['Oberon', 'Perl', 'Qt', 'Scala', 'Tcl']

> p ary.sort{|a, b| expensive_getsize(a) <=> expensive_getsize(b) }
..............["Qt", "Tcl", "Perl", "Scala", "Oberon"]
> m = ary.map{|e| [e, expensive_getsize(e)] }; p m.sort{|a, b| a[1] <=> b[1] }.map{|e| e[0] }
.....["Qt", "Tcl", "Perl", "Scala", "Oberon"]
> p ary.sort_by{|e| expensive_getsize(e) }
.....["Qt", "Tcl", "Perl", "Scala", "Oberon"]

まあ一般的にはsort_by{}のほうが速いんだが、
このへんの「速い」ってのは要は一時計算にメモリ使いまくって速度と等価交換無定量してるってことで(うん、Rubyっぽいね)、
要素数や適用頻度などの関係で使用メモリがモリモリ増えるのが困るときはsortやsort{}を使うといいというお話

801 :uy:2011/09/26(月) 17:07:09.28
10万3000冊の技術書の記憶の中にも、
どこかの本にそんなことは書かれていた
おそらくそれはあらゆる場所で繰り返し言われてる事だろうと思う
復習でもしているのか? 初心者スレッドらしくて ○

802 :デフォルトの名無しさん:2011/09/27(火) 14:25:32.51
Integer === 3 # => true
3 === Integer # => false

どうして結果が違うのでしょうか?

803 :デフォルトの名無しさん:2011/09/27(火) 14:46:30.12
>>802
まず、===演算子は、左側の式に対して「===」という名前の、引数が1つのメソッドを呼ぶ。
そこに右側の式が引数として渡されるだけ。

Integerはクラス、クラスの===は、右側の式が自分のクラスとis_a?関係かどうかを調べる。
3は数値、数値の===は==と同じで、数値として等しいかどうかを調べる。

804 :デフォルトの名無しさん:2011/09/27(火) 14:53:51.59
クラスかモジュールの === メソッドは 引数.kind_of?(自分) を呼ぶ
それ以外のオブジェクトでは、再定義されていなければ(たいてい再定義されてはいない)単に == メソッドを呼ぶ
クラスかモジュールの === 以外は単に等しいかどうかだけを見るってことだな

805 :デフォルトの名無しさん:2011/09/27(火) 15:23:17.68
>>804
いや、結構再定義されてると思うけど。 Range や Regexp の === も良く使われるし。

806 :デフォルトの名無しさん:2011/09/27(火) 18:04:04.15
Ruby は JavaScript じゃないから。

=== は、Ruby ではたとえば、

case n
when 1 .. 3
 # n は 1〜3
when 4 .. 6
 # n は 4〜6
end

みたいな風にするために case の中で呼んでる、というものなので。

807 :デフォルトの名無しさん:2011/09/27(火) 18:43:52.14
なんでそんな質問するのかと思ったら、 JavaScript にも === があるのね。
Ruby で直接 === 使うことはまず無いね。

808 :デフォルトの名無しさん:2011/09/27(火) 19:13:13.42
JavaScript のほうは、常に == ではなく === を使え、とか言われるほどのものだからな。

809 :デフォルトの名無しさん:2011/09/27(火) 19:25:29.24
> Ruby で直接 === 使うことはまず無いね。

おいおい、普通に使うだろ

810 :デフォルトの名無しさん:2011/09/27(火) 19:38:18.62
いや、ないよ

811 :デフォルトの名無しさん:2011/09/27(火) 19:40:29.03
正規表現使わんのだろ

812 :デフォルトの名無しさん:2011/09/27(火) 19:46:27.85
普通使うとかまず使わないとか無益すぎるやり取りだな

813 :デフォルトの名無しさん:2011/09/27(火) 19:46:52.65
正規表現のなにに使うんだ…

814 :デフォルトの名無しさん:2011/09/27(火) 19:50:24.39
正規表現の===なんか、正にcaseのための定義じゃないのか。別に使ってもいいけど =~ が普通だろう

815 :デフォルトの名無しさん:2011/09/27(火) 20:29:20.72
暗黙裏にcaseで使われてはいるんだろうけど直接書くことはまずないな。
Proc#=== は面白い。


816 :デフォルトの名無しさん:2011/09/27(火) 21:06:18.58
"a".succ # => "b"
"#".succ # => "$"
"@".succ #=> "A"
"3".succ # => "4"
"9".succ # => "10"
"9".to_s.succ #=> "10"

工工エェ(´Д`)ェエ工工
ASCIIコードで次を得るにはどうしたらいいの?

817 :デフォルトの名無しさん:2011/09/27(火) 21:17:00.29
"9".ord.succ.chrというのがとりあえず浮かんだ

818 :デフォルトの名無しさん:2011/09/27(火) 21:17:51.62
Rubyって初心者が最初に覚える言語としてはどうですか?

819 :デフォルトの名無しさん:2011/09/27(火) 21:18:50.16
そもそも String#succ はアスキーコードの次を返すというメソッドではない
アルファベット同士まはた数字同士で「境界」があるとみなし、それを越した場合は「繰り上が」る
irb> p "Z".succ
"AA"
rb> p "AZ".succ
"BA"

アスキーコードを出してからそれを整数としてsuccして対応文字列を計算するしかないかと思う

irb1.8> p "Z"[0].succ.chr
"["
irb1.9> p "Z".ord.succ.chr
"["


820 :デフォルトの名無しさん:2011/09/27(火) 21:19:51.70
1.8.7以上で
"9".bytes.first.succ.chr #=> ":"

1.8.7以下
"9"[0].succ.chr #=> ":"

1.9以上だと
"9".ord.succ.chr #=> ":"


821 :デフォルトの名無しさん:2011/09/27(火) 21:24:13.41
"9".ord.succ.chr

822 :デフォルトの名無しさん:2011/09/27(火) 21:28:15.55
>>819
そんなもん定義を見れば誰でも言えるし誰でもわかるわ
"#".succ # => "$"
"@".succ #=> "A"
としといてなんで
"9".succ # => "10"
なんだ
0-9a-zA-Z以外の場合は例外にしてくれた方がまだ自然だわ

823 :デフォルトの名無しさん:2011/09/27(火) 21:32:10.86
>>822
定義見たならわかるだろ
アルファベットと数字は特別扱いされている

824 :デフォルトの名無しさん:2011/09/27(火) 21:40:00.46
succ「するものがない」場合に、仕方なくアスキーコードの次を返してるんだよね
本来はアルファベット文字列や数値文字列をインクリメントするという効果
アルファベットや数値が含まれていない場合の動作はオマケ

825 :デフォルトの名無しさん:2011/09/27(火) 21:41:28.25
落ち着け
おまえが思ってるのとは用途が違うんだ
むしろ英数字が無いのが特殊ケース

826 :デフォルトの名無しさん:2011/09/27(火) 21:45:18.44
> 0-9a-zA-Z以外の場合は例外にしてくれた方がまだ自然だわ

827 :デフォルトの名無しさん:2011/09/27(火) 21:49:00.03
文字列のsuccはもともとPerlのmagic increment相当だってことを知ってるヤツと知らないヤツで話がかみ合わないな。

828 :デフォルトの名無しさん:2011/09/27(火) 22:11:43.49
珍しく Ruby と PHP で意見(?)が一致してる機能だというのに

829 :uy:2011/09/28(水) 03:54:15.02
>>818
いいとおもうよ
ただしRubyは初心者言語ではなく
完成度が高い言語っていうだけで、初心者には優しくない部分は多いがRuby挫折するようなら何の言語やっても無駄

1 RubyからはじめてRubyだけをずっとやる → スクリプト言語がメイン言語になる時点でゴミにはならない
→ スクリプトはわりと何でも出来るので、一般人視点から見ると凄腕にみえる、ただ技術者から見た場合、Rubyしかできないんじゃ初心者扱い
けど、いまさらCなんてやってもしょうがない気がするので、Rubyしか出来ない奴でも、俺は軽蔑しないよ



830 :デフォルトの名無しさん:2011/09/28(水) 05:57:37.36
そもそも例示が1文字な時点で、String#succを勘違いしてると思う
揃いも揃って説明が

  「次」の文字列を返します

とかいうドヤ顔である時点で、アスキーコード関係なさそうだと気付いて欲しい
そもそも2文字以上の文字列のアスキーコードってなんだ

irb> puts "あなたは102番目のお客様です!".succ
あなたは103番目のお客様です!

831 :デフォルトの名無しさん:2011/09/28(水) 06:26:12.42
"m9".succが"n0"返してsuckまで読んだ

832 :uy:2011/09/28(水) 11:29:18.04
>>829 続き

2 Rubyからはじめて次にCをやる → Cの言語構文を覚えたってレベルじゃなくて、
「いざとなれば」Cで何でも作れるレベルにいたれば中級者、ただ別にその「いざ」という時っていうのは
世界が滅びてこの世にコンパイラやインタプリタが存在しなくなり、自分がCでかくしかないような時のことだ
そんな時は、多分来ないので、出来なくても一応は問題ないが、Cをやることであらゆる物の根幹部分を知っておくと
ゴミみたいなプログラマを一言で黙らせることが出来るようになる



833 :uy:2011/09/28(水) 11:31:22.33
3 RubyをやったあとにLispやった後にすべての言語を行う → たいていの奴は上級者(最大でもレベル5)でとまるが、極まれにレベル6(天使の域)に到達する奴がいる
ちなみにそのレベル6の上という領域も存在する
人が踏み入れるべきではない場所なので、高い確率で発狂、自我崩壊、またはたどり着いた瞬間に即死する

さて、
 貴様は俺のところまで上ってくる気はあるか?

834 :Ruby騎士団:2011/09/28(水) 11:33:57.48
Matzさんこっちです

835 :Matz:2011/09/28(水) 11:34:41.39
フォッ!!呼んだかーい!


836 :Matz:2011/09/28(水) 11:52:00.51
Rubyの宣伝ビジネスになる金儲けに使えそうなやついたら連れ来てくれ
中学生も使えたな 儲け儲け
いい宣伝効果だ 世間は子供に釣られてしまう

じゃあ次は、美人でも使おうかな、Yuguiちゃんはおばちゃんだし、美人モデルにRubyやらせちゃおう
それじゃ僕ちんの力でコミッタにしちゃうか ウフフ!
エーイ!!トリャッ!!

うんそうしよう

その次はゲーム業界人にRuby 次はハリウッドだな

よーしおじちゃんがんばっちゃうぞー
フンガッフンガッフンフンガッ!!!
とりゃー!!

837 :デフォルトの名無しさん:2011/09/28(水) 14:11:54.09
まずは島根から出ろよ

838 :デフォルトの名無しさん:2011/09/28(水) 14:49:27.45
僕は科学サイドで

839 :デフォルトの名無しさん:2011/09/28(水) 23:21:07.71
Rubyで組み込みシステムを作るような計画も聞いたことがあるんだけど、
明らかにC言語などの方がいいようなきがするんだけど、
そんなに無理してあちらこちらにRubyを使う必要はあるのかな?

840 :デフォルトの名無しさん:2011/09/28(水) 23:36:32.26
Riteだっけ? LuaやSquirrel対抗なら飛びつく人かなりいそう
というかなぜ初心者スレに

841 :デフォルトの名無しさん:2011/09/28(水) 23:43:34.27
GCあると楽じゃん。

842 :デフォルトの名無しさん:2011/09/29(木) 01:33:10.80
>>839
どうせ日本だけの話だろ
TRONよろしく潰されるのがオチ


843 :デフォルトの名無しさん:2011/09/29(木) 01:36:38.50
まだTRONがどうとか言ってるヤツ居たのか
誰にアホな事吹き込まれたんだ?

844 :デフォルトの名無しさん:2011/09/29(木) 01:41:11.82
事情通出現wどんな真実があるのか書いてもらおうかw

845 :デフォルトの名無しさん:2011/09/29(木) 08:23:21.97
おまえらのどちらかが池田信夫信者のバカで、どちらかがアメリカ&孫正義陰謀論脳のバカウヨ
だということはわかったからよそでやれ。

846 :デフォルトの名無しさん:2011/09/29(木) 08:32:12.02
書いてるのお前ばっかりだな

847 :uy:2011/09/29(木) 22:54:05.03
リク・ラク・ラ・ラック・ライラック 来たれ氷精
闇の精(ウエニアント・スピーリトウス・グラキアーレス・オブスクランテース) 闇を従え吹雪け常夜の氷雪(クム・オブスクラテイオーニ・フレツト・テンペスタース・ニウアーリス)


848 :uy:2011/09/29(木) 23:07:19.57
ダークエヴァンジェル・・・・・・・ 闇の福音・・・・・・

849 :デフォルトの名無しさん:2011/09/29(木) 23:15:27.69
24にもなって子供みたいなことを・・・

850 :uy:2011/09/30(金) 01:07:09.45
光があれば、影が出来るってよく言うけど、
三角錐に真上から光を当てれば影なんてできねーんだよ


それが世界のすべてを救う方法です

851 :デフォルトの名無しさん:2011/09/30(金) 03:59:22.53
>>850
三角錐の真下に出来る

852 :デフォルトの名無しさん:2011/09/30(金) 04:56:36.09
>>850
小学生の科学かよ

853 :デフォルトの名無しさん:2011/09/30(金) 09:57:35.79
>>850
コーンヘッズの世界に帰れよ。

854 :デフォルトの名無しさん:2011/09/30(金) 10:01:00.13
真上からなら円柱だろうと立方体だろうと同じだろ

855 :デフォルトの名無しさん:2011/09/30(金) 16:58:27.70
質問です。
x=[[1,2,3],[4,5,6], [7,8,9]]
という二次元配列がある場合に、各行の合計をそれぞれ求めて、その結果を新たに作る配列sumに格納して出力するにはどう記述すればいいんでしょうか。

856 :デフォルトの名無しさん:2011/09/30(金) 17:04:00.02
Ruby宿題スレって落ちたのか
もうアカデミックな場所では使われなくなってしまったのか

857 :デフォルトの名無しさん:2011/09/30(金) 17:04:04.48
sum = x.map{|i|i.inject(0){|s,n|s+=n}}
うむ、もっと簡単にする方法は・・・


858 :デフォルトの名無しさん:2011/09/30(金) 17:18:26.08
Array#sumってないんだな
全要素+メソッド呼ぶとかであってもいいようなきがするが

859 :デフォルトの名無しさん:2011/09/30(金) 17:25:03.11
>>857
超初心者なので、もっともっと簡単な記述でお願いします。
sum=Array.new(3)で配列作ってそこからがよくわかりません。

860 :デフォルトの名無しさん:2011/09/30(金) 17:32:56.51
>>857
injectのブロックは式を返せばいいので代入(+=)は不要、加算(+)だけでいい

X: i.inject(0){ |s, n| s += n }
O: i.inject(0){ |s, n| s + n }

>>858
その汎用的な仕掛けがinjectメソッドではないのかと思われ

861 :デフォルトの名無しさん:2011/09/30(金) 17:42:39.87
>>859
プログラミングの超初心者?
何か本とかWeb資料とかで一通り勉強したほうがいいよ
それからわからないことを聞けばいい

862 :デフォルトの名無しさん:2011/09/30(金) 17:42:51.13
inject(:+)

863 :デフォルトの名無しさん:2011/09/30(金) 17:45:49.15
初心者に inject とか教えても意味ないような。

864 :デフォルトの名無しさん:2011/09/30(金) 17:56:18.57
def sum(args)
ret = 0
args.each{|i| ret += i}
ret
end

x=[[1,2,3],[4,5,6], [7,8,9]]
y = []
x.each{|i| y << sum(i)}
p y

865 :デフォルトの名無しさん:2011/09/30(金) 18:12:08.46
>>859
これなら理解できるかな?
 x = [[1,2,3], [4,5,6], [7,8,9]]
 sum = []
 for ary in x
   e = 0
   for i in ary
     e += i
   end

   sum << e
 end

 p sum
これでもダメなら、(>>861の言うように)プログラミングの基礎から勉強したほうがいい。


866 :デフォルトの名無しさん:2011/09/30(金) 18:28:19.59
そろそろ inject(:+) とかは、inject の本格的な使い方とは別に、
イディオムとして教えてしまっていいと思う。
18 の古いのを使ってない限り使えるし。

867 :デフォルトの名無しさん:2011/09/30(金) 18:30:25.26
Pythonスレから来ました、まで読んだ

868 :デフォルトの名無しさん:2011/09/30(金) 20:10:08.47
inject(:+)は、関数型では完全にイディオムとして成立してるね(injectじゃなくてfoldだったりするけど)
手続き型ではまだまだイディオムと呼ばれるには遠いが、injectやreduceがあるなら使えるはず

869 :デフォルトの名無しさん:2011/09/30(金) 21:29:39.75
>>865
ありがとうございます。
こちらの方をベストアンサーとさせていただきます。

870 :デフォルトの名無しさん:2011/09/30(金) 21:32:37.62
>>869
知恵袋かっ

871 :デフォルトの名無しさん:2011/09/30(金) 21:37:52.08
>>868
イディオムっていうか理論的な基板があるんじゃなかったっけ?

872 :デフォルトの名無しさん:2011/09/30(金) 21:44:48.97
eachはメソッド名やサンプルからもなんとなくわかる
mapもメソッド名やサンプルからなんとなくわかる可能性はある(そう高くはないが)

しかしinjectを一発理解することはおそらく不可能
そもそも畳み込み関数自体がレアだし、
数式ではなく汎用データに対してのプログラムとして表現されるとこれは既に別物
inject(:+) と書いてあって「なるほどー」とか思えたならその人は嘘つきか、欧米の顔文字かなにかと勘違いしている

873 :デフォルトの名無しさん:2011/09/30(金) 22:40:56.14
% irb
rb> total = 0
=> 0
rb> [1, 4, 7].each{|num| total += num }
=> [1, 4, 7]
rb> total
=> 12
rb> [1, 4, 7].inject(0){|total, num| total += num }
=> 12

# 計算過程のイメージ
0      [1, 4, 7]
0 + 1    [4 ,7]
0 + 1 + 4  [7]
0 + 1 + 4 + 7

rb> [1, 4, 7].inject(:+)
=> 12

874 :デフォルトの名無しさん:2011/09/30(金) 22:48:56.60
>>873
だから、injectに与えるブロックは(副作用の無い)式を返せばいいんだから、代入は不要だよ

X: [1, 4, 7].inject(0) { |total, num| total += num }
O: [1, 4, 7].inject(0) { |total, num| total + num }

875 :デフォルトの名無しさん:2011/09/30(金) 22:56:10.20
>>874
ああおっしゃるとおり。気をつけるよ

876 :デフォルトの名無しさん:2011/09/30(金) 23:00:35.49
チラ裏だけど、injectは数値の集計以外にも使える
たとえば、以下はArrayからHashを作る処理

irb> alist = [[1,["a"]], [2,["b"]], [3,["c"]]]
=> [[1, ["a"]], [2, ["b"]], [3, ["c"]]]
irb> alist.inject({}) { |h, (k,v)| h.merge({ k => v }) }
=> {1=>["a"], 2=>["b"], 3=>["c"]}

これは以下と同じ

irb> Hash[alist]
=> {1=>["a"], 2=>["b"], 3=>["c"]}


877 :デフォルトの名無しさん:2011/09/30(金) 23:14:51.18
さてはきさま>>710だな。

878 :デフォルトの名無しさん:2011/10/01(土) 01:59:01.65
def sum1(x)
x.inject(:+)
end

sum2 = -> x{x.inject(:+)}

a=[1,4,7]
p sum1(a)
p sum2.(a)

b=[sum2]
p b[0].(a)

879 :デフォルトの名無しさん:2011/10/01(土) 06:03:11.33
Dir::mkdir(path)
Dir.mkdir(path)

これって違いはないですよね?

880 :デフォルトの名無しさん:2011/10/01(土) 07:40:30.75
>>879
同じように動くけど個人的には下を推す
理由は :: は階層の区切りで . はメソッド呼び出しと区別してるから

881 :デフォルトの名無しさん:2011/10/01(土) 09:50:52.97
ときどき思う
ASCII文字に矢印があったらプログラミング言語の構文はどうなっていただろうと

882 :デフォルトの名無しさん:2011/10/01(土) 11:29:15.64
sora_hみてるとNARUTOの主人公に見えてくる
そう思わないか?
こいつを見るたびMatzのなにかを感じられる
こいつを見るたびNARUTOに見えてしょうがない

こいつは2代目ルビ影になるに違いない

883 :デフォルトの名無しさん:2011/10/01(土) 12:06:38.24
低年齢化してるなぁ
いったい何年生が書き込みしているんだろう

884 :デフォルトの名無しさん:2011/10/01(土) 13:16:34.48
>>883
おっさんは休日出勤でもしてろよw

885 :デフォルトの名無しさん:2011/10/01(土) 17:59:43.95
職場から書いてるに決まってるだろ。言わせんな恥ずかしい。

886 :デフォルトの名無しさん:2011/10/01(土) 22:43:48.55
ASCII文字にλがあったら

887 :デフォルトの名無しさん:2011/10/01(土) 22:54:12.07
質問よろしいですか? Rubyでテーブルジャンプをやりたいのですが書き方が分かりません
…テーブルジャンプ? 関数テーブル? メソッドテーブル? 何と呼ぶのか分かりませんが、与えられた数値で処理を変える、みたいなことをしたいのですが…

case atari_code
when 0x00
by = 0
when 0x01,0x10,0x11
by = (63-x)
(以下略)
end

今は case when で書いてますが、case when は全部 if 文になると知り愕然としています。後のほうの記述値に到達するときは遅い=頻繁に呼ばれる部分では処理速度的にマズイのではないかと
入ってくる数値の範囲は決まっているので、配列データ内にメソッドを書いて呼んだら速くなるのでは、と思いましたが…
ググったところ send なるものが使えるらしいと知りましたが、具体的な書き方が今一つよく分かりません…御教示のほどを…
…テーブルジャンプにすれば、速度的にメリットはありますよね…? それともRubyは特別で効果が無いのでしょうか?

888 :デフォルトの名無しさん:2011/10/02(日) 00:28:47.80
速度を気にするならRubyではない言語にしたほうがよい

889 :デフォルトの名無しさん:2011/10/02(日) 00:39:35.00
関数テーブルの使い方とか利点とかを先に覚えてから
Rubyで実現するとしたらここがわかりませんってのを質問したほうがいいと思う

890 :デフォルトの名無しさん:2011/10/02(日) 01:24:11.60
パフォーマンスチューニングは測って特定してから考えろとうちのばっちゃが言ってた。

891 :デフォルトの名無しさん:2011/10/02(日) 02:10:06.00
>>887
Rubyには「処理そのもの」や「処理と
データのセット」を
ひとつのデータとして扱う仕組みがある
前者はProcやブロック、後者はオブジェクトだ

与えられるのが数値でなくても良いのなら
そもそも処理(を含んだもの)をデータとして渡して貰うという方法がある
この場合、単にそれを呼ぶだけで良くなる

数値など処理と無関係なデータじゃないとダメならば、ifやcase-when以外では
ハッシュに各処理をぶち込んでおいて、添字でアクセスってのもあるにはあるが
よほど分岐が多くなるのでない限り条件分岐のが結果的に高速かつ楽な気がするなあ

892 :デフォルトの名無しさん:2011/10/02(日) 03:01:23.31
試しにcase文を0..10000ぐらい書いてみたらメモリ喰いつくして止まった
一方lookuptab = {0 => lambda{...}, ..., 9999 => ...}
lookuptab[9999].callは最後まで完走した

話がそれたけどRubyでcase/whenの代わりにルックアップテーブル使っても
lambda生成のコストなんかもあいまってたぶん早くならないんじゃ
でもこういうときにルックアップテーブル使うと高速化できるぜって例があれば見てみたい

893 :デフォルトの名無しさん:2011/10/02(日) 06:00:05.97
自分なら特異メソッドとArrayでやるかなぁ。

> …テーブルジャンプにすれば、速度的にメリットはありますよね…? それともRubyは特別で効果が無いのでしょうか?

まずは890の言う通り測りもしないで「速度的にメリットは」とか言い出す変な宗教から
抜け出すことだと思うけど。

894 :デフォルトの名無しさん:2011/10/02(日) 09:40:59.99
まあ、実際にルックアップテーブル書いてみないと速度比較することもできないので
質問くらいはしょうがないとは思うが
sendって自分でも使ったことないので試してみたが、こんな感じでいいのか

class C1
def foo1(msg); p ("foo1 "+msg); end
def foo2(msg); p ("foo2 "+msg); end
end
c = C1.new
method_table = {1=>:foo1, 2=>:foo2}
c.send(method_table[1], "additional parameter")


895 :デフォルトの名無しさん:2011/10/02(日) 09:59:00.47
速度比較するんじゃないだろ
本当にそこがネックになってるかを調べてからってことだよ

全体の1%の部分を10倍高速化しても0.9%しか速くならない
全体の20%の部分を2倍高速化すると10%速くなる

896 :uy:2011/10/02(日) 15:15:23.55
全体の1%の部分を10倍高速化しても0.9%しか速くならない(キリッ
全体の20%の部分を2倍高速化すると10%速くなる (キリッキリッ

897 :デフォルトの名無しさん:2011/10/02(日) 15:56:38.44
>>746
>>748
>>752

898 :デフォルトの名無しさん:2011/10/02(日) 17:15:57.23
例外をハンドルする関数を作りたい

def HANDLE( func, arg )
try
func( arg )
rescue Exception => e
end
end

HANDLE( printfunc, 10 )

これRubyでできるの?

899 :デフォルトの名無しさん:2011/10/02(日) 18:33:52.82
require 'logger'

@log = Logger.new($stderr)
def errlog
begin
yield
rescue StandardError, Exception
@log.warn $!.message
raise
end
end

errlog{ "str".undefined }
W, [2011-10-02T18:30:51.416377 #2449] WARN -- : undefined method `undefined' for "str":String


900 :デフォルトの名無しさん:2011/10/02(日) 18:35:44.51
>>898
まず、RubyにはC/C++でいう関数ポインタという概念が無い
かわりに手続きオブジェクト(Procクラス)があり、
それを生成する proc(あるいは lambda)という構文が用意されている

printfunc = proc { |arg| .... }  # .... の部分にアプリ本体の定義を書く

def handle(func, arg)  # メソッド名は必ず英小文字で始めなければならない
  begin
    func.call(arg)
  rescue YourCustomError => e
    ....   # ここに例外eのハンドル処理を書く
  end
end

handle(printfunc, 10)  # 定義した処理を呼ぶ

901 :デフォルトの名無しさん:2011/10/02(日) 18:39:48.05
def に直接 rescue が付けられることはあまり知られていないのかな。


902 :デフォルトの名無しさん:2011/10/02(日) 18:51:56.62
>>901
筋がよくないことになることのほうが多い
小細工の域だと思う

903 :デフォルトの名無しさん:2011/10/02(日) 18:55:58.50
def handle
begin
yield
rescue Exception => e
end
end

handle { printfunc(10) }

こうか?

904 :デフォルトの名無しさん:2011/10/02(日) 19:42:44.60
>>899
>>900

お前らスゲーわ。尊敬する。スゲー助かった!
ここまで完璧に解説したサイトは無い…みんな悩まないのか不思議。

とにかくありがとうございますm(_ _)m



905 :デフォルトの名無しさん:2011/10/03(月) 06:12:51.42
rvm list known で出てくる *******-head ってやつは何ですか?
すみません、低次元な質問で。



906 :デフォルトの名無しさん:2011/10/03(月) 06:56:07.30
head=頭

開発の最新バージョン
通常、数字か番号をつけるんだけど
それだとそれが今の最新バージョンかどうかわからないので
はっきりわかるためにつけている。

907 :デフォルトの名無しさん:2011/10/03(月) 07:01:21.07
rvmのマニュアルに説明が書いて…書いて…ない
このへんを必要とする人は自分で開発やってるような人だからブン投げてあるな

固定のバージョン番号すらまだついてない状態の、
ついさっきちょっと変更してみましたなレベルの不安定な開発版の最新変更版
ふつうは使用してはいけない

908 :デフォルトの名無しさん:2011/10/03(月) 12:48:06.51
>>906, 907

どうも。
何となく想像はしていたんだけど、
確証が持てなくて。

個人のblogとかにはheadを入れる様な
サンプルも多かったので。

助かりました。ありがとうございます。

909 :uy:2011/10/03(月) 15:37:31.84
require 'Win32API'

a = Win32API.new("kernel32" , "CreateProcess" , "ipiiiiiipp" , "i")

a.call(
0,"C:\\WINDOWS\\system32\\notepad.exe",0,0,
0,
0,
0,0,
"sine","sinekasu")


質問ですがこれを実行すると、高確率で[BUG]になるんですけれど
BUGなんですか? BUGってまさかあのバグですか? なんで放置するんですか?
[BUG]って出ないときは"sinekasu"のあたりを適当に変えてください。あるいはnotepad.exeのところはちゃんと存在するexeにしてください

間違った引数を渡したら [BUG] Segmentation fault とか表示しないで引数が間違ってますとか
だすべきじゃないですか??? ぼくは間違ったことをいっていますか?
雪は白いですか? もう秋ですdね



910 :デフォルトの名無しさん:2011/10/03(月) 15:47:02.55
>>909
http://www.ruby-lang.org/ja/old-man/html/FAQ_B0ECC8CCC5AAA4CABCC1CCE4.html#a1.2e13.20.a5.d0.a5.b0.ca.f3.b9.f0.a4.cf.a4.c9.a4.b3.a4.d8.b9.d4.a4.a8.a4.d0.a4.e8.a4.a4.a4.c7.a4.b7.a4.e7.a4.a6.a1.a9

放置も何も、報告されてないバグには対応のしようがありませんから、
2ちゃんねるに貼るのではでなく、しかるべき手順で報告をしてください。

911 :uy:2011/10/03(月) 15:51:28.16
a = ("a".."c").to_a

b = nil
a.map! do | m |
 unless $uu 
   $uu = true
   b = a 
   a.pop
   m = 99
   a =  ("x".."z").to_a
 end
 p a
 p m
end

p a # ← は? 
a = b
p a # ← は? 


↑はぁ??


これ、自分であらかじめaをbに格納しておかないと、変数aが迷子状態になるんだけど

つうか、そもそも
("a".."c").map do | m |
#処理
end
このときにイテレータ内で ("a".."c") を参照する術がないの頭おかしいんじゃないの?

912 :uy:2011/10/03(月) 15:59:56.56
質問なんですけど

class A
  class << self < self
    p self
  end
end


この記述はコンパイルエラーになりません

ということは、なんらかのケースにおいて使うってことですか?

どんなときに使うのでしょうか? ありえないとはお思いますが
まさかバグだっていう事にもかかわらず、エラー表示だせてないで動いちゃってるとか
そんな事はありませんよね?

特異クラスに何を継承してもそれは、Falseclassになるという、Ruby独特の特異性はどのような場面において使われるのでしょうか?

913 :uy:2011/10/03(月) 16:19:47.18
質問です
class A
 @a = 5
 @@b = 1
 class << self
   def a
     p @a
   end
   p @a # nil ←はあ?
   p @@b # 1 ←はああああああああああ????????
   class << self
     def b
       p @a
       p @@b # 1 ←はああああああああああああああああああああああ????????
     end
     p @a
   end
   self.b
 end
 self.a
 class B
   p @@b # `<class:B>': uninitialized class variable @@b in A::B (NameError) ←ハァ!??
   rescue
   p :haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?
 end
end

何度みてもここら辺のネームスペース関係がひどい有様に見えるんだけど、仕様変更くるの? 慣れろっていうの? この、1クラスの中に二種類の@aがあるけど
これを使い分けてるやつなんていんの?w バグの元になってるか、「使うな!」っていわれてるだけじゃないの?w
@@b が特異クラスのネームスペース突破するのはいいけど、それなら普通のクラスBを突破する@@@c とか用意しないの? なんなの?Ruby2.0いつでんの???

914 :デフォルトの名無しさん:2011/10/03(月) 16:58:28.18
>>911
まずメソッド Array#map! を誤って理解しているように思う。
これは渡されたブロックを評価して、その値でArrayの各要素を更新する。
ここでブロックの評価値とは、ブロック内の最後の文(= endの直前の文)を評価した値。
たとえば>>911のコードであれば p m であり、その値は常に nil となる。

また、ブロック内で a.pop や a =  ("x".."z").to_a のようなレシーバへの破壊的操作を
しているけど、このような操作は予測不可能なコードになるから避けるべき。

パズルとして言語の裏を遊ぶ事を否定する訳ではないが、その前に Array#map! を勉強しよう。

915 :uy:2011/10/03(月) 17:11:02.24
ひとつのコードに複数の突っ込みどころを持たせてるからああいうコードになってるだけ

俺が言いたいのは、破壊的メソッドは、
a = ("x".."z").to_a
の代入よりも後に
a = (イテレータ内で変更されたa)
を代入してるんじゃなかったのか? っていう所
イテレータ抜けた後のp aは、俺的には"a","b"であってほしかった

けど実際、この動作だと
a = ("x".."z").to_a これをやった瞬間に、今までのaは内部でコピーされて
コピーされたaがイテレータ内で次から周り、プログラマから見えるaの中身は書き換えられた事になる

つまり、もう誰も参照することのできないデータがイテレータで廻ってる事になる
それの実行が許されるっていうのはかなり怖い状況じゃないのか?
目隠しして歩いてるようなもんだ

せめてselfか何かで参照できれば良いと思うって話

916 :デフォルトの名無しさん:2011/10/03(月) 17:11:57.97
>>888
またそうやって身も蓋もないことを…

>>889
関数テーブルにするメリットは、どんな値が飛び込んできても最初の判定処理にかかる時間が一定になることです。
対して、Rubyのcase〜whenでは、処理速度が可変になります。最初のあたりでヒットすれば判定回数が少なくなりますが、最後のあたりでヒットすれば判定回数が多くなります。
ですが、入ってくる数値のバラつき具合や、該当部分が呼ばれる頻度によっては、実用上気にしなくてもいい場面もあるでしょう。
また、比較できる値の自由度や、ソース書く人間が順番を意識することで最適化できる余地については、Rubyのcase〜whenは利点があります。
さらに、ソースを読む時の理解のしやすさを考えれば、初心者の間は case〜when で書いておいたほうが無難かもしれません。
ちなみに、言語やコンパイラによっては、このあたりを意識せずに書くことができます。
例えばC言語なら、コンパイラの最適化処理によって、テーブルジャンプに出来るswitch〜caseはテーブルジャンプにしてしまいます。
Rubyに比べれば、「case〜whenで書くべきか? テーブルジャンプにすべきか?」と悩む場面は少ないでしょう。
ですので、どちらで書くべきか悩むのは、Rubyという言語だからこそ生じてしまう問題、とも言えます。
…ここまで説明しておけばいいのでしょうか?

917 :デフォルトの名無しさん:2011/10/03(月) 17:32:12.69
>>891-894
ありがとうございます! 参考にして書いてみます
もちろん、両方のベンチマークは測ってみるつもりです
(書き方が分からないのではベンチも取れませんし)

>>895
今、Rubyで横スクロールアクションのゲーム・地形アタリ判定を書いてるのです
地形アタリ判定は、プレイヤー、敵、場合によっては弾すら呼び出す部分なので、利用頻度が高く…

ゲームプログラムにおいて、こういう処理はテーブルジャンプにするのが常識なので、そっちで書いたほうがサンプルとして適切なのか、
それとも処理の流れが理解できることを優先して case〜when のままにしておくか、処理速度云々とは別の部分でも悩ましいです
最終的にバイナリ配布しかしない開発言語と違い、ソースを見せることができるのが Ruby、Python、Perl等のメリット、と思うので…
素直に書いておきたいけれど、それで速度が遅くなったら困るし…

918 :デフォルトの名無しさん:2011/10/03(月) 17:52:11.14
>>915
コードに複数の突っ込みどころを持たせることの目的が、
相手を混乱させて自分を精神的優位に導く事だとしたら、あまり感心できる行為ではない。
もしもそうではないのなら、自分の主張したい事(論点)をできるだけ簡潔に絞って、
それをコードとして表現できる能力を身につけた方がいい。(余計なおせっかいかも)

破壊的メソッドにイテレータが絡んだケースの怖さについては、まあ同感だね。
だから、できるだけmap!よりも(副作用の無い)mapを使う事が望ましいと思う。

919 :890:2011/10/03(月) 17:55:12.29
両方書いて比較する前にホントにそこがボトルネックなのかとか
そもそも所望する速度より遅いのかを測ってからでも遅くないと思うんだが、
まあいいや。

ところで 1.9 だと when の値がリテラルならテーブルジャンプ相当の処理に
変換してくれると思ってたんだけどそうはなってないのかな?
ttp://d.hatena.ne.jp/hzkr/20061120

920 :uy:2011/10/03(月) 18:09:16.43
>>918
精神的優位に立とうとしてるのはお前では?
相手をmap!すら理解していないと勘違いした
あと、よく君の文章を見直してみたら
p メソッドを勘違いしてるよ
p の戻り値はそのままpの引数がくる nilにはならない
破壊的メソッドはmap!だけじゃなく
よく使うものではdelete_ifだってあるし
一概に使わなければよいというものではない
相手を混乱?
そもそもuyという名前で書き込んでいる時点でまともなレスなどは期待していない

ちなみにほかにも、
見えないコードが走っているという状況は、
a = [lambda do
  loop do
    p a
    sleep 1
    p a.pop
  end
end]
a.first.call

こうやっても作り出せる

921 :デフォルトの名無しさん:2011/10/03(月) 18:47:25.15
>>911
破壊的メソッド実行中のオブジェクトは幼虫から成虫になる前の蛹みたいなもの
変化しつつあるんだから昔の状態はもう無くなっている
それを参照したいなら別にコピーをとっておくしかない
さらに変化中の蛹に手を加えれば正しく変化できるはずもない

>>912
class A
class << ( self < self ) # class << false
def hoge ; p :hoge ; end
end
end
false.hoge

>>913
特異メソッドを定義するとオブジェクトに特異クラスが定義される
class A
class << self ; @a = :a ; end
end
ここで定義された@aはその特異クラスのインスタンス変数になる

922 :uy:2011/10/03(月) 19:03:25.71
>>921
で?

そんな周知の事実をいまさらドヤ顔で語って。どうするの
この議論に初心者が参加するために、説明してくれてんの?


class A
  class << self < self
    p self
  end
end

つーか、ほんと、これ、何よ、エラーだせよ、パーサのソースコード的に、難しいとか、なんだろうけど、

falseclassになるのは、なんなの?nilclassとか trueclassとか、色々あるけど

マジックナンバーじゃないけど、それにちかいよ。

923 :デフォルトの名無しさん:2011/10/03(月) 19:53:21.42
>>922
class A
a = self < self
class << a
p self
end
end

924 :デフォルトの名無しさん:2011/10/03(月) 19:53:36.87
即値falseはFalseClassのaliasってだけじゃ…

925 :デフォルトの名無しさん:2011/10/03(月) 19:59:02.07
>>922(>>912)
class A .... end の文脈内で self はクラスAを指す。
そして self < self は A < A と同じだから、比較結果は false になる
その false の特異クラスを定義しているから、
定義の文脈内では self の値は FalseClass になる。

特異クラス定義を知っていれば特に難しい事ではないはずだけど、
なぜそれがマジックナンバーとやらになるんだろ?
いったい何を言いたいんだろうか?

926 :デフォルトの名無しさん:2011/10/03(月) 20:01:07.10
単にself < selfがfalseになることを知らなかっただけの希ガス

927 :uy:2011/10/03(月) 20:13:03.05
継承しているつもりが、なんと比較演算子扱いになってるわけね?
falseclassはそれで納得した
マジックナンバーであるということは訂正しよう

では、特異クラスへの継承はどのようにして書いたらよいのかね?

928 :uy:2011/10/03(月) 20:18:09.31
まさか

module B
  def a
    p 9
  end
end
class A
  class << self
    include B
  end
  self.a
end

ミックスインは出来るのに、継承は出来ないの?wwwww


929 :uy:2011/10/03(月) 20:20:29.65
<<と<の演算子の比較順序が違うからこういうことになるんじゃないの?wwwwww

930 :uy:2011/10/03(月) 20:20:52.71
>>929
評価順序

931 :デフォルトの名無しさん:2011/10/03(月) 20:32:39.65
特異クラス定義というのは特定のオブジェクトだけにメソッド等を追加定義する訳だけど、
特異クラスへの継承とは何を意味/期待しているの?

というか、初心者らしく一度リファレンスマニュアルを呼んだほうがいいよ。
そこには、しっかり特異クラスの構文が class `<<' expr と書かれている
expr(式)という構文定義だから、self < self がfalseになるというミスも無くなる。

experの値はクラスであるのが一般的だけど、オブジェクトであれば特に制限は無いんだが....

932 :デフォルトの名無しさん:2011/10/03(月) 20:35:12.88
>>931を訂正

X: self < self がfalseになるというミスも無くなる。
O: self < self がfalseになるのを知らずに勘違いするミスも無くなる。


933 :デフォルトの名無しさん:2011/10/03(月) 20:39:50.32
>>920
>p の戻り値はそのままpの引数がくる nilにはならない

irb> puts (p "A").inspect
"A"
nil
=> nil

Rubyのバージョンは1.8.7
1.9系でpの戻り値が引数をそのまま返すように仕様変更されたのかな?

934 :デフォルトの名無しさん:2011/10/03(月) 20:54:34.94
>>920
pの戻り値はバージョンによって違うから不用意に使わないほうがいいよ

935 :uy:2011/10/03(月) 21:03:58.91
>>933
なんでメインで1.8系使ってんの


>>932
期待とかじゃなくて
class A < B   
これがクラスへの継承なら

class << self < B
これは特異クラスへの継承という風に読めるじゃん

しかし、出来なかった
ミックスインは出来て継承は出来ない現実

そもそも、
class << self < B これを書いたときに < が << より先に評価されているのは、
何か考えあってのことなのか? << を先に評価すると何かまずかったのか?

俺には、特異クラスへの継承は一切考えられておらず、「偶然」そのように動いてるようにしか見えない

936 :uy:2011/10/03(月) 21:06:37.20
>>934
バージョンによって違うって。
普通こういう場所では最新の安定バージョンを入れてる事を前提で話すんじゃなくて?

古いバージョン使ってる奴は更新してないのが悪いし
1.8使って、それで動かした結果を当たり前のようにバージョンも明記せずにレスしてくるなんて論外もいいところ

937 :デフォルトの名無しさん:2011/10/03(月) 21:14:27.86
>>935
> class << self < B
> これは特異クラスへの継承という風に読めるじゃん
読めません
class << ( self < B )
( class << self ) < B # シンタックスエラー

938 :デフォルトの名無しさん:2011/10/03(月) 21:29:05.99
もし仮にpの戻り値が引数と等しいことを前提にしたのなら、
>>911のコードは a.map! do |m| m end とほぼ同じ意味になる。
 (unless .... end の部分を置いておけば....)
そうであれば、つまりaの各要素をmap!で更新する意図が無かったのなら、
>>911のコードはmap!ではなくeachを使うべきじゃなかったのかな?

結論を言うと、1.9系を前提にしても、
やっぱりuv君は Array#map! の使い方を知らなかったように見えるな.... 違うん?

939 :デフォルトの名無しさん:2011/10/03(月) 21:33:10.34
やめてあげて!彼の自尊心はもうゼロよ!

940 :uy:2011/10/03(月) 21:35:31.07
>>937
>読めません
へえ?????? じゃあちょっとRubyやったことない奴に問題だしてみれば?
ずっとRuby使ってるから感覚狂ってるんじゃね?

Rubyは基本 do 〜 endなんだから
( class << self )  こんなこと出来ないに決まってんだろ
括弧つけるなら
( class << self
end)  こうなるんだよ 
 
まぁ、このスタイルの限界だね

やるんだったら
class << self.keisyou(B)
class self , B do

end
こうするしかない これならミックスインのほうがマシ
または、
class << self でかなり特例を作っているように
class << self < B や
class << self << B という特例をさらに作るしかないのだろう 特例を作っておらず、
なにやら評価順序のせいで比較演算子扱いになっているのが現状

ゆえに特異クラスへの継承が出来ないのがRubyなのでした

941 :uy:2011/10/03(月) 21:37:06.33
>>938
その話終わってる


>>940
で、 無理やりにやろうとするとこうなる
module C
  def c ; p 9 ; end
end

module B
  def < a
    extend a
  end
end

module A
  extend B
  class << self < C
  end
  self.c
end

942 :デフォルトの名無しさん:2011/10/03(月) 21:37:13.48
>>935
>俺には、特異クラスへの継承は一切考えられておらず、「偶然」そのように動いてるようにしか見えない

だから何が言いたいの?
特異クラス定義の構文は class << expr であって、
>>931 で書いたように expr の部分はクラスである必要は無いんだ。
クラスである必要が無いのに、なんで継承が出てくるんだろ?
なんだか特異クラスを一般的なクラスと同一視しているんじゃないのかな?

# だから特異クラスって難しい、初心者には最初のうちは鬼門なんだろうけど....

943 :デフォルトの名無しさん:2011/10/03(月) 21:38:56.36
>>941
>その話終わってる

あ、やっぱり知らなかったんだw

944 :デフォルトの名無しさん:2011/10/03(月) 21:39:31.25
>>940
> ゆえに特異クラスへの継承が出来ないのがRubyなのでした
はい、良くできました。これからも頑張りましょう。
PS. >>941は蛇足ですね。

945 :デフォルトの名無しさん:2011/10/03(月) 21:39:39.97
>>> %w(a b c)
=> ["a", "b", "c"]

>>914
>>> r = ('a'..'c')
=> "a".."c"
>> r.to_a
=> ["a", "b", "c"]
>>> r
=> "a".."c"

946 :デフォルトの名無しさん:2011/10/03(月) 21:41:36.99
今日はuv君にいつものキレが感じられない

947 :デフォルトの名無しさん:2011/10/03(月) 21:43:53.67
Haskell勉強してて頭使ったからとかだったりして

948 :uy:2011/10/03(月) 21:44:34.91
>>942
何が言いたいかって、
気づけよw

あーあ。 設計ミスったなって、言ってる

この先、Rubyは3択に迫られる
1つ、クラスとモジュールを結合する
2つ、基本的に継承はやめて、なるべくミックスインでやる( 今はこの流れか? )
3つ、根幹から書き直すw

>>943
過去ログすら読めないで話しかけるって。さ。失礼をとおりこして荒らしのレベル

>>945
で?
個人的メモは2chのこのスレッドに書き込むべきじゃないと思うよ
ブログでやれ

949 :デフォルトの名無しさん:2011/10/03(月) 21:53:37.07
継承を使いたいなら普通のクラス定義を使えばいいやん
なぜに特異クラスにこだわって、それを設計ミスと判断したのか意味不明
結局、特異クラスとは何かを分かっていないだけ

950 :デフォルトの名無しさん:2011/10/03(月) 22:05:24.87
大体特異クラスに何かを継承させたいって何がしたいんだよ
元のオブジェクトは当然クラス決まってるんだし更に継承させられたら多重継承やってるようなもんじゃん
Rubyは一般的な多重継承はやらせない方針なんだしそんなものできなくて当然だろ

951 :uy:2011/10/03(月) 22:08:49.13
>>949
またそこを盛り返すのか

使いたい・使いたくない  の問題ではない

Rubyに実装されてるメソッドの中には、1人のプログラマーでは一生使わないようなものも含まれている

お前が使うとか、俺が使うとかいう問題じゃなくて
そこに「存在するのが自然」だという意見かな


結局
>>941
ここのコードはユーザーがかこうとするとmoduleでやるしかない
継承周りがすごく適当じゃね?って事を言いたい


Matzは継承イラネっつってるけど
俺からみれば継承もミックスインも同じで、
ようは先にかけるのが継承、後にかけるのがミックスインって程度で
こんなの最初に継承を実装した奴がちゃんと概念を完璧にしていれば、
継承っていう概念の中にミックスインを飲み込んだはずなのに、なぜか分離してるだけ
class module の分離は良いと思うけどね

952 :デフォルトの名無しさん:2011/10/03(月) 22:08:51.48
>>948
> 個人的メモは2chのこのスレッドに書き込むべきじゃないと思うよ
> ブログでやれ

その言葉、そっくりそのままお前に返すわ

953 :デフォルトの名無しさん:2011/10/03(月) 22:11:01.22
継承もミックスインも一緒って思うのは一人で全て開発するぼっちプログラマの発想じゃね?

954 :デフォルトの名無しさん:2011/10/03(月) 22:12:26.35
見えない人と会話しないでくらさい><;

955 :uy:2011/10/03(月) 22:13:56.36
>>950
多重継承って言葉を出してくるとはセンスあるな

そうだよ
特異クラスへの継承は、おそらく多重継承の実装と同時に可能になるだろう

多重継承できないのがksなんだよ いわせんな恥ずかしい


>>953
一緒とかいうのではなく、
先継承、後継承って名前でよかったって話。 基本同じなんだから
継承とミックスインなんて、エディタ上のソースコードの行の使い方をどうするかっていうレベルの問題

956 :945:2011/10/03(月) 22:24:34.52
>>952
けんかしちゃだめ

純粋に個人的なメモならこんなところに貼らないよ
上段は('a'..'c').to_aとか書くより%w(a b c)のほうが楽でしょって提案だし
残りは>>914へのレスだ

957 :デフォルトの名無しさん:2011/10/03(月) 22:26:24.55
ただ「<<」を演算子だと勘違いして八つ当たりしてるだけじゃんか

958 :uy:2011/10/03(月) 22:29:28.03
>>956
上段は('a'..'c').to_aとか書くより%w(a b c)のほうが楽でしょって提案だし
上段は('a'..'d').to_aとか書くより%w(a b c d)のほうが楽でしょって提案だし
上段は('a'..'e').to_aとか書くより%w(a b c d e)のほうが楽でしょって提案だし
上段は('a'..'f').to_aとか書くより%w(a b c d e f)のほうが楽でしょって提案だし
上段は('a'..'g').to_aとか書くより%w(a b c d e f g)のほうが楽でしょって提案だし
上段は('a'..'h').to_aとか書くより%w(a b c d e f g h)のほうが楽でしょって提案だし
上段は('a'..'i').to_aとか書くより%w(a b c d e f g h i)のほうが楽でしょって提案だし
上段は('a'..'j').to_aとか書くより%w(a b c d e f g h i j)のほうが楽でしょって提案だし
上段は('a'..'k').to_aとか書くより%w(a b c d e f g h i j k)のほうが楽でしょって提案だし
上段は('a'..'l').to_aとか書くより%w(a b c d e f g h i j k l)のほうが楽でしょって提案だし
上段は('a'..'m').to_aとか書くより%w(a b c d e f g h i j k l m)のほうが楽でしょって提案だし
上段は('a'..'n').to_aとか書くより%w(a b c d e f g h i j k l m n)のほうが楽でしょって提案だし
上段は('a'..'o').to_aとか書くより%w(a b c d e f g h i j k l m n o)のほうが楽でしょって提案だし
上段は('a'..'p').to_aとか書くより%w(a b c d e f g h i j k l m n o p)のほうが楽でしょって提案だし
上段は('a'..'q').to_aとか書くより%w(a b c d e f g h i j k l m n o p q)のほうが楽でしょって提案だし
上段は('a'..'r').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r)のほうが楽でしょって提案だし

959 :uy:2011/10/03(月) 22:29:57.17
>>956
上段は('a'..'s').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s)のほうが楽でしょって提案だし
上段は('a'..'t').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t)のほうが楽でしょって提案だし
上段は('a'..'u').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u)のほうが楽でしょって提案だし
上段は('a'..'v').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u v)のほうが楽でしょって提案だし
上段は('a'..'w').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u v w)のほうが楽でしょって提案だし
上段は('a'..'x').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u v w x)のほうが楽でしょって提案だし
上段は('a'..'y').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u v w x y)のほうが楽でしょって提案だし
上段は('a'..'z').to_aとか書くより%w(a b c d e f g h i j k l m n o p q r s t u v w x y z)のほうが楽でしょって提案だし



("c".."zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz").each do | m |

b = ("a"..m).to_a*" "

puts "上段は('a'..'#{m}').to_aとか書くより%w(#{b})のほうが楽でしょって提案だし"

end


960 :デフォルトの名無しさん:2011/10/03(月) 22:31:58.02
>>959
初心者の分際で反論すんなよ

961 :デフォルトの名無しさん:2011/10/03(月) 22:32:14.40
ほとんど三歳児の思考レベルやね

962 :デフォルトの名無しさん:2011/10/03(月) 22:35:15.73
>>958-959
あーぁ、また敗北宣言しちゃったか
今回はよく我慢してたのにぃ

963 :uy:2011/10/03(月) 22:42:25.17
あー、そっかー。

よく考えたら、


上段は('a'..'pz').to_aとか書くより
%w(a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac
ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh
bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl
cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp
dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et
eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga
gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he
hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il
im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx
jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld
le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk
ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl
nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo
op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps
pt pu pv pw px py pz)のほうが楽でしょって提案ですね^^;

964 :デフォルトの名無しさん:2011/10/03(月) 22:51:53.28
うざいからさわるな

965 :デフォルトの名無しさん:2011/10/03(月) 23:07:15.52
手にあんこを乗せて

966 :デフォルトの名無しさん:2011/10/03(月) 23:14:06.36
そもそもこういう文脈で○○への継承なんて言ってる時点で継承が分かってないんじゃないかって気になる

967 :デフォルトの名無しさん:2011/10/03(月) 23:20:14.89
ふれるなっつーに

968 :デフォルトの名無しさん:2011/10/03(月) 23:36:23.48
三次→萌え絵スレでも

969 :デフォルトの名無しさん:2011/10/03(月) 23:36:43.13
誤爆!

970 :Perl忍者:2011/10/03(月) 23:37:37.77
uyっていうネーミングセンスまったくないよね

ハゲそうな貧弱なチビのこじきみたい
uってハゲた頭みたいで ウユッって 気持ち悪いな
チビでハゲで貧弱

ネーミングにインパクトがない
さっさと死ね

迷惑かけるなよここのスレのやつらに

971 :uy:2011/10/03(月) 23:40:18.32
ほーほけきょ

972 :デフォルトの名無しさん:2011/10/03(月) 23:48:53.97
ウグイスでも見て落ち着くべきだと、俺は思う
ttp://userdisk.webry.biglobe.ne.jp/008/723/08/N000/000/004/123890948432916327328.jpg
ttp://userdisk.webry.biglobe.ne.jp/020/884/94/N000/000/000/129983580702916206108.JPG

973 :Perl忍者:2011/10/03(月) 23:52:50.55
本気で気持ち悪いなuy
消えろ
死ね 死んでくれよ?早く
お前邪魔なんだが
消え失せろ 邪魔だとっとと消えろ雑魚が
死ね汚物
お 前 は 邪 魔だ 帰 れ 2 c h に 書 き 込 む な
お 前 に 人 権 は な い

974 :デフォルトの名無しさん:2011/10/03(月) 23:59:23.07
下のほう難易度高いな

975 :デフォルトの名無しさん:2011/10/04(火) 00:04:58.74
>>919
case when の中に手を入れると1フレームあたりのCPU負荷率がグンと増えるので、書き方次第で遅くなるのは間違いないみたいです
もちろん、他に負荷が高い部分があればそっちを最適化すべき、という意見には賛同します
…まあ、Rubyの勉強も兼ねている状態なので、大目に見てください…

Windows7 + Ruby 1.8.7 で測定してみましたが、興味深い結果が出たので一応報告だけ
0..15 の値で、case when とメソッドテーブルを測ってみましたが
when でヒットする場所が3〜4個目を超えるあたりで、メソッドテーブルのほうが速くなるようでした
最善 = case whenの一番最初でヒットし続ける場合、case when がメソッドテーブルより1.2倍速く
最悪 = case whenの一番最後でヒットし続ける場合、case when がメソッドテーブルより2.6倍遅くなりました
つまり、処理速度を稼ぎたいなら(もちろんそこがボトルネック、かつ、入ってくる数値がバラけているなら)、whenの数が4個を超えたあたりでメソッドテーブルに書き換えるのも手としてはアリ、と言えるかもしれないです

…と思ったら、1.9.xでは最適化されてるのですか! 知りませんでした…そっちでも測定し直してみます…
exerb は 1.8まで対応と聞いたので 1.8.7 を使ってましたが…こんなところを気にしてるぐらいなら、1.9 + ocra のほうがいいのかな…

976 :デフォルトの名無しさん:2011/10/04(火) 00:10:56.56
勝てるレスを見つけると、執拗なまで強気に出て、
まるですべてに勝利したかのように悦に浸るとかw

977 :975:2011/10/04(火) 00:12:20.58
今、1.9.2 p290で試してみましたが
…変です。1.8.7より遅くなってます >case when
なんでだろ? 動かす時に何か「最適化しろ!」的な指定が必要なのかな?
そのあたりも勉強してみます

何にしてもメソッドテーブルの書き方が分かったので助かりました
教えていただいた方々に御礼申し上げます

978 :デフォルトの名無しさん:2011/10/04(火) 00:12:46.59
そこまでやるならコードと測定方法を晒した方がいいと思うよ

979 :975:2011/10/04(火) 00:21:48.02
ごめんなさい。ミスしてました
pikでバージョンを切り替えたつもりが
関連付けされてるのは Ruby1.8.7のほうで、ずっとそっちで動かしてました…

Ruby 1.9.2 で動かしたら、1.8.7の23倍の速度で動作しました。顎が外れました
また、case when もメソッドテーブルも、結果は同じでした

こんなことを気にするぐらいなら 1.9 を使うべき、だったのですね…
まさかここまで速いとは…1.9、凄過ぎます…

980 :デフォルトの名無しさん:2011/10/04(火) 00:23:08.35
ocraなんてものがあったのか。勉強になった

981 :890:2011/10/04(火) 00:51:51.90
げ、そんな速いのか。俺もそろそろ 1.9 に移行すべきか・・・

つーかさ、 1.9 に詳しくないどころか使ってさえない俺でも思い当たった case when の最適化の件に
ここまで誰一人として言及してこないってのは一体どういうことなんだよ。
お前らもっとしっかりしろよオラ。
お前ら 1.9 とかもう使っちゃったりなんかしちゃってんだろオラオラ。

982 :uy:2011/10/04(火) 01:13:22.08
>981
おまえこのスレなめてんの?

げ じゃねーよ
Ruby使ってんならもっと情報追えよ なんなんだよ
製作者インタビューやらが日本語でごろごろ転がってんのに読まないとか
そういうコアな情報を追いやすいのが日本発言語のいいところだろ

全部読め
http://www.rubyist.net/~matz/
http://jp.rubyist.net/magazine/

983 :デフォルトの名無しさん:2011/10/04(火) 01:19:18.26
>>981
思い当たったからルックアップテーブルにしても
早くならないと思うよって書いたんだYO

984 :890:2011/10/04(火) 07:37:58.71
>>982
お前に言われたないわ、ボケ。
お前のレスにも明らかに何も読んでねーだろってのが大量にあるぞ。

>>983
いや、だからそれ思い当たったなら言ってくれよってな話で。


985 :デフォルトの名無しさん:2011/10/04(火) 08:44:05.59
>>984
見えない人と会話しないでくらさい><;


986 :uy:2011/10/04(火) 20:33:14.82
>>984
あのさ、あのさあ、俺がいってんのは、
なんでそんなレベル低いのにドヤ顔なんだ?って話

キモいんだけど・・・

981 :890:2011/10/04(火) 00:51:51.90
げ、そんな速いのか。俺もそろそろ 1.9 に移行すべきか・・・

つーかさ、 1.9 に詳しくないどころか使ってさえない俺でも思い当たった case when の最適化の件に
ここまで誰一人として言及してこないってのは一体どういうことなんだよ。
お前らもっとしっかりしろよオラ。
お前ら 1.9 とかもう使っちゃったりなんかしちゃってんだろオラオラ。


987 :uy:2011/10/04(火) 20:35:54.89
初心者の域すらでていないで、
このスレッドで質問する側にいるんなら、もうちょい謙虚な書き込みをしろよゴミカス

いいからさっさと>>982 これ全部読めって。 読み終わるまでスレッドに二度と書き込むな
速読身に着けろカス

>お前ら 1.9 とかもう使っちゃったりなんかしちゃってんだろオラオラ。


988 :uy:2011/10/04(火) 20:41:34.28
「もう」ってなんだよ
いまさら1.8使ってるほうが頭おかしいんだよ

なんで何も情報みえてねーんだよ

なんで日本語資料こんだけ多いプログラミング言語つかってて、


情報追えないんだよ  追う気がないんだよ


「英語だから無理ですw」っていってるやつって日本語でも無理って本当かもな・・・・


   ふ  ざ  け  ん  な    カ   ス    初心者  死 ね


989 :uy:2011/10/04(火) 20:44:04.16
>>983
>いや、だからそれ思い当たったなら言ってくれよってな話で。

はぁ????? マジなめてんなお前



屋上

990 :uy:2011/10/04(火) 20:48:05.56
初心者は全員死ね

991 :デフォルトの名無しさん:2011/10/04(火) 20:48:33.68
ごめんなさい

992 :uy:2011/10/04(火) 20:51:25.20
ぁああああああ?????

993 :uy:2011/10/04(火) 22:03:14.78
初心者ふざけんな

994 :uy:2011/10/04(火) 22:05:39.58
ざけんな

995 :uy:2011/10/04(火) 22:19:33.23
は?

996 :uy:2011/10/04(火) 22:21:36.18
左を見ろ 左を見ろ 右を見ろ 右を見ろ 右を見ろ 下を見ろ 左を見ろ 右を見ろ 左を見ろ 
左を見ろ 右を見ろ 下を見ろ 上を見ろ 左を見ろ 上を見ろ 下を見ろ 下を見ろ 上を見ろ 下
を見ろ 左を見ろ 右を見ろ 右を見ろ 左を見ろ 左を見ろ 下を見ろ 上を見ろ 上を見ろ 上を
見ろ 上を見ろ 下を見ろ 下を見ろ 右を見ろ 下を見ろ 上を見ろ 左を見ろ 左を見ろ 右を見
ろ 右を見ろ 左を見ろ 右を見ろ 下を見ろ 下を見ろ 左を見ろ 左を見ろ 右を見ろ 上を見ろ 
下を見ろ 上を見ろ 上を見ろ 右を見ろ 右を見ろ 左を見ろ 右を見ろ 右を見ろ 左を見ろ 下
を見ろ 上を見ろ 左を見ろ 右を見ろ 上を見ろ 上を見ろ 右を見ろ 上を見ろ 上を見ろ 上を
見ろ 上を見ろ 右を見ろ 下を見ろ 下を見ろ 右を見ろ 上を見ろ 左を見ろ 左を見ろ 左を見
ろ 下を見ろ 下を見ろ 上を見ろ 下を見ろ 右を見ろ 右を見ろ 上を見ろ 右を見ろ 下を見ろ 
右を見ろ 下を見ろ 下を見ろ 上を見ろ 左を見ろ 左を見ろ 上を見ろ 右を見ろ 下を見ろ 右
を見ろ 左を見ろ 左を見ろ 上を見ろ 下を見ろ 右を見ろ 下を見ろ 左を見ろ 上を見ろ 

997 :uy:2011/10/04(火) 22:22:38.65
は?

998 :uy:2011/10/04(火) 22:23:14.67
は>

999 :uy:2011/10/04(火) 22:24:16.91

               '´        `丶
               /                \
            /     r           ヘヽ
              ,'     ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l〈
          |     |              |│
          |     |            _ト,L_
          |   -=┴:┬: ァ : :7T:7下:/「:、 : !\
          |ノ   厶イ:/! /-孑'´|/ |/二jハ:リ│
.           /     l: j,斗テ圷   弋iナ小/ ,|
          |      |Vヘ弋)ン      `´ i:|∨|   はぁ
            j/      ,'| ''       '    '': |: ' |
           /     /.:|丶、   f^ーァ'   イ: :|: : |    これだから 童 貞 は
        /     /|: :|(ヽl> `_ー_. イ:!:| : |: ハ
          /     /-|: :|(>、` ー‐┴' ∧L| : !/: : '.
.         /     ∧. |: :l \      ノ/ } |: :|ヽ: : :i
        /     / ハ.|: :ト.、 \ー‐ / ,/ |: :| ∧: :|
.      ,′     /    |: :l \   \/  /  i|: :l/ '; :|         ./゙)
. \ __ |    /     l|: :|   \ /\/  |i /l   |│        / 'ー--っ_
    }`ト、|,   /    l|: :|    〈=-O-〉   |: | |. │|         __xく  -‐=彡'
 \ | l| \   |     ||: :|    /\__∧  |: | |.  W    /\ l|  '´ ̄
    | l|   |\j     ||: :|   ./   ∧ l   |: | |  八    /\ │ レ'
    | l|   |  }ヽ     ||: :|  /   / | |   |: |ノ    }   /   |  | |

1000 :デフォルトの名無しさん:2011/10/04(火) 22:24:46.33
>>10000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

276 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)