1. å½ä½ 说âåâæè¦å»éæç±»åå±
å¤ãä½æä¼è°è°å¨æç±»åä¸ä¹
ã éæç±»åæ¯å¯ä»¥éæå°è¯æï¼â没æè¿è¡å®âï¼ä¸çç¨åºçä¸é¨åçå±æ§ãå¨éæç±»åè¯è¨ä¸ï¼æ¯ä¸ªè¡¨è¾¾å¼é½æä¸ä¸ªç±»åæ è®ºä½ åä¸å¦ãä¾å¦ï¼å¨CISHâè¯ éx=A * B +C-Dâï¼Aï¼Bï¼cådå
·æç±»åï¼A * Bæä¸ä¸ªç±»å CodeGo.netï¼ä¸ä¸ª* B +Cæä¸ä¸ªç±»åä¸A * B +C-Dé½æä¸ä¸ªç±»åãä½æ们åªæ³¨æxå
¶ä¸ä¸ä¸ªç±»åãå¨å
¶ä»è¯è¨ï¼æ¯å¦Scalaï¼Cï¼ï¼Haskellä¸ï¼SMLï¼åFï¼ï¼å³ä½¿è¿æ ·ï¼ä¹æ²¡æå¿
è¦ã 究ç«ä»ä¹æ ·çå±æ§æ¯å¯è¯æåå³äºç±»åæ£æ¥ã Scalaçæ ·å¼ç±»ï¼èå¦ä¸æ¹é¢ï¼ä»
ä»
æ¯è§èçä¸ç»å¯¹è±¡ã该è§èå
æ¬ï¼å
æ¬äºå¾å¤ï¼ä»£è¡¨æ§çç»èï¼ä¾å¦æºæåprivateé¢åçå¨Scalaä¸çç±»è¿æå®æ¨¡åçborderã 许å¤è¯è¨é½æç±»åï¼ä½ä¸å
·æç±»å许å¤è¯è¨é½æ课ï¼ä½æ²¡æï¼éæï¼ç±»åã æç±»ååç±»ä¹é´çä¸äºç»å¾®çå·®å«ãå表[å符串]æ¯ä¸ç§ç±»åï¼ä½ä¸æ¯ä¸ç±»ãå¨Scalaä¸ååºçæ¯ç±»ï¼ä½é常ä¸æ¯ä¸ä¸ªç±»åï¼å®å®é
ä¸æ¯ä¸ä¸ªæ´é«çkindedåï¼ãå¨Cï¼ä¸ååºçæ¯ä¸æ¯ä¸ä¸ªç±»åçä»»ä½ä¸ç§ï¼å¹¶å¨Javaä¸è¿æ¯ä¸ä¸ªâåå§ç±»åâã Scalaæä¾ç»æç±»åã {fooçé«æ¸
ï¼pubs}æå¯è¯ææä¸ä¸ªè¿åpubsï¼ä¸åé¶çº§çä»»ä½å¯¹è±¡ãå®æ¯ä¸ä¸ªç±»åï¼ä½ä¸æ¯ä¸ä¸ªç±»ã ç±»åå¯ä»¥æ¯ç±»åå½ä½ åDEF为foo [T]ï¼Xï¼Tï¼=...ï¼é£ä¹fooçä½å
Tæ¯ä¸ä¸ªç±»åãä½Tæ¯ä¸æ¯ä¸ç±»ã ç±»åå¯ä»¥æ¯èæçscalaï¼å³âæ½è±¡ç±»ï¼ä½æ¯ï¼ä»å¤©ï¼ä¸è½æ¯èæä¸scalaè½ç¶æä¸ä¸ªæ ·æ¿æ²éçæ¹å¼æ¥èæç±»ç¼ç ç°å¨ï¼å¨æç±»åãå¨æç±»å对象æ§è¡æäºæä½ä¹åï¼ä¼èªå¨æ£æ¥çæ§è´¨ãå¨å¨æç±»åçåºäºç±»çOOè¯è¨æç±»ååç±»ä¹é´æå¾å¼ºçç¸å
³æ§ãäºæ
åçå¨JVMè¯è¨æ¯å¦ScalaåJavaå
·æåªå¯ä»¥å¨æå°æ£æ¥ï¼å¦åå°åæå°æä½ãå¨è¿äºè¯è¨ä¸ï¼âç±»åæ¦é¤âæ´å¤çè¿æ¯å¤§å¤æ°å¯¹è±¡çå¨æç±»åæ¯å 为ä»ä»¬çé¶çº§ãæ´å¤ææ´å°ãè¿ä¸æ¯çæ£çï¼ä¾å¦ï¼å®ä»¬é常ä¸è¢«æ¦é¤ï¼ä½¿ä¹å¯ä»¥åè¯æ°ç»[INT]åæ°ç»[å符串]ä¹é´çåºå«æ°ç»ãä½æç宽æ³å®ä¹çâå¨æç±»å对象çèªå¨æ£æ¥çæ§è´¨ãâå½åå°ä¹è½å¤åéå°ç对象ãå¦æ对象æ¯æåä¸åæ£å¸¸äºãæ¯ææä¹çè°è¯ï¼å¯ä»¥ååå¦é±¼å¾æ°´ä½ä¸ºä¸ä¸ªå¨æç±»åçææ对象ï¼å³ä½¿å®ä¸æ¯ä¸ä¸ªç±»ãè¿æ¯ä¸ä¸ªä»ä¹æ ·çPythonåè°ç¨çæ¬è´¨âé¸æåãâæ¤å¤ï¼éè¿æç宽æ³å®ä¹ï¼çè³âzeronessâæ¯ä¸ä¸ªå¨æçç±»åå¨æç§æä¹ä¸è¯´ï¼å¨å¤§å¤æ°è¯è¨ä¸ï¼ä¼èªå¨æ£æ¥å·ç ï¼ä»¥ç¡®ä¿ä½ ä¸è¢«é¶é¤ãæä¸ä¸ªé常ï¼é常å°çè¯è¨ï¼å¯ä»¥è¯æï¼éæå°ä½¿é¶ï¼æä¸ä¸ºé¶ï¼çéæç±»åã æåï¼å
¶ä»çä¹æç±»åï¼ä¾å¦intä¸å
·æä¸ä¸ªç±»ä½ä¸ºä¸ä¸ªç»èï¼ç±»åï¼å¦Nullåä»»ä½è¿æ¯ä¸ä¸ªæç¹ç¹æ®ï¼ä½å¯è½æç±»åä¸åç±»åï¼å¦æ²¡æå®çè³æ²¡æä»»ä½å¼æ´ä½åµæ¯ä¸ä¸ªç±»ã
2. 好å§ï¼æä¼å¬...æä¸ä¸ªå¾å¥½ççæ¡ï¼æ以æè¦å»å°è¯ä¸åçæå·§åæä¾ä¸ä¸ªæ´ä¸éå°å°ççè§ç¹ã 广ä¹å°è¯´ï¼ä¸ç±»æ¯å¯è¢«å®ä¾åãåä¾å¯¹è±¡ï¼scalaï¼æ§ç¶ï¼scalaï¼åæ¥å£ï¼scalaï¼è¢«è®¤ä¸ºæ¯ç±»ãè¿æ¯æéççï¼å 为å身ä»ç¶å®ä¾åï¼ä»£ç ï¼åä¸ä¸ªæ¥å£å¯ä»¥è¢«å®ä¾åä¸ä¸ªåç±»çä¸é¨åã å
¶ä¸ç¬¬äºç¹.classæ¯è®¾è®¡å¨å¤§å¤æ°é¢å对象è¯è¨çåºæ¬åä½ï¼è½ç¶ä¸æ¯åºäºååçï¼å¦JavaScriptï¼çãå¤ææ§ä¸åç±»å¨ç±»æ¯è¯çå®.classè¿æä¾äºä¸ä¸ªåå¯è§æ§æ§å¶ã ç±»åæ¯ä¸ä¸ªé常ä¸åçéå
½ï¼è¯¥ç³»ç»è½å¤è¡¨è¾¾æ¯ä¸ä¸ªå¯è½çå¼å°å
·æä¸ç§æå¤ç§ç±»åï¼å¹¶ä¸è¿äºå¯ä»¥çåäºç±»ï¼ä¾å¦ï¼(Int) => String // both the type and class are Function1[Int,String]
"hello world" // class and type are String
æ¨è¿å¯ä»¥å¾å°scalaåJavaä¹é´æ趣差å¼ï¼7 // both the class and type are Int in Scala
// in Java there's no class and the type is Integer.TYPE
println("hello world") // the return type is Unit, of class Unit
// Java has void as a type, but no corresponding class
error("oops") // the type and class are both "Nothing"
èçæ£æ趣çç±»åä¸å±äºç±»çãä¾å¦ï¼this.typeå§ç»æçuniqueç±»åthisãè¿æ¯å¯ä¸çä¸ä¸ªå®ä¾ï¼æ¯ä¸æ¯ä¸ç±»çå
¶ä»å®ä¾ã ä¹ææ½è±¡ç±»ååç±»åï¼ä¾å¦ï¼type A // 'A' is an undetermined abstract type
// to be made concrete in a subclass
class Seq[T] { ... } // T is a type, but not a class
Seqæ趣çæ¯ï¼å 为å®æ¯ä¸ä¸ªç±»ï¼èä¸æ¯ä¸ä¸ªç±»åãæ´åç¡®å°è¯´ï¼å®æ¯ä¸ä¸ªâç±»çæé å½æ°âï¼è¿å°æ建ä¸ä¸ªææçç±»åæ¶ï¼æä¾å¿
è¦çç±»åæä¾çç±»åæé å¨çå¦ä¸ä¸ªæ¯è¯æ¯âé«kindedç±»åâï¼æ个人ä¸å欢è¿ä¸ªè¯ï¼å 为âåæé âæå¨ä¾åºç±»ååä»»ä½å
¶ä»è¡¨åçæ¡æ¬¾-模åï¼æè¯å¥½çscalaã âé«kindedâæ£ç¡®å°æ示Seqæä¸ä¸ªâç§âï¼è¿æ¯* => *ï¼è¿ä¸ªç¬¦å·æåºï¼Seqå°éååä¸çç±»åå产çä¸ä¸ªåä¸çç±»åï¼è¿ç±»ä¼¼äºç¨äºæè¿°å½æ°æ¯é表示æ³ï¼ãéè¿è¿æ ·çä¸ç§Mapæ¯* => * => *å®éè¦ä¸¤ä¸ªç±»å
3. Aåå¯éè¿æ¬èº«ï¼æ²¡æä»»ä½å®ä¾.a个ä¾åè¿å°±æ¯æè°çâå¹½çµå¼âãä¸é¢æ¯Javaçä¸ä¸ªä¾åï¼ å¨è¿ä¸ªä¾åä¸ï¼æ们æpublic static class Initializer<HA, HB>ï¼å
¶ä¸HAåHBåç±»åï¼ç±æ½è±¡ç±»ä»£è¡¨TRUEåFALSEï¼ï¼è没æbeeingå®ä¾åã æå¸æè¿è¡¨æï¼ç±»ååç±»æ¯ä¸åçï¼å¹¶ä¸ç±»åå¯ä»¥éè¿æ¬èº«ã
4. ï¼ä»
éäºJavaï¼ï¼æä¼è¯´ï¼ä¸ç±»æ¯ä¸ç»å¯¹è±¡ã对象oæ¯ç±»åXå¦æoæ¯éX.classåXæ¯çåç±»åYï¼å¦æ设置Xçä¸ä¸ªåéYã 对äºæ¯ä¸ä¸ªCç±»ï¼ä¸æ¯æ¥å£ï¼æä¸ç»å¯¹è±¡ï¼ä»å建new C(...)ãæ趣çæ¯ï¼æ们å¾å°å¨ä¹è¿ä¸å¥ã ï¼ä½æ¯ä¸ä¸ªå¯¹è±¡ä¸å±äºä¸ç»è¿æ ·çäºå®ï¼è¿å¯è½ 对äºæ¯ä¸ä¸ªCç±»ï¼æä¸ç§ç±»åt(C)ä¸è¬æ¹ç§°ä¸ºâCåâï¼è¿æ¯ä¸ç»å¯ä»è¢«å建çææ对象çnew S(...)å
¶ä¸ï¼Sæ¯CæCçåç±» 类似å°ï¼å¯¹äºæ¯ä¸ä¸ªæ¥å£Iï¼æä¸ç§ç±»åçt(I)ï¼âIåâï¼è¿æ¯ä¸ç»å¯ä»è¢«å建çææ对象çnew S(...)å
¶ä¸Sä¸ å¦æç±»Sæ¯çä¸ä¸ªåç±»Cï¼Såæ¯Cåç类似æ¥å£çåç±»åIæä¸ä¸ªç©ºå¼ç±»åï¼å®æ¯ç©ºéã NULLç±»åæ¯æ¯ä¸ªç±»åçåç±»åã æä¸ç»ä¸çææ对象ï¼è¿æ¯Objectç±»åãè¿æ¯ä¸ä¸ªè¶
ç±»åæ¯ä¸ç§ç±»åçã å°ç®å为æ¢ï¼è¿ç§è¡¨å主ä¹æ¯Aååºæ¬ä¸æ¯å¨ä¸ä¸ªç±»ææ¥å£ï¼ä»¥åäºåçå
³ç³»åºæ¬ä¸æ¯åç±»/åå
³ç³»ãå¨å¹³å¡æ¯ä¸ä»¶å¥½äºï¼è¯è¨æ¯å¯ä»¥ç解çï¼ä½è¿å
¥ä»¿å¶è¯ï¼æåï¼èåç±»åç并ï¼äº¤è¿ç®.classåä¸ååªç±»åæ¥å£ï¼ä»¥åäºåå
³ç³»æ´ä¸°å¯ï¼æ´é¾ç解ã
温馨提示:答案为网友推荐,仅供参考