我更倾向于尽可能地接近功能范例,当我的大脑迎接挑战时,尽可能地挤压到纯粹的功能.我尽可能使用F#.通常,我会遇到VB.NET或C#(或VBA,当我真的不走运时).所以我的语言让我偏离了功能方法.
从历史上看,我已经忽略了日志记录并与用户通信,直到我得到结果 - 让用户等待.现在我正在尝试实现状态栏的记录和/或更新.这很容易,因为我的语言允许我随时写入标准输出.但是从一个纯粹的功能角度来看,如何将一个人的功能泄露到外部世界?在计算过程中记录或与用户通信是否与纯功能方法相反?
我敢肯定在Haskell中会使用Monad.使用其他语言时呢?
谢谢.
AccountController.cs安排AccountController上课.Login该类的方法失败了.特别,
var result = await SignInManager.PasswordSignInAsync(
model.Email, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)
在Login方法内投掷System.NullReferenceException.
我已经验证了model.Email,model.Password并且model.RememberMe不是空的.下一步是深入挖掘SignInManager,这是一个AccountController类型的对象ApplicationSignInManager.从上面一行调用的get访问器SignInManager是
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ??
HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
// private set...
}
Run Code Online (Sandbox Code Playgroud)
我改写为
public ApplicationSignInManager SignInManager
{
get
{
var c = HttpContext.GetOwinContext();
var m = c.Get<ApplicationSignInManager>();
return _signInManager ?? m;
}
// private set...
}
Run Code Online (Sandbox Code Playgroud)
调试并确保get访问者没有返回 …
我已经回顾了关于这个错误的其他帖子,我不认为我犯了这些错误.
不在范围内:数据构造函数'Extraction'.
Configuration.hs:
module Configuration
(Config
, columns
, headers
, types
, totals
, extractions,
Extraction
, xState
, xDivisions
, xOffice
...) where
...
data Extraction = Extraction { xState :: String
, xDivisions :: Maybe [String]
, xOffice :: Maybe String } deriving Show
data Config = Config { columns :: String
, headers :: [String]
, types :: [String]
, totals :: [String]
, extractions :: [Extraction] } deriving Show
...
Run Code Online (Sandbox Code Playgroud)
PIF.hs:
module PIF (...) where …Run Code Online (Sandbox Code Playgroud) 我想要一份报告清单.报告可以是详细信息或部分类型.
module Data
type Section = { Header: string;
Lines: string list;
Total: string }
type Detail = { State: string;
Divisions: string list;
Sections: Section list }
type Summary = { State: string;
Office: string;
Sections: Section list }
type Report = Detail | Summary
Run Code Online (Sandbox Code Playgroud)
然后在我的代码中,我想做以下事情:
let mutable (reports:Report list) = []
...
reports <- detail::reports
// or
reports <- summary::reports
Run Code Online (Sandbox Code Playgroud)
编译器在第一种情况下抱怨:"表达式应该具有类型报告,但这里有类型详细信息",并且在第二种情况下适当地类似.
我不想做这样的事情吗?我应该以不同的方式思考问题吗?由于报表是详细信息或摘要,因此报表列表不应接受详细信息或摘要?什么是报告列表,如果不是详细信息或摘要列表?
谢谢.
这是我在F#联盟类型列表中的问题的延续.感谢有用的反馈,我能够创建一个Reports 列表,其中Report包含Detail或者Summary.这是数据定义了:
module Data
type Section = { Header: string;
Lines: string list;
Total: string }
type Detail = { State: string;
Divisions: string list;
Sections: Section list }
type Summary = { State: string;
Office: string;
Sections: Section list }
type Report = Detail of Detail | Summary of Summary
Run Code Online (Sandbox Code Playgroud)
现在我已经Report在一个名为的变量中得到了s 列表reports,我想迭代这些Report对象并根据每个对象执行操作.除了处理任何一个Detail.Divisions或两个的情况外,操作是相同的Summary.Office.显然,我必须以不同的方式处理这些问题.但我不想复制处理类似State和Sections每个代码的所有代码.
我的第一个(工作)想法如下:
for report …Run Code Online (Sandbox Code Playgroud) 好的,由于我的上一个问题没有引起任何回应,我正在朝着不同的方向前进。哈哈!
除了有关管理用户状态或访问先前解析器结果的官方文档之外,我找不到任何示例。
Nb 这段代码不能编译。
namespace MultipartMIMEParser
open FParsec
open System.IO
type Header = { name : string
; value : string
; addl : (string * string) list option }
type Content = Content of string
| Post of Post list
and Post = { headers : Header list
; content : Content }
type private UserState = { Boundary : string }
with static member Default = { Boundary="" }
module …Run Code Online (Sandbox Code Playgroud) 我对Haskell的简洁和优雅感到震惊.但是我在一个.Net的房子里工作,所以当我能够逃脱它时,我会使用F# - 我可能是全国数百名使用它的人中唯一一个.
ADO.NET或F#是否提供与HDBC一样简洁优雅的东西executeMany?我正在通过真实世界Haskell.在第21章中,它提供了这个例子:
ghci> conn <- connectSqlite3 "test1.db"
ghci> stmt <- prepare conn "INSERT INTO test VALUES (?, ?)"
ghci> executeMany stmt [[toSql 5, toSql "five's nice"], [toSql 6, SqlNull]]
ghci> commit conn
ghci> disconnect conn
Run Code Online (Sandbox Code Playgroud)
我想在我的F#中获得这种优雅和简洁.我已经看到很多关于使用参数化查询以避免SQL注入攻击的炒作.在这种情况下,我没有使用它们有三个原因:
这是我的F#代码:
module Data
open System
open System.Data
open System.Data.OleDb
open System.Text.RegularExpressions
type Period = Prior | Current
let Import period records db =
use conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + db + ";Persist …Run Code Online (Sandbox Code Playgroud) 我用这段代码用C#(.Net 3.5)编写了一个应用程序.
using System;
using System.Net;
string strURI = String.Format("ftp://x{0}ftp/%2F'{1}'", parm1, parm2);
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(strURI);
ftp.Proxy = null;
ftp.KeepAlive = true;
ftp.UsePassive = false;
ftp.UseBinary = false;
ftp.Credentials = new NetworkCredential("uid", "pass");
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
...
Run Code Online (Sandbox Code Playgroud)
我已将其转换为F#(.NET 4.0)以在我的应用程序中使用.
open System.Net
let uri = sprintf "ftp://x%sftp/%%2F'%s'" parm1 parm2
let ftp = FtpWebRequest.Create(uri) :?> FtpWebRequest
ftp.Credentials <- new NetworkCredential("uid", "pass")
ftp.Method <- WebRequestMethods.Ftp.DownloadFile
ftp.Proxy <- null
let response = ftp.GetResponse() :?> FtpWebResponse
...
Run Code Online (Sandbox Code Playgroud)
此时,FSI抱怨道.
System.Net.WebException:远程服务器返回错误:(550)文件不可用(例如找不到文件,没有访问权限).
然而,C#应用程序运行并成功下载该文件.我在F#中缺少什么(除了4.0中没有的属性,即KeepAlive,UsePassive和UseBinary)?