遞增交叉,d和c++,誰更牛逼?

import std.stdio;
import std.range;

auto interspersed(R, D)(R r, D delim) {
  struct MyRoundRobin {
    bool doDelim = false;

    auto empty() {
      return r.empty;
    }

    auto front() {
      return (doDelim ? delim : r.front);
    }

    auto popFront() {
      if (!doDelim) {
        r.popFront();
      }
      doDelim = !doDelim;
    }
  }

  return MyRoundRobin();
}

void main(){
  auto r = 10.iota.interspersed(42);
  writefln("%(%s %)", r);
}

這是d,我看不懂,爲什麼要這樣寫.
下面這是c++.我寫的.

構 遞增交叉{//有向量,所以就放在構裏面了
    向量<>;
    空 交叉(整 增,整 j){//從0到增加,中間混有j.
        清理();(整 i=0;i<;i++)豎壓(,i,j);.出後();
    }
};

感覺我的,比他的簡單多了.又清楚又明白.
閉包,可以指向類/構.方法().
函數指針轉換爲委託,調用std.functional.toDelegate
使用閉包,可以訪問域內變量.

    auto fn_1 =(int x){return x + y;};
    auto fn_2 =(int x)=> x + y;//都是閉包.

閉包更靈活,強大.但有個上下文指針.
閉包作用:當函數不是對象方法時(因此不會出現在類定義中),需要保留函數中變量域,這樣垃圾收集器不會丟了他們

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章