小编pro*_*eek的帖子

构建要在C#中使用的F#库

假设我有以下功能.

let rec fib n =
    match n with
    | 1 | 2 -> 1
    | n -> fib(n-1) + fib(n-2)
Run Code Online (Sandbox Code Playgroud)

如何将此代码编译为dll,以便从C#中使用它?

我同时使用mono(在Mac OS X中)和Visual Studio 2010.

添加

我添加以下内容来创建命名空间.

namespace MyMath.Core
module public Process=

和fsc --target:library facto.fs给了我facto.dll.

使用此代码的C#代码如下.

using System;
using MyMath.Core;

class TestFSharp {
    public static void Main() {
        int val = MyMath.Core.Process.fib(10);
        Console.WriteLine(val);
    }
}
Run Code Online (Sandbox Code Playgroud)

dmcs /r:facto.dll testf.cs给了我tesetf.exe.

c# dll mono f# visual-studio-2010

9
推荐指数
1
解决办法
4268
查看次数

在eclipse中安装环境描述

我有Execution environment references were not checked for '...' because no environment descriptions are installed.错误.

在此输入图像描述

我想我需要安装环境描述(http://wiki.eclipse.org/Execution_Environment_Descriptions)导致此错误的org.eclipse.jdt.core项目.

如何在eclipse中安装环境描述?

java eclipse environment build

9
推荐指数
1
解决办法
1891
查看次数

删除ANTLR中的左递归

正如在删除左递归中所解释的,有两种方法可以删除左递归.

  • 修改原始语法以使用某些过程删除左递归
  • 最初编写语法不要有左递归

人们通常用什么来移除(没有)ANTLR的左递归?我使用flex/bison进行解析器,但我需要使用ANTLR.我唯一担心的是使用ANTLR(或普通的LL解析器)是去除递归.

  • 实际上,在ANTLR中删除左递归有多严重?这是使用ANTLR的一个显示器吗?或者,在ANTLR社区中没有人关心它?
  • 我喜欢AN生成AST的想法.在获得AST快速简便的方法方面,哪种方法(2中删除左递归方法)更可取?

添加

我用以下语法做了一些实验.

E -> E + T|T
T -> T * F|F
F -> INT | ( E )

离开递归后,我得到以下一个

E -> TE'
E' -> null | + TE'
T -> FT'
T' -> null | * FT'

我可以提出以下ANTLR表示.尽管如此,它相对简单明了,似乎没有左递归的语法应该是更好的方法.

grammar T;

options {
    language=Python;
}

start returns [value]
   : e {$value = $e.value};
e returns [value]
   : t ep  
     {
       $value = $t.value
       if $ep.value != None:
         $value += $ep.value
     }
   ; …

antlr compiler-theory

8
推荐指数
2
解决办法
6786
查看次数

好的代码测量工具?

有没有好的代码测量工具?

我发现代码测量非常有用和有趣,但我认为我只能使用测量工具支付1美元/年.

我想可能有一个/可以的工具

  • 开源软件
  • 语言独立
  • OS独立
  • 衡量不同类别的指标:LOC,LOC没有空行,功能数量......

code-metrics

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

Python的多个构造函数

我有一个A类,可以通过两种不同的方式生成.

  • a = A(path_to_xml_file)
  • a = A(listA,listB)

第一种方法将文件路径作为输入从XML文件解析以获取listA和listB.第二种方法有两个列表.

我可以想到两种方法来实现多个构造函数.你怎么看?通常Python人员使用什么方法来处理这种情况?

检查类型

class A():
    def __init__(self, arg1, arg2 = None):
        if isinstance(arg1, str): 
            ...
        elif isinstance(arg1, list):
            ...

a = A("abc")
b = A([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud)

做不同的建设者

class A2():
    def __init__(self):
        pass
    def genFromPath(self, path):
        ...
    def genFromList(self, list1, list2):
        ...
a = A2()
a.genFromPath("abc")
b = A2()
b.genFromList([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud)

python constructor

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

如何在命令行中使用Emacs启动不同的模式?

有没有办法使用命令行启动不同的emacs模式?例如,是否可以按如下方式运行emacs?

   emacs --org-mode # to start orgmode
   emacs --python-mode # to start python mode
Run Code Online (Sandbox Code Playgroud)

之后我可以运行emacs来输入'Mx org-mode',但我想知道我是否可以启动不同的模式.

emacs mode

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

通过组合两个NSDate创建一个新的NSDate

我有NSDate* day1NSDate* day2.如何NSDate* day3从第1天开始仅复制年/月/日,从第2天复制每小时/分钟/秒?

macos cocoa objective-c nsdate

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

为什么后续的直接方法调用比第一次调用要快得多?

正如本MSDN文章中所解释的,当使用.NET Reflection API InvokeMember时,由于元数据的缓存,第一次调用比后续调用花费更多时间.

当我在不使用Reflection的情况下测试直接方法调用时,我也看到了对Mono和.NET 4的类似效果.

第一个数字是操作的结果," - "后面的第二个数字是以ms为单位的此操作所花费的时间.我使用'< - '标记来标识第一个方法调用.

300 - 0.192 <--
300 - 0.004
300 - 0.004
-100 - 0.096 <--
-100 - 0.004
-100 - 0.004
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我可以理解第一次调用可能比较慢,但速度慢50倍并不是我的预期.

附件是获得此结果的源代码.

图书馆

namespace MyClass
{
    public class Calculator
    {
        public int Value1 {get; set;}
        public int Value2 {get; set;}
        public Calculator()
        {
            Value1 = 100;
            Value2 = 200;
        }

        public int Add(int val1, int val2)
        {
            Value1 = val1; Value2 = val2;
            return Value1 + …
Run Code Online (Sandbox Code Playgroud)

.net c# performance

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

最简单的WPF/C#调试方法来检查发生了什么

使用C++/C,最简单的调试方法是使用cout/printf打印出控制台的内容.

WPF/C#中的等效方法是什么?

我想过使用MessageBox(),但WPF似乎不支持这个功能.我也考虑过使用日志功能,但我不知道它比printf/cout复杂得多.

我可以在Visual Studio中使用断点,即便如此,我需要一些命令来设置断点.

if (ABC())
{
    // What command should be here to set a break point?
}
Run Code Online (Sandbox Code Playgroud)

c# debugging wpf

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

"构造函数调用必须是Java中构造函数中的第一个语句"问题

可能重复:
为什么this()和super()必须是构造函数中的第一个语句?

我想在Java中使用构造函数链.例如,对于第一个构造函数,我有一个字符串作为参数,并在我从参数字符串创建一个对象时调用第二个构造函数.

public class IMethodFinder {
    public IMethodFinder(String projectName, String methodName,
        int numberOfParameters) {
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        IJavaProject javaProject = JavaCore.create(project);
        this(javaProject, methodName, numberOfParameters);
    }

    public IMethodFinder(IJavaProject javaProject, String methodName,
        int numberOfParameters) {
        ... 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误"构造函数调用必须是构造函数中的第一个语句"错误.

在此输入图像描述

我制作了一个在两个构造函数之间共享的公共代码,但我不确定这是绕过该问题的唯一解决方案.

public class IMethodFinder {
    public IMethodFinder(IJavaProject javaProject, String methodName,
            int numberOfParameters) {
        dosomething(javaProject, methodName, numberOfParameters);
    }

    public IMethodFinder(String projectName, String methodName,
            int numberOfParameters) {
        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        IJavaProject javaProject = JavaCore.create(project);
        dosomething(javaProject, methodName, numberOfParameters);
    }

    private void dosomething(IJavaProject javaProject, …
Run Code Online (Sandbox Code Playgroud)

java constructor

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