小编boh*_*nko的帖子

F#:String.Join和|>运算符

在F#interactive中,我可以String.Join("+", ["a"; "b"])成功使用,但是

["a"; "b"] |> String.Join "+"
Run Code Online (Sandbox Code Playgroud)

产生错误:

Script1.fsx(79,15): error FS0001: This expression was expected to have type
    string list -> 'a    
but here has type
    string
Run Code Online (Sandbox Code Playgroud)

如何String.Join使用管道传递集合?

PS同样的问题是 lines |> File.WriteAllLines "filename.txt"

f# f#-interactive

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

如何在F#interactive中使用断点?

我已经开始使用VS2010和F#interactive研究算法中的一些想法.

所以,我创建了一个DebugScript.fsx,我在那里写了一些代码并最终将它发送给F#Int进行测试.

在某些时候我需要抓住一个bug.但即使在一个简单的for循环中,我也无法设置断点:

for i in stringarray do
    printfn "%s" i
Run Code Online (Sandbox Code Playgroud)

当我按F9设置断点时,VS会显示一个带有警告标志的红色圆圈.它的提示是"断点当前不会被击中".

当然,我确实打开了Debug菜单 - > Attach to process ... - > Fsi.exe

我尝试Debugger.Break()在循环内部放置,但这是调试器停止的唯一行,这使我无法继续在循环内部调试行.我也没有任何局部变量:(

也许我错过了一些明显的东西?

debugging f# breakpoints f#-interactive

18
推荐指数
3
解决办法
5316
查看次数

在Java中获得独有的系统范围锁定

我正在重新编写可以多次启动的Java可执行文件,我希望一次一个进程.在C#中,我会使用命名/系统Mutex执行此操作,但这在Java中似乎不可能.我该如何实现此功能?

java multithreading mutex

17
推荐指数
1
解决办法
6334
查看次数

F#的"Hello,world",包含2个fs文件

我来自C#背景到F#.到目前为止,我编写了简单的程序,并在F#interactive中花了很多时间.

我很难创建一个带有两个.fs文件的VS F#项目.

示例代码:

// part 1: functions
let rec gcd (a : uint64) (b : uint64) =
    if b = 0UL then a
    else gcd b (a % b)

// part 2: main()
let a, b = (13UL, 15UL)
do printfn "gcd of %d %d = %d" a b (gcd a b)
Run Code Online (Sandbox Code Playgroud)

我想要两个.fs文件,即Alg.fs和Program.fs,这样Program.fs将包含我正在使用的代码和具有算法的Alg.fs.

采取的步骤:
我已经创建了两个文件.编译器给出了一个错误:Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'

我已插入module Program和 …

f#

12
推荐指数
2
解决办法
4726
查看次数

如何在F#中定义x ++(其中x:int ref)?

我目前使用这个功能

let inc (i : int ref) =
    let res = !i
    i := res + 1
    res
Run Code Online (Sandbox Code Playgroud)

写点东西

let str = input.[inc index]
Run Code Online (Sandbox Code Playgroud)

如何定义增量运算符++,以便我可以编写

let str = input.[index++]
Run Code Online (Sandbox Code Playgroud)

f# operators

12
推荐指数
1
解决办法
1240
查看次数

[应用程序运行时]定期执行操作的最佳方式 - 处理程序?

我正在尝试定期执行某项操作.我想创建一个类的新实例,比如说,持续3秒.最好通过使用Handler或Thread来实现它吗?我可以尝试一种更容易,更笨拙的方式吗?我真的不擅长使用线程 - 我想学习,但更重要的是我要在完成编程实践之前让它运行起来.

    new Thread(){
        public void run(){
            //makes sure the player still has 3 lives left
            while(game == false){
                uiCallback.sendEmptyMessage(0);
                try {
                    Thread.sleep(2000); // wait two seconds before drawing the next flower
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } //sleep for 2 seconds
            }
        }
    }.start();
Run Code Online (Sandbox Code Playgroud)

multithreading android handler

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

面向对象的编程和事务

一点介绍:

类包含字段和方法(这次让我跳过属性).
字段表示类的状态.
方法描述了类的行为.

在设计良好的类中,如果类抛出异常,方法不会改变类的状态,对吧?(换句话说,无论发生什么,类的状态都不应该被破坏)

题:

是否有框架,设计模式,最佳实践或编程语言来调用事务样式中的一系列方法,以便任何类的状态都不会被更改(如果是异常),或者一切都成功了?

例如:

// the class foo is now in the state S1
foo.MoveToState2();
// it is now (supposed to be) in the state S2
foo.MoveToFinalState();
// it is now (supposed to be) in the state, namely, S3
Run Code Online (Sandbox Code Playgroud)

当然,在MoveToState2()和中可能会发生异常MoveToFinalState().但是从这段代码中我希望类foo处于状态S1或S3.

这是一个简单的场景,涉及单个类,没有if,没有while,没有副作用,但我希望这个想法很清楚.

architecture oop

10
推荐指数
2
解决办法
3140
查看次数

如何在范围中包含最终值?

我想创建一个带有'a'..'z'值(包括)的向量.

这不编译:

let vec: Vec<char> = ('a'..'z'+1).collect();
Run Code Online (Sandbox Code Playgroud)

什么是惯用的方式'a'..'z'

rust

9
推荐指数
2
解决办法
2700
查看次数

CUDA.Net的Hello-world

我正在尝试用CUDA.Net编写一个幼稚的应用程序,但我运气不好.

我已经想到了:

using GASS.CUDA;

// ...

var c = new CUDA();

// c.Launch(myfunc); // ???? how ???
Run Code Online (Sandbox Code Playgroud)

myfunc显然应该是类型,GASS.CUDA.Types.CUfunction但我没有找到如何定义一个.

cuda.net

7
推荐指数
2
解决办法
7566
查看次数

如何在F#中定义printfn等价物

由于我使用F#进行研究(特别是使用F#interactive),我希望能够切换"print-when-in-debug"功能.

我可以

let dprintfn = printfn
Run Code Online (Sandbox Code Playgroud)

F#互动说

val dprintfn : (Printf.TextWriterFormat<'a> -> 'a)
Run Code Online (Sandbox Code Playgroud)

我可以使用

dprintfn "myval1 = %d, other val = %A" a b
Run Code Online (Sandbox Code Playgroud)

每当我想要我的脚本.

现在我想以dprintfn不同的方式定义,以便它会忽略所有与语法兼容的参数printfn.怎么样?


我想到的最接近(但不起作用)的变体是:

let dprintfn (arg: (Printf.TextWriterFormat<'a> -> 'a)) = ()
Run Code Online (Sandbox Code Playgroud)

但它以下不编译然后dprintfn "%A" "Hello"导致error FS0003: This value is not a function and cannot be applied.

PS我目前使用别名Debug.WriteLine(...)作为解决方法,但问题仍然是有趣的F#类型系统.

f# f#-interactive

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