Go Documentation 輪読会 #21
前回: Go Documentation 輪読会 #20
Scrapboxへの参加リンク
こちら
開催概要
Slack
Gophers Slack の doc-reading-ja チャンネルを使います
Connpass: https://gospecreading.connpass.com/
Google Meet: ConnpassにURLを記載しています
タイムテーブル
19:00 ~ 輪読開始
20:00 ~ 10分休憩
20:10 ~ 再開
21:00 終了
今日読むもの
https://github.com/golang/go/issues/61405
https://research.swtch.com/coro
読んでおくといいかも
https://github.com/koron/techdocs/blob/main/coroutines-for-go/memo.md
Takuya Ueda20:08
gotip download 510541でrange over intergerうごいた
MakKi D20:09
そうか、pythonだとyieldが関数内にあるかどうかでgeneratorになるかどうか決まるってことは、yieldを他の場所(例えばネストした関数の中)ですることが構造的に不可能なのか。
のびしー20:10
ジェネレータの中から普通に関数を呼ぶことはできるし、ジェネレーターオブジェクトを作ってさらにyield fromすることはできる。関数呼び出しを書いた後でその関数の中にyield文を書くこともできるが、それをした時点で関数呼び出しではなく単にジェネレータオブジェクトを作って何もしない文に変わるっぽいですね
このCLUプログラムは、バイナリーツリーのインオーダー走査を実装しています。
まず始めに、CLUは1974年から1975年にかけてMITのBarbara Liskovによって設計されたプログラミング言語であり、他の多くのプログラミング言語で広く採用されている多くの機能を導入しました。このプログラムでは、'cvt'はCLUで抽象データ型を扱うための概念で、Cluster Value Typeを表しています。
コードを詳しく見ていきましょう:
1. iterというキーワードはこれがイテレータ関数であることを示しています。visitと呼ばれ、型cvt(抽象型)の1つのパラメータtを取り、intを生成します。
2. 関数内部には、型スイッチの役割を果たすtagcaseステートメントがあり、ノードtの型を切り替えています。
3. 2つのケースがあります:
- empty:これは再帰のベースケースで、何もせず(;によって示されています)、空のノードに達したことを意味し、処理すべきデータはありません。
- non_empty