小编Dan*_*iel的帖子

有什么地方可以了解F#可能的未来吗?

是否有任何网站/博客(可能是由F#团队成员?)定期讨论/揭示有关F#未来的想法?

我知道一些团队成员的博客,但我找不到包含此类内容的博客.

f#

7
推荐指数
1
解决办法
531
查看次数

保持部分应用的功能通用

是否可以部分应用诸如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)

generics f# value-restriction

7
推荐指数
3
解决办法
1305
查看次数

如何用jQuery中的单词进行数学运算?

我正在尝试编写一个可以用英语单词进行数学运算的程序.

例如,我希望能够做类似的事情

"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中执行此操作?

javascript math jquery

7
推荐指数
1
解决办法
319
查看次数

如何使用基础值定义枚举常量

这个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)

这种差异似乎很奇怪.

UPDATE

这在v3.1中得到修复,并按预期工作.

enums f# constants

7
推荐指数
1
解决办法
480
查看次数

将数据库记录建模为类型

我在F#中重写一个C#库,其中大多数类与数据库表一对一映射(类似于ActiveRecord).我正在考虑是否使用记录或类(甚至可能是DU?).在属性设置器中有相当多的验证来维护不变量. 在F#中对此进行建模的最佳方法是什么? 我不希望将违反业务逻辑的对象持久化到数据库.欢迎任何想法.

还有一些想法......将不变量移动到外部"控制器"类是否更好?来自C#,允许与数据库记录对应的对象包含无法保存到数据库的任何内容,这是错误的.我想因为早先失败似乎比以后失败更好.

f#

6
推荐指数
1
解决办法
462
查看次数

MySqlBulkLoader可以用于事务吗?

MySqlBulkLoader可以用于事务吗?我没有看到将事务显式附加到加载器实例的方法.还有另外一种方法吗?

mysql transactions bulkinsert bulkloader

6
推荐指数
1
解决办法
776
查看次数

使用循环引用设计的不可变类的批判,以及更好的选项

我有一个工厂类,用于创建带有循环引用的对象.我希望它们也是不变的(在某种意义上说).所以我使用以下技术,使用一种类型的闭包:

[<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方法更喜欢这个,因为它有更强的不变性保证.也许它是神经质的,但我更喜欢关闭访问控制.

这个设计有什么陷阱吗?有没有更好的,也许不那么繁琐的方法来做到这一点?

f# closures class-design circular-dependency immutability

6
推荐指数
1
解决办法
507
查看次数

只读与自动(只读)属性

使用只读属性之间有区别吗:

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# f#-3.0

6
推荐指数
1
解决办法
754
查看次数

了解F#3.0中对受保护/基本成员使用的更改

F#3.0为呼叫baseprotected成员添加了更严格的检查.我有类似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)

问题:

  1. 为什么要加入更严格的检查?
  2. (和相关的)这样一个琐碎的解决方案解决了什么可怕的问题?
  3. 是否有一个更好的设计,这应该鼓励?

inheritance f# compiler-errors protected f#-3.0

6
推荐指数
1
解决办法
375
查看次数

为什么ServiceStack会使用此配置返回404?

我有以下配置.

<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 …

servicestack

6
推荐指数
1
解决办法
1663
查看次数