小编Rei*_*aka的帖子

链接列表分区功能和反转结果

我写了这个F#函数来将列表分区到某一点而不是更进一步 - 很像是takeWhile和之间的交叉partition.

let partitionWhile c l =
    let rec aux accl accr =
        match accr with
        | [] -> (accl, [])
        | h::t ->
            if c h then
                aux (h::accl) t
            else
                (accl, accr)
    aux [] l
Run Code Online (Sandbox Code Playgroud)

唯一的问题是"采取"的项目是相反的:

> partitionWhile ((>=) 5) [1..10];;
val it : int list * int list = ([5; 4; 3; 2; 1], [6; 7; 8; 9; 10])
Run Code Online (Sandbox Code Playgroud)

除了诉诸调用之外rev,是否有一种方法可以编写这个函数,使第一个列表的顺序正确?

algorithm f# list

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

功能风格的对象模型?

在功能样式中实现对象模型是否切实可行?

OOP似乎擅长的一个问题是描述对象模型.

例如,HTML DOM是一种复杂的,有状态的野兽,它直接与UI接口,需要动态语言的可编程性.OOP功能往往在很多方面都有用:

  • 成员访问限制使得与不受信任的代码(例如javascript)的连接安全
  • 访问器功能和属性使得绑定到UI更加方便
  • 不必一直传递对象模型使方法更简单.

如果你通过MVVM投射模型,故事的UI方面可能有点没有实际意义,但你仍然在不断地与国内内部进行斗争.

我在这个项目的F#工作,所以我可以轻松地使用OOP,但我很好奇我能在多大程度上推动它变得不切实际.是否有设计模式或任何东西?

user-interface f# functional-programming object-model

6
推荐指数
1
解决办法
628
查看次数

F#alternate constructor赋值给(mutable)let绑定

假设我有这个课程:

type Pet (name:string) as this =
    let mutable age = 5
    let mutable animal = "dog"
Run Code Online (Sandbox Code Playgroud)

我希望能够Pet基于一些序列化数据创建一个新的,我用这个记录表示:

type PetData = {
    name : string
    age : int
    animal : string
}
Run Code Online (Sandbox Code Playgroud)

(TLDR:我无法弄清楚构建一个构造函数的语法,它将PetData填充let绑定.我的各种尝试都会随之而来.)

所以我创建了一个新的Pet构造函数,它将为let绑定赋值.我尝试使用类初始化器语法:

new (data:PetData) =
    Pet(name,
        age = data.age,
        animal = data.animal
    )
Run Code Online (Sandbox Code Playgroud)

嗯,不, No accessible member or object constructor named 'Pet' takes 1 arguments. The named argument 'age' doesn't correspond to any argument or settable return property for any overload.

我检查以确保我已经掌握了所有语法:没有错过的逗号,正确的"赋值"( …

f# constructor

6
推荐指数
1
解决办法
1906
查看次数

在结构或类中使用智能指针

我编写了一个函数,用于从文件中加载字节并返回包含字节缓冲区和缓冲区长度的FileData结构.

我希望缓冲区一旦被消耗并被抛出范围就被删除.

由于各种播放错误,我无法编译它.此外,我不确定缓冲区是否正确移动而不是复制.我不介意FileData结构本身被复制,因为它最多可能是16个字节.

一般来说,如何将智能指针用作类/结构域?这甚至是你做的事情吗?

我知道这是一个模糊的问题,但由于我在智能指针方面存在一些概念上的困难,我希望这个例子能帮助我朝着正确的方向前进.

这是我到目前为止所得到的:

struct FileData
{
    unique_ptr<char[]> buf;
    unsigned int len;
};

FileData LoadFile(string filename)
{
    ifstream str;
    str.open(filename, ios::binary);

    str.seekg(0, ios::end);
    auto len = str.tellg();
    str.seekg(0, ios::beg);

    char* buf = new char[len];

    str.read(buf, len);
    str.close();

    FileData d = { unique_ptr<char[]>(buf), len };

    return d;
}
Run Code Online (Sandbox Code Playgroud)

编辑:由于有些人对我使用当前代码得到的错误消息感到好奇,这里是:

error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers visual-c++ c++11

6
推荐指数
1
解决办法
7728
查看次数

可移植类库中的System.Tuple在哪里?

我不知道我是否安装了错误的东西,但是制作了一个C#可移植类库目标.NET for Windows Store apps, .NET Framework 4.5, Silverlight 4 and higher, Windows Phone 7 and higher,我遇到的错误System.Tuple就是丢失了.

怎么会这样?

c# portable-class-library windows-8 visual-studio-2012

6
推荐指数
1
解决办法
841
查看次数

是否存在左关联前缀运算符或右关联后缀运算符?

这个页面说"前缀运算符通常是右关联的,后​​缀运算符是左关联的"(强调我的).

是否存在左关联前缀运算符或右关联后缀运算符的实例?如果没有,假设的那个会是什么样子,怎么解析?

language-agnostic parsing

6
推荐指数
1
解决办法
1347
查看次数

网页中的亚洲 URL 或英文 slug

这是一个艰难的:

我正在开发一个大部分内容都是日语的网站。

但考虑这个网址:

http://www.stackoverflow.com/??/????URL?????

大多数 URL 解析器,包括 stackoverflow 的,不知道在哪里分隔包含日语的 URL。不好。

我还没有检查过其他浏览器,但谷歌浏览器会用日语显示 URL 解码的日语 URL——当你复制 URL 时,它会对其进行 URL 编码:

http://www.stackoverflow.com/%E8%B3%AA%E5%95%8F/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AEURL%E3% 81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8B

这是正确的做法,但并不是最友好的。所以,我想,我会让内容提供者只输入简短的英语 slug,就像这样:

http://www.stackoverflow.com/questions/what-to-do-with-japanese-urls

惊人的。但这有两个问题:

  1. 大多数提供内容的人都会说一点英语——但他们说的英语比英语更多。所以他们很可能会写一些类似“what-do-to-with-japenese-ulrs”的东西。
  2. Google Japan 可能对英文网址的兴趣不如日文网址。

关于最佳行动方案的任何想法?:D

url urlencode clean-urls

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

在调用action之前发生的ASP.NET MVC事件?

我想Thread.CurrentCulture根据一些路径数据设置值,但是在计算路径之后和调用action方法之前,我找不到挂钩到该触发器的事件.

有任何想法吗?

asp.net-mvc

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

移动鼠标光标而不触发 WM_MOUSEMOVE

我想使用SetCursorPos将鼠标在窗口中间(就像在 FPS 游戏中一样)。

问题是,当我这样做时,我的窗口会收到一个 WM_MOUSEMOVE——它充其量抵消了用户想要的任何移动,最坏的情况是进入反馈循环。

我考虑过使用 GetCursorPos 读取位置并忽略消息,如果它与我使用 SetCursorPos 移动它的位置相同。但是这种方法的问题在于鼠标是异步的。如果程序落后,那么 GetCursorPos 将返回一个与我预期不同的值——因此它不会知道忽略该消息。

有没有好的方法来处理这个问题?

winapi mousemove

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

有没有办法在F#中识别CLR事件实例?

当我在F#Interactive工作时,我经常想要对事件处理程序进行更改.简单地在事件上调用Subscribe或Add或AddHandler函数会导致旧事件继续被调用,这很少是意图.

一种解决方案是使用它返回的IDisposable,但这需要在您自己的代码中跟踪IDisposable,这对于探索性任务来说很麻烦.

当我Dictionary<IEvent,IDisposable>再次订阅同一个事件时,我试过调用Dispose():

let events = Dictionary<obj, IDisposable>()
let subonce (e:IEvent<'h,'e>) (handler: 'e -> unit) =
    if events.ContainsKey e then
        events.[e].Dispose()
        events.Remove e |> ignore
    let d = e.Subscribe handler
    events.Add (e,d) |> ignore

let w = Window()
w.Show()

//Running this line in FSI a second time onward should Dispose() the previous subscription
subonce w.MouseUp (fun e -> printfn "%A" <| e.GetPosition(w))
Run Code Online (Sandbox Code Playgroud)

不幸的是,事实证明,F#生成了一个新的IEvent实例,因此天真地使用=obj.Equals不切割它.

> w.MouseUp;;
val it : IEvent<Input.MouseButtonEventHandler,Input.MouseButtonEventArgs> =
  <published event> {addHandler = …
Run Code Online (Sandbox Code Playgroud)

f#

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