我在尝试使用FunScript时遇到了麻烦,我真的很喜欢F# - > Javascript的想法,但是对于如何使用这些漂亮的技术的信息/文档的数量不断感到沮丧.
这是问题所在:
无法安装FunScript项目(无主机)模板,因为:"您需要Nuget已安装",当我尝试下载时,VS说. // Dah, I do have Nuget and just updated it to latest release. I'm using VS2013 Ultimate.
我做了以下事情:
我创建了一个新的FSharp库项目,然后我运行了Package Maneger命令来获取所需的FunScript Libs:
PM> Install-Package FunScript
Run Code Online (Sandbox Code Playgroud)
虽然效果很好,但随后...当我看一个FunScript示例时,我open FunScript.TypeScript在程序中看到当我输入时不存在,因为它说TypeScript没有定义,并且查看示例FunScript.TypeScript提供了使用jQuery并与DOM交互的能力.没有它,我在这里无能为力
我确实注意到Nuget for FunScript上的第三方库,:
FuncScript.TypeScript.Bindings.(lib|jquery)
Run Code Online (Sandbox Code Playgroud)
但我无法在"open [namespace]"语句中引用它们.
最后,程序结束时必须有一个"运行时组件......".这也是'未定义'
你们有一个我可以开始的完整的FunScript示例吗?(我已经在网上搜索了很多,我看到的程序没跟我一起工作)
我有以下函数检查customer数据源中a 的存在并返回id.这是使用该Option类型的正确/惯用方式吗?
let findCustomerId fname lname email =
let (==) (a:string) (b:string) = a.ToLower() = b.ToLower()
let validFName name (cus:customer) = name == cus.firstname
let validLName name (cus:customer) = name == cus.lastname
let validEmail email (cus:customer) = email == cus.email
let allCustomers = Data.Customers()
let tryFind pred = allCustomers |> Seq.tryFind pred
tryFind (fun cus -> validFName fname cus && validEmail email cus && validLName lname cus)
|> function
| Some cus -> cus.id
| None …Run Code Online (Sandbox Code Playgroud) 我有一个表示原始类型的区分工会:
type Expr =
| Int of bigint
| Real of float
| Symbol of string
| Bool of bool
| List of Expr list
Run Code Online (Sandbox Code Playgroud)
我正在编写一个函数list : obj list -> Expr list,该函数将检查对象的类型并将其相应地转换为Expr:
let rec list : (obj list -> Expr list) = function
| head::tail ->
match head with
| :? string as x'-> Symbol (x') :: list tail
| :? int as x'-> Int(bigint x') :: list tail
| :? bigint as x' -> Int …Run Code Online (Sandbox Code Playgroud) 我试图动态创建一个函数,可以根据它在F#中的输入返回不同的类型.这些类型的函数类似于代理,以说明我想要做的事情,下面是一个不能正常工作的示例:
open FSharp.Reflection
open System
let functionThatReturnsAsync (irrelevantArgs: obj list) (returnType: Type) =
if returnType.GUID = typeof<string>.GUID
then async { return box "some text" }
elif returnType.GUID = typeof<int>.GUID
then async { return box 42 }
elif returnType.GUID = typeof<bool>.GUID
then async { return box true }
else async { return box null }
// this works fine
let func = FSharpValue.MakeFunction(typeof<string -> Async<int>>, fun x -> box (functionThatReturnsAsync [x] typeof<int>))
// unboxing to that type works as …Run Code Online (Sandbox Code Playgroud) 我在F#中为简单的数学表达式(用一些自定义函数算术)编写了一个典型的求值器.虽然它似乎工作正常,但某些表达式没有按预期进行评估,例如,这些工作正常:
但这些不是:
代码如下工作,标记化(字符串作为输入) - >到rev-polish-notation(RPN) - > evalRpn
我认为问题似乎发生在一元函数(函数接受一个运算符)的某处,这些是sqrt函数和negation( - )函数.我真的没有看到我的代码出了什么问题.有人可能会指出我在这里缺少的东西吗?
这是我在F#中的实现
open System.Collections
open System.Collections.Generic
open System.Text.RegularExpressions
type Token =
| Num of float
| Plus
| Minus
| Star …Run Code Online (Sandbox Code Playgroud)