是否有任何网站/博客(可能是由F#团队成员?)定期讨论/揭示有关F#未来的想法?
我知道一些团队成员的博客,但我找不到包含此类内容的博客.
是否可以部分应用诸如bprintf并根据其初始使用限制其功能?
我想做以下事情:
let builder = new System.Text.StringBuilder()
let append = Printf.bprintf builder
append "%i" 10
append "%s" string_value
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可以用英语单词进行数学运算的程序.
例如,我希望能够做类似的事情
"four thousand and three" + "seven thousand and twenty nine"
Run Code Online (Sandbox Code Playgroud)
并得到输出
"eleven thousand and thirty two"
Run Code Online (Sandbox Code Playgroud)
是否可以在jQuery中执行此操作?
这个C#的F#等价物是什么:
const MyEnum None = (MyEnum)1;
Run Code Online (Sandbox Code Playgroud)
这不起作用:
[<Literal>]
let None : MyEnum = enum 1 //ERROR: not a valid constant expression
Run Code Online (Sandbox Code Playgroud)
虽然,奇怪的是,在属性构造函数中它是可以的:
[<MyAttribute(enum 1)>]
type T = class end
Run Code Online (Sandbox Code Playgroud)
这种差异似乎很奇怪.
这在v3.1中得到修复,并按预期工作.
我在F#中重写一个C#库,其中大多数类与数据库表一对一映射(类似于ActiveRecord).我正在考虑是否使用记录或类(甚至可能是DU?).在属性设置器中有相当多的验证来维护不变量. 在F#中对此进行建模的最佳方法是什么? 我不希望将违反业务逻辑的对象持久化到数据库.欢迎任何想法.
还有一些想法......将不变量移动到外部"控制器"类是否更好?来自C#,允许与数据库记录对应的对象包含无法保存到数据库的任何内容,这是错误的.我想因为早先失败似乎比以后失败更好.
MySqlBulkLoader可以用于事务吗?我没有看到将事务显式附加到加载器实例的方法.还有另外一种方法吗?
我有一个工厂类,用于创建带有循环引用的对象.我希望它们也是不变的(在某种意义上说).所以我使用以下技术,使用一种类型的闭包:
[<AbstractClass>]
type Parent() =
abstract Children : seq<Child>
and Child(parent) =
member __.Parent = parent
module Factory =
let makeParent() =
let children = ResizeArray()
let parent =
{ new Parent() with
member __.Children = Seq.readonly children }
[Child(parent); Child(parent); Child(parent)] |> children.AddRange
parent
Run Code Online (Sandbox Code Playgroud)
我比一种internal AddChild方法更喜欢这个,因为它有更强的不变性保证.也许它是神经质的,但我更喜欢关闭访问控制.
这个设计有什么陷阱吗?有没有更好的,也许不那么繁琐的方法来做到这一点?
使用只读属性之间有区别吗:
type T(arg) =
member x.M = arg
Run Code Online (Sandbox Code Playgroud)
并使用自动实现的属性:
type T(arg) =
member val M = arg
Run Code Online (Sandbox Code Playgroud)
假设arg没有副作用?有理由偏爱一个吗?
F#3.0为呼叫base和protected成员添加了更严格的检查.我有类似C#中的以下抽象类,它有protected static派生类使用的辅助方法.
public abstract class Processor {
public abstract void Process();
protected static void Helper(object arg) { }
}
Run Code Online (Sandbox Code Playgroud)
在F#中,其中一个辅助方法作为第一类函数传递:
type DerivedProcessor() =
inherit Processor()
let init f =
f ()
override x.Process() =
init Processor.Helper
Run Code Online (Sandbox Code Playgroud)
它在2.0中没有投诉编译,但在3.0中产生错误:
被调用的受保护成员或正在使用"基础".这只能在成员的直接实现中使用,因为它们可以逃避它们的对象范围.
好的,它很容易遵守,只需将调用包装在另一个静态成员中
static member private HelperWrapper(arg) = Processor.Helper(arg)
Run Code Online (Sandbox Code Playgroud)
并通过那个intead.但为什么?
C#对于同样的模式没有问题.
public class HappyToCompile : Processor {
private void Init(Action<object> f) {
f(null);
}
public override void Process() {
Init(Helper);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我有以下配置.
<location path="services">
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)
如果我添加另一个<system.webServer />部分,而不是在location元素中,ServiceStack将为所有请求返回404.删除它,一切都恢复正常.
这是一个示例响应:
HTTP/1.1 404 Not Found Cache-Control: private Content-Type: text/plain; charset=utf-8 Server: Microsoft-IIS/7.5 X-Powered-By: ServiceStack/3.926 Win32NT/.NET X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Mon, 19 Nov 2012 23:15:46 GMT Content-Length: 1528 Handler for …
f# ×7
f#-3.0 ×2
bulkinsert ×1
bulkloader ×1
class-design ×1
closures ×1
constants ×1
enums ×1
generics ×1
immutability ×1
inheritance ×1
javascript ×1
jquery ×1
math ×1
mysql ×1
protected ×1
servicestack ×1
transactions ×1