小编Cha*_*ert的帖子

对于可用的关键字数量,F#的monads实现是唯一的吗?

我只知道F#.我还没有学过其他函数式编程语言.我在monad中看到的所有例子都只描述了bind和unit方法.F#有很多关键字(例如let!,do!等等),允许您在同一计算表达式中执行不同的操作.这似乎比你的基本绑定和单位方法更有力量.这是F#的独特之处还是在函数式编程语言中很常见?

monads f# functional-programming

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

在f#match语句中如何匹配byte []类型?

我正在尝试从.net类型中查找DbType枚举值.我正在使用匹配声明.但是我无法弄清楚如何匹配类型byte [].

let dbType x =
  match x with
  | :? Int64 -> DbType.Int64
  | :? Byte[] -> DbType.Binary // this gives an error
  | _ -> DbType.Object
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法来映射这些类型,我会接受建议.

ado.net f#

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

当项目被投射到对象时,为什么等于不相同?

当我转换int并浮动到object并比较它们时,相等性始终为false.为什么?

        float f = 0.0f;
        int i = 0;
        Console.WriteLine(f.Equals(i)); // true
        Console.WriteLine(i.Equals(f)); // false
        Console.WriteLine(i == f); // true
        Console.WriteLine("----------------");
        object obf = f;
        object obi = i;
        Console.WriteLine(obf.Equals(obi)); // false
        Console.WriteLine(obi.Equals(obf)); // false
        Console.WriteLine(obi == obf); // false
        Console.WriteLine("----------------");
Run Code Online (Sandbox Code Playgroud)

更新:对于相同类型,情况并非如此

        int i1 = 1;
        int i2 = 1;
        object oi1 = i1;
        object oi2 = i2;
        Console.WriteLine(oi1.Equals(oi2)); // true
        Console.WriteLine(oi2.Equals(oi1)); // true
Run Code Online (Sandbox Code Playgroud)

c#

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

这是计算表达式的候选者吗?

我有以下c#代码,它检查权限.我想知道,当转换为f#时,计算表达式是否是一种分解空检查的方法.

bool ShouldGrantPermission(ISecurityService security, User user, Item item) {
  return user != null && item != null && user.Id == item.AuthorId
    && security.Does(user).Have(MyPermission).On(item);
}
Run Code Online (Sandbox Code Playgroud)

我想要注意的是,如果任何项为null,则ISecurityService API当前返回false.但是它会进行数据库调用,因此这里的代码检查null然后执行id检查,因为在大多数情况下,这将返回false并避免数据库调用.

c# monads f#

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

我如何创建一个带参数的计算表达式?

我想创建几个用于访问数据库并返回项目列表的计算表达式(我在代码注释中也有问题):

let foo x y z = proc "foo" {
    let! cmd = proc.CreateCommand() // can I do this?
    do! In "x" DbType.Int32 // would i gain anything by replacing DbType with a union 
                            // type since the names would match actual data types?
    do! In "y" DbType.String 15;
    cmd?x <- x
    cmd?y <- y
    use! r = cmd.ExecuteReader() // would this be bad form for creating a workflow builder?
    return! r {
        let item = MyItem()
        do! item.a <- …
Run Code Online (Sandbox Code Playgroud)

monads f#

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

为什么这个泛型在编译时没有得到解决?

我有以下代码.我希望它打印:

A
B
C
DONE
Run Code Online (Sandbox Code Playgroud)

相反它打印

P
P
P
DONE
Run Code Online (Sandbox Code Playgroud)

为什么?

更新
我不是要求解决方案.我想知道为什么会这样.我认为泛型在编译时得到了解决.从我可以告诉它应该能够在编译时将这些解析为正确的方法,但显然它不是,我不明白为什么.我正在寻找解释原因的解释,而不是解决方案.

这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication50
{
    class Parent
    {
        public string FieldName { get; set; }
        public string Id { get; set; }
    }

    class ChildA : Parent
    {
        public string FieldValue { get; set; }
    }

    class ChildB : Parent
    {
        public DateTime? Start { get; set; }
        public DateTime? End { get; set; }
    }

    class ChildC : Parent …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

你如何防止knockout.js数据绑定中的字符转义?

此代码显示不间断的空间转义序列而不是实际的空格:

<html>
  <head>
    <script src="../js/jquery.min.js"></script>
    <script src="../js/knockout-2.2.1.js"></script>
    <script>
      $(document).ready(function() {
        var modelType = function() {
          this.A = ko.observable('a b&nbsp;&nbsp;c');
        };
        var model = new modelType();
        ko.applyBindings(model);
      });
    </script>
  </head>
  <body>
    <p data-bind="text: A"></p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

它显示以下内容:

a b&nbsp;&nbsp;c
Run Code Online (Sandbox Code Playgroud)

代替

a b  c
Run Code Online (Sandbox Code Playgroud)

我该如何防止这种行为?

javascript javascript-framework html-escape-characters knockout-2.0 knockout.js

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

如何获取传递给属性构造函数的参数?

我正在研究文档生成器.MSDN文档显示应用它们时传递给Attributes的参数.如[ComVisibleAttribute(true)].我如何通过反射,pdb文件或其他方式获取那些参数值和/或在我的c#代码中调用的构造函数?

澄清>如果有人记录了一个具有属性的方法,如下所示:

/// <summary> foo does bar </summary>
[SomeCustomAttribute("a supplied value")]
void Foo() {
  DoBar();
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在我的文档中显示该方法的签名,如下所示:

Signature:

[SomeCustomAttribute("a supplied value")]
void Foo();
Run Code Online (Sandbox Code Playgroud)

c# reflection pdb-files

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

string.GetHashCode()是否足以用于nlp中的单词词典?

我可以使用该string.GetHashCode()功能可靠地存储词干数据吗?

c# nlp

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

为什么我可以把|>放在下一行但是<| 给出语法错误?

我可以做这个:

let foo = bar
    |> baz
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我收到语法错误:

let foo = bar
    <| baz
Run Code Online (Sandbox Code Playgroud)

为什么?

当我定义自己的中缀运算符并尝试以这种方式使用它时,我也会遇到语法错误.

f# syntax-error

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