元編程能力
㈠ 編程基礎之什麼是元編程
元編程(Metaprogramming)是指某類計算機程序的編寫,這類計算機程序編寫或者操縱其他程序(或者自身)作為它們的數據,或者在運行時完成部分本應在編譯時完成的工作。很多情況下比手工編寫全部代碼相比工作效率更高。編寫元程序的語言稱之為元語言,被操作的語言稱之為目標語言。一門語言同時也是自身的元語言的能力稱之為反射。
㈡ 怎麼理解元編程
Meta- 這個前綴在希臘語中的本意是「在…後,越過…的」,類似於拉丁語的 post-,比如 metaphysics 就是「在物理學之後」,這個詞最開始指一些亞里士多德的著作,因為它們通常排序在《物理學》之後。
但西方哲學界在幾千年中漸漸賦予該詞綴一種全新的意義:關於某事自身的某事。比如 meta-knowledge 就是「關於知識本身的知識」,meta-data 就是「關於數據的數據」,meta-language 就是「關於語言的語言」,而 meta-programming 也是由此而來,是「關於編程的編程」。
弄清了詞源和字面意思,可知大陸將 meta- 這個前綴譯為「元」並不恰當。台灣譯為「後設」,稍微好一點點,但仍舊無法望文生義。也許「自相關」是個不錯的選擇,「自相關數據」、「自相關語言」、「自相關編程」——但是好像又太羅嗦了。
Anyway。先看看 meta-data:「我的電話是 +86 123 4567 8910」——這是一條數據;「+86 123 4567 8910 有十三個數字和一個字元,前兩位是國家代碼,後面是一個行動電話號碼」是關於前面那條數據的數據。那麼照貓畫虎,怎樣才算 meta-programming 呢?泛泛來說,只要是與編程相關的編程就算是 meta-programming 了——比如,若編程甲可以輸出 A - Z,那麼寫程序甲算「編程」;而程序乙可以生成程序甲(也許還會連帶著運行它輸出 A - Z),那麼編寫程序乙的活動,就可以算作 meta-programming,「元編程」。注意,程序甲和程序乙並不一定是同一種語言:
('A'..'Z').each do |char|
system("python -c 'print \"#{char}\"'")
end
如此說來,inline SQL 甚至動態生成 HTML 也是元編程了?摳定義的話是這樣吧。
不過 metaprogramming 更狹義的意思應該是指「編寫能改變語言語法特性或者運行時特性的程序」。換言之,一種語言本來做不到的事情,通過你編程來修改它,使得它可以做到了,這就是元編程。本版同文提及 method_missing,那麼 Wat — Destroy All Software Talks 之中給出了運行時元編程的經典範例:
>> ruby has no bare words
NameError: undefined local variable or method `words' for main:Object
from (irb) 1
>> def method_missing(*args); args.join(" "); end
=> nil
>> ruby has bare words
=> "ruby has bare words"
>> bare words can even have bangs!
=> "bare words can even have bangs!"
C、C++、Python、javaScript…… 多數流行的語言或多或少都有元編程能力;Lisp 諸方言更是以元編程為基本。而 Ruby 更是因為元編程易用又強大,被許多人拿來寫 DSL,因為元編程可以捏出「本不存在的語法特性」來讓書寫 DSL 變得簡單。
㈢ 如何提高」元編程「能力
編程能力:C++接觸最多,將基礎知識回顧一下,給段程序能看懂、給個需求能邊查書邊捉急的寫出、bug基本可以通過斷點等調試出來;接觸過Python、Matlab、R等;整體編程設計能力處於Matlab水平。
㈣ 老師讓用有限元編程,可是沒學過有限元編程,應該看看什麼書呢
fepg的開發語言是fortran。
fepg是國產的有限元軟體現在是元計算科技發展有限公司在做。他們公司在北京和天津都有公司。
大部分核心程序是用FORTRAN編的
㈤ 為什麼python的元編程能力沒有ruby強
Ruby的確是比Python更干凈的OOP,這也不奇怪,Ruby根本就是Smalltalk換了點語法而已。
但這個更干凈並不是a.length vs. len(a),名詞在前還是動詞在前的問題,否則OOP也未免太膚淺了。
在Python里,對於a.f()可能是調用a所屬的類的方法f,也可能是調用a的屬性f。這個二義性在metaprogramming時帶來很多不一致和麻煩,比如Python對__xxx__ magic method lookup的特殊規定。
㈥ 為什麼要有限元編程
任何有限元商業軟體都有其局限性,很多非常專業的計算還是自己編寫程序計算的。另外,購買大型商業軟體需要很高的費用,如果進行簡單的計算,自己編出更為經濟。
㈦ RUBY元編程怎麼樣
在java的時代,因為不滿面向類/對象的復雜機制,自己借鑒研究了對象裝備模式,後來發現就是spring的原理。當時不知spring的情況下,還自己實現了利用運行時反射機制來動態的給對象設置空類,拼裝方法共享實例對象屬性,做出來雖然很欣慰,但是很難看,很慢,不可能到生產環境。 後來了解了js的函數原型prototype,可以動態的定義方法和傳遞閉包,簡直口水直流,直接轉成了web前台開發,只做ajax,直到ruby的出現。大概是06年,那時候資料賊少,全是日文,英文的都不多,學了皮毛就擱置了。 今年,因為自己回歸開發,想實現一些想法,嘗試了php之後,毅然決定打死不用php,與其深入研究php不如決心搞ruby,打眼一看,發現中文資料太多了,太幸福了,當看到這本元編程的時候,馬上想起java時候的辛酸啊。 Ruby讓人快樂,元編程更是快樂的魔法,創造出令人興奮激動的東西。 計算機不再是僕人,而是朋友,我能理解你,你也能理解我。 如果說寫java就像寫論文,那麼用js就像寫英文詩,而ruby像五言絕句。 所以不學元編程,不如用java
㈧ 編程語言C++的模板元編程技術有什麼優點和缺點 在游戲編程中用的多麼
優點在於增強代碼重用,把運算轉移到編譯過程提高運行速度。缺點是錯誤控制難度比較大,模板一旦出錯想確定錯誤位置甚至錯誤原因有時候都是比較復雜的。另外一個就是模板容易搞出很復雜的類名或者函數名來,不過這個一般是可以想辦法避免的。
模板主要用於庫開發,上層開發一般還是不會用的。也就是說游戲可能只有核心部分會用到模板。
㈨ ES6中的元編程:Symbols 為什麼令人驚嘆
貌似你是想要 根據條件查找是吧?
這種情況,估計是你根據 控制id列查詢所出現的問題
建議你SQL用 row_number函數,在根據條件查詢出所有數據的基礎上,在賦予數據標示。
你可以網上看看這個函數