我只知道F#.我还没有学过其他函数式编程语言.我在monad中看到的所有例子都只描述了bind和unit方法.F#有很多关键字(例如let!,do!等等),允许您在同一计算表达式中执行不同的操作.这似乎比你的基本绑定和单位方法更有力量.这是F#的独特之处还是在函数式编程语言中很常见?
我正在尝试从.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)
如果有更好的方法来映射这些类型,我会接受建议.
当我转换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#代码,它检查权限.我想知道,当转换为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并避免数据库调用.
我想创建几个用于访问数据库并返回项目列表的计算表达式(我在代码注释中也有问题):
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) 我有以下代码.我希望它打印:
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) 此代码显示不间断的空间转义序列而不是实际的空格:
<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 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 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
我正在研究文档生成器.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) 我可以使用该string.GetHashCode()功能可靠地存储词干数据吗?
我可以做这个:
let foo = bar
|> baz
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到语法错误:
let foo = bar
<| baz
Run Code Online (Sandbox Code Playgroud)
为什么?
当我定义自己的中缀运算符并尝试以这种方式使用它时,我也会遇到语法错误.
c# ×5
f# ×5
monads ×3
ado.net ×1
generics ×1
javascript ×1
knockout-2.0 ×1
knockout.js ×1
nlp ×1
pdb-files ×1
reflection ×1
syntax-error ×1