小编Ral*_*lph的帖子

改进Scala的JVM

对JVM的哪些更改最有利于Scala编译器和运行时?

通过引入InvokeDynamic计划到达JVM 7 的字节代码,动态语言将在性能上受益匪浅,Scala可能会受益于尾递归(不确定它是否会出现在JVM 8或更高版本中).

Scala及其现有功能集可以从JVM中获益吗?这些变化即将到来吗?

具体来说,JVM是否会对闭包和函数作为对象提高性能?

jvm scala

43
推荐指数
3
解决办法
2012
查看次数

将Clojure数据结构转换为Java集合

什么是将数据结构转换为Java集合的Clojure-idiomatic方法,具体为:

  • [] 到了 java.util.ArrayList
  • {} 到了 java.util.HashMap
  • #{} 到了 java.util.HashSet
  • () 到了 java.util.LinkedList

是否有clojure.contrib库来执行此操作?

使用案例:为了使Clojure易于进入我的组织,我正在考虑为Clojure中的全Java REST服务器编写单元测试套件.我已经在Scala中编写了部分套件,但认为Clojure可能更好,因为宏支持将减少很多样板代码(我需要测试几十个类似的REST服务调用).

我使用EasyMock来模拟数据库连接(有更好的方法吗?),我的模拟方法需要将java.util.List<java.util.Map<String, Object>>项(表示数据库行集)返回给调用者.我会将一个[{ "first_name" "Joe" "last_name" "Smith" "date_of_birth" (date "1960-06-13") ... } ...]结构传递给我的mock并将其转换为所需的Java集合,以便它可以以预期的格式返回给调用者.

java collections clojure data-structures

39
推荐指数
1
解决办法
1万
查看次数

JetBrains IntelliJ openapi文档在哪里?

我搜索过Google和JetBrains网站,但是我找不到com.intellij包的文档.

有任何想法吗 (:-))?

documentation intellij-idea

37
推荐指数
2
解决办法
8604
查看次数

在mocha中覆盖ts节点的`tsconfig.json`

是否有可能覆盖tsconfig.json从mocha调用时使用的ts节点?

我的主要tsconfig.json包含"module": "es2015",但我只想"module": "commonjs"用于ts节点.

我试过这个

mocha --compilers ts:ts-node/register,tsx:ts-node/register \
    --compilerOptions '{"module":"commonjs"}' \
    --require ts-node/register test/**/*.spec.ts*
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Module.m._compile (/usr/lib/node_modules/ts-node/src/index.ts:406:23)
    at Module._extensions..js (module.js:422:10)
    at Object.require.extensions.(anonymous function) [as .tsx] (/usr/lib/node_modules/ts-node/src/index.ts:409:12)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at /usr/lib/node_modules/mocha/lib/mocha.js:222:27
    at Array.forEach (native)
    at Mocha.loadFiles (/usr/lib/node_modules/mocha/lib/mocha.js:219:14)
    at Mocha.run (/usr/lib/node_modules/mocha/lib/mocha.js:487:10)
    at Object.<anonymous> (/usr/lib/node_modules/mocha/bin/_mocha:458:18)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load …
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js tsconfig

36
推荐指数
5
解决办法
1万
查看次数

覆盖Scala枚举值

据我所知,Scala具有Value(Int),Value(String)和Value(Int,String)的Enumeration Value类的定义.

有没有人知道创建一个新的Value子类来支持不同的构造函数的例子?

例如,如果我想创建一个带有Value(Int,String,String)对象的Enumeration,我该怎么做?我想要使​​用Enumeration类的所有其他好处.

谢谢.

enumeration scala

31
推荐指数
1
解决办法
1万
查看次数

(可选)将项添加到Scala Map

我正在寻找这个问题的惯用解决方案.

我正在构建一个valScala(不可变)地图,并希望可选择添加一个或多个项目:

val aMap =
  Map(key1 -> value1,
      key2 -> value2,
      (if (condition) (key3 -> value3) else ???))
Run Code Online (Sandbox Code Playgroud)

如何在不使用var?的情况下完成?什么应该取代????使用+运营商更好吗?

val aMap =
  Map(key1 -> value1,
      key2 -> value2) +
  (if (condition) (key3 -> value3) else ???))
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方案是

val aMap =
  Map(key1 -> value1,
      key2 -> value2,
      (if (condition) (key3 -> value3) else (null, null))).filter {
        case (k, v) => k != null && v != null
      }
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?

scala immutability optional-values

27
推荐指数
3
解决办法
9234
查看次数

Clojure defmacro丢失了元数据

我正在尝试创建一个def带有类型提示的字符串Clojure宏:

(defmacro def-string [name value]
  `(def ^String ~name ~value))

(def-string db-host-option "db-host")
Run Code Online (Sandbox Code Playgroud)

当我macroexpand这样,类型提示丢失:

(macroexpand '(def-string db-host-option "db-host"))
;=> (def db-host-option "db-host")
Run Code Online (Sandbox Code Playgroud)

别担心提示这种类型的智慧.

为什么宏会丢失元数据?如何编写此宏或任何包含元数据的宏?

macros clojure type-hinting

24
推荐指数
2
解决办法
2052
查看次数

Haskell where子句语法在do块中

我试图在Haskell中mapM_do块内重构一个函数调用.我想将lambda提取到(本地)命名函数,以使代码更具可读性.

我的代码最初看起来像这样:

do
  -- ...
  mapM_ (\x -> x + 1) aList

  return aValue
Run Code Online (Sandbox Code Playgroud)

我想改成它

do
  -- ...
  mapM_ func aList
    where func x = x + 1

  return aValue
Run Code Online (Sandbox Code Playgroud)

但我在线上遇到语法错误return aValue.我的实际lambda更复杂:-),但我确实用同样的lambda尝试它,以确保它不是lambda代码中的问题.

我该如何重写这段代码?我应该用let...... in代替吗?

syntax haskell where-clause

24
推荐指数
2
解决办法
8501
查看次数

Clojure静态打字

我知道这听起来像是对Lisp爱好者(以及其他动态语言爱好者)的亵渎,但是增强Clojure编译器以支持静态(编译时)类型检查有多难?

抛开支持和反对静态和动态类型的参数,这是否可行(不是"这是可行的")?

我想添加一个新的读取器宏来强制编译时类型(#^宏的增强版本)并将类型信息添加到符号表将允许编译器标记变量被滥用的位置.例如,在下面的代码中,我期望编译时错误(#*是"编译时"类型的宏):

(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
Run Code Online (Sandbox Code Playgroud)

#^宏甚至可以与全局变量(*compile-time-type-checking*)一起重用,以强制编译器进行检查.

有关可行性的任何想法?

static-typing clojure

23
推荐指数
3
解决办法
5888
查看次数

在Haskell中将Data.Text转换为Int

另一个问题中,其中一条评论说," [Data.]Text正在成为事实上的文本实现.String由于遗留原因和简单的事情仍然存在,但对于你应该使用的严肃的文本操作Text."

将a转换为a的最简单方法Data.TextInt什么?read将无法正常工作,因为该read功能总是需要一个String.

我能想到的最好的是:

let fortyTwo = Data.Text.pack "42"
read $ Data.Text.unpack fortyTwo :: Int
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

string haskell type-conversion

23
推荐指数
2
解决办法
7518
查看次数