{ "version": "https://jsonfeed.org/version/1", "title": "Scala", "description": "Object-Oriented Meets Functional", "home_page_url": "go/scala", "feed_url": "feed/scala.json", "icon": "https://cdn.v2ex.com/navatar/c8ff/e9a5/124_large.png?m=1488098428", "favicon": "https://cdn.v2ex.com/navatar/c8ff/e9a5/124_normal.png?m=1488098428", "items": [ { "author": { "url": "member/timzaak", "name": "timzaak", "avatar": "https://cdn.v2ex.com/gravatar/7dffd67fee36487e77dabd9f1abbd8e7?s=73&d=retro" }, "url": "t/1141501", "title": "\u8fd9\u4e2a\u5206\u7c7b\u597d\u4e45\u6ca1\u65b0\u5e16\u5b50\u4e86\uff0c\u8bb0\u5f55\u4e0b\u6700\u65b0\u7528 scala 3 \u5199\u7684\u9879\u76ee", "id": "t/1141501", "date_published": "2025-06-27T08:31:51+00:00", "content_html": "

https://github.com/timzaak/log-http-proxy\nmitm http/https \u4ee3\u7406\uff0c \u9762\u5411 Qt \u7b49\u4e0d\u65b9\u4fbf\u8c03\u8bd5 https/http \u8bf7\u6c42\u7684\uff0c\u5f00\u542f\u540e\uff0c \u684c\u9762\u5f00\u53d1\u7528 switchHosts \u4fee\u6539\u4e0b dns \u89e3\u6790\uff0c\u53ef\u5728 web \u9875\u9762\u5c31\u53ef\u770b\u5230 http \u8bf7\u6c42\u5185\u5bb9\u3002

\n

https://github.com/timzaak/table2case\n\u5c06\u6570\u636e\u5e93 table \u8f6c\u6362\u6210 case class \uff0c\u5e76\u5199\u5165\u5230\u6587\u4ef6\u4e2d\uff0c\u989d\u5916\u652f\u6301 scalasql \uff0c\u51cf\u5c11\u91cd\u590d\u5de5\u4f5c\u3002

\n" }, { "author": { "url": "member/eccstartup", "name": "eccstartup", "avatar": "https://cdn.v2ex.com/avatar/5d76/7a83/66546_large.png?m=1486289910" }, "url": "t/910451", "title": "sbt run \u7684\u65f6\u5019\uff0c\u80fd\u4e0d\u80fd\u8df3\u8fc7 compile \u76f4\u63a5 run\uff1f", "id": "t/910451", "date_published": "2023-01-24T07:32:59+00:00", "content_html": "

\u5c31\u662f\u89c9\u5f97\u6bcf\u6b21 run \u7684\u65f6\u5019\u8981 compile \u4e00\u6b21\uff0c\u7b49\u7684\u65f6\u95f4\u534a\u5206\u949f\u6709\u70b9\u957f\u3002

\n

\u7f51\u4e0a\u4e0b\u8f7d\u7684\u4ed3\u5e93\uff0c\u6211\u7684\u6587\u4ef6\u51e0\u4e4e\u4e0d\u4f1a\u6539\u52a8\uff0c\u80fd\u4e0d\u80fd\u8df3\u8fc7 compile \uff1f

\n

\u719f\u6089\u7684\u5927\u4f6c\u8bf7\u6307\u70b9\u4e00\u4e0b\uff0c\u65e0\u8bba\u662f\u80fd\u4e0e\u4e0d\u80fd\u3002

\n

PS\uff1a\u6587\u4ef6\u5728\u8fd9

\n" }, { "author": { "url": "member/leiuu", "name": "leiuu", "avatar": "https://cdn.v2ex.com/gravatar/117e03f151006cb9f7751d48322e3311?s=73&d=retro" }, "url": "t/844067", "date_modified": "2022-03-31T16:11:31+00:00", "content_html": "

RT.

\n

\u5f88\u591a\u56e2\u961f\u5185\u5199\u6570\u636e\u6d41\uff0c\u5206\u4e3a\u7528 java \u3001scala \u3001python \u4e09\u6ce2\u3002

\n

\u9274\u4e8e\u76ee\u524d scala \u4e0d\u6e29\u4e0d\u706b\uff0c\u751a\u81f3\u70ed\u5ea6\u6709\u4e0b\u964d\u7684\u8d8b\u52bf\u3002

\n

\u662f\u5426\u6709\u5fc5\u8981\u5728\u516c\u53f8\u5185\u90e8\u9f13\u52b1\u7528 scala \uff1f

\n

\u662f\u5426\u6709\u5fc5\u8981\u7edf\u4e00\u4f7f\u7528 java \u5f00\u53d1\uff0c\u51cf\u5c11\u5f00\u53d1\u8bed\u8a00\u7684\u6280\u672f\u6808\u7684\u590d\u6742\u5ea6\uff08 scala \u8f83\u590d\u6742\u4e14\u5e94\u7528\u4e0d\u5e7f\u6cdb\uff09\uff1f

\n

\u56f0\u6270\u4e86\u633a\u957f\u4e00\u6bb5\u65f6\u95f4\u7684\u95ee\u9898\uff0c\u53d1\u51fa\u6765\u4f9b\u5927\u5bb6\u8ba8\u8bba\u4e00\u4e0b\u3002

\n

\"scala

\n", "date_published": "2022-03-31T04:05:41+00:00", "title": "\u8fd8\u6709\u5fc5\u8981\u7528 scala \u5417", "id": "t/844067" }, { "author": { "url": "member/exceldream", "name": "exceldream", "avatar": "https://cdn.v2ex.com/gravatar/8e718b4ba1f98e68cd4cb55b4050446e?s=73&d=retro" }, "url": "t/836811", "date_modified": "2022-02-28T10:23:52+00:00", "content_html": "\u81ea\u4ece\u63a5\u89e6 scala \u5c31\u4e0d\u60f3\u5377 java \u4e86\u3002\u56fd\u5185\u6709\u8fd9\u6837\u7684\u5de5\u4f5c\u673a\u4f1a\u5417\uff1f\u8fd8\u6709\u5c31\u662f\u56fd\u5185\u6709\u5565 scala \u7684\u793e\u533a\u4e5f\u63a8\u8350\u63a8\u8350\u3002", "date_published": "2022-02-28T01:31:56+00:00", "title": "\u6709 scala \u5144\u5f1f\u5417\uff1f\u6709\u62db scala \u7684\u516c\u53f8\u5417\uff1f", "id": "t/836811" }, { "author": { "url": "member/xianzhe", "name": "xianzhe", "avatar": "https://cdn.v2ex.com/avatar/6883/3c39/433692_large.png?m=1684926609" }, "url": "t/815973", "date_modified": "2021-11-17T02:59:30+00:00", "content_html": "

\u6700\u8fd1\u63a5\u624b\u4e00\u4e2a\u9879\u76ee\u8981\u6c42\u8865\u4e0a\u5355\u5143\u6d4b\u8bd5\uff0c\u8fd9\u4e2a\u9879\u76ee\u662f\u505a spark \u7684\uff0c\u5c31\u662f Scala \u5199\u7684 ETL \u7a0b\u5e8f\u3002\u8bf7\u95ee\u9488\u5bf9\u8fd9\u79cd\u9879\u76ee\u7528\u4ec0\u4e48\u6d4b\u8bd5\u6846\u67b6\u505a\u6bd4\u8f83\u597d\uff1f

\n", "date_published": "2021-11-17T02:58:27+00:00", "title": "Scala \u5355\u5143\u6d4b\u8bd5", "id": "t/815973" }, { "author": { "url": "member/asensio", "name": "asensio", "avatar": "https://cdn.v2ex.com/avatar/f413/558b/253904_large.png?m=1702800353" }, "url": "t/748401", "date_modified": "2021-01-26T03:59:11+00:00", "content_html": "

spark ml \u5bfc\u51fa\u6a21\u578b pmml \u6587\u4ef6\u4e0d\u6210\u529f\uff0c\u4e0b\u9762\u662f scala \u4ee3\u7801

\n
 val pmml = new PMMLBuilder(trainingData.schema, model).build()\n val targetFile = \"target/model.pmml\"\n val fis: FileOutputStream = new FileOutputStream(targetFile)\n val fout: StreamResult = new StreamResult(fis)\n JAXBUtil.marshalPMML(pmml, fout)\n
\n
Exception in thread \"main\" java.lang.IllegalArgumentException: Expected string, integral, double or boolean data type, got vector data type\n\tat org.jpmml.sparkml.SparkMLEncoder.createDataField(SparkMLEncoder.java:169)\n\tat org.jpmml.sparkml.SparkMLEncoder.getFeatures(SparkMLEncoder.java:76)\n\tat org.jpmml.sparkml.feature.VectorIndexerModelConverter.encodeFeatures(VectorIndexerModelConverter.java:52)\n\tat org.jpmml.sparkml.FeatureConverter.registerFeatures(FeatureConverter.java:50)\n\tat org.jpmml.sparkml.PMMLBuilder.build(PMMLBuilder.java:114)\n
\n", "date_published": "2021-01-26T02:35:26+00:00", "title": "scala \u6a21\u578b\u5bfc\u51fa\u95ee\u9898", "id": "t/748401" }, { "author": { "url": "member/sakura1", "name": "sakura1", "avatar": "https://cdn.v2ex.com/gravatar/f1488fd2f3ecdba01ed60b7507cb9d1a?s=73&d=retro" }, "url": "t/698252", "title": "\u60f3\u7528 Springboot \u505a\u540e\u7aef\u63a5\u53e3\uff0c\u4f46\u7ec4\u91cc scala \u5927\u4f6c\u5e0c\u671b\u6211\u7528 Akka Http \u600e\u4e48\u529e", "id": "t/698252", "date_published": "2020-08-14T06:36:36+00:00", "content_html": "

\u5982\u9898\uff0c\u5728\u5927\u6570\u636e\u67b6\u6784\u7ec4\u5de5\u4f5c\uff0c\u7ec4\u91cc\u7684\u8bed\u8a00\u662f scala\uff0c\u4f1a\u7528 scala \u5199\u4e00\u4e9b\u5de5\u4f5c\u548c\u6846\u67b6\uff0c\u5e76\u4e14\u5199\u4e00\u4e9b flink\uff0cspark \u7a0b\u5e8f\u3002

\n

\u4e2a\u4eba\u7684\u786e\u5f88\u559c\u6b22 scala\uff0c\u4f46\u5b83\u7684\u590d\u6742\u4e5f\u8ba9\u4eba\u671b\u800c\u5374\u6b65\uff0c\u5e73\u65f6\u5199 flink \u548c spark \u90fd\u4f1a\u7528 scala \u5199\u3002

\n

\u4f46\u662f\u4e2a\u4eba\u4e0d\u559c\u6b22\u592a\u591a\u7684\u8bed\u6cd5\u7cd6\u548c\u7279\u6b8a\u7b26\u53f7\uff0c\u800c\u4e14 akka \u7684\u6d88\u606f\u7f16\u7a0b\u6a21\u578b\u611f\u89c9\u4e5f\u4e0d\u5bb9\u6613\u8fdb\u884c\u62bd\u8c61\u3002

\n

\u4ece\u4e2a\u4eba\u804c\u4e1a\u53d1\u5c55\u89d2\u5ea6\u770b\u4e5f\u60f3\u7528 springboot,\u6bd5\u7adf springboot \u8fd8\u662f\u53d7\u4f17\u6bd4\u8f83\u5e7f\u3002

\n

\u600e\u4e48\u641e\uff1f

\n" }, { "author": { "url": "member/tzhhahaha", "name": "tzhhahaha", "avatar": "https://cdn.v2ex.com/gravatar/bc94df6d767c3228653009dc24892bac?s=73&d=retro" }, "url": "t/682251", "title": "\u53ef\u80fd\u662f\u5bb6\u5ead\u80cc\u666f\u6700\u6df1\u539a\u7684\u7a0b\u5e8f\u5458\u5199\u7684\u4e66...", "id": "t/682251", "date_published": "2020-06-17T02:33:59+00:00", "content_html": "

\u6700\u8fd1 scala \u5927\u795e\u674e\u6d69\u6bc5\u51fa\u4e86\u672c\u4e66 \u300a hands on scala \u300b. \u7c97\u7565\u770b\u4e86 free chapters , \u611f\u89c9\u5199\u7684\u8fd8\u53ef\u4ee5, \u4f46\u662f\u540e\u9762\u5f88\u591a\u5b9e\u7528\u7ae0\u8282\u662f\u6536\u8d39\u7684, \u6709\u4e70\u4e86\u8fd9\u672c\u4e66\u7684\u5417? \u5199\u7684\u548b\u6837?

\n

\u94fe\u63a5\u5982\u4e0b\nhttps://www.handsonscala.com/

\n" }, { "author": { "url": "member/muziling", "name": "muziling", "avatar": "https://cdn.v2ex.com/gravatar/8509ed5054cef8bc3fafd7dd6e9a8947?s=73&d=retro" }, "url": "t/674090", "date_modified": "2020-05-21T09:25:58+00:00", "content_html": "
object test {\n def main(args: Array[String]): Unit = {\n def listTestD = (0 to 20000000).toList\n var l1 = System.currentTimeMillis()\n var sum = 0\n listTestD.foreach{x=> if (x%2==0) sum = x}\n println(System.currentTimeMillis()-l1)\n sum = 0\n l1 = System.currentTimeMillis()\n listTestD.filter(_%2==0).foreach(sum = _)\n println(System.currentTimeMillis()-l1)\n }\n}\n
\n

\u6267\u884c\u7ed3\u679c\u662f\uff1a\n17585,\n21059\n\u6548\u7387\u5dee 20%\u5de6\u53f3

\n

\u907f\u514d\u7f13\u5b58\uff0c\u5bf9\u6389\u4e24\u4e2a foreach

\n
object test {\n def main(args: Array[String]): Unit = {\n def listTestD = (0 to 20000000).toList\n var l1 = System.currentTimeMillis()\n var sum = 0\n listTestD.filter(_%2==0).foreach(sum = _)\n println(System.currentTimeMillis()-l1)\n sum = 0\n l1 = System.currentTimeMillis()\n listTestD.foreach{x=> if (x%2==0) sum = x}\n println(System.currentTimeMillis()-l1)\n }\n}\n
\n

\u6267\u884c\u7ed3\u679c\u662f\uff1a\n35082,\n16201\n\u6548\u7387\u5dee\u8fd1 50%\u3002

\n

\u5982\u679c listTestD \u5b58\u50a8\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u5bb9\uff0c\u6548\u7387\u662f\u4e0d\u662f\u4f1a\u5dee\u66f4\u5927\uff1f

\n", "date_published": "2020-05-21T09:24:45+00:00", "title": "\u96c6\u5408\u7c7b\u578b filter \u540e\u6267\u884c foreach \u7684\u6548\u7387 \u6bd4 foreach \u91cc\u5199 if \u6765\u7684\u6162", "id": "t/674090" }, { "author": { "url": "member/jakevin", "name": "jakevin", "avatar": "https://cdn.v2ex.com/gravatar/eee05b6655f6f79309961683b9bcf842?s=73&d=retro" }, "url": "t/600133", "title": "sbt \u4e3a\u4ec0\u4e48\u80fd\u8fd9\u4e48\u5783\u573e\uff1f", "id": "t/600133", "date_published": "2019-09-11T10:10:53+00:00", "content_html": "

\u7f51\u4e0a\u80fd\u8bd5\u7684\u89e3\u51b3\u65b9\u6848\u5168\u8bd5\u8fc7\u4e86\uff0c\u8fd8\u662f\u62c9\u4e0d\u52a8\u4f9d\u8d56

\n" }, { "author": { "url": "member/SabaPing", "name": "SabaPing", "avatar": "https://cdn.v2ex.com/avatar/6fb0/5b14/77018_large.png?m=1548851987" }, "url": "t/598065", "title": "sbt 1.3.0 released, \u4f9d\u8d56\u7ba1\u7406\u4ece ivy \u53d8\u4e3a Coursier", "id": "t/598065", "date_published": "2019-09-05T00:25:27+00:00", "content_html": "

##\u4e3b\u8981\u66f4\u65b0\u4e3a:

\n\n
\n

\"Combined together we hope these features will improve the user experience of running your builds.\"

\n
\n

\u8be6\u7ec6 release note

\n" }, { "author": { "url": "member/sl19981007", "name": "sl19981007", "avatar": "https://cdn.v2ex.com/gravatar/590e675d1e7893aa886e1a8c62076636?s=73&d=retro" }, "url": "t/593903", "title": "\u5982\u4f55\u505c\u6b62\u5df2\u7ecf\u63d0\u4ea4\u5230 Spark \u96c6\u7fa4\u4e0a\u7684\u4efb\u52a1\uff1f", "id": "t/593903", "date_published": "2019-08-21T08:29:55+00:00", "content_html": "" }, { "author": { "url": "member/sadhen", "name": "sadhen", "avatar": "https://cdn.v2ex.com/gravatar/3d6f03810b4c31313e99eab72f787b3f?s=73&d=retro" }, "url": "t/583938", "title": "Scala \u5143\u7f16\u7a0b\uff1a\u5728\u65e5\u5fd7\u5e93\u4e2d\u7684\u5e94\u7528", "id": "t/583938", "date_published": "2019-07-17T14:29:50+00:00", "content_html": "

Scala \u4e2d\u5e38\u7528\u7684\u7b2c\u4e09\u65b9\u65e5\u5fd7\u5e93\uff0c\u6211\u8fd9\u8fb9\u4e86\u89e3\u7684\u6709 log4s^1\u548c Scala\nLogging^2\u4e24\u4e2a\u3002

\n

\u5728 Scala Logging \u4e2d\uff1a

\n
logger.debug(s\"Some $expensive message!\")\n
\n

\u4f1a\u88ab Scala \u7684\u5b8f\u8f6c\u6362\u6210\uff1a

\n
if (logger.isDebugEnabled) logger.debug(s\"Some $expensive message!\")\n
\n

\u56e0\u4e3a\u5728\u5b9e\u9645\u4ee3\u7801\u8fd0\u884c\u65f6\uff0c\u5b9e\u9645\u4e0a\u4f1a\u5148\u505a\u5b57\u7b26\u4e32\u63d2\u503c\uff0c\u7136\u540e\u5728\u770b\u65e5\u5fd7\u7ea7\u522b\u4e3a DEBUG \u7684\u65e5\u5fd7\u662f\u5426\u9700\u8981\u8f93\u51fa\u3002\u6240\u4ee5\u6211\u4eec\u901a\u8fc7 if \u8bed\u53e5\uff0c\u9632\u6b62\u4e0d\u5fc5\u8981\u7684\u5b57\u7b26\u4e32\u64cd\u4f5c\uff0c\u8fdb\u800c\u6539\u5584\u6027\u80fd\u3002

\n

\u90a3\u4e48 Scala Logging \u662f\u5982\u4f55\u505a\u5230\u6539\u5199\u8868\u8fbe\u5f0f\u7684\u5462\uff1f

\n

\u5728\u4e0a\u4e00\u7bc7^3\u5b9e\u73b0 lombok.Data \u7684\u65f6\u5019\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u901a\u8fc7\u6ce8\u89e3\u544a\u8bc9\u7f16\u8bd1\u5668\uff0c\u6211\u4eec\u9700\u8981\u5728\u8be5\u6ce8\u89e3\u6240\u4f5c\u7528\u7684\u7c7b\u4e0a\u9762\u751f\u6210 getter \u548c setter\u3002\u8bf4\u767d\u4e86\uff0c\u5c31\u662f\u6ce8\u89e3 @data \u8ba9\u6211\u4eec\u5b9a\u4f4d\u5177\u4f53\u7684\u7c7b\uff0c\u7136\u540e\u6211\u4eec\u518d\u63d2\u5165\u4ee3\u7801\u3002\u800c\u8fd9\u4e2a\u4f8b\u5b50\u5b9e\u9645\u4e0a\u662f\u76f4\u63a5\u5c06\u751f\u6210\u4ee3\u7801\u7684\u89c4\u5219\u548c\u5177\u4f53\u7684\u65b9\u6cd5\u8854\u63a5\u8d77\u6765\u3002

\n

\u5b8c\u6574\u7684\u5b9e\u73b0\u5982\u4e0b\u6240\u793a\uff1a

\n
final class Logger private (val underlying: org.slf4j.Logger) {\n def debug(message: String): Unit = macro LoggerMacro.debugMessage\n}\n\nprivate object LoggerMacro {\n\n type LoggerCOntext= blackbox.Context {type PrefixType = Logger}\n\n private def deconstructInterpolatedMessage(c: LoggerContext)\n (message: c.Expr[String]) = {\n import c.universe._\n message.tree match {\n case q\"scala.StringContext.apply(..$parts).s(..$args)\" =>\n val format = parts.iterator.map({ case Literal(Constant(str: String)) => str })\n // Emulate standard interpolator escaping\n .map(StringContext.treatEscapes)\n // Escape literal slf4j format anchors if the resulting call will require a format string\n .map(str => if (args.nonEmpty) str.replace(\"{}\", \"\\{}\") else str)\n .mkString(\"{}\")\n\n val formatArgs = args.map(t => c.Expr[Any](t))\n\n (c.Expr(q\"$format\"), formatArgs)\n\n case _ => (message, Seq.empty)\n }\n }\n\n private def formatArgs(c: LoggerContext)(args: c.Expr[Any]*) = {\n import c.universe._\n args.map { arg =>\n c.Expr[AnyRef](\n if (arg.tree.tpe <:< weakTypeOf[AnyRef]) arg.tree\n else q\"$arg.asInstanceOf[_root_.scala.AnyRef]\"\n )\n }\n }\n\n def debugMessageArgs(c: LoggerContext)\n (message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = {\n import c.universe._\n val underlying = q\"${c.prefix}.underlying\"\n val anyRefArgs = formatArgs(c)(args: _*)\n if (args.length == 2)\n q\"if ($underlying.isDebugEnabled) $underlying.debug($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)\"\n else\n q\"if ($underlying.isDebugEnabled) $underlying.debug($message, ..$anyRefArgs)\"\n }\n \n def debugMessage(c: LoggerContext)\n (message: c.Expr[String]): c.universe.Tree = {\n val (messageFormat, args) = deconstructInterpolatedMessage(c)(message)\n debugMessageArgs(c)(messageFormat, args: _*)\n }\n}\n
\n

\u9996\u5148\uff0cblackbox.Context \u4e8b\u5b9e\u4e0a\u9650\u5b9a\u4e86\u8fd9\u4e2a\u5b8f\u7684\u4f5c\u7528\u57df\u2014\u5373\u5728\u7c7b Logger \u4e4b\u4e2d\u3002\u53ef\u4ee5\u89c2\u5bdf\u5230\uff0c\u5355\u4f8b LoggerMacro \u7684\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u5e26\u6709 LoggerContext \u8fd9\u4e2a\u53c2\u6570\uff0c\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u7684\u5177\u4f53\u5b9e\u73b0\uff0c\u4e5f\u548c LoggerContext \u6709\u4e00\u5b9a\u7684\u5173\u7cfb\u3002

\n

debugMessage \u51fd\u6570\u9996\u5148\u5c06\u5b57\u7b26\u4e32\u63d2\u503c\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u901a\u8fc7 deconstructInterpolateMessage \u89e3\u6784\u6210 messageFormat \u548c args\u3002\u4e0b\u9762\u8fd9\u6bb5\u4ee3\u7801\u53ef\u4ee5\u975e\u5e38\u660e\u786e\u7684\u89e3\u91ca\uff0c\u4ec0\u4e48\u662f messageFormat \u4ee5\u53ca\u4ec0\u4e48\u662f args\uff1a

\n
logger.info(\"Info :{}\" , user.getName())\n
\n

\u5982\u679c\u662f Scala \u7684\u5b57\u7b26\u4e32\u63d2\u503c\u7684\u8bdd\uff0c\u5c31\u662f s\"Info :${user.getName}\"\u3002

\n

\u89e3\u6784\u4e4b\u540e\uff0c\u6211\u4eec\u53ea\u9700\u8981\u901a\u8fc7 Quasiquote \u5c06\u5e26\u6709\u6761\u4ef6\u8bed\u53e5\u7684\u4ee3\u7801\u91cd\u65b0\u6784\u9020\u8d77\u6765\u5c31\u53ef\u4ee5\u4e86\u3002

\n

\u7f16\u8bd1\u671f\u548c\u8fd0\u884c\u65f6

\n

\u53e6\u5916\u4e00\u4e2a\u9700\u8981\u6ce8\u610f\u7684\u70b9\u662f\uff0c\u5728\u4f7f\u7528 @data \u7684\u65f6\u5019\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u9700\u8981\u5728\u5de5\u7a0b\u4e2d\u5f00\u542f Paradise \u63d2\u4ef6\uff0c\u800c\u6211\u4eec\u5728\u4f7f\u7528 Scala\nLogging \u7684\u65f6\u5019\uff0c\u5b9e\u9645\u4e0a\u76f4\u63a5\u4f9d\u8d56 Scala\nLogging \u5c31\u53ef\u4ee5\u4e86\uff0c\u4e0d\u9700\u8981\u5f00\u542f Paradise \u63d2\u4ef6\u3002\u8fd9\u5c31\u6d89\u53ca\u5230\u4e00\u4e2a\u95ee\u9898\uff1a\u6211\u4eec\u5728\u4e0a\u4e00\u8282\u4e2d\u505a\u4e86\u8be6\u7ec6\u89e3\u91ca\u7684\u4ee3\u7801\uff0c\u5230\u5e95\u662f\u5728\u54ea\u4e2a\u73af\u8282\u6267\u884c\u7684\u3002

\n

\u5f88\u7b80\u5355\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5728 debugMessage \u589e\u52a0\u65e5\u5fd7\u7684\u65b9\u5f0f\uff0c\u786e\u5b9a\u8fd9\u4e2a\u7ec6\u8282\u3002

\n

\u6700\u7ec8\u53d1\u73b0\uff0c\u5b9e\u9645\u4e0a\uff0c\u6211\u4eec\u4f9d\u8d56\u4e86 Scala\nLogging\uff0c\u4f46\u662f\u9879\u76ee\u81ea\u8eab\u6ca1\u6709\u4f7f\u7528\u7f16\u8bd1\u63d2\u4ef6\uff0c\u5728\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\uff0c\u7f16\u8bd1\u5668\u9047\u5230 Scala\nLogging \u4e2d\u4f1a\u751f\u6210\u4ee3\u7801\u7684\u65b9\u6cd5\u65f6\uff0c\u5b9e\u9645\u4e0a\u8fd8\u662f\u4f1a\u53bb\u5229\u7528\u7f16\u8bd1\u63d2\u4ef6\uff0c\u751f\u6210\u4ee3\u7801\u3002

\n

\u603b\u7ed3

\n

\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e00\u7bc7\u7684\u5185\u5bb9\u867d\u7136\u5728\u5b8f\u7684\u5177\u4f53\u4f7f\u7528\u63a5\u53e3\u4e0a\u548c lombok.Data \u90a3\u4e00\u7bc7\u6709\u7ec6\u8282\u4e0a\u7684\u5dee\u5f02\uff0c\u4f46\u5b9e\u9645\u4e0a\u6700\u7ec8\u751f\u6210\u4ee3\u7801\u7684\u8fd8\u662f\u5728\u4f7f\u7528 Quasiquote\uff0c\u6240\u4ee5\u5982\u4f55\u9ad8\u6548\u5730\u5728 REPL \u4e2d\u5c1d\u8bd5 Quasiquote \u81f3\u5173\u91cd\u8981\u3002Quasiquote \u662f\u4f0a\u7538\u56ed\u5143\u7f16\u7a0b\u4e2d\u6700\u67af\u71e5\u6700\u8017\u65f6\u7684\u4e00\u4e2a\u73af\u8282\uff0c\u800c\u901a\u8fc7\u4f55\u79cd\u65b9\u5f0f\u53bb\u5c06\u5e38\u89c4\u7684\u4ee3\u7801\u548c\u5b8f\u751f\u6210\u7684\u4ee3\u7801\u8854\u63a5\u8d77\u6765\uff0c\u5219\u662f\u4f0a\u7538\u56ed\u4e2d\u4e00\u6247\u9690\u79d8\u7684\u5927\u95e8\u3002

\n

\u9605\u8bfb\u539f\u6587\uff1aScala \u5143\u7f16\u7a0b\uff1a\u5728\u65e5\u5fd7\u5e93\u4e2d\u7684\u5e94\u7528

\n" }, { "author": { "url": "member/zhenwang", "name": "zhenwang", "avatar": "https://cdn.v2ex.com/avatar/897e/5436/302965_large.png?m=1547131897" }, "url": "t/579808", "title": "\u5173\u4e8e\u300aScala \u7f16\u7a0b\uff083rd\uff09\u300b\u4e2d\uff0c 20.6 \u62bd\u8c61\u7c7b\u578b P424 \u7684\u7591\u95ee", "id": "t/579808", "date_published": "2019-07-03T15:59:28+00:00", "content_html": "

\u5728\u300a Scala \u7f16\u7a0b\uff08 3rd \uff09\u300b\u4e2d\uff0c20.6 \u62bd\u8c61\u7c7b\u578b\u8fd9\u4e00\u8282\u4e2d\uff0c\u672c\u4eba\u6709\u4e2a\u975e\u5e38\u4e0d\u89e3\u7684\u5730\u65b9\uff0c\u4e66\u4e2d\u63d0\u5230\uff1a

\n
class Food\n\nabstract class Animal {\n def eat(food: Food)\n}\n\nclass Grass extends Food\n\nclass Cow extends Animal {\n override def eat(food: Grass) = {}\t// \u8fd9\u4e0d\u80fd\u7f16\u8bd1\n}\t\t\t\t\t// \u5982\u679c\u80fd\u7684\u8bdd...\n\nclass Fish extends Food\n\nval bessy: Animal = new Cow\n\nbessy eat (new Fish) // ...\u4f60\u5c31\u80fd\u7ed9\u725b\u5403\u8349\u4e86\n
\n

\u672c\u4eba\u7406\u89e3 override \u8d85\u7c7b\u65b9\u6cd5\uff0c\u65b9\u6cd5\u53c2\u6570\u662f\u4e0d\u652f\u6301\u534f\u53d8\u7684\uff0c\u4f46\u662f\u4e0a\u6587\u5047\u8bbe\u901a\u8fc7\u7f16\u8bd1\uff0c\"bessy eat (new Fish)\"\u4e0d\u662f\u672c\u6765\u5c31\u4e0d\u80fd\u8fd0\u884c\u5417\uff1f Fish \u672c\u6765\u5c31\u4e0d\u80fd\u4e0a\u8f6c\u578b\u4e3a Grass \u5440\u3002\u4f55\u51b5\u5982\u4e0b\u91cd\u5199 eat \u65b9\u6cd5\u5c82\u4e0d\u662f\u540c\u6837\u6709\u8fd9\u4e2a\u95ee\u9898\uff1f

\n
class Cow extends Animal {\n override def eat(food: Food): Unit = {}\n}\n\nval cow = new Cow\n\ncow eat new Fish\n// \u80fd\u901a\u8fc7\u7f16\u8bd1\u4e14\u8fd0\u884c\n
\n

\u5c0f\u5f1f\u4e0d\u624d\uff0c\u4e00\u76f4\u6ca1\u7406\u89e3\uff0c\u5e0c\u671b\u5404\u4f4d\u5927\u4f6c\u8f7b\u55b7

\n" }, { "author": { "url": "member/KOSKERS", "name": "KOSKERS", "avatar": "https://cdn.v2ex.com/gravatar/f66bd8079b1f4bd57be19c9feeaa0bde?s=73&d=retro" }, "url": "t/557814", "title": "\u8bf7\u6559\u4e0b\u5173\u4e8e\u7528 Flume+kafka+Spark \u5b9e\u73b0\u5b9e\u65f6\u76d1\u63a7\u9519\u8bef\u65e5\u5fd7\u62a5\u8b66\u7684\u529f\u80fd", "id": "t/557814", "date_published": "2019-04-23T03:05:23+00:00", "content_html": "

\u5927\u5bb6\u597d\uff0c\u8bf7\u6559\u4e0b\u5173\u4e8e\u7528 Flume+kafka+Spark \u5b9e\u73b0\u5b9e\u65f6\u76d1\u63a7\u9519\u8bef\u65e5\u5fd7\u62a5\u8b66\u7684\u529f\u80fd\u3002\n\u76ee\u524d Flume \u548c Kafka \u7684\u76f8\u5173\u529f\u80fd\u5df2\u7ecf\u901a\u4e86\u3002\u4f46\u662f spark \u6ca1\u4ec0\u4e48\u4f7f\u7528\u7ecf\u9a8c\u3002\n\u770b\u7f51\u4e0a\u6559\u7a0b\u662f\u8981\u81ea\u5df1\u5199 Scala \u811a\u672c\u7136\u540e\u6253\u6210 jar \u5305\u7ed9 Spark \u6267\u884c\u3002

\n

\u6211\u60f3\u7528 spark \u5b9e\u73b0\u68c0\u6d4b kafka \u7684\u6570\u636e\u6d41\uff0c\u5982\u679c\u53d1\u73b0 error \u5b57\u6837\uff0c\u5c31\u53d1\u9001\u90ae\u4ef6\u3002\n\u8bf7\u95ee\u5404\u4f4d\u5927\u4f6c\u6709\u6ca1\u6709\u76f8\u5173\u811a\u672c\u6216\u8005\u6559\u7a0b\u7684\u5730\u5740\u53ef\u4ee5\u53c2\u8003\u7684\uff1f

\n

\u8c22\u8c22\u5927\u5bb6\u3002

\n" }, { "author": { "url": "member/sadhen", "name": "sadhen", "avatar": "https://cdn.v2ex.com/gravatar/3d6f03810b4c31313e99eab72f787b3f?s=73&d=retro" }, "url": "t/540173", "title": "\u95f2\u8bdd Scala Native: \u521d\u6b21\u89c1\u9762\uff0c\u8bf7\u591a\u591a\u5173\u7167", "id": "t/540173", "date_published": "2019-03-01T13:57:54+00:00", "content_html": "

\u9996\u5148\u7528 scala-native \u7684 g8 \u6a21\u677f\u521b\u5efa\u4e00\u4e2a\u811a\u624b\u67b6\uff1a

\n
$ sbt new scala-native/scala-native.g8\n...\nA minimal project that uses Scala Native. \n\nname [Scala Native Seed Project]: scala-native-playground\n\nTemplate applied in /path/to/scala-native-playground\n
\n

\u53ea\u8981\u8f93\u5165\u4f60\u60f3\u521b\u5efa\u7684\u5de5\u7a0b\u7684\u540d\u5b57\uff0c\u6574\u4e2a\u811a\u624b\u67b6\u5c31\u642d\u5efa\u8d77\u6765\u4e86\u3002

\n

\u6211\u4eec\u8bd5\u7740\u7f16\u8bd1\u8fd0\u884c\u4e00\u4e0b\u8fd9\u4e2a\u811a\u624b\u67b6\uff1a

\n
$ cd scala-native-playground\n$ sbt\nsbt:scala-native-playground> compile\n[info] Non-compiled module 'compiler-bridge_2.11' for Scala 2.11.12. Compiling...\n[info] Compilation completed in 6.179s.\n[info] Done compiling.\n[success] Total time: 177 s, completed 2019-2-24 10:24:54\nsbt:scala-native-playground> run\n[error] no clang60, clang-6.0, clang50, clang-5.0, clang40, clang-4.0, clang39, clang-3.9, clang38, clang-3.8, clang37, clang-3.7, clang found in $PATH. Install clang ( http://www.scala-native.org/en/latest/user/setup.html)\n[error] no clang++60, clang++-6.0, clang++50, clang++-5.0, clang++40, clang++-4.0, clang++39, clang++-3.9, clang++38, clang++-3.8, clang++37, clang++-3.7, clang++ found in $PATH. Install clang ( http://www.scala-native.org/en/latest/user/setup.html)\n[error] (nativeClang) no clang60, clang-6.0, clang50, clang-5.0, clang40, clang-4.0, clang39, clang-3.9, clang38, clang-3.8, clang37, clang-3.7, clang found in $PATH. Install clang ( http://www.scala-native.org/en/latest/user/setup.html)\n[error] (nativeClangPP) no clang++60, clang++-6.0, clang++50, clang++-5.0, clang++40, clang++-4.0, clang++39, clang++-3.9, clang++38, clang++-3.8, clang++37, clang++-3.7, clang++ found in $PATH. Install clang ( http://www.scala-native.org/en/latest/user/setup.html)\n[error] Total time: 0 s, completed 2019-2-24 10:26:01\n
\n

\u80fd\u6b63\u5e38\u7f16\u8bd1\uff0c\u4f46\u662f\u8fd0\u884c\u7684\u65f6\u5019\u4f1a\u62a5\u9519\u3002\u6309\u7167\u63d0\u793a\uff0c\u6211\u4eec\u9700\u8981\u5b89\u88c5\u4e00\u4e9b\u4f9d\u8d56\uff1a

\n
$ sudo apt install clang libunwind-dev\n
\n

\u7136\u540e\uff0c\u5728\u91cd\u65b0\u5728 sbt \u7684 REPL \u91cc\u9762\u6572 Run \u5c31\u53ef\u4ee5\u4e86\u3002\u5927\u6982\u662f\u8fd9\u6837\uff1a

\n
sbt:scala-native-playground> run\n[info] Linking (534 ms)\n[info] Discovered 800 classes and 4709 methods\n[info] Optimizing (debug mode) (742 ms)\n[info] Generating intermediate code (242 ms)\n[info] Produced 39 files\n[info] Compiling to native code (332 ms)\n[info] Linking native code (immix gc) (60 ms)\nHello, world!\n[success] Total time: 3 s, completed 2019-2-24 10:27:45\n
\n

\u6574\u4e2a\u8fc7\u7a0b\u8fd8\u662f\u6bd4\u8f83\u6d41\u7545\u7684\uff0c\u6ca1\u6709\u9047\u5230\u7279\u522b\u6d6a\u8d39\u65f6\u95f4\u7684\u4e8b\u60c5\uff0cby the way\uff0c\u6211\u6240\u7528\u7684 Scala Native \u7248\u672c\u662f 0.3.8\uff0c\u8fd9\u4e00\u70b9\u4eceproject/plugins.sbt\u53ef\u4ee5\u77e5\u9053\u3002

\n
$ cat project/plugins.sbt \naddSbtPlugin(\"org.scala-native\" % \"sbt-scala-native\" % \"0.3.8\")\n
\n

====> \u70b9\u6211\u8fd4\u56de\u6587\u7ae0\u76ee\u5f55 <====

\n" }, { "author": { "url": "member/zhutmost", "name": "zhutmost", "avatar": "https://cdn.v2ex.com/avatar/bf63/0e06/268254_large.png?m=1548154687" }, "url": "t/529566", "title": "Scala \u4e2d\u4e0d\u5e26\u5177\u4f53\u5b9e\u73b0\u7684 object \u662f\u4ec0\u4e48\u7528\u6cd5", "id": "t/529566", "date_published": "2019-01-22T10:55:55+00:00", "content_html": "

\u6211\u5728\u4ee3\u7801Link\u91cc\u770b\u5230

\n
import ...\n\nobject DataAssign\nobject InitAssign\n\ntrait DataPrimitives[T <: Data] {\n// ... Other codes\n
\n

\u5176\u4e2d\u4e0a\u9762\u8fd9\u4e24\u4e2a object \u8fd9\u91cc\u90fd\u6ca1\u6709\u5177\u4f53\u5b9e\u73b0\u3002\u8bf7\u95ee\u8fd9\u662f\u4ec0\u4e48\u7528\u6cd5\uff0c\u6709\u4ec0\u4e48\u53c2\u8003\u6750\u6599\u4e48\uff1f\n\u8c22\u8c22

\n" }, { "author": { "url": "member/bigeast", "name": "bigeast", "avatar": "https://cdn.v2ex.com/avatar/bd6f/d205/8854_large.png?m=1511001517" }, "url": "t/516332", "date_modified": "2018-12-10T23:20:35+00:00", "content_html": "\u5c31\u662f\u547d\u4ee4\u884c\u8f93\u5165 scala\uff0c\u8fdb\u5165 scala shell\uff0c\u6309 delete \u5220\u9664\u5b57\u7b26\uff0c\u5c4f\u5e55\u663e\u793a\u7a7a\u683c\uff0c\u4f46\u5b9e\u9645\u4e0a\u5b57\u7b26\u662f\u88ab\u5220\u9664\u4e86\u3002

readline \u5feb\u6377\u952e\u4e5f\u4e0d\u80fd\u7528\uff0c\u4e5f\u662f\u5728\u540e\u9762\u663e\u793a\u7a7a\u683c\u3002

\u64cd\u4f5c\u7cfb\u7edf\u662f macOS 10.14.1\uff0cscala \u662f brew install scala \u5b89\u88c5\u7684 2.12.7 \u7248\u672c\u3002\u5982\u679c\u4e00\u6b21\u6027\u8f93\u5165\u6b63\u786e\u7684\u7a0b\u5e8f\uff0c\u4e0d\u8fdb\u884c\u7f16\u8f91\uff0c\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\u3002

\u521a\u624d\u4ece\u5b98\u7f51\u4e0a\u4e0b\u8f7d scala-2.12.8.tgz \uff0c\u4e5f\u662f\u540c\u6837\u7684\u95ee\u9898\u3002

\u7ec8\u7aef\u672c\u6765\u662f iTerm2 + zsh\uff0c\u6362\u7528\u4e86\u7cfb\u7edf\u81ea\u5e26\u7684 terminal + /bin/bash \u8fd8\u662f\u540c\u6837\u7684\u95ee\u9898\u3002\u641c\u4e86\u534a\u5929\u6ca1\u770b\u5230\u6709\u7c7b\u4f3c\u95ee\u9898\u7684\uff0c\u56f0\u6270\u597d\u51e0\u5929\u4e86\u3002

\u5f55\u4e86\u4e2a\u5c4f\uff1a https://www.bilibili.com/video/av37498682/", "date_published": "2018-12-10T23:19:57+00:00", "title": "scala \u547d\u4ee4\u884c\u5220\u9664\u5b57\u7b26\u4e0d\u80fd\u6b63\u5e38\u663e\u793a", "id": "t/516332" }, { "author": { "url": "member/naga1003", "name": "naga1003", "avatar": "https://cdn.v2ex.com/avatar/fd62/f7a7/364123_large.png?m=1542619718" }, "url": "t/515228", "title": "spark \u6280\u672f\u9762\u8bd5\u88ab\u95ee\u5230\u4e2a\u95ee\u9898\uff0c\u6709\u70b9\u95ee\u61f5\u903c\u4e86\uff0c\u6c42\u6307\u70b9", "id": "t/515228", "date_published": "2018-12-07T01:36:27+00:00", "content_html": "

\u95ee\u9898\uff1a\u4ec0\u4e48\u5e94\u7528\u573a\u666f\u4e0b group by \u6bd4 reduce by \u66f4\u597d\uff1f

\n

\u5f53\u65f6\u61f5\u903c\u4e86\uff0c\u611f\u89c9\u4e0d\u662f\u9ed8\u8ba4\u90fd\u5c3d\u91cf\u4f7f\u7528 reduce by \u5417\uff0c\u73b0\u5728\u6211\u80fd\u60f3\u5230\u7684\u60c5\u51b5\u4e5f\u53ea\u6709\u5728 key \u503c\u975e\u5e38\u5c11\u7684\u60c5\u51b5\u4e0b\u7528 group by \u6bd4\u8f83\u597d\uff0c\u4e0d\u77e5\u9053\u5bf9\u4e0d\u5bf9\u3002

\n" }, { "author": { "url": "member/jiuziqie", "name": "jiuziqie", "avatar": "https://cdn.v2ex.com/gravatar/b7de6b12f1256514580a875818bb30ff?s=73&d=retro" }, "url": "t/509323", "date_modified": "2018-11-19T08:53:31+00:00", "content_html": "

\u518d\u770b twitter \u7684 Scala School\uff0c\u6709\u4e00\u6bb5\u4ee3\u7801\u770b\u4e0d\u61c2\uff0c\u7279\u6765\u6c42\u6559

\n
def f(s: String) = \"f(\" + s + \")\" \ndef g(s: String) = \"g(\" + s + \")\"\n\n// \u5c31\u662f\u8fd9\u91cc\u770b\u4e0d\u61c2\n\nval fComposeG = f _ compose g _\n
\n

\u60f3\u95ee\u4e00\u4e0b \u8fd9\u4e2a _ \u5728\u8fd9\u91cc\u662f\u4ec0\u4e48\u4f5c\u7528\uff1f \u8fd9\u662f\u4e00\u79cd\u4ec0\u4e48\u7528\u6cd5\u5440?

\n", "date_published": "2018-11-19T08:52:54+00:00", "title": "scala \u4e2d _ \u7684\u8bed\u6cd5\u95ee\u9898", "id": "t/509323" }, { "author": { "url": "member/ererermao", "name": "ererermao", "avatar": "https://cdn.v2ex.com/gravatar/0a99246e6fa6d9530db7c813a1afa6ca?s=73&d=retro" }, "url": "t/459794", "date_modified": "2018-06-02T04:49:05+00:00", "content_html": "

\u65e0\u610f\u95f4\u53d1\u73b0\u4e86 v2 \u8fd8\u6709 scala \u7684\u6807\u7b7e\uff0c\u53c8\u770b\u5230\u4e86t/431491\u3002
\n\u6240\u4ee5\u5c31\u5ba3\u4f20\u4e00\u4e0b telegram \u7684\u7fa4\u7ec4\u3002

\n", "date_published": "2018-06-02T04:46:24+00:00", "title": "[\u5c0f\u5e7f\u544a] scala \u4e2d\u6587 telegram \u7fa4\u7ec4\uff1a t.me/scala_zh", "id": "t/459794" }, { "author": { "url": "member/dolph", "name": "dolph", "avatar": "https://cdn.v2ex.com/gravatar/0a8793da174c08b1fe92447fd5eb73ee?s=73&d=retro" }, "url": "t/431491", "title": "Scala \u4e2d\u56fd\u793e\u533a\u3001\u5fae\u4fe1\u7fa4\uff1f", "id": "t/431491", "date_published": "2018-02-21T10:41:37+00:00", "content_html": "

\u4e4b\u524d\u7ecf\u9a8c\u4e3b\u8981\u662f Haskell \uff08\u5927\u5b66\u4ece\u5927\u4e00\u5199\u5230\u6bd5\u4e1a\uff09\uff0c\u73b0\u5728\u5de5\u4f5c\u4e86\u7ecf\u5e38\u5199 Scala\uff0c\u5ea7\u6807\u6df1\u5733\uff0c\u5e0c\u671b\u627e\u5230\u5927\u672c\u8425\u4e00\u8d77\u4ea4\u6d41 /\u4ecb\u7ecd\u5de5\u4f5c

\n

zhihu: https://www.zhihu.com/people/Martinawd

\n" }, { "author": { "url": "member/wqlin", "name": "wqlin", "avatar": "https://cdn.v2ex.com/avatar/769a/9342/165824_large.png?m=1700136157" }, "url": "t/421155", "title": "Scala's types of types \u8bd1\u6587", "id": "t/421155", "date_published": "2018-01-08T11:45:49+00:00", "content_html": "

\u770b\u5230\u4e00\u7bc7\u4e0d\u9519\u7684\u535a\u6587\uff0c\u4ecb\u7ecd Scala \u7c7b\u578b\u7cfb\u7edf\uff1aScala's types of types\u3002

\n

\u4e8e\u662f\u628a\u5b83\u7ffb\u8bd1\u6210\u4e2d\u6587\u4e86\uff0c\u8be6\u89c1 Scala \u4e2d\u4e0d\u540c\u7c7b\u578b\u7684\u7c7b\u578b\u3002\n\u4e0d\u8fc7\u6709\u51e0\u4e2a\u7ae0\u8282\u539f\u4f5c\u8005\u8fd8\u672a\u5b8c\u6210\u3002

\n

\u6b22\u8fce\u6307\u70b9\u548c\u5efa\u8bae\u3002

\n" }, { "author": { "url": "member/hanwang", "name": "hanwang", "avatar": "https://cdn.v2ex.com/avatar/08a1/cf3a/41551_large.png?m=1734360719" }, "url": "t/401833", "title": "Scala \u81ea\u5b66\u7b14\u8bb0-\u53c2\u8003\u4e66\u7c4d Programming in Scala \u7b2c\u4e09\u7248", "id": "t/401833", "date_published": "2017-10-30T02:34:28+00:00", "content_html": "

\u6700\u8fd1\u5f00\u59cb\u5b66\u4e60 Scala\uff0c\u60f3\u501f\u6b64\u673a\u4f1a\u5f00\u59cb\u953b\u70bc\u81ea\u5df1\u5199\u65e5\u5fd7\u548c\u603b\u7ed3\u3002\n\u521a\u603b\u7ed3\u4e86\u4e09\u7ae0\uff0c\u5e0c\u671b\u80fd\u4fdd\u6301\u66f4\u65b0\u3002:)

\n

Scala \u81ea\u5b66

\n

Scala \u6982\u89c8(\u7b2c\u4e00\u7bc7)

\n

Scala \u7684\u7c7b\u4e0e\u5bf9\u8c61(\u7b2c\u4e8c\u7bc7)

\n

\u53c2\u8003\u4e66\u7c4d

\n

Programming in Scala \u7b2c\u4e09\u7248

\n" }, { "author": { "url": "member/tttty", "name": "tttty", "avatar": "https://cdn.v2ex.com/avatar/8608/473e/225750_large.png?m=1492263098" }, "url": "t/400979", "title": "scala \u5982\u4f55\u5b9e\u73b0\u67d0\u4e2a\u4ee3\u7801\u6bb5\u540c\u4e00\u65f6\u523b\u53ea\u80fd\u6709\u4e00\u4e2a\u8fdb\u7a0b\u5728\u8bfb\uff0c\u5176\u4ed6\u8fdb\u7a0b\u53ea\u80fd\u7b49\u5f85\u3002", "id": "t/400979", "date_published": "2017-10-26T07:56:03+00:00", "content_html": "" }, { "author": { "url": "member/whoam1", "name": "whoam1", "avatar": "https://cdn.v2ex.com/avatar/f8b6/0474/258108_large.png?m=1515642731" }, "url": "t/395949", "title": "\u8bf7\u95ee\u8be5\u600e\u6837\u7ed3\u5408\u5b9e\u8df5\u53bb\u5b66\u4e60 Scala\uff0c\u8c22\u8c22\uff01", "id": "t/395949", "date_published": "2017-10-08T07:55:45+00:00", "content_html": "

\u6700\u8fd1\u5b66\u4e60 Scala\uff0c\u5728\u770b\u300a Scala \u7f16\u7a0b\u300b(programming in scala)\uff0c\u770b\u5230\u4e86 20 \u7ae0\uff0c\u73b0\u5728\u77e5\u8bc6\u7279\u522b\u96f6\u6563\uff0c\u5b66\u5f97\u5f88\u4e0d\u8e0f\u5b9e\u3002\u4e5f\u5c1d\u8bd5\u8fc7\u5b66\u4e60 play \u6846\u67b6\uff0c\u7f51\u4e0a\u67e5\u5230\u7684\u8d44\u6599\u4e0d\u591a\uff08\u4e2d\u6587\u82f1\u6587\u611f\u89c9\u90fd\u633a\u5c11\uff09\uff0c\u53ef\u4ee5\u501f\u9274\u7684\u4f8b\u5b50\u4e5f\u5f88\u5c11\uff08\u4e3b\u8981\u662f\u5176\u4e2d\u7528\u4e86\u5f88\u591a\u5176\u5b83\u7684\u5e93\uff0c\u5bfc\u81f4\u6211\u73b0\u5728\u53bb\u5199\u7684\u8bdd\u53ea\u80fd \u201c\u590d\u5236\u7c98\u8d34\u201d \u5176\u4e2d\u7684\u4ee3\u7801\uff0c\u5f88\u591a\u539f\u7406\u4e0d\u7406\u89e3\uff09\u3002

\n

\u8bf7\u95ee\u600e\u6837\u7ed3\u5408\u9879\u76ee\u53bb\u5b9e\u8df5\u5462\uff1f\u6216\u8005\u8bf4\u54ea\u4e9b\u6846\u67b6\uff08\u6a21\u5757\uff09\u9002\u5408\u521d\u5b66\u8005\u5b66\u4e60\uff08\u9605\u8bfb\uff09\u5462\uff1f\u5e0c\u671b\u5927\u5bb6\u80fd\u8c08\u8c08\u81ea\u5df1\u7684\u60f3\u6cd5\uff0c\u8c22\u8c22\uff01

\n" }, { "author": { "url": "member/joymufeng", "name": "joymufeng", "avatar": "https://cdn.v2ex.com/gravatar/c22191cd46ec17e6e2a5796a55a115b1?s=73&d=retro" }, "url": "t/383113", "title": "\u6b22\u8fce\u6765\u8bbf\u5f00\u653e\u6e90\u7801\u7684 PlayScala \u793e\u533a(http://www.playscala.cn)", "id": "t/383113", "date_published": "2017-08-15T07:38:16+00:00", "content_html": "

Play Framework \u4ece\u95ee\u4e16\u81f3\u4eca\u5df2\u7ecf\u5341\u4e2a\u5e74\u5934\u4e86\uff0c\u4f46\u662f\u53ef\u60dc\u7684\u662f\u8fd9\u4e48\u4f18\u79c0\u7684\u6846\u67b6\u5728\u56fd\u5185\u5374\u9c9c\u4e3a\u4eba\u77e5\u3002\u5c24\u5176\u662f\u5f53 Play Framework 2.x \u53d1\u5e03\u4ee5\u540e\uff0c\u57fa\u4e8e Scala \u8bed\u8a00\u91cd\u5199\u4e86\u6574\u4e2a\u6846\u67b6\u3002\u5f53 Scala \u548c Play Framework \u76f8\u9047\uff0c\u8fd9\u672c\u8be5\u662f\u4e00\u6bb5\u7f8e\u597d\u7684\u4f73\u8bdd\uff0c\u53ef\u7ed3\u5c40\u5374\u662f\uff0c\u9762\u5bf9 Scala \u8bed\u8a00\u66f4\u591a\u7684\u4eba\u671b\u800c\u5374\u6b65\u3002 \u8fd9\u5176\u5b9e\u90fd\u662f\u56e0\u4e3a\u4eba\u4eec\u6f5c\u610f\u8bc6\u91cc\u5bf9\u672a\u77e5\u4e8b\u7269\u5145\u6ee1\u6050\u60e7\u3002\u4f46\u5176\u5b9e Scala \u6ca1\u90a3\u4e48\u53ef\u6015\uff0c\u76f8\u53cd\u4e86\u89e3\u5b83\u4e00\u70b9\u4f60\u4f1a\u89c9\u5f97\u5b83\u5f88\u53ef\u7231\u3002\u4f8b\u5982\u5f88\u591a\u4eba\u770b\u5230 Scala \u4f7f\u7528::\u62fc\u63a5\u5143\u7d20\uff0c\u4f7f\u7528:::\u62fc\u63a5\u5217\u8868\uff0c\u4f8b\u5982\uff1a

\n
val list1 = List(\"c\", \"a\", \"l\", \"a\")\nval list2 = s :: list1 // list2: (s, c, a, l, a)\nval list3 = List(\"p\", \"l\", \"a\", \"y\")\nval list4 = list3 ::: list2 // list4: (p, l, a, y, s, c, a, l, a)\n
\n

\u7136\u540e\u5c31\u5f00\u59cb\u5410\u69fd\uff1aWTF\uff0c\u8fd9\u662f\u4ec0\u4e48\u9b3c\uff1f \u522b\u6025\uff0c\u7ed9\u6211\u4e00\u5206\u949f\u65f6\u95f4\uff0c\u770b\u770b\u80fd\u5426\u8bf4\u670d\u4f60!\n\u9996\u5148\u4f60\u9700\u8981\u4e86\u89e3\u4e00\u4e2a\u57fa\u672c\u6982\u5ff5\uff0c\u5728 Scala \u4e2d\u4e00\u5207\u90fd\u662f\u65b9\u6cd5\uff1a

\n
\"a\" * 3 //\u7b49\u4ef7\u4e8e: \"a\".*(3)\n2 - 1 //\u7b49\u4ef7\u4e8e: 2.-(1)\n
\n

\u6240\u4ee5\u6ca1\u9519\uff0c\u4f60\u4e4b\u524d\u770b\u5230\u7684::\u548c:::\u81ea\u7136\u4e5f\u662f\u65b9\u6cd5\uff0c\u53ea\u4e0d\u8fc7\u662f\u4e3a\u4e86\u7b80\u6d01\uff0c\u7701\u7565\u4e86.\u548c()\u3002List \u662f\u7531 head \u548c tail \u62fc\u63a5\u5728\u4e00\u8d77\u7684\u9012\u5f52\u7ed3\u6784(\u8fd9\u79cd\u8bbe\u8ba1\u5728\u6a21\u5f0f\u5339\u914d\u65f6\u975e\u5e38\u65b9\u4fbf)\u3002List \u7684\u5b9a\u4e49\u53ef\u4ee5\u5199\u6210\u5982\u4e0b\u5f62\u5f0f:

\n
head :: tail\n
\n

head \u662f\u9996\u5143\u7d20\uff0ctail \u662f\u5269\u4f59\u7684 List\u3002\u4ed4\u7ec6\u77a7\u77a7\uff0c::\u770b\u8d77\u6765\u662f\u4e0d\u662f\u5f88\u50cf\u80f6\u6c34\uff0c\u5c06\u5217\u8868\u7684\u5934\u548c\u5c3e\u7d27\u7d27\u5730\u7c98\u5728\u4e00\u8d77\uff0c\u66f4\u8fdb\u4e00\u6b65\uff0c:::\u53ef\u4ee5\u628a\u4e24\u4e2a\u5217\u8868\u7c98\u5728\u4e00\u8d77\u3002\u8fd9\u6837\u7684\u4ee3\u7801\u662f\u4e0d\u662f\u5f88\u7b80\u6d01\uff0c\u5e76\u4e14\u5bcc\u6709\u8868\u8fbe\u529b\uff01 \u5728 Scala \u4e2d\uff0c\u8fd9\u79cd\u7b80\u6d01\u7684\u8bbe\u8ba1\u6bd4\u6bd4\u7686\u662f\uff0c\u4f8b\u5982\u6211\u4eec\u518d\u6765\u770b\u770b\u5982\u4f55\u6784\u5efa\u4e00\u4e2a Map \u5b9e\u4f8b\uff1a

\n
val map = Map(\"name\" -> \"PlayScala \u793e\u533a\", \"url\" -> \"http://www.playscala.cn\")\n
\n

\u611f\u53d7\u4e00\u4e0b\uff0c\u662f\u4e0d\u662f\u975e\u5e38\u6e05\u6670\u660e\u4e86\u3002 \u5f53\u7136 Scala \u7684\u9b45\u529b\u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u5f53\u4f60\u6162\u6162\u4e86\u89e3\u5b83\u65f6\uff0c\u4f60\u4f1a\u6162\u6162\u6df1\u9677\u800c\u65e0\u6cd5\u81ea\u62d4\u3002\n\u8bb2\u4e86\u90a3\u4e48\u591a\uff0c\u6211\u53ea\u60f3\u544a\u8bc9\u4f60 Scala \u5e76\u4e0d\u53ef\u6015\uff0c\u5176\u5b9e\u5728 Play Framework \u4e2d\uff0c\u4f60\u6839\u672c\u5c31\u4e0d\u9700\u8981\u62b1\u7740 Scala \u4e66\u7c4d\u5543\u5b8c\u518d\u5199\u4ee3\u7801\uff0cPlayScala \u793e\u533a\u4f1a\u4e3a\u4f60\u51c6\u5907\u4e00\u7bc7 30 \u5206\u949f\u7684\u4e3a Play \u521d\u5b66\u8005\u51c6\u5907\u7684 Scala \u57fa\u7840\u77e5\u8bc6\uff0c\u8bfb\u5b8c\u4f60\u5c31\u53ef\u4ee5\u6295\u5165 Play Framework \u7684\u6000\u62b1\u4e86\u3002

\n

\u597d\u4e86\uff0c\u56de\u5f52\u6b63\u9898\uff0c\u90a3\u4e3a\u4ec0\u4e48\u8981\u521b\u5efa PlayScala \u793e\u533a\u5462\uff1f \u4e3b\u8981\u539f\u56e0\u662f\u56fd\u5185 Play Framework \u7684\u7b2c\u4e00\u624b\u4e2d\u6587\u5b66\u4e60\u8d44\u6599\u975e\u5e38\u7a00\u7f3a\uff0c\u867d\u7136\u5728\u7f51\u4e0a\u53ef\u4ee5\u627e\u5230\u4e00\u4e9b\u6559\u7a0b\uff0c\u4f46\u662f\u77e5\u8bc6\u7684\u788e\u7247\u5316\u5f88\u4e25\u91cd\uff0c\u5e76\u4e14\u5f88\u591a\u8d28\u91cf\u8f83\u5dee\u7684\u6587\u7ae0\u4f1a\u5f71\u54cd\u521d\u5b66\u8005\u7684\u8ba4\u77e5\u3002PlayScala \u793e\u533a\u6b63\u662f\u57fa\u4e8e\u8fd9\u6837\u7684\u539f\u56e0\u800c\u8bde\u751f\u7684\uff0c\u5e76\u4e14\u5e0c\u671b\u80fd\u591f\u5b9e\u73b0\u4ee5\u4e0b\u51e0\u4e2a\u613f\u666f\uff1a

\n\n

\u5e0c\u671b\u5728\u5927\u5bb6\u7684\u4e00\u8d77\u52aa\u529b\u4e0b\uff0c\u53ef\u4ee5\u8ba9\u66f4\u591a\u7684\u4eba\u4e86\u89e3\u5e76\u52a0\u5165 Play Framework \u7684\u5f00\u53d1\u884c\u5217\uff0c\u4e0d\u65ad\u589e\u5f3a Play Framework \u5728\u56fd\u5185\u7684\u5f71\u54cd\u529b\u3002

\n
\n

\u6b22\u8fce\u6765\u8bbf\uff1a PlayScala \u793e\u533a

\n
\n" }, { "author": { "url": "member/mscsky", "name": "mscsky", "avatar": "https://cdn.v2ex.com/gravatar/71df0896370109d68593a5fbe773a2d9?s=73&d=retro" }, "url": "t/344448", "date_modified": "2017-03-02T13:36:14+00:00", "content_html": "

\u5982\u9898\uff0c\u4e0b\u8f7d\u4e86 2.9g \u7684\u6570\u636e\u4e0d\u719f\u6089 scala \u4e0d\u77e5\u9053\u600e\u4e48\u8bfb\u53d6\u51fa\u6765\nreadme \u5982\u4e0b

\n

\u201c\u5982\u679c\u4f7f\u7528 scala,\u53ef\u4ee5\u4f7f\u7528\u5982\u4e0b case class \u89e3\u6790\u51fa\u6570\u636e

\n
\ncase class Answer(answer_id: Long,\n\t\t\t\t question_id: Long,\n\t\t\t\t question_title: String, \n\t\t\t\t question_topics: Array[Long], \n\t\t\t\t votup_count: Long)\n\ncase class Article(id: Long, title: String, votup_count: Long)\ncase class Question(question_followers: Long, \n\t\t\t\t\tquestion_id: Long, \n\t\t\t\t\tquestion_title: String, \n\t\t\t\t\tquestion_topics: Array[Long])\n\ncase class userStringId(CREATED_ANSWERS: Array[Answer],\n CREATED_ARTICLES: Array[Article],\n CREATED_QUESTIONS: Array[Question],\n FOLLOWED_QUESTIONS: Array[Question],\n VOTEUPED_ANSWERS: Array[Answer],\n VOTEUPED_ARTICLES: Array[Article],\n followers_count: Long,\n id: String)\n\ncase class userDigitalId(CREATED_ANSWERS: Array[Answer],\n CREATED_ARTICLES: Array[Article],\n CREATED_QUESTIONS: Array[Question],\n FOLLOWED_QUESTIONS: Array[Question],\n VOTEUPED_ANSWERS: Array[Answer],\n VOTEUPED_ARTICLES: Array[Article],\n followers_count: Long,\n id: Long)\n
\n", "date_published": "2017-03-02T13:34:59+00:00", "title": "\u8bf7\u95ee\u6211\u4e0b\u8f7d\u4e86\u4e4c\u4e91\u7684 digatalAllData\uff0c\u8bf4\u660e\u4e0a\u5199\u7740\u7528 case class \u89e3\u6790\u51fa\u6570\u636e\uff0c\u90a3\u6709\u6ca1\u6709\u8be6\u7ec6\u7684\u65b9\u6cd5\uff1f", "id": "t/344448" }, { "author": { "url": "member/codingKingKong", "name": "codingKingKong", "avatar": "https://cdn.v2ex.com/avatar/9b17/9374/123963_large.png?m=1718892592" }, "url": "t/343813", "title": "\u563f,Scala \u8fd9\u8d27\u4f60\u4eec\u90fd\u5e94\u7528\u5728\u4ec0\u4e48\u9879\u76ee\u4e0a\u4e86,\u6253\u7b97\u63a5\u89e6\u8bd5\u8bd5\u5462~", "id": "t/343813", "date_published": "2017-02-28T07:13:38+00:00", "content_html": "

\u5982\u9898.\u5df2\u53d1\u73b0\u7684\u597d\u50cf\u6709 spark.

\n" }, { "author": { "url": "member/tommark", "name": "tommark", "avatar": "https://cdn.v2ex.com/gravatar/27ce01b463ae25417ddda51a1502541e?s=73&d=retro" }, "url": "t/333960", "title": "sbt package \u5c06 scala \u6e90\u4ee3\u7801\u4e00\u5e76\u6253\u5305\u8fdb\u53bb\uff1f", "id": "t/333960", "date_published": "2017-01-11T12:39:48+00:00", "content_html": "

\u5982\u9898\uff0c\u600e\u4e48\u5c06\u6e90\u7801\u8fde\u540c\u5b57\u8282\u7801\u4e00\u5e76\u6253\u5305\u5728\u4e00\u8d77\uff0c\u8fd9\u6837\u53ef\u4ee5\u76f4\u63a5\u67e5\u770b jar \u91cc\u6bcf\u4e2a class \u7684\u6e90\u7801\uff1f

\n" }, { "author": { "url": "member/twm", "name": "twm", "avatar": "https://cdn.v2ex.com/avatar/a67f/f68f/24068_large.png?m=1364200485" }, "url": "t/328842", "title": "\u5927\u5bb6\u90fd\u7528\u4ec0\u4e48 orm \u6216 mysql db library", "id": "t/328842", "date_published": "2016-12-20T04:37:06+00:00", "content_html": "" }, { "author": { "url": "member/wqlin", "name": "wqlin", "avatar": "https://cdn.v2ex.com/avatar/769a/9342/165824_large.png?m=1700136157" }, "url": "t/310640", "date_modified": "2017-02-26T08:40:45+00:00", "content_html": "\u672c\u4eba\u73b0\u5c31\u8bfb\u4e8e\u5e7f\u5dde\u67d0\u5de5, \u662f\u4e00\u540d\u5927\u4e09\u5b66\u751f, \u5bf9 Scala \u975e\u5e38\u611f\u5174\u8da3, \u76ee\u524d\u5728 Coursera \u4e0a\u81ea\u5b66\u5b8c Scala \u7cfb\u5217\u8bfe\u7a0b\u7684\u524d\u4e09\u95e8, \u7136\u540e\u60f3\u6765 V \u7ad9\u4e86\u89e3\u4e0b\u60c5\u51b5, \u56e0\u4e3a\u6ca1\u6709\u627e\u5230 Scala \u8282\u70b9, \u5c31\u60f3\u7740\u53d1\u5230 Java \u8282\u70b9\u597d\u4e86.\r
\u60f3\u95ee\u8fd9\u51e0\u4e2a\u95ee\u9898\u554a:\r
1. \u5404\u4f4d V \u53cb\u5728\u5de5\u4f5c\u6216\u8005\u5b66\u4e60\u4e2d\u542c\u8fc7\u6216\u8005\u4f7f\u7528\u8fc7 Scala \u5417? \u5982\u679c\u6709\u7684\u8bdd, \u80fd\u8bf4\u4e0b\u4f60\u4f7f\u7528\u8fd9\u8bed\u8a00\u7684\u611f\u53d7\u5417? \r
2. \u60f3\u8bf7\u95ee\u4e0b\u6709 V \u53cb\u77e5\u9053\u5e7f\u5dde\u6216\u8005\u6df1\u5733\u54ea\u91cc\u6709\u516c\u53f8\u62db Scala \u5b9e\u4e60\u6216\u8005\u6709 Scala \u6821\u62db, \u56e0\u4e3a\u81ea\u5df1\u5728\u62db\u8058\u7f51\u7ad9\u4e0a\u6ca1\u600e\u4e48\u770b\u5230\u6709\u8fd9\u65b9\u9762\u7684\u516c\u53f8\u5728\u62db\u4eba, \u4e3b\u8981\u662f\u4e0a\u6d77 \u5317\u4eac\u8fd9\u4e9b\u5730\u65b9\u624d\u6709\u4f7f\u7528 Scala \u7684\u516c\u53f8. \u5982\u679c\u77e5\u9053\u7684\u8bdd, \u80fd\u9ebb\u70e6\u544a\u77e5\u4e00\u4e0b\u5417?\r
\u8c22\u8c22\u5566~~~", "date_published": "2016-10-05T03:32:49+00:00", "title": "\u8be2\u95ee\u6709\u5173 Scala \u7684\u5b9e\u4e60, \u5de5\u4e1a\u5e94\u7528\u7b49", "id": "t/310640" }, { "author": { "url": "member/hujianxin", "name": "hujianxin", "avatar": "https://cdn.v2ex.com/avatar/9024/ae2d/97887_large.png?m=1555229655" }, "url": "t/308835", "title": "sbt \u7684\u81ea\u5b9a\u4e49 resolvers \u88ab-Dsbt.override.build.repos=true \u8986\u76d6\u6389\u4e86", "id": "t/308835", "date_published": "2016-09-25T07:30:34+00:00", "content_html": "

\u7531\u4e8e\u9879\u76ee\u7528\u5230\u4e86 HDP \u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6211\u5728 build.sbt \u91cc\u9762\u6dfb\u52a0\u4e86 resovlers \uff0c

\n
resolvers += \"Hortonworks Repository\" at \"http://repo.hortonworks.com/content/repositories/releases/\"\n\nresolvers += \"Hortonworks Jetty Maven Repository\" at \"http://repo.hortonworks.com/content/repositories/jetty-hadoop/\"\n
\n

\u4f46\u662f\uff0c\u5982\u679c\u6211\u4f7f\u7528-Dsbt.override.build.repos=true \u7684\u8bdd\uff0c\u8fd9\u4e2a resolvers \u5c31\u4f1a\u88ab\u8986\u76d6\u6389\uff0c\u6ca1\u6cd5\u4f7f\u7528\u4e86\uff0c\u6709\u4eba\u80fd\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u5417\uff1f\u611f\u8c22

\n" }, { "author": { "url": "member/ideaplat", "name": "ideaplat", "avatar": "https://cdn.v2ex.com/gravatar/eb16ea1756ac152d4d606705926a596e?s=73&d=retro" }, "url": "t/296998", "date_modified": "2017-02-26T08:40:55+00:00", "content_html": "", "date_published": "2016-08-04T01:32:08+00:00", "title": "\u8c01\u80fd\u8bf4\u8bf4 scala \u548c python \u7684\u533a\u522b\uff0c\u6709\u6728\u6709\u5fc5\u8981\u5b66\u4e60 scala\uff1f", "id": "t/296998" }, { "author": { "url": "member/hujianxin", "name": "hujianxin", "avatar": "https://cdn.v2ex.com/avatar/9024/ae2d/97887_large.png?m=1555229655" }, "url": "t/295396", "title": "IDEA \u7684 sbt \u4f9d\u8d56\u89e3\u51b3\u95ee\u9898", "id": "t/295396", "date_published": "2016-07-27T23:58:21+00:00", "content_html": "

\u5728 IDEA \u4e2d\uff0c build.sbt \u4e2d\uff0c\u6709\u7684\u4f9d\u8d56\u4e0b\u9762\u6709\u7ea2\u8272\u6ce2\u6d6a\u7ebf\uff0c\u663e\u793a\u6709\u4f9d\u8d56\u6ca1\u6709\u89e3\u51b3\uff0c\u4f46\u662f\u4e8b\u5b9e\u662f\u8fd9\u4e9b\u4f9d\u8d56\u5305\u5df2\u7ecf\u4e0b\u8f7d\u4e0b\u6765\u4e86\uff0c\u4e5f\u6ca1\u6709\u4f9d\u8d56\u6ca1\u89e3\u51b3\u7684\u62a5\u9519\uff0c\u5728\u7a0b\u5e8f\u4e2d\u53ef\u4ee5\u4f7f\u7528\u3002

\n

\u6709\u670b\u53cb\u9047\u5230\u8fc7\u8fd9\u4e2a\u95ee\u9898\u5417\uff1f

\n" }, { "author": { "url": "member/fengkuok", "name": "fengkuok", "avatar": "https://cdn.v2ex.com/avatar/3442/f911/53910_large.png?m=1419646658" }, "url": "t/276740", "date_modified": "2016-05-06T06:03:45+00:00", "content_html": "", "date_published": "2016-05-06T05:23:31+00:00", "title": "\u8bdd\u8bf4 V2 \u91cc\u6709\u641e Scala \u7684\u540c\u5b66\u5417\uff1f", "id": "t/276740" }, { "author": { "url": "member/pc10201", "name": "pc10201", "avatar": "https://cdn.v2ex.com/avatar/07bf/e497/41279_large.png?m=1761100385" }, "url": "t/272075", "date_modified": "2016-04-18T12:56:46+00:00", "content_html": "\u738b\u57a0\u7684\u6587\u7ae0\u300a\u7ed9 Java \u8bf4\u53e5\u516c\u9053\u8bdd\u300b\r
http://www.yinwang.org/blog-cn/2016/01/18/java\r
\r
\u53e6\u5916 JB \u5bb6\u4e5f\u65b0\u51fa\u4e00\u4e2a\u8bed\u8a00\uff0c kotlin", "date_published": "2016-04-18T12:52:49+00:00", "title": "\u8fd8\u6709\u5fc5\u8981\u5b66 scala \u5417\uff1f", "id": "t/272075" }, { "author": { "url": "member/sadhen", "name": "sadhen", "avatar": "https://cdn.v2ex.com/gravatar/3d6f03810b4c31313e99eab72f787b3f?s=73&d=retro" }, "url": "t/266847", "title": "Scala China \u7684 Telegram \u7fa4", "id": "t/266847", "date_published": "2016-03-28T06:50:39+00:00", "content_html": "https://telegram.me/joinchat/CrT-5wdboBqVUghsU98uvA" }, { "author": { "url": "member/zxgngl", "name": "zxgngl", "avatar": "https://cdn.v2ex.com/avatar/11e4/449a/148346_large.png?m=1458378928" }, "url": "t/257643", "title": "Scala 2.12 will require Java 8.", "id": "t/257643", "date_published": "2016-02-19T07:15:39+00:00", "content_html": "

http://scala-lang.org/news/2.12-roadmap/

\n" }, { "author": { "url": "member/gaocegege", "name": "gaocegege", "avatar": "https://cdn.v2ex.com/avatar/fe83/e723/95688_large.png?m=1662623384" }, "url": "t/254642", "title": "\u4eff\u7167 scrapy \u7684\u8bbe\u8ba1\u7528 scala \u5199\u4e86\u4e00\u4e2a\u722c\u866b\u6846\u67b6", "id": "t/254642", "date_published": "2016-01-31T10:55:10+00:00", "content_html": "homepage: http://gaocegege.com/scrala \r
github: https://github.com/gaocegege/scrala \r
\r
\u5199\u7740\u73a9\u7684\uff0c\u7528\u6765\u5b66\u4e60 scala \u7684\u9020\u8f6e\u5b50\u4f5c\u54c1\uff0c\u4ee3\u7801\u5f88\u7b80\u5355\uff0c\u8bfb\u8d77\u6765\u5f88\u5feb\uff0c\u6709\u611f\u5174\u8da3\u7684\u540c\u5b66\u4e00\u8d77\u6765\u5440(\u6342\u8138" }, { "author": { "url": "member/WeberXie", "name": "WeberXie", "avatar": "https://cdn.v2ex.com/gravatar/02f28512a2e978f6b6b27b824095a6f9?s=73&d=retro" }, "url": "t/226182", "title": "V2EX \u91cc\u6709 scala \u7231\u597d\u8005\u5417\uff1f", "id": "t/226182", "date_published": "2015-10-07T16:01:27+00:00", "content_html": "

\u56fd\u5e86\u628a scala \u7f16\u7a0b\u770b\u4e86\u5927\u534a\uff0c\u6709\u4ec0\u4e48\u7ec3\u624b\u7684\u5c0f\u9879\u76ee\u4e48\uff1f\u6709\u6ca1\u6709\u7ec4\u7ec7\u5440\uff1f

\n" }, { "author": { "url": "member/chanlion", "name": "chanlion", "avatar": "https://cdn.v2ex.com/gravatar/9be8d16c041623037928ae43a865d69c?s=73&d=retro" }, "url": "t/226148", "title": "\u6b64\u5904\u6709 Scala \u7231\u597d\u8005\u5417?", "id": "t/226148", "date_published": "2015-10-07T13:03:30+00:00", "content_html": "

Java \u867d\u7136\u662f\u4f7f\u7528\u4eba\u6570\u6700\u591a\u7684\u8bed\u8a00, \u4f46\u662f\u5176\u5197\u4f59\u7684\u4e66\u5199\u65b9\u5f0f\u4e3a\u4eba\u6240\u8bdf\u75c5. Scala \u4e0d\u4ec5\u5b8c\u5168\u517c\u5bb9 Java \u800c\u4e14\u8fd8\u5e26\u6765\u4e86\u51fd\u6570\u5f0f\u7f16\u7a0b\u4ee5\u53ca Actor \u6a21\u578b\u5e76\u53d1\u673a\u5236. \u6211\u73b0\u5728\u5df2\u7ecf\u5bf9 Scala \u8bed\u8a00\u8822\u8822\u6b32\u52a8\u4e86, \u6562\u95ee V2EX \u6709 Scala \u7231\u597d\u8005\u5417? \u4f60\u4eec\u64b8 Scala \u611f\u89c9\u5982\u4f55? \u6709\u4ec0\u4e48\u5207\u8eab\u611f\u53d7\u7684\u597d\u5904\u6216\u574f\u5904\u5417?

\n" }, { "author": { "url": "member/yhf", "name": "yhf", "avatar": "https://cdn.v2ex.com/avatar/bed4/02ff/52160_large.png?m=1427716331" }, "url": "t/202332", "title": "10 Scala One Liners to Impress Your Friends", "id": "t/202332", "date_published": "2015-06-30T15:26:59+00:00", "content_html": "

https://mkaz.com/2011/05/31/10-scala-one-liners-to-impress-your-friends/

\n" }, { "author": { "url": "member/gaocegege", "name": "gaocegege", "avatar": "https://cdn.v2ex.com/avatar/fe83/e723/95688_large.png?m=1662623384" }, "url": "t/197394", "date_modified": "2015-06-10T00:02:33+00:00", "content_html": "\u4e3e\u4e2a\u4f8b\u5b50\r
\r
https://gist.github.com/gaocegege/689f926645c820993804
\r
\r
\u8fd9\u91cc\u7684"???"\u603b\u662f\u5728ping\u548cpongexit\u524d\u5c31\u8f93\u51fa\u4e86\uff0c\u6709\u4ec0\u4e48\u529e\u6cd5\u80fd\u591f\u4f7f\u5f97\u7a0b\u5e8f\u5728\u6240\u6709\u7684Actor\u7ed3\u675f\u540e\uff0c\u518d\u6267\u884c\u4e48~", "date_published": "2015-06-10T00:00:13+00:00", "title": "\u6709\u4ec0\u4e48\u65b9\u6cd5\uff0c\u80fd\u591f\u4f7f\u5f97\u4e3b\u7a0b\u5e8f\u5728 Actor \u6267\u884c\u4e86 exit \u540e\u624d\u7ee7\u7eed\u6267\u884c\u4e48~\uff1f", "id": "t/197394" }, { "author": { "url": "member/wenLiangcan", "name": "wenLiangcan", "avatar": "https://cdn.v2ex.com/avatar/ad7b/25e2/19048_large.png?m=1333550482" }, "url": "t/195175", "title": "\u674e\u5149\u8000\u4f3c\u4e4e\u6709\u4e2a\u80fd\u79f0\u4e3a Scala \u5927\u795e\u7684\u5b59\u5b50\uff01", "id": "t/195175", "date_published": "2015-05-31T15:58:25+00:00", "content_html": "GitHub \u4e0a\u6709\u4e2a\u53eb Li Haoyi \u7684\u5927\u795e\r
\r
https://github.com/lihaoyi\r
\r
\u5199\u4e86\u597d\u591a\u70ab\u9177\u7684\u9879\u76ee\uff0c\u4ee5 Scala \u4e3a\u4e3b\uff0c\u6bd4\u5982\u8fd9\u4e9b\uff1a\r
\r
https://github.com/lihaoyi/scalatags\r
https://github.com/lihaoyi/Metascala\r
https://github.com/lihaoyi/Scalite\r
https://github.com/lihaoyi/Scalatex\r
\r
\u4e0d\u8fc7\u77e5\u9053\u4ed6\u662f\u770b\u5230\u8fd9\u4e2a Python \u7684\u9879\u76ee\uff1a\r
https://github.com/lihaoyi/macropy\r
\r
\u611f\u89c9\u50cf\u534e\u4eba\uff0c\u4e0d\u8fc7\u4e3b\u9875\u6ca1\u6709\u4efb\u4f55\u94fe\u63a5\uff0c\u627e\u4e0d\u5230\u4ed6\u6709\u535a\u5ba2\u4ec0\u4e48\u7684\u3002\r
\u521a\u521a\u65e0\u804a google \u4e86\u4e00\u4e0b who is li haoyi\uff0c\u7ed3\u679c\u51fa\u6765\u8fd9\u4e2a\u7ef4\u57fa\u9875\u9762\uff1a\r
\r
http://en.wikipedia.org/wiki/Lee_Kuan_Yew%27s_family_tree\r
\r
\u5982\u679c\u5c31\u662f\u672c\u4eba\u7684\u8bdd\u4f3c\u4e4e\u662f\u674e\u5149\u8000\u7684\u5b59\u5b50\uff0c\u674e\u663e\u9f99\u7684\u513f\u5b50\u3002\u3002\u3002" }, { "author": { "url": "member/Livid", "name": "Livid", "avatar": "https://cdn.v2ex.com/avatar/c4ca/4238/1_large.png?m=1778546420" }, "url": "t/184586", "title": "Scala on Android", "id": "t/184586", "date_published": "2015-04-18T09:50:37+00:00", "content_html": "http://macroid.github.io/ScalaOnAndroid.html" }, { "author": { "url": "member/esyed", "name": "esyed", "avatar": "https://cdn.v2ex.com/gravatar/15578d9f3dfd5581e5dec25bc4f7fb4f?s=73&d=retro" }, "url": "t/168479", "date_modified": "2015-02-05T09:36:39+00:00", "content_html": "

\u6709\u65f6\u5019\u4e0d\u662f\u60f3\u5b66,\u800c\u662f\u67d0\u9879\u76ee\u662f\u7528\u67d0\u8bed\u8a00\u5199\u7684,
\n\u8981\u57fa\u4e8e\u8fd9\u4e2a\u9879\u76ee\u505a\u4e2a\u4e1c\u897f,\u4e8e\u662f\u88ab\u903c\u7740\u5b66\u4e00\u95e8\u65b0\u7684\u8bed\u8a00,\u8fd9\u8be5\u662f\u6709\u591a\u60b2\u50ac\u554a:(

\n\n

\u8fd9\u91cc\u6709\u4eba\u641e\u8fc7scala\u4e48?
\n\u8fd9\u8d27\u4e0a\u624b\u662f\u5426\u8981\u5f88\u591a?\u91cc\u9762\u662f\u4e0d\u662f\u4e5f\u6709\u5f88\u591a\u7684lib\u8981\u5b66?
\n\u989d\u7684\u795e\u554a,\u6551\u6551\u6211\u5427:(

\n", "date_published": "2015-02-05T05:34:40+00:00", "title": "scala \u503c\u5f97\u5b66\u4e60\u4e48?\u88ab\u903c\u7740\u5b66\u4e60\u8fd9\u8d27\u4e86:(", "id": "t/168479" }, { "author": { "url": "member/11", "name": "11", "avatar": "https://cdn.v2ex.com/avatar/9717/b5c8/33506_large.png?m=1448456025" }, "url": "t/143494", "date_modified": "2014-11-02T15:32:14+00:00", "content_html": "

(A,B,C) => (A,(B,C)) \u8fd9\u4e00\u6b65\u597d\u8bf4\uff0c\u76f4\u63a5\u53d6 head tail \u5c31\u53ef\u4ee5\u4e86\u3002\u4f46\u662f\u53d6\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u505a\u8fd9\u4e2a\u64cd\u4f5c\u600e\u4e48\u641e\uff1f

\n", "date_published": "2014-11-02T15:32:06+00:00", "title": "Scala \u600e\u4e48\u505a\u5982\u4e0b\u53d8\u6362\uff1a(A,B,C) => (A,(B,C)) (B,(A,C)) (C,(A,B))", "id": "t/143494" }, { "author": { "url": "member/lichgo", "name": "lichgo", "avatar": "https://cdn.v2ex.com/avatar/ce60/ff16/3081_large.png?m=1334766522" }, "url": "t/107437", "date_modified": "2014-04-06T10:26:58+00:00", "content_html": "http://www.scala-lang.org/docu/files/ScalaByExample.pdf", "date_published": "2014-04-06T10:26:47+00:00", "title": "Scala By Example\uff0cScala \u4e4b\u7236 Martin \u4eca\u5929\u521a\u66f4\u65b0/\u53d1\u5e03\u7684\u6559\u7a0b", "id": "t/107437" }, { "author": { "url": "member/lichgo", "name": "lichgo", "avatar": "https://cdn.v2ex.com/avatar/ce60/ff16/3081_large.png?m=1334766522" }, "url": "t/107355", "title": "\u73a9 Scale \u7684\u540c\u5b66\u90fd\u5728\u505a\u4ec0\u4e48\u65b9\u5411/\u9886\u57df/\u884c\u4e1a\u7684\u5e94\u7528\uff1f", "id": "t/107355", "date_published": "2014-04-05T07:42:09+00:00", "content_html": "" } ] } ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86