今天使用新的feature為Vczh Free Script 2.0寫了一個collection庫
Collection庫裡面的所有容器都實現了操作符過載,Set容器更是過載了+、-、*、>、<、>=、<=、==和!=。所有容器都過載了#(用於獲取長度的單目字首操作符)和[](類似於C++的operator[])。
這份程式碼使用Collection.FreeMap弄了一個可以自動新增類成員的表,可以大大簡化一些操作。雖然實際上可能並不是很常用,整個Collection裡面,只有FreeMap是用來做廣告的。嘿嘿。
1 _run(_global,readfile(apppath++"Collections.free"));
2 using Collections;
5 {
6 internal=multifunc
7 {
8 func({value}name,{value}v,prefix)
9 {
10 writeln(prefix,name,"=",v);
11 }
12 func({value}name,{FreeMap}m,prefix)
13 {
14 writeln(prefix,name," {");
15 for(k in m.__Keys())
16 internal(k,_getvar(m,k),prefix
17 writeln(prefix,"}");
18 }
19 func(name,unknown,prefix)
20 {
21 writeln(prefix,name,"=<UNKNOWN>");
22 }
23 };
24 internal("a",m,"");
25 };
26 27 a=FreeMap.new();
28 a.Name="IDE Set";
29 a.VC.Language="C++";
30 a.VC.Owner="Microsoft";
31 a.Delphi.Language
32 a.Delphi.Owner="Codegear";
33 a.Print=func(this)
34 {
35 return func()
36 {
37 Print(this);
38 };
39 }(a);
40 41 a.Print(); 以下是輸出的結果: 1 a {
2 Delphi {
3 Language=Object Pascal
4 Owner=Codegear
5 }
6 Name=IDE Set
7 Print=<UNKNOWN> 8 VC {
9 Language=C++10 Owner=Microsoft
11 }
12 } 最後就是整個Collection庫的程式碼了,一共1463行,全部使用Vczh Free Script 2.0實現。 1 /**********************************************************
2 異常:
3 OutOfRangeExpcetion :越界
4 KeyNotFoundException :鍵不存在
5 EmptyContainerExpcetion :空容器異常
6 List:列表
7 constructor() :構造空列表
8 constructor({array}Array) :根據陣列構造列表
9 Data() :獲得內部陣列
10 Add(Object) :新增物件
11 AddDistinct(Object) :新增不重複的物件
12 AddArray({array}Array) :新增陣列中的物件
13 AddArrayDistinct({array}Array) :新增陣列中的物件
14 Insert(Index,Object) :插入物件
15 InsertDistinct(Index,Object) :插入不重複的物件
16 InsertArray(Index,{array}Array) :新增陣列中的物件
17 InsertArrayDistinct(Index,{array}Array) :新增陣列中的物件
18 Remove(Index) :刪除指定位置的物件
19 Remove({array}Indices) :刪除指定位置的一些物件
20 Remove(Index,Count) :刪除指定部分的物件
21 RemoveIf(Predicate) :刪除滿足條件的物件
22 RemoveObject(Object) :刪除物件
23 RemoveObjectAll(Object) :刪除指定物件的等價物件
24 RemoveObjects({array}Array) :刪除一些物件
25 RemoveObjectsAll({array}Array) :刪除指定的物件陣列的等價物件
26 Clear() :刪除全部物件
27 IndexOf(Object) :尋找物件的第一個
28 IndicesOf(Object) :尋找物件的所有位置
29 Exists(Object) :檢查物件是否存在
30 __getelem__(Index) :根據位置獲得物件
31 __setelem__(Index,Value) :根據位置設定物件
32 __len__() :求長度
33 SortedList:有序列表
34 constructor() :構造空列表
35 constructor({array}Array) :根據陣列構造列表
36 Data() :獲得內部陣列
37 Add(Object) :新增物件
38 AddDistinct(Object) :新增不重複的物件
39 AddArray({array}Array) :新增陣列中的物件
40 AddArrayDistinct({array}Array) :新增陣列中的物件
41 Remove(Index) :刪除指定位置的物件
42 Remove({array}Indices) :刪除指定位置的一些物件
43 Remove(Index,Count) :刪除指定部分的物件
44 RemoveIf(Predicate) :刪除滿足條件的物件
45 RemoveObject(Object) :刪除物件
46 RemoveObjectAll(Object) :刪除指定物件的等價物件
47 RemoveObjects({array}Array) :刪除一些物件
48 RemoveObjectsAll({array}Array) :刪除指定的物件陣列的等價物件
49 Clear() :刪除全部物件
50 IndexOf(Object) :尋找物件的第一個
51 IndicesOf(Object) :尋找物件的所有位置
52 Exists(Object) :檢查物件是否存在
53 __getelem__(Index) :根據位置獲得物件
54 __len__() :求長度
55 Stack:堆疊
56 constructor() :構造空堆疊
57 constructor({array}Array) :根據陣列構造堆疊
58 Data() :獲得內部陣列
59 Push(Object) :推入堆疊
60 Pop() :彈出堆疊
61 Top() :返回棧頂
62 Clear() :刪除全部物件
63 IndexOf(Object) :尋找物件的第一個
64 IndicesOf(Object) :尋找物件的所有位置
65 Exists(Object) :檢查物件是否存在
66 __getelem__(Index) :根據位置獲得物件
67 __len__() :求長度
68 Queue:佇列
69 constructor() :構造空列隊
70 constructor({array}Array) :根據陣列構造列隊
71 Data() :獲得內部陣列
72 Enquque(Object) :推入列隊
73 Dequque() :彈出列隊
74 Top() :返回列隊頂
75 Clear() :刪除全部物件
76 IndexOf(Object) :尋找物件的第一個
77 IndicesOf(Object) :尋找物件的所有位置
78 Exists(Object) :檢查物件是否存在
79 __getelem__(Index) :根據位置獲得物件
80 __len__() :求長度
81 Set:集合
82 constructor() :構造空列表
83 constructor({array}Array) :根據陣列構造列表
84 Data() :獲得內部陣列
85 Add(Value) :新增物件
86 AddArray({array}Array) :新增陣列中的物件
87 Remove(Value) :刪除物件
88 RemoveIf(Predicate) :刪除滿足條件的物件
89 Clear() :刪除全部物件
90 Exists(Value) :檢查物件是否存在
91 __len__() :求長度
92 __getelem__(Index) :根據位置獲得物件
93 __add__({Set}a,{Set}b) :並
94 __mul__({Set}a,{Set}b) :交
95 __sub__({Set}a,{Set}b) :差
96 __lg__({Set}a,{Set}b) :a包含b
97 __sm__({Set}a,{Set}b) :b包含a
98 __elg__({Set}a,{Set}b) :a包含或等於b
99 __esm__({Set}a,{Set}b) :b包含或等於a
100 __equ__({Set}a,{Set}b) :a與b相等
101 __neq__({Set}a,{Set}b) :a與b不相等
102 ReadonlyList:只讀列表
103 constructor({List}List) :構造只讀表
104 constructor({SortedList}List) :構造只讀表
105 constructor({ReadonlyList}List) :構造只讀表
106 constructor({Stack}List) :構造只讀表
107 constructor({Queue}List) :構造只讀表
108 constructor({Set}List) :構造只讀表
109 constructor({array}List) :構造只讀表
110 Container() :內部容器
111 Internal() :內部資料,如果使用陣列建立ReadonlyList的話則返回一個數組
112 Data() :內部陣列
113 IndexOf(Object) :尋找物件的第一個
114 IndicesOf(Object) :尋找物件的所有位置
115 Exists(Object) :檢查物件是否存在
116 __getelem__(Index) :根據位置獲得物件
117 __len__() :求長度
118 Clone() :構造跟構造時的輸入同類型的表的ReadonlyList包裝
119 Map(Transformer) :Clone後把列表中的所有東西使用Transformer轉換
120 Filter(Predicate) :Clone後保留通過Predicate的物件
121 All(Predicate) :看是否所有物件都能通過Predicate
122 Any(Predicate) :看是否存在能通過Predicate的物件
123 Find(Predicate) :返回所有能夠通過Predicate的物件的位置
124 Get(Indices) :Clone後保留Indices中指定的物件
125 FoldLeft(Operand,Operator) :使用Operator對Operand++List進行左結合計算
126 FoldRight(Operand,Operator) :使用Operator對Operand++List進行右結合計算
127 MapPair:鍵值對
128 Map:表
129 constructor() :構造空表
130 constructor({List}Pairs) :通過MapPair列表構造表
131 Keys() :獲得鍵表
132 Values() :獲得值表
133 Pairs() :獲得鍵值表
134 Add(Key,Value) :新增項
135 Remove(Key) :刪除項
136 RemoveIf(Predicate) :刪除滿足條件的物件,使用MapPair進行驗證
137 Clear() :刪除全部物件
138 Exists(Key) :檢查鍵是否存在
139 __getelem__(Key) :根據鍵獲得值
140 MultiMap:多值表
141 constructor() :構造空表
142 constructor({List}Pairs) :通過MapPair列表構造表
143 Keys() :獲得鍵表
144 Values() :獲得值表
145 Pairs() :獲得鍵值表
146 Add(Key,Value) :新增項
147 AddDistinct(Key,Value) :新增不重複項
148 Remove(Key) :刪除值的所有項
149 RemovePair(Key,Value) :刪除指定項
150 RemovePairAll(Key,Value) :刪除與指定項等價的所有項
151 RemoveIf(Predicate) :刪除滿足條件的物件,使用MapPair進行驗證
152 Clear() :刪除全部物件
153 Exists(Key) :檢查鍵是否存在
154 Exists(Key,Value) :檢查鍵值是否存在
155 __getelem__(Key) :根據鍵獲得值
156 FreeMap:自由物件,使用“.”而不是“[]”來獲取表的物件
157 constructor() :構造空表
158 __get__(Name) :獲取物件
159 __set__(Name,Value) :設定物件
160 __Keys() :獲取物件名錶
161 __Exists(Name) :檢查物件是否存在
162 __Remove(Name) :刪除物件
163 其他 :直接訪問物件
164 **********************************************************/ 165 Collections=namespace 166 {
167 fixed OutOfRangeException=class()
168 {
169 local Message="";
170 local constructor=func({value}m)
171 {
172 Message=m;
173 };
174 };
175 fixed KeyNotFoundException=class()
176 {
177 local Message="";
178 local constructor=func({value}m)
179 {
180 Message=m;
181 };
182 };
183 fixed EmptyContainerException=class()
184 {
185 local Message="";
186 local constructor=func({value}m)
187 {
188 Message=m;
189 };
190 };
191 192 /**********************************************************
193 List
194 **********************************************************/ 195 196 fixed List=class()
197 {
198 local Data=null;
199 local Add=null;
200 local AddDistinct=null;
201 local AddArray=null;
202 local AddArrayDistinct=null;
203 local Insert=null;
204 local InsertDistinct=null;
205 local InsertArray=null;
206 local InsertArrayDistinct=null;
207 local Remove=null;
208 local RemoveIf=null;
209 local RemoveObject=null;
210 local RemoveObjectAll=null;
211 local RemoveObjects=null;
212 local RemoveObjectsAll=null;
213 local Clear=null;
214 local IndexOf=null;
215 local IndicesOf=null;
216 local Exists=null;
217 local __len__=null;
218 local __getelem__=null;
219 local __setelem__=null;
220 221 local constructor=func()
222 {
223 local Items=[];
224 225 Data=func()
226 {
227 return Items;
228 };
229 230 Add=func(Object)
231 {
232 Items[#Items:0]=[Object];
233 returnthis;
234 };
235 236 AddDistinct=func(Object)
237 {
238 if(!Exists(Object))
239 Add(Object);
240 returnthis;
241 };
242 243 AddArray=func({array}Array)
244 {
245 Items[#Items:0]=Array;
246 returnthis;
247 };
248 249 AddArrayDistinct=func({array}Array)
250 {
251 for(i in Array)
252 AddDistinct(i);
253 returnthis;
254 };
255 256 Insert=func({int}Index,Value)
257 {
258 if(Index<0|| Index>#Items)
259 throw(OutOfRangeException.new("下標越界,長度:"++#Items++",下標:"++Index++"。"));
260 Items[Index:0]=[Value];
261 returnthis;
262 };
263 264 InsertDistinct=func({int}Index,Value)
265 {
266 if(Index<0|| Index>#Items)
267 throw(OutOfRangeException.new("下標越界,長度:"++#Items++",下標:"++Index++"。"));
268 if(!Exists(Value))
269 Items[Index:0]=[Value];
270 returnthis;
271 };
272 273 InsertArray=func({int}Index,{array}Value)
274 {
275 if(Index<0|| Index>#Items)
276 throw(OutOfRangeException.new("下標越界,長度:"++#Items++",下標:"++Index++"。"));
277 Items[Index:0]=Value;
278 returnthis;
279 };
280 281 InsertArrayDistinct=func({int}Index,{array}Value)
282 {
283 if(Index<0|| Index>#Items)
284 throw(OutOfRangeException.new("下標越界,長度:"++#Items++",下標:"++Index++"。"));
285 for(i in Value)
286 if(!Exists(i))
287 {
288 Items[Index:0]=[i];
289 Index=Index+1;
290 }
291 returnthis;
292 };
293 294 Remove=multifunc
295 {
296 func({int}Index)
297 {
298 if(Index<0|| Index>=#Items)
299 throw(OutOfRangeException.new("下標越界,長度:"++#Items++",下標:"++Index++"。"));
300 Items[Index:1]=[];
301 returnthis;
302 }
303 func({array}Indices)
304
相關推薦
今天使用新的feature為Vczh Free Script 2.0寫了一個collection庫
自從可以過載除了賦值以外的所有操作符以後,我突然發現原來【將自己寫的容器跟foreach語句結合】這個目標自動實現了。這次寫了一些東西,先貼個使用的程式碼。 Collection庫裡面的所有容器都實現了操作符過載,Set容器更是過載了+、-、*、>、<、>=、<
今天發現了Vczh Free Script 2.0的一個bug
今天抓到了一個隱藏了3個月的bug。這個bug以前一直沒有被找到,因為以前寫的用於測試指令碼的程式碼都沒有出現類成員函式使用非全域性的外部物件的情況。Vampire.Kiss用我的Vczh Free Script 2.0代替PHP開發了一個網站,過程中也向我提了不少要求。其中有一個就是想在
Vczh Free Script 2.0 beta 釋出
點選這裡下載。作者保留對原始碼的一切權利檔案是一個rar壓縮包,結構如下:【產品】 【Demo】兩個Demo的編譯結果。這個資料夾裡面的指令碼程式碼僅供測試用。 【庫】編譯結果以及Vczh Free Script 2.0提供的外掛封裝,使用Vczh Free Script指令碼語言編寫
Vczh Free Script 2.0中namespace和大部分操作符過載完成!
今天上完課回來繼續把昨天晚上剩下的using字句完成。使用Syngram寫編譯器真是舒服啊,直接在程式碼裡面加兩條推導式就完成了。昨天發現了InsertEnv指令的bug以後,改過來了。不過InsertEnv不能用在using身上,只好另外寫了一個UsingEnv指令,把環境以及上游的連結
Vczh Free Script 2.0的Syngram庫完成
今天在測試封裝在FreeScript內的正則表示式介面的時候發現了一個垃圾收集器的Bug,不過很容易就看出來了,於是立刻fix掉。出錯的原因在於垃圾收集的時候只標記了運算堆疊的內容,忘了標記呼叫堆疊的內容。 這個新的Syngram包含了三個工具,分別是正則表示式、詞法分析器和語法分析
Vczh Free Script 2.0 最新.NET介面完成!
依然是上一篇文章的程式,換了C#寫。 在Vczh Free Script 2.0的接口裡面,我力求讓C++和.NET兩種語言的介面都趨於一致。目前達到了這個目標,C#僅僅比C++多了兩個輔助函式。外掛那一部分是相當難寫啊。Vczh Free Script 2.0的C++介面允許外掛和
郝同學一次通過華為HCIE面試,2.0時代末期的戰報
指導 匯聚層 多條 鏈路 分鐘 應該 端口 abr 實現 考試題目1.二層和三層環路有什麽特點和區別2.園區網的網關部署在接入層還是匯聚層3.雙點雙向重分發 到考場和考官打聲招呼,在考官的指導下登錄考試系統給你三分鐘時間準備下題目,然後開始答題(沒有做自我介紹,準備好後直接
警示:一個專為AIX上11.2.0.4版本定製的Bug正在高發
有這麼一個Bug,僅在AIX平臺上,Oracle Database 11.2.0.4的版本中出現,在12.1中被修復,之前和之後都不存在,所以簡直是為這一版本定製的。 之前一些客戶零星的遇到這個問題,而在2017年最近的幾個月,幾個客戶接連遇到這個問題,所以我想還是寫下這篇文章,作為一個提示。 這個
為ffmpeg編譯libaacplus-2.0.2
wiki: How to quickly compile libaacplus HE-AAC audio v2 (with SBR + PS) is the superb audio encoder used to encode high qu
CCF-棋局評估 201803-04(版本 2.0)------(之前寫了一個臃腫的1.0版 ,還沾沾自喜 233)
核心 color namespace ace for play class 一個 while 核心 : 博弈搜索樹 雙方得分互為相反數 dfs (x,y,player): 玩家player下完(x,y)之後的得分最大值 易錯: 先判斷輸贏,再判斷
為什麽開發人員必須要了解數據庫鎖?
資料 不同的 his 定量 串行 自己 start 文件 並發訪問 原創: 咖啡拿鐵 1.鎖? 1.1何為鎖 鎖在現實中的意義為:封閉的器物,以鑰匙或暗碼開啟。在計算機中的鎖一般用來管理對共享資源的並發訪問,比如我們java同學熟悉的Lock,synchro
最新用WPF為觸摸屏寫了一個手寫程序,雙格輸入的
nload size alt wpf 一個 ast 點擊 fill fonts 原文:最新用WPF為觸摸屏寫了一個手寫程序,雙格輸入的 雙格輸入可以提高手寫速度,當前字寫完以後
記錄一下今天 寫了一個TreeSet實現了日期去重以及排序
Set<String> monthset =new TreeSet<String>(new Comparator<String>(){ public int compare(String s1, String s
asp.net core 2.0中的一個小問題
mva中觀看asp.net core初級視訊,CURD一節中跟著視訊把程式碼敲上去了,發現無法正常執行,提示是NullReferenceException。打了幾個斷點,發現數據已經順利的存入了記憶體資料庫中,不過在Razor模板頁面獲取資料的時候,沒有正確的返回要獲得的資料
FineUIPro/Mvc/Core/JS v4.2.0 釋出了(老牌ASP.NET控制元件庫,WebForms,ASP.NET MVC,Core,JavaScript)!
還記得 10 年前那個稍微青澀的 ExtAspNet 嗎,如今她已脫胎換骨,變成了如下 4 款產品: FineUIPro:基於jQuery的經典款ASP.NET WebForms控制元件,之前的FineUI(開源版)可以直接升級到此版本。 FineUIMvc:支援ASP.NET MVC5。 Fine
今天寫了一個關屏鎖屏的app代替電源鍵短按功能。
我這老手機的電源鍵都快被我按壞了,所以寫這個app來代替電源鍵的短按鎖屏熄屏。這個app首次執行時會要求啟用裝置管理許可權,按提示操作即可,也可以手動啟用它:設定-〉安全-〉裝置管理者,勾上Scree
今天寫了一個簡單的helloworld執行時報錯
今天寫了一個最簡單的helloworld程式,但執行時總是報錯,說找不到類定義。檢查了大小寫都沒錯,注意JAVA在命令列下執行時引數是大小寫敏感的。最後在網上多方搜尋,終於得知罪魁禍首,原來是因為我的.java檔案儲存的
我們寫了一個名為smartzip的指令碼,該指令碼可以自動解壓bzip2, gzip和zip 型別的壓縮檔案
我們寫了一個名為smartzip的指令碼,該指令碼可以自動解壓bzip2, gzip和zip 型別的壓縮檔案: #!/bin/bash ftype="$(file "$1")" case "$ftype" in "$1: Zip archive"*) un
vue 移動端今天寫了一個根據後臺傳過來的http狀態碼,來實現跳轉error頁面
首先是現在main.js裡面進行配置Vue.prototype.$onError = function (error) { var error_msg = '網路錯誤'; var toastFlag = true; switch (error.errorCode) { cas
等保2.0來了,分享一個可落地的等保建設方案
企業在安全方面最關注的其實是業務安全、資料安全與安全檢查,這篇文章來講解一下我對於等保過檢的經驗與建設。 不同於其他建設文章,本文會給出很多落實方面的建議與方法,希望企業可以通過這篇文章,順利通過過檢任務,並保證安全的投入成本與收益的比率。 一、管理 一個企業的安全性最終體現在管理與