小编Jus*_*ser的帖子

收集参数以应用于Java/Scala中的curried函数

我想在Java 8中创建一个类,它能够递归地创建一个对象,该对象具有一个方法,该方法根据我添加的参数获取一个函数参数.

例如,我希望能够这样做:

new X().param(23).param("some String").param(someObject)
  .apply((Integer a) -> (String b) -> (Object c) -> f(a,b,c))
Run Code Online (Sandbox Code Playgroud)

然后,apply方法将收集的参数应用于给定的函数.

在维护类型安全的同时,我觉得这应该是没有反思的,但我无法弄清楚如何.如果我可以将其转换为Java 8,那么Scala中的解决方案也是受欢迎的.如果不可能,我也会接受解释原因的答案.

到目前为止我所拥有的基本上是这样的:

class ParamCmd<A,X> {

    final A param;

    public ParamCmd(A param) {
        this.param = param;
    }

    public<B> ParamCmd<B, Function<A,X>> param(B b) {
        return new ParamCmd<>(b);
    }

    public void apply(Function<A,X> f) {
        // this part is unclear to me
    }

    public static void main(String[] args) {
        new ParamCmd<Integer,String>(0).param("oops").param(new Object())
            // the constructed function parameters are reversed relative to declaration
            .apply((Object c) -> (String …
Run Code Online (Sandbox Code Playgroud)

java generics scala currying java-8

10
推荐指数
1
解决办法
766
查看次数

带有Express/Jade的I18N:具有嵌入式标签和插值的字符串

tl; dr:我正在寻找一种在Jade模板中进行国际化的优雅方法.本质上问题归结为我必须对变量中的字符串进行插值,而不是逐字代码.

问题详情:

在单语Jade模板中,我可以创建一个带有嵌入式标签和变量的元素,如下所示:

p Posted by 
  span.author= post.author
  | on
  span.date= post.author
Run Code Online (Sandbox Code Playgroud)

得到类似的东西

<p>Posted by <span style="author">The Author</span> on 
<span style="date">2012-03-08</span></p>
Run Code Online (Sandbox Code Playgroud)

但是当我想要将其国际化时,我需要一个单独的字符串,因为在每种语言中单词顺序都不一样.此外,我想隐藏翻译人员的html详细信息,并给他们这样一行:

Posted by #{author} on #{date}
Run Code Online (Sandbox Code Playgroud)

现在当我将这个字符串的i18n-ed版本作为i18n.posted_by_on传递给Jade模板时,它不会对它进行插值,所以我能做的最好的是:

- var author = '<span class="author">$</span>'.replace('$',post.author); 
- var date = '<span class="date">$</span>'.replace('$',post.date);
- var header = i18n.posted_by_on
      .replace('#{author}',author)
      .replace('#{date}',date); 
p!= header
Run Code Online (Sandbox Code Playgroud)

这大多打败了漂亮的Jade模板,因为我必须手动进行所有插值.是否有任何方法更好,更紧凑,可读?

template-engine internationalization express pug

7
推荐指数
1
解决办法
7288
查看次数

SBT ProGuard插件:OutOfMemoryError,如何增加堆空间?

当我尝试使用sbt-proguard插件为我的项目组装一个jar时,我总是得到一个 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

我尝试增加sbt的堆空间,但事实证明,proguard插件生成了自己的java进程并且-Xmx256M参数是硬编码的.我无法弄清楚如何更改它,而不是更改proguard代码本身.

我在JDK 7上使用sbt 0.12.3和scala 2.10.1的sbt-proguard插件0.2.1

我曾尝试设置javaOptions in proguard := Seq("-Xmx2G")以及javaOptions in proguard += "-Xmx2G",但该插件似乎忽略/覆盖此:

> ps aux|grep java
kaeser         47084 105.1  1.1  2927540  94440 s000  R+   10:07AM   0:05.52 /usr/bin/java -Xmx256M -cp /Users/kaeser/.ivy2/cache/net.sf.proguard/proguard-base/jars/proguard-base-4.9.jar proguard.ProGuard -include /Users/kaeser/Documents/workspace/pipeline-runner/target/scala-2.10/proguard/configuration.pro
kaeser         45087   0.0  6.3  5312012 531028 s000  S+    6:03PM   1:24.88 /usr/bin/java -Xmx2G -Xms512M -Xmx2G -Xss1M -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -Xshare:off -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar
Run Code Online (Sandbox Code Playgroud)

我如何将Java选项传递给proguard插件,或以其他方式解决此问题?

scala out-of-memory proguard sbt

6
推荐指数
2
解决办法
1388
查看次数

在Elm中处理具有共享子结构的记录

我有一些记录类型结构基本上像这样:

type Body x = { x | pos: (Int,Int) }
type Bubble = Body { radius: Int }
type Box = Body { width: Int, height: Int }
Run Code Online (Sandbox Code Playgroud)

现在我想有一个混合列表中的任何一个并执行部分操作Body,但仍然是特殊情况处理BoxBubble其他时间.例如,有(实现省略):

mv: (Int,Int) -> Body a -> Body a
bubble: Bubble
box: Box
Run Code Online (Sandbox Code Playgroud)

我想要

map (mv (1,1)) [box,bubble]
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为Elm认为列表中的类型不兼容.

现在我可以将Boxes和Bubbles 包装在ADT中,如下所示:

type BodyWrap = BoxWrap Box | BubbleWrap Bubble
Run Code Online (Sandbox Code Playgroud)

但是我需要在每种情况下进行解包和重新打包.如果我想在混合列表上折叠,它会变得更加混乱.这个要点就是一个例子.

有没有更优雅的方式来处理这种情况?

polymorphism algebraic-data-types elm

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

替代榆树记录扩展

我正在尝试将库从Elm 0.15迁移到0.16.记录扩展机制已被删除.

我的库提供了对物体的物理计算(表示为记录),并使用记录扩展来允许用户添加关于物体的标签和其他元数据.

我的示例代码通过在创建后为所有实体添加标签来显示此用法:

labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
Run Code Online (Sandbox Code Playgroud)

此标记实体列表也会传递给库:

main = Signal.map scene (run labeledBodies tick)
Run Code Online (Sandbox Code Playgroud)

什么样的工作:将meta参数硬编码为Body:

type alias Body a = {
  pos: Vec2, -- reference position (center)
  velocity: Vec2, -- direction and speed
  inverseMass: Float, -- we usually use only inverse mass for calculations
  restitution: Float, -- bounciness factor
  shape: Shape,
  meta: a
}
Run Code Online (Sandbox Code Playgroud)

但这会使API更加笨拙,因为它会强制辅助函数采用额外的参数.是否有更优雅的方式来应对这种变化?

records elm

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

sbt:将插件发布到本地存储库并从本地存储库解析

我正在尝试将 sbt 插件发布到本地文件存储库。在插件的 build.sbt 中我有:

publishTo := Some(Resolver.file("localtrix", file("/Users/jast/repo/localtrix")))
Run Code Online (Sandbox Code Playgroud)

我运行该publish任务,它被很好地发布到 /Users/jast/repo/localtrix/org/me/sbt-plugin_2.12_1.0/1.2.3

在另一个项目中,我想解决这个插件。在project/plugins.sbt我有:

resolvers += Resolver.file("localtrix", file("/Users/jast/repo/localtrix"))
addSbtPlugin("org.me" % "sbt-plugin" % "1.2.3")
Run Code Online (Sandbox Code Playgroud)

我尝试在这个项目中运行 sbt 并得到:

[info] Updating ProjectRef(uri("file:/Users/jast/playspace/untitled38/project/"), "untitled38-build")...
[warn]  module not found: org.me#sbt-plugin;1.2.3
[warn] ==== typesafe-ivy-releases: tried
[warn]   https://repo.typesafe.com/typesafe/ivy-releases/org.me/sbt-plugin/scala_2.12/sbt_1.0/1.2.3/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn]   https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.me/sbt-plugin/scala_2.12/sbt_1.0/1.2.3/ivys/ivy.xml/2017.2+4-3037ba82+20180314-1919/ivys/ivy.xml
[warn] ==== local: tried
[warn]   /Users/jast/.ivy2/local/org.me/sbt-plugin/scala_2.12/sbt_1.0/1.2.3/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/me/sbt-plugin_2.12_1.0/1.2.3/sbt-plugin-1.2.3.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/jast/.sbt/preloaded/org.me/sbt-plugin/scala_2.12/sbt_1.0/1.2.3/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////Users/jast/.sbt/preloaded/org/me/sbt-plugin_2.12_1.0/1.2.3/sbt-plugin-1.2.3.pom
[warn] ==== localtrix: tried
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] …
Run Code Online (Sandbox Code Playgroud)

ivy sbt

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

如何在Intellij中更正错误导入的项目。收到错误-不是有效的项目ID

我克隆了仓库,并使用现有仓库,build.sbt将项目导入了Intellij(我不记得这样做时使用的设置)。我注意到Intellij该项目有一个自己web_3075的名称- 而我的项目名称是TestProjectname := "TestProject")。现在,当我尝试编译项目时,出现了错误Not a valid project ID: web_3075。我该如何解决这个问题?

我可以安全地删除.idea文件并再次导入项目吗?

intellij-idea sbt

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

SBT自定义冲突管理器

我想更好地了解组织中工件之间存在冲突的依赖关系.为此,我创建了一个包含所有其他顶级项目的元项目.为了识别各种传递依赖的冲突,我的想法是使用冲突管理器.

我知道我可以设置这样的冲突管理器

conflictManager := ConflictManager.strict
Run Code Online (Sandbox Code Playgroud)
  1. 我如何仅为com.example包设置严格的管理器,并可能与其他更具体的管理器组合?
  2. 是否有可能创建完全自定义的依赖关系管理器,这只会警告冲突?

我也很感谢有关解决这个问题的其他想法.

dependency-management sbt

3
推荐指数
1
解决办法
867
查看次数

设置常春藤冲突经理

我试图在常春藤设置冲突管理器,但我找不到如何设置它们的具体示例.例如,要设置"严格"管理器,这会是什么样子?

<conflict-managers>
  ???
</conflict-managers>
Run Code Online (Sandbox Code Playgroud)

ivy

3
推荐指数
1
解决办法
1871
查看次数

命令行上日志文件中时间的分箱直方图

为了从linux服务器上的日志文件快速评估各种操作的时间,我想从日志中提取它们并创建textual/tsv样式直方图.为了更好地了解时间分布的方式,我想将它们分成0-10ms,10-20ms等范围.

输出应该如下所示:

121    10
 39    20
 12    30
  7    40
  1   100
Run Code Online (Sandbox Code Playgroud)

如何使用通常的unix命令行工具实现这一目标?

linux command-line histogram binning

3
推荐指数
1
解决办法
940
查看次数

根据设置重新定义sbt任务

我想根据设置的值重新定义一个sbt任务.在默认情况下,它应该执行原始任务,在另一种情况下,我想运行自定义任务.

给定任务和设置:

val someSetting = Def.settingKey[Boolean]("some setting")
val fooTask = Def.taskKey[String]("foo task")

someSetting := true

fooTask := {
  println("** foo effect **")
  "foo value"
}
Run Code Online (Sandbox Code Playgroud)

试图重新定义fooTask:

fooTask := {
  if( someSetting.value ) fooTask
  else Def.task("whatever")
}.value
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

build.sbt:39: error: Illegal dynamic dependency
  if( someSetting.value ) fooTask
      ^
Run Code Online (Sandbox Code Playgroud)

使用Def.task任务编译......

fooTask := Def.task {
  if( someSetting.value ) fooTask.value
  else Def.task("whatever").value
}.value
Run Code Online (Sandbox Code Playgroud)

......但即使someSetting是假的也会被执行!

> set someSetting := false
[info] Defining *:someSetting
[info] The new value will be used by …
Run Code Online (Sandbox Code Playgroud)

scala sbt

3
推荐指数
1
解决办法
729
查看次数