对于F#应用程序,我尝试按照以下说明操作:
唉,对于F#项目,Visual Studio没有与C#项目相同的命令和项目配置页面.我创建了一个一次性的C#项目,将其复制app.manifest到我的F#项目中,并<requestedExecutionLevel>根据上面的问题修改了它.尽管如此,.exe仍然没有管理员权限运行.
那么,我如何构建一个F#应用程序,以便它只以管理员身份运行?
Map.flatten上的文档说明如下:
将此可遍历集合的映射转换为由这些可遍历集合的元素组成的映射.
我得到了"可遍历集合的地图".例如,这将是一个列表地图.仅凭这个定义,a就有Map[Int, List[Int]]资格了.
但是什么是"这些可穿越集合的元素形成的地图"?这听起来很简单,但我很难让它发挥作用.
文档中提供的示例代码是......嗯......我们应该说,不适用吗?
Run Code Online (Sandbox Code Playgroud)val xs = List( Set(1, 2, 3), Set(1, 2, 3) ).flatten // xs == List(1, 2, 3, 1, 2, 3) val ys = Set( List(1, 2, 3), List(3, 2, 1) ).flatten // ys == Set(1, 2, 3)
我尝试了一些不同的东西,但它们会产生同样的错误.以下是几个例子:
scala> val m = Map(List(1) -> List(1,2,3), List(2) -> List(4,5,6), List(3) -> List(7,8,9))
m: scala.collection.immutable.Map[List[Int],List[Int]] = Map(List(1) -> List(1, 2, 3), List(2) -> List(4, 5, 6), List(3) -> List(7, 8, 9)) …Run Code Online (Sandbox Code Playgroud) 我试图在F#中做一些事情,如Json.NET文档中的JsonConstructorAttribute示例:
public class User
{
public string UserName { get; private set; }
public bool Enabled { get; private set; }
public User()
{
}
[JsonConstructor]
public User(string userName, bool enabled)
{
UserName = userName;
Enabled = enabled;
}
}
Run Code Online (Sandbox Code Playgroud)
F#中的模拟类似于以下内容,但我在以下位置出现错误[<JsonConstructor>]:
[<JsonConstructor>] // ERROR! (see below)
type User (userName : string, enabled : bool) =
member this.UserName = userName
member this.Enabled = enabled
Run Code Online (Sandbox Code Playgroud)
错误是
此属性对此语言元素无效
那么,我如何用主要构造函数装饰[<JsonConstructor>]?
我们假设我们有以下昂贵的功能:
bool ExpensiveOp1() { ... }
bool ExpensiveOp2() { ... }
bool ExpensiveOp3() { ... }
Run Code Online (Sandbox Code Playgroud)
另外,为了简单起见,假设它们都没有副作用.
我知道C#可以短路if ExpensiveOp1或ExpensiveOp2返回false以下表达式:
return ExpensiveOp1() && ExpensiveOp2() && ExpensiveOp3();
Run Code Online (Sandbox Code Playgroud)
但是,如果我以这种方式编写代码,编译器是否足够智能(缺少更好的术语)内联函数调用并利用短路?
var x = ExpensiveOp1();
var y = ExpensiveOp2();
var z = ExpensiveOp3();
return x && y && z;
Run Code Online (Sandbox Code Playgroud)