[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 09:27 / Filesize : 208 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Rubyについて Part 30



1 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 11:47:53 ]
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

Ruby Home Page
www.ruby-lang.org/ja/

= 前スレ
Rubyについて Part 29
pc11.2ch.net/test/read.cgi/tech/1193668038/

過去スレ・関連スレは >>2-


435 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:21:03 ]
.map{|m|m.to_s}

436 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:23:05 ]
|m| って何の略?いや、気になったので

437 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:32:09 ]
method names か何かだろ
m 自体は method の m だと思う

「文字列かシンボルのどっち来るかわからん場合は to_s しとけ」という >>435 のアプローチは妥当

438 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:50:47 ]
>>434
> 今まで MyClass.instance_methods.include?('methodname') としていたのを
その書き方はそもそも効率が悪い。

MyClass.method_defined?(:methodname)


439 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:42:14 ]
>>425
「Scheme(or Lisp)に有って、Rubyに無い機能」であることは事実。
それがいいとか悪いとか言うつもりはない。

>>426
標準で構文木いじる方法がないってこと。
ParseTree は既存の文法でパースしたプログラムをいじることは
できても、既存の文法自体は拡張できない。

440 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:35:56 ]
javascriptのfunctionって最高じゃない?シンプルで。

rubyのproc、Proc.new、lambdaって何なの?同じようなのいくつも作って。馬鹿なの?

441 名前: [2008/02/09(土) 00:37:38 ]
pythonとRuby、そんなに変らん

442 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:01:24 ]
ECMAScript系はいいもんだね
サーバサイド実装も出て来てるし、今後RubyやPythonと比較されるユースケースが増えるかもなぁ。

現状では、利用形態がきっちり棲み分けてるから現実的に比べにくいかな。

443 名前:デフォルトの名無しさん [2008/02/09(土) 01:18:09 ]
functionは長いからfunかfnか\がいい。



444 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:25:21 ]
defで無名関数が定義できればいいのに。

445 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:27:43 ]
lengthかlength()かで迷うのはもうごめんだお

446 名前:デフォルトの名無しさん [2008/02/09(土) 01:30:37 ]
proc、Proc.new、lambdaを廃止して、全部defにしたら何か問題ある?

447 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:32:19 ]
メソッドとクロージャは違う

448 名前:デフォルトの名無しさん [2008/02/09(土) 01:33:40 ]
>>447
何が違う?具体的に。

449 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:35:02 ]
def: メソッド
proc、Proc.new、lambda:クローじゃ

でいいのかな?

450 名前:デフォルトの名無しさん [2008/02/09(土) 01:36:23 ]
>>449
だから、defでクロージャーも定義できるようにして何か問題があるかと聞いている。

現状がどうかなんて聞いていない。

451 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:37:43 ]
>>448
ブロックの外のローカル変数が見えるかどうか
あと無名関数なんて全然defineしてないのにdefって名前はさすがにどうかと

452 名前:デフォルトの名無しさん [2008/02/09(土) 01:40:06 ]
>>451
じゃあ、proc、Proc.new、lambda、defをobsoleteにして、全部funcにしたら何か問題ある?

453 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:42:17 ]
>>451
そんなこと言ったらlambdaなんて何の意味もない名前だろ。



454 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:45:08 ]
そういえば
proc,lambdaとProc.newじゃreturn等の挙動が変わるんだったな

455 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:46:30 ]
似て非なるものがゴチャゴチャあると紛らわしいから、functionにまとめてほしいな。

456 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:47:23 ]
Ruby1.9って反面教師であるはずのPerlに怪奇しつつあるよな
もっとシンプルで速度10倍くらい速くする方向に進歩して欲しい

457 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:54:05 ]
速度の話ではシンプルさよかeval捨てるか否かが優先されるかと。

そういや旧macromediaもeval捨てた矢先にActionScriptの速度上げたな

458 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:54:17 ]
関数が無い(ってことになってる)Rubyではfunctionってキーワードは採用されないだろうな

459 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:03:20 ]
>456
の「怪奇」があながち誤字に見えないから困る

460 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:07:38 ]
>>458
じゃあ、methodでいいよ。

461 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:05:24 ]
無名関数はスコープをどうするかが問題かな。
メソッド・Proc・ブロックを統一できればシンプルにはなるんだろうけど。

Rubyが将来シンプルになる見込みはないと思われるので、シンプルなサブセットを作って、
それに向けてYARVを最適化すればいいんじゃないかな。
組み込みクラスのメソッドの再定義を禁止するだけでも大幅に速くなると思うけど。

462 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:13:23 ]
do [名前] [|パラメータ|] 処理 end
が無名関数を返すようにして、
これでメソッド・Proc・ブロックを全部扱えるようにすればいい。

463 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:56:07 ]
お。



464 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:57:51 ]
ま。

465 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 04:29:01 ]
ECMAScript や Python は
public な(Rubyでいう)インスタンス変数が存在出来る。
そのお陰で、メソッドをあたかも
クロージャの入った public 変数のように扱える。

Ruby のインスタンス変数は全て protected 。
インスタンスの public はメソッドにしか許されていない。
メソッドとクロージャはハッキリ分かれてる。

そのへんの思想の違いじゃないかな?
Procとメソッドをシームレスに扱えるようにしても
Python や ECMAScript みたいにはスッキリしないと思う。
むしろ妙なパラドックスに陥りそう。

466 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 05:56:04 ]
> そのお陰で、メソッドをあたかも
> クロージャの入った public 変数のように扱える。
kwsk
gttkn

467 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:25:10 ]
例えば JavaScript ならこんな感じかな。

<script language="JavaScript">
function MyObject() {
this.method1 = function() { return "Hello"; }
}
var obj = new MyObject();
var func = obj.method1;
document.write(func());

function method2() { return "World"; }
obj.method2 = method2;
document.write(obj.method2());
</script>

468 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:40:45 ]
Python でも色々出来るが、メソッドと関数の
微妙な違いに苦しむかも知れんな。
型も違うから「あたかも」としか言えない。

class MyClass1:
    def method1(self):
        return 'Hello'

obj = MyClass1()
func = obj.method1
print func()

def method2():
    return 'World'
obj.method2 = method2
print obj.method2()

469 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:49:47 ]
>>438
thanks

470 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:26:34 ]
nukoup.nukos.net/img/13137.jpg

471 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:23:25 ]
factorial = def f(n)
         1 if n <= 0
         n*f(n-1) if n > 0
       end

factorial(10) #=> 3628800

こんな感じにしたい。

472 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:32:26 ]
5.times factorial

#=> 1
#=> 2
#=> 6
#=> 24
#=> 120

とか。

473 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:56:46 ]
proc、Proc.new、lambda、defを区別する意味ってあるの?
初心者の漏れには、特にproc、Proc.newが
よく分からない複雑怪奇なものにしか見えないんだけど;;



474 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:02:38 ]
Yコンビネータ使うとか。



475 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:40:01 ]
Yコンビネータは再帰のためのコンビネータであって、
lambdaの代わりにはならない。

procとlambdaは冗長ではある。Proc.newとは、似てるけど別物で、
まぎらわしいものがあれこれあるのはどうかという気はする。
(「Proc.new は、Proc#initialize が定義されていればオブジェクトの初期化の
ためにこれを呼び出します。このことを除けば、proc と同じです。」)

def は、確かに特別にそういうものがなくてもいいのかもしれない
けど、そうしちゃうと、クラスの文脈(*)に、

class Foo

  (*) ここ

  def foo()
    ……
  end
end

生にlambdaを書いて、それをModule#define_methodでインスタンスメソッド定義、
という、言語の内臓に触れるコードを書かせることになる。

class Bar
  define_method('bar', proc{
    ……
  })
end

こんな感じ。もしMatzがTOOWTDIを信奉してたらこうなってた、というか。

476 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:22:25 ]
>>471
定義されたfはどこに行っちゃうんだ?

477 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:26:01 ]
>>476
def〜endブロックのローカルスコープでいいだろ。

478 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:18:44 ]
>>475
> procとlambdaは冗長ではある。Proc.newとは、似てるけど別物で、
> まぎらわしいものがあれこれあるのはどうかという気はする。
> (「Proc.new は、Proc#initialize が定義されていればオブジェクトの初期化の
> ためにこれを呼び出します。このことを除けば、proc と同じです。」)

バージョンによって違うのかもしれないが、ブロックの中からreturnした時の
ふるまいが、Proc.newとprocは同じで、lambdaとは異なっている。

$ ruby --version
ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux]

479 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:21:06 ]
紛らわしい機能はobsoleteにしてほしいな。
同じことができるならどれかに集約してもらいたい。

480 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:28:56 ]
そんなことをしたらmap vs collect論争ができなくなるじゃないか。


481 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:35:25 ]
map/collectは元々Ruby以前からそれぞれの宗派が存在したらから別にいいよ。
でも、lambdaはともかく、proc、Proc.new、def endはRuby独自でしょ。
Ruby独自ならRubyの中で整理した方がいい。

482 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:57:03 ]
>>475 >>478 で、
def が無ければメソッド定義が、えらい不格好なものになるし、
Proc.new, proc, lambda は似てるけど、それぞれ違うということが
示されてるのは無視?

483 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:18:50 ]
Proc.new, proc, lambda はそれぞれ違うけど、
同じようなことしかしないから、集約した方がいいって話じゃないの。



484 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:00:09 ]
> Procでreturnするとfooから抜けちゃって関数内関数として使えません(> <)
>
> def foo
> boo = Proc.new do
> 100.times do |i|
> 100.times do |j|
> if i == 50 && j == 50
> return
> end
> end
> end
> end
> boo.call
> p "foo" # 実行されず
> end
>
> foo

この例の場合、Proc.new なら駄目なわけだが、
lambda なら期待通り動く。

procがどちらのように動くかはバージョンによるらしい。

どちらかに絞れるのかな? これ。

485 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:03:37 ]
そういう多段の脱出のために catch 。

486 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:04:47 ]
lambda、proc、Proc.newの仕様ってそれぞれきっちり決められてる?
リファレンスマニュアルにはあまり詳細に書いていないようだけど。
ソース読めとか言わないよね?

487 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:07:29 ]
>>484
lambdaでも変わらない希ガス。
ruby 1.8.6 (2007-09-24 patchlevel 111)

def foo
  boo = lambda do
    100.times do |i|
      100.times do |j|
        if i == 50 && j == 50
          return
        end
      end
    end
  end
  boo.call
  p "foo" # 実行されず
end

foo


488 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:10:17 ]
言語使用もない糞言語,おまえらよく使う気になるよなあ(www

489 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:11:02 ]
>>487
インデント崩さずにどうやって書き込むの?

490 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:11:24 ]
>>489
全角スペース

491 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:14:12 ]
>>489
&nbsp;

492 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:17:16 ]
$ cat hoge.rb
def foo
 Proc.new{return"Proc.new"}.call
 return "foo"
end

def bar
 proc{return"proc"}.call
 return "bar"
end

def baz
 lambda{return"lambda"}.call
 return "baz"
end

p foo ; p bar ; p baz

$ ruby --version
ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux]
$ ruby hoge.rb
"Proc.new"
"proc"
"baz"

$ ruby18 --version
ruby 1.8.6 (2007-12-02 patchlevel 5000) [i686-linux]
$ ruby18 hoge.rb
"Proc.new"
"bar"
"baz"

493 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:19:19 ]
インデントてすと

def foo
 bar

&nbsp;



494 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:23:40 ]
>>492
1.8.6では、Proc.new≠proc=lambda
1.9では、Proc.new=proc≠lambda
ってこと?

そもそも、returnに対する振る舞いの違いだけで、分けなければいけないようなものなのか?

495 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:33:28 ]
なぜこうなるのかわかりません(> <)

def foo
  Proc.new{1.times{return"Proc.new"}}.call
  return "foo"
end

def bar
  proc{1.times{return"proc"}}.call
  return "bar"
end

def baz
  lambda{1.times{return"lambda"}}.call
  return "baz"
end

p foo ; p bar ; p baz

#"Proc.new"
#"proc"
#"lambda"

496 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:40:12 ]
>>495
「どう」書いたら「どう」なることを期待してるわけ?

「なぜ」そうなるかはソースを見れば書いてある。

497 名前:495 mailto:sage [2008/02/09(土) 18:42:29 ]
1.timesをかましただけでlambdaの挙動が変わるのはなぜですか?lambdaなら
returnしてもbazから返らないと教わったのにその通りになってません。

498 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:43:36 ]
>>496
出たw
「「「「「「「「ソースを見れば書いてある」」」」」」」」

499 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:44:23 ]
Proc.new{} == メソッドに渡すブロック

500 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:45:14 ]
ソースったって、rubyという言語のインタプリタの単なる1実装のソースに過ぎないんだろ。
rubyがまともな言語なら言語仕様をきちんと示すべきなんだけどな。

501 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:45:26 ]
学生ってC#かjava使って宿題してんじゃないの?
なんでこんなにわいてんの?新人がゆとりなだけか?

502 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:47:27 ]
>>501
あーこのスレだけ見てるとわからんな

503 名前:デフォルトの名無しさん [2008/02/09(土) 18:48:37 ]
ソースを見る人次第でどんな風にも動作するあいまいな言語っていらないよね。




504 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:49:39 ]
もうブロック内でreturn使うの諦めようぜ
バージョン間での非互換や、書き方による差異でゴチャゴチャになってるんだから

505 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:49:42 ]
もとはPythonスレで出た流れを引き取った格好か

506 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:52:24 ]
>>503
ソースにはあいまい性はないよ。書いてある通りに動くのだから。
問題は、作者が開発しているインタプリタのソースが唯一の厳密な仕様書になっていること。

まともな言語なら、ソースではなく初めに仕様書ありきであるべき。

507 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:53:45 ]
>>505
??
この話題を始めたのは俺だが、Pythonスレなんて見たこと無いが。

508 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:54:52 ]
>>504
return関係は基本は一応「見たまま」なんだけどね
論理的に動作を追おうとすると変なことに

509 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:57:56 ]
言語仕様を決めて、それに従えば問題ないんだけどな。

510 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:23:51 ]
なぜ、と問われたら何だって「ソースにそう書いてある」としか
答えられないんじゃないかと。

標準仕様がある言語なら、自然言語(まれに形式言語)で、
仕様書という「ソースコード」が書いてある、ってだけだし、それでも
それを実装した処理系の変な挙動について「なぜ」と問われれば、
やはり「ソースを見ろ」としか答えられないが。

しかし、ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux] だと
1.timesをかましてもbazから返らないんだよなぁ(笑)

511 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:27:56 ]
>>510
なら、ソースのどこにどう書いてあるのか説明しろよ。
「ソースを見ろ」なんて全く有用な情報が無いレスなら書き込む必要は無い。

512 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:28:57 ]
「ソースを見ろ」==「デバッグしろ」

513 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:30:21 ]
標準仕様がないのに、何をどうデバッグすればいいんだ?
どのように動作するのがバグの無い状態なんだ?



514 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:43:31 ]
元々は関数内関数(クロージャ)が欲しい、ってことだろ?

>>504 で結論が出てるじゃん。
要は、returnは「メソッドから戻る」ものだから、ブロックから値を
戻したいんだったら、returnは使うなってことでFAだろ?

515 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:44:58 ]
じゃあエラーではじけよ

516 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:48:37 ]
何故returnを「ブロックとメソッドから戻る」と定義できないんだろう。

517 名前:デフォルトの名無しさん [2008/02/09(土) 19:55:41 ]
>>514
じゃあ値を返すにはどうしたらいいんだよ。


518 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:56:08 ]
>>516
eachみたいにブロック付きメソッドを制御構造もどきとして使いたいからじゃない?

519 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:56:20 ]
>>516
メソッド定義の中のブロックの中でreturnしたときとか
Proc生成をメソッド内以外で行ったときとかに超紛らわしいからだろ

520 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:57:44 ]
>>517
breakかcatch&throwを使ってください

521 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:01:27 ]
一応、メソッドから抜けてるのにreturnしようとするとErrorになる

$ cat hoge.rb
def foo
  Proc.new{return}
end

foo.call

$ ruby --version
ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux]
$ ruby hoge.rb
hoge.rb:2:in `block in foo': unexpected return (LocalJumpError)
        from hoge.rb:5:in `call'
        from hoge.rb:5:in `<main>'

$ ruby18 --version
ruby 1.8.6 (2007-12-02 patchlevel 5000) [i686-linux]
$ ruby18 hoge.rb
hoge.rb:2:in `foo': unexpected return (LocalJumpError)
        from hoge.rb:5:in `call'
        from hoge.rb:5

リファレンスマニュアルにはreturnは「式の値を戻り値としてメソッドの実行を終了します。」
とあるから、単にブロックから戻るだけだったらおかしい、と主張はできるかな。

522 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:01:43 ]
>>518 >>519
単にreturnでブロックから復帰して、その引数が呼び出し元(yieldやProc.new)に戻ればいいだけじゃないの。
何が紛らわしいのかわからない。

523 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:04:27 ]
Rubyのブロックはreturnに曖昧さがあるってことでFA?



524 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:07:00 ]
>>517
> じゃあ値を返すにはどうしたらいいんだよ。

ブロック内で最後に評価した式の値がcallとかyieldの返す値になる

525 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:10:30 ]
ブロックからの脱出にbreakと同様にreturnが使えても全く問題ないと思うのだが。

526 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:34:38 ]
>>524
goto実装すればOK。

func = Proc.new do
  result = -1
  if (failed)
    result = -2
    goto EXIT
  end
...
EXIT:
  result
end

527 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:42:54 ]
2.0でちゃぶ台返しマダー?

528 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:51:23 ]
>>522 >>525
breakはwhileやuntilを抜けるためにも使われる、ということを忘れてないか
whileの中でreturnするとwhileを抜けた! なんて動作はいくらなんでも困る

529 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:57:08 ]
>>528
breakは最も内側のブロックからの脱出、
returnはメソッド、およびlambda、proc、Proc.newの最も外側のブロックからの脱出
と定義して問題あるのかな。

530 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:03:25 ]
あー、nil に追加はマズイや。
Object.new で。

531 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:04:24 ]
誤爆

532 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:35:09 ]
>>529
> breakは最も内側のブロックからの脱出、

breakはbreakで、ブロックではなくイテレータから抜けてくれないと困る

$ cat hoge.rb
def once # 1 回だけ実行するイテレータ
  yield
  p "2"
end

def foo
  once{p "1"; break}
  p "3"
end

foo

$ ruby hoge.rb
"1"
"3"

533 名前:デフォルトの名無しさん [2008/02/10(日) 00:09:58 ]
emacsにruby-modeを追加する方法がわかりません。
詳しく説明してるサイトを教えてください。



534 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 00:19:16 ]
>>533
いささかスレ違い。emacsスレのほうがいいと思うが…

load-pathにあるディレクトリに置いて、
~/.emacsなりuser-init-fileなりに以下を追加。

(autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files" t)
(set-alist 'auto-mode-alist "\\.rbw?\\'" 'ruby-mode)
(set-alist 'interpreter-mode-alist "ruby" 'ruby-mode)


535 名前:デフォルトの名無しさん [2008/02/10(日) 00:28:48 ]
1.9からHashが順序保存か…。
けっこうこだわりないんだな。
言語仕様で保証しないところがチキンというか、
PHPで4→5で動作保証しないこともネチネチ言ってるMatzがな…。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<208KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef