>280
二重ループの部分を関数内関数にする
def main():
def foo():
for i in xrange(10):
for j in xrange(10):
if i == j == 5:
print "found"
return
print "not found"
foo()
main()
for i in xrange(10):
for j in xrange(10):
if i == j == 5:
break
else:
continue
break
print i, j
>>> import operator
>>> map(operator.itemgetter(1), [[1,2],[3,4],[5,6]])
[2, 4, 6]
主部省略だけで文が読めなくなる低能はどこですか
2.6〜2.9って生まれることも許されないのが確定っスか?
>>286 > ここまで解説してもまだ分からない?
うん、まったくわからない。説明してくれる?
とりあえず、こちらが実際に「ちっとも忘れていない」ことを「忘れるな」と言われても、
ああ、どっかで誤読してるんだなこの人、としか思わないわけで。
耳が悪いと頭も性格も悪くなるのか。
気を付けないと。
>297
2.6はリリースされることは決まっているが
>>297 2.6 といっしょに 3.0 が出て
2.7 といっしょに 3.1 が出て
2.8 といっしょに 3.2 が出て
2.9 といっしょに 3.3 が出て
くらいまでは 2.x 系列が使われ続けるだろうからむしろ 2.9 までで足りるのかを心配した方がいいよ
小数点以下が16進で
2.10
2.11
2.12
2.13
2.14
2.15
までいくだろ
2.9は出ない、に10000グーグル
306 :
297:2008/02/08(金) 23:40:16
なるほどFirefoxみたいな感じに並行メンテされるのね。
つか、2.9じゃ桁足りない説ワロタ。むしろ近いのはIPv4/6か。
307 :
272:2008/02/09(土) 04:09:57
そうか。
トヨタが筑豊に技術者を集めるのは、技術を奪い取って剥ぎ取って追い出すためか。
トヨタは泥棒が得意だからな。
それはそうと、松並議員が相撲部屋に説教たれてたのは何のギャグだろ。
あいつ痴漢した相手が逆らったからって殴り倒して地下鉄でひき殺させようとした殺人未遂犯のくせして。
写真うpしちゃうぞコラ。
308 :
デフォルトの名無しさん:2008/02/09(土) 08:34:40
>>308 へ?みやすくなるならいいじゃん。
ネストした関数の何が問題なのさ?
310 :
デフォルトの名無しさん:2008/02/09(土) 08:54:31
>>309 ループを基準に関数化とか・・・
gosubみたいな引数を伴わない関数でもあるんならいいけどね。
短くするための関数化なら、普通にエディタで折りたためば良いと思うよ。
それほど大規模なやつでなくてもいまどきのは折りたためるの結構あるし。
>>310 引数無しのネスト関数で何の問題があるの?
ループ内のまとまった処理を関数としてまとめることに
問題があるとは思えないんだけど。
なんかフラットな構造の関数に慣れてるだけじゃないの?
呼ぶ回数にもよるが、インライン展開とか無いなら、
関数呼び出しのコストが無駄になるかもね
関数の中身がよほどスカスカでないかぎり、
関数呼び出しがボトルネックになることは
まずないと思うがなあ。
314 :
デフォルトの名無しさん:2008/02/09(土) 13:06:47
>>308 関数化した方が処理が抽象化されて再利用性が高まる。
テストもしやすくなるしね。
パフォーマンスのことを気にするのは,その後でしょ。
>なんかフラットな構造の関数に慣れてるだけじゃないの?
Pythonによく似ていて関数内関数のない言語。それはRu(ry
えっ,Rubyって関数ローカルな関数作れないの?
関数内部に関数を定義することはできるが、関数外部に定義したのと同じ効果
しかないので無意味。
マジか?名前かぶったらどうなるんだ?
上書きされる(つД`)
def boo
p "boo"
end
def foo
def boo
p "boo2"
end
boo
end
foo # boo2
boo # boo2
>>318 「あと」に実行されたメソッド定義で上書きされる
というか、def methodname という書式は所属するクラスにメソッドを定義する効果しかない
勝手に「関数内関数だぜー」とか勘違いして使っておいて文句ゆーな
いわゆる関数内スコープの関数が欲しければ「一連の手続き」をオブジェクトとして持ち歩けるProc使え
>勝手に「関数内関数だぜー」とか勘違いして使っておいて文句ゆーな
じゃ、なんで関数内に関数を書けるように変更されたんでつか?
>>320 それ、勘違いというより、コンパイラで弾くべきエラーなんじゃ…
設計ミスちゃうんかと
That's Matz quality!
>>321-322 動的にメソッドを追加できるというメリット…まあ、注意深く使えばメリットになるものがなくもない
「Hoge#levelupを実行するとHogeクラスに10個くらいメソッドが追加される」とかそういうやつ
「メソッド定義(Rubyには関数はない)はどこにでも書ける」という単純な事象の単純な結果に過ぎない
だからProc使えよ
def foo
helloworld = Proc.new{ puts 'Hello, World!'}
helloworld.call
end
helloworld ←エラー
foo ← Hello, World!
説教泥棒という言葉を思い浮かべてしまった。
>>326 まとめると、まっつんの設計ミスということでOK?
Rubyって,よく考えずに追加した浅はかな仕様で自爆してること多くね?
まあそろそろRuby関連スレでやってくれ
>>328 > この定義のある場所にメソッドを定義します。
> すなわち、クラス/モジュール定義中ならばそのクラス/モジュールのメソッドを定義します。
> トップレベルならばどこからでも呼べるメソッドを定義します。
という def の説明があるんで、def の中に def を書いたらどうなるかは…
やっぱ、そのクラスにメソッドが定義される以上の動作はし得ないと思うぞ
メソッドにメソッドを定義することはできない
既存言語を経験した人が def をネストしてハマるのはまあ通過儀礼のような気もせんでもないが
それで Proc とかそのへんを使い始めてくれればそれで問題ないかと
まあ、いずれにしても使わないんですけどね、Rubyなんて。
まあPythonスレだしな
少なくとも言語設計としては大失点だな。
スレタイを読めない奴は黙れ
あれほど酷くは無い。なんつったっけ、P(ry
>>336 まあ目くそ鼻くそだけどな。
くそ同士だから、お互い気になって仕方がないんだろ。
なぜruby厨がそこら中のスレで鼻摘まみ者になっているか、よくわかった。
とりあえず、NGワード Proc を設定 www
Procってあれだろ、カッコなしでメソッド呼び出しできる仕様を追加してしまったがために、
呼び出し可能オブジェクトを代入できなくなって、苦し紛れに作った仕様なんだよな。
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
だからRubyの話はRubyスレでやれヴォケ
Matzは多言語の悪口を言う前に
スタックの使い方について勉強した方がいいな(www
344 :
デフォルトの名無しさん:2008/02/09(土) 18:00:44
>>341 ものすごいfoolなfooですね。
Rubyってやっぱクソだ
>>340 Ruby作者の頭イカレすぎ
子供の作文に見せかけたなでしこで書かれた破壊プログラムにも全部消されたしクソ杉。
なんにしてもRubyみたいな糞言語は使わないんだけどね。
細かい言語仕様ひとつで糞言語って大げさ。
ってかアンチrubyスレいけ。いい加減しつこい。
細かい言語仕様て、決まってないと安心して使えないアル。では安心して
使える言語Pythonの話題をどうぞ.
>1.8.6では、Proc.new≠proc=lambda
>1.9では、Proc.new=proc≠lambda
なんか勝手に変えられることもあるらしい(wwww
なにこの糞言語(wwwwwww
報告はいいから
Ruby話の続きは
>>345でまとめようぜ
興味あるPython使いは勝手に覗きに来る事だろうて