小编Rub*_*ink的帖子

使用`of`关键字的F#类型定义

让我说我在F#中非常环保(但在C#有4年经验).我想开始学习F#,我正在学习TryFSharp.org教程.我谈到了计算表达式,但事情并不完全清楚.所以我开始谷歌吧.我遇到了另一篇教程/文章,它在第一个例子(日志记录示例)中解释得更好.但后来我继续读到第二个例子; 我不能遵循代码的流程或它应该如何工作,也许是因为我不理解State类型的定义:

type State<'a, 's> = State of ('s -> 'a * 's)
Run Code Online (Sandbox Code Playgroud)

我曾与几个简单的类型在F#已经工作过,我所看到的struct,class,record但我不知道如何阅读此类型或什么是应该做的.我也无法弄清楚of关键字在那里做了什么.

所以我的问题是:这个类型定义做了什么/它中的of关键字有什么作用?

f#

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

适用于所有数值数据类型的函数

我写了一个简单的函数来反转给定的数字:

let reverseNumber x =
    let rec innerFunc acc elem =
        if elem = 0
            then acc
            else 
                let rem = elem % 10
                innerFunc (10 * acc + rem) (elem / 10)

    innerFunc 0 x
Run Code Online (Sandbox Code Playgroud)

问题是它只适用于整数.对于例如,Int64的,我需要创建一个使用另一个版本0L,并10L取代010分别.

我听说可以使用内联关键字和LanguagePrimitives编写更多泛型函数,但后者既不包含提醒操作也不包含'GenericTen'(尽管可能通过'GenericOne + GenericOne + ...获得).

你能帮忙吗 ?

f# inline generic-programming

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

f#:常量联合案例标记号

可区分联合类型中的每个联合案例都会获得一个标签号

type Result<'TSuccess,'TFailure> = 
   | Success of 'TSuccess
   | Failure of 'TFailure

let cases = FSharpType.GetUnionCases typedefof<Result<_,_>>
for case in cases do
    case.Tag
Run Code Online (Sandbox Code Playgroud)

从查看编译的代码来看,它是由编译器生成的,并且根据情况的顺序是常量。所以成功为 0,失败为 1。

  • 标签号是否总是根据订单生成?这是 F# 规范中的内容吗?
  • 是否可以提供自定义标签号,以便如果订单发生变化或者我在成功和失败之间放置另一个案例,它们的标签号不会改变?

我正在尝试设置 protobuf-net 通过创建自定义类型模型并将成功和失败添加为结果的子类型来序列化可区分的联合。但要使其发挥作用,需要为每个类指定 ,并且该类必须保持不变。我希望能够自动化设置,但需要能够有一个与每种类型相关的数字,并且这种关系永远不会改变。如果标签可以在可区分联合定义中进行硬编码,那么它似乎是完美的。

f# protobuf-net discriminated-union

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

DDD:在旧系统中应用Event Store

我们当前的系统是一个不使用的遗留系统domain events.我们将开始发布domain events.其他有界的背景将会听取这些domain events,但仅限于我们开始发布时,丢失所有过去的信息.

那么,如何处理这个没有记录这些事件的遗留系统,但是我们想要在实现这个事件存储系统之前有过去的历史?

这是一个很好的方法,试图弄清楚发生了什么,并尝试根据我们在数据库中的数据创建域事件(逆向工程)?

domain-driven-design domain-events event-store

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

注入具有多个构造函数的类

使用NInject解析具有多个构造函数的类似乎不起作用.

public class Class1 : IClass
{
public Class1(int param) {...}
public Class1(int param2, string param3) { .. }
}
Run Code Online (Sandbox Code Playgroud)

以下似乎不起作用:

IClass1 instance =
    IocContainer.Get<IClass>(With.Parameters.ConstructorArgument(“param”, 1));
Run Code Online (Sandbox Code Playgroud)

模块中的钩子很简单,在我添加额外的构造函数之前工作:Bind().To();

ninject

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

使用Reactive Extensions创建可观察的鼠标拖动

我有以下内容

var leftMouseDown = Observable.FromEvent<MouseButtonEventArgs>(displayCanvas, "MouseLeftButtonDown");
var leftMouseUp = Observable.FromEvent<MouseButtonEventArgs>(displayCanvas, "MouseLeftButtonUp");
var mouseMove = Observable.FromEvent<MouseEventArgs>(displayCanvas, "MouseMove");

var leftMouseDragging = from down in leftMouseDown
                        let startPoint = down.EventArgs.GetPosition(displayCanvas)
                        from move in mouseMove.TakeUntil(leftMouseUp)
                        let endPoint = move.EventArgs.GetPosition(displayCanvas)
                        select new { Start = startPoint, End = endPoint };
Run Code Online (Sandbox Code Playgroud)

当我订阅它时,它会给我拖动的起点和当前的终点.现在我需要在拖动完成后做一些事情.我试图用RX完全做到这一点并没有成功,最终做到了

leftMouseDragging.Subscribe(value=>
    {
        dragging = true;
        //Some other code
    });

leftMouseUp.Subscribe(e=>
    {
        if(dragging)
        {
            MessageBox.Show("Just finished dragging");
            dragging = false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到我拖动鼠标右键.然后,当我单击鼠标左键时,我会看到消息框.如果我只做一个左键拖动我得到消息框,然后单击鼠标左键不会产生该框.我想在没有外部状态的情况下这样做,但如果没有别的,我至少希望它能正常工作.

仅供参考:我尝试拖动易失性并使用锁定,但这不起作用.

编辑

事实证明我的问题是右键单击上下文菜单.一旦我摆脱了我的上述代码工作.所以,现在我的问题是如何获得上下文菜单并仍然使我的代码工作.我假设上下文菜单处理鼠标左键并且不知何故导致我的代码不起作用,但我仍然困惑不解.

c# system.reactive

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

ClickOnce PublishUrl无法使用MSBuild任务

我有一个在Windows Server 2003上运行的CruiseControl .NET构建服务器,我正在尝试使用msbuild 4构建和发布我的Wpf(3.5)ClickOnce应用程序.我的构建脚本中的任务如下:

<MSBuild Projects="src\TestProject\TestProject.csproj"
                    Targets="publish"          
                    Properties="PublishUrl=c:\testwpf\;InstallUrl=http://devserver/TestProjectUpdates/;" />
Run Code Online (Sandbox Code Playgroud)

但是,在运行构建之后,安装不会部署到c:\ testwpf\folder.但是我可以看到在源的bin\release文件夹中创建的安装.

知道为什么它没有将文件部署到指定的PublishUrl?

msbuild clickonce

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

使用MSBUILD和maxcpucount选项的问题

我在4核机器上使用MsBuild.我给下面的命令行来构建4个项目属于大VC++所得溶液(超过4个项目全部没有相互依赖).我正在使用Visual Studio 2008.

为了加快构建时间,我试图利用这些maxcpucount选项,但似乎无法正常工作.我期待每个核心将构建我在命令行提供的4个项目中的每个项目.不幸的是,我测量了建造的时间,有或没有maxcpucount选项,我有相同的确切结果.

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe MyVCppSolution.sln 
     /t:ProjA;ProjB;ProjC;ProjD /m

你知道我在做错了什么吗?

就是"建立4个项目的MyVCppSolution.sln解一次"或者我应该手动运行4个进程的每个构建解决方案的单个项目多达4个正确的方式?

msbuild visual-studio-2008 parallel-builds

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

使用WPF和C#嵌套数据绑定

我正在尝试制定预算计划.我需要在哪里放置带有文本块列表的分组框.

<ItemsControl DataContext="{Binding}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <GroupBox Header="{Binding}">
        <ItemsControl DataContext="{Binding}">
          <ItemsControl.ItemTemplate>
            <DataTemplate>
              <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Text}" />
                <TextBlock Text="{Binding Value}" />
              </StackPanel>
            </DataTemplate>
          </ItemsControl.ItemTemplate>
        </ItemsControl>
      </GroupBox>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式将一个列表(可能是?)与groupboxs数据绑定,所以我创建了一个组合框列表,其中一些行是一个带有货币值的文本.这样我就可以创建一个名为"Apartment"的组,其中包含两行"Rent $ 3000"和"Maintenance $ 150".然后我可以有一个名为"Car"的第二组,例如"保险","贷款"和"维护".

但是我该如何对此进行数据处理呢?我将如何在C#中执行此操作.我不知所措.

c# data-binding wpf xaml nested

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

如何使用TeamCity部署未版本控制的文件

我有一个这样的网站组织:

  • 一个包含所有代码的服务器
  • 一个服务器,包含所有其他资源,如文件/图像

此时我设法从subversion获取源代码,构建它,然后部署它(msbuild).

问题是,我的图像没有版本化.那么如何将我们的开发服务器中的图像带到构建服务器呢?将它放入Team City的最佳方式是什么?我认为这些文件是某种神器,但我不确定(我不太了解这个概念,标题"神器"没有帮助).

teamcity

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