小编Fra*_*ank的帖子

F#中的printfn类型,静态与动态字符串

我刚刚开始在Mono中使用F#,并且出现了以下问题,我无法理解.查找资料printfn,并TextWriterFormat没有带来任何启示,所以我想我要问在这里.

在FSI中,我执行以下操作:

> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit = ()
Run Code Online (Sandbox Code Playgroud)

只是一个普通的字符串并打印它.精细.现在我想声明一个变量来包含相同的字符串并打印它:

> let v = "hello" in printfn v ;;
let v = "hello" in printfn v ;;
---------------------------^
\...\stdin(22,28): error FS0001: The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'
Run Code Online (Sandbox Code Playgroud)

我从阅读中理解,printfn需要一个恒定的字符串.我也明白,我可以解决这个问题printfn "%s" v.

但是,我想了解这里输入的内容.显然,"hello"类型string也是如此v.为什么会出现类型问题?有printfn什么特别的吗?据我所知,编译器已经对第一个字符串的参数执行了类型检查,这样就printfn "%s" 1失败了......这当然不适用于动态字符串,但我认为这只是编译器方面的一个方便.静态案例.

f#

25
推荐指数
3
解决办法
4421
查看次数

为什么Java的Area#equals方法不会覆盖Object#equals?

我刚刚遇到了Java java.awt.geom.Area#equals(Area)方法引起的问题.问题可以简化为以下单元测试:

@org.junit.Test
public void testEquals() {
    java.awt.geom.Area a = new java.awt.geom.Area();
    java.awt.geom.Area b = new java.awt.geom.Area();
    assertTrue(a.equals(b)); // -> true

    java.lang.Object o = b;
    assertTrue(a.equals(o)); // -> false
}
Run Code Online (Sandbox Code Playgroud)

经过一番头脑刮擦和调试后,我终于在JDK源代码中看到了该equals方法的签名Area如下所示:

public boolean equals(Area other)
Run Code Online (Sandbox Code Playgroud)

请注意,它不是 @Override普通equals方法Object,而是使用更具体的类型重载方法.因此,上面示例中的两个调用最终调用了不同的实现equals.

由于Java 1.2以来存在此行为,我认为它不被视为错误.因此,我更感兴趣的是找出为什么决定正确地覆盖该equals方法,但同时提供一个重载的变体.(另一个提示,这是一个真正的决定是没有覆盖hashCode()方法.)

我唯一的猜测是,作者担心缓慢equals的地区实现不适合放置比较时平等Area以s Set,Map等等.数据结构.(在上面的示例中,您可以添加a到a HashSet,虽然b等于a,但调用contains(b)将失败.)然后,为什么他们不仅仅以不与方法这样的基本概念冲突的方式命名可疑equals …

java equals

22
推荐指数
1
解决办法
545
查看次数

Scala中抽象特征的语义

我想知道将abstract关键字与a结合使用的语义是什么trait.

如果特征没有定义任何抽象方法,则abstract关键字不会阻止我创建实例:

scala> abstract trait T
defined trait T

scala> new T{}
res0: java.lang.Object with T = $anon$1@12cd927d
Run Code Online (Sandbox Code Playgroud)

另一方面,如果特征确实定义了一个抽象方法,那么无论abstract关键字是否存在,我都无法创建实例(当然不实现此方法):

scala> abstract trait T { def foo : Unit }
defined trait T

scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type =>    Unit is not defined
              new T{}
                  ^

scala> trait T { def foo : Unit }
defined trait T

scala> new T{}
<console>:9: …
Run Code Online (Sandbox Code Playgroud)

scala traits abstract

16
推荐指数
1
解决办法
6226
查看次数

JavaConverters asScala方法的时间复杂度

从Scala版本2.9开始,存在一个方便的转换器,可以java.util.List通过写下这样的内容将其他集合转换为Scala的数据结构:

import scala.collection.JavaConverters._
def scalaVersion = callJavaMethod.asScala
Run Code Online (Sandbox Code Playgroud)

这是一个可爱的小功能,因为它允许在与现有Java代码交互时利用Scala的优势.

但是,我不确定所涉及的时间和空间复杂性,并且在官方文档中找不到任何内容,因此,以下问题:

我在哪里可以获得有关JavaConverters的复杂性(时间和空间)的信息?

java scala scala-java-interop

15
推荐指数
1
解决办法
3041
查看次数

Scala:参数化中具有完全限定类名的模式匹配问题

当使用完全限定的类名参数化时,我在Scala中的对象模式匹配中遇到一些问题.这基于Scala 2.9.0.1.谁知道这段代码有什么问题?

scala> "foo" match {
 | case y : Seq[Integer] =>
 | case y : Seq[java.lang.Integer] =>
<console>:3: error: ']' expected but '.' found.
   case y : Seq[java.lang.Integer] =>
Run Code Online (Sandbox Code Playgroud)

为什么第一个版本有效,但后者失败了?当完全限定的类名用于参数化时,似乎只会出现此问题.

scala pattern-matching

11
推荐指数
1
解决办法
747
查看次数

逻辑变量支持.NET

我正在寻找一个允许我在F#中使用逻辑变量的库/程序集.我想避免在实现所需的union-find数据结构,统一代码等方面重新发明轮子.

我找到了Prolog.NET,但手册有点稀疏.我不想要一个完整的Prolog实现,但只有它对逻辑变量和手册的处理在这方面是缺乏的.

这是我希望能够做到的:

  • 声明新的逻辑变量
  • 绑定log.var.到一个术语(优选地,该库允许完整的Herbrand条款)
  • 均衡log.vars.(即统一)
  • log.vars的荟萃处理.(它是否是地面的?其他log.vars.它已被均衡了吗?...)
  • 最终,图书馆甚至支持匹配,即片面统一.

有谁知道任何完成所有这些的库,或者至少可以用作起点的库?

.net logic f# logic-programming

8
推荐指数
1
解决办法
772
查看次数

在boost的dijkstra_shortest_paths中检查负边缘权重

我正在使用boost图库来调用dijkstra_shortest_paths.但是,我有一些特殊的设置,因为weight_map它实际上是一个仿函数.因此,每当boost库需要边缘的权重时,我的函子被调用,进行复杂的计算并将结果返回到提升.

不幸的是,在dijkstra_shortest_paths.hppstruct dijkstra_bfs_visitor的方法examine_edgeget调用了weightmap,只检查返回的值是否为负数.我完全清楚我不能使用负值的Dijkstra算法,我确信我的仿函数只返回正值.但是,此检查会导致我的仿函数为每个边缘调用两次.因为它执行一个复杂的计算,我想避免执行两次(结果不会在调用之间改变..每个边缘在dijkstra_shortest_paths运行期间获得相同的等待).

到目前为止,我手动检查传递给仿函数的边缘,如果重复调用,我将返回上一个记忆结果.这显然是一种解决方法而不是解决方案.

我试图通过我自己的覆盖覆盖的访问者examine_edge,然而,dijkstra_bfs_visitor仍然应用了由boost定义的原始方法.

有谁知道是否有更好的方法来处理这种情况,并以某种方式避免否定边缘权重检查?

c++ boost dijkstra

8
推荐指数
1
解决办法
740
查看次数

基于大小()排序向量

我有一个二维矢量,如vector < vector < coordinates > > v( points);坐标类是:

class coordinate{
    public :
    int x;
    int y;
    coordinate(){
        x=0;
        y=0;
    }

};
Run Code Online (Sandbox Code Playgroud)

并且点是20.如何基于v [i] .size()对各个向量v [i]进行排序,即基于在v [i]中推送的坐标对象的数量.???

c++ sorting vector

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

提升和类型安全

我现在正在学习Lift.当我阅读有关模板的内容时,我知道他们有许多在编译时没有进行类型检查的东西:

  • 模板可能包含对不存在的代码段的引用
  • SiteMaps可能引用不存在的页面
  • 片段调度方法采用字符串参数,我们可以轻松地输入拼写错误

是否有任何替代方案可以使这些问题不那么严重,即库中的外部代码检查程序或选项可以以类型安全的方式执行相同操作?或者可能存在另一个在这种关系中更严格的Web框架(可能是其他语言).

scala lift

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

Eclipse自动todo任务添加

在eclipse中是否有办法自动添加TODO任务,例如: - //TODO: TO BE TESTED在函数或类的顶部,以便我可以轻松跟踪尚待测试的更改?

eclipse todo

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

苏门答腊项目在其他JVM语言中的应用

我刚刚发现了Project Sumatra,旨在将JVM引入显卡.从他们的网页,这包括Java 的自定义编译器(称为Rootbeer).

这是一个好消息,但是,如果这意味着苏门答腊项目也适用于其他JVM语言,我想听听对项目内部有更多了解的人的意见?是否有可能直接从Scala或Clojure发出Aparapi电话?或者您是否必须在Java中开发一些核心功能,然后通过其他JVM语言访问它?

java jvm gpu-programming

4
推荐指数
1
解决办法
524
查看次数

C中的表达评估

#include <stdio>
int main(){      

       int x = 4;  
       int y = 3;  
       int z;

       z = x---y;
       printf("%d" , z);
       return 0;
}
Run Code Online (Sandbox Code Playgroud)

Linux Mandriva中的gcc编译器将其评估为(x--)-y.我很困惑为什么会这样.它可能是x - (--y).

我知道有些答案会告诉我查看优先级表.我已经完成了所有这些,但仍然存在疑问.

请任何人澄清一下.

c associative operators

2
推荐指数
1
解决办法
132
查看次数

用Java递归整数整数

我必须使用递归算法计算两个整数的总和,但真诚地我不知道如何这样做.以下是条件:

sum(x,y)=?
如果 x = 0 sum(x,y)= y 否则 sum(x,y)= sum(前趋(x),后继(y)).

有人知道如何在算法中写这个吗?任何建议我都会很高兴.

java algorithm

0
推荐指数
1
解决办法
1398
查看次数