- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
452 :デフォルトの名無しさん[]:2016/12/10(土) 03:10:58.12 ID:jJfPnpDE - static IDisposable SubscribeTracer<T>(this IObservable<T> source, string name) {
var disposer = source.Subscribe(value => Console.WriteLine("{0} : OnNext({1})", name, value)); return disposer; } このプログラムは一体なんなのだ。全然わからない。そこで理解しようと思ってラムダ部分を 関数に置き換えてみると void ramda(string value ){ Console.WriteLine("{0} : OnNext({1})", name, value); }; だあーー、nameを持ってこれない。持ってくるとすればグローバルにするしかない。 ラムダ関数は単なる匿名関数というだけでなくて、こういう便利な機能があるんだと初めて 分かった。つまり普通の関数にするとスコープを閉じるがラムダにするとスコープが開く。 オープンスコープ機能だ。ダダだい発見だ。と思ってほかにも気が付いた奴がいないかと 「ラムダ関数はスコープを開く」でググってみると、無い。俺の発見だ。w
| - C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
453 :デフォルトの名無しさん[]:2016/12/10(土) 03:13:11.24 ID:jJfPnpDE - MSの説明 ラムダ式(C#プログラミングガイド)
ラムダ式は、デリゲート型または式ツリー型を作成するために使用できる匿名関数です。 ラムダ式を使用すると、引数として渡したり関数呼び出しの結果値として返すことができるローカル関数を記述できます。 ラムダ式は、LINQ クエリ式を記述する場合に特に便利です。 以下省略(間違いがおおすぎ、、、、) 1行目から間違ってるよな。W デリゲート型をつくるのは delegate int del(int i); この部分で あって del myDelegate = x => x * x; これではないな。 2行目も間違ってるよな。w ローカル関数ってのはC#7(VS2017)からなのでまだサポート ないだろ。
| - C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
454 :デフォルトの名無しさん[]:2016/12/10(土) 04:49:24.16 ID:jJfPnpDE - delegate void del(string valule);
static string _name; static IDisposable SubscribeTracer<T>(this IObservable<T> source, string name) { _name = name; //var disposer = source.Subscribe(value => Console.WriteLine("{0} : OnNext({1})", name, value)); del aa; aa= eventdo; var disposer = source.Subscribe( aa(val ) ); } static void eventdo(string value){ Console.WriteLine("{0} : OnNext({1})", _name, value); } 452をDelegateで書き換えてみたがコンパイルエラーになる。なんでだ?
| - C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
456 :デフォルトの名無しさん[]:2016/12/10(土) 09:33:27.42 ID:jJfPnpDE - すまん。454は自己解決した。
そもそもIObservableをまったく理解してなかった。
|
|