小编Mar*_*son的帖子

我应该有一个专用的主键字段吗?

我正在设计一个由Web应用程序使用的小型SQL数据库.

假设一个特定的表有一个Name字段,其中不允许两行具有相同的值.但是,用户可以随时更改"名称"字段.

此表中的主键将用作其他表中的外键.因此,如果将Name字段用作主键,则需要将任何更改传播到其他表.另一方面,唯一性要求将自动处理.

我的直觉是添加一个整数字段作为主键,可以由数据库自动填充.有这个领域有什么意义,还是浪费时间?

database-design primary-key

18
推荐指数
3
解决办法
3972
查看次数

如何匹配值的多个副本?

F#的模式匹配非常强大,所以编写它是很自然的:

match (tuple1, tuple2) with
| ((a, a), (a, a)) -> "all values are the same"
| ((a, b), (a, b)) -> "tuples are the same"
| ((a, b), (a, c)) -> "first values are the same"
// etc
Run Code Online (Sandbox Code Playgroud)

但是,第一个模式匹配会产生编译器错误:

'a' is bound twice in this pattern
Run Code Online (Sandbox Code Playgroud)

是否有比以下更清洁的方法?

match (tuple1, tuple2) with
| ((a, b), (c, d)) when a = b && b = c && c = d -> "all values are the same"
| ((a, b), (c, d)) …
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching

12
推荐指数
1
解决办法
685
查看次数

有没有更好的方法来创建多维强类型数据结构?

我需要一个多维数据结构,其中每个维度都是一个在设计时已知的小列表.

在我的程序的不同位置,我希望能够以强类型的方式访问不同维度的"切片"数据.

我在下面放了一些示例代码,用于使用嵌套接口的2D示例,但我想它会在3D或4D中变得非常可怕.正如@kvb所确定的那样,所需的样板代码将呈指数级增长.

有人有更好的建议吗?我的意思是,保持代码简单/简单/易于理解,同时仍保留按以下方式执行操作的能力:

Data a = new Data(...)
...
SomeMethodThatOnlyCaresAboutRedThings(a.Red) // takes a IBySize<T>
...
SomeMethodThatOnlyCaresAboutBigThings(a.Big) // takes a IByColour<T>
...
Run Code Online (Sandbox Code Playgroud)

这避免了那些必须知道与它们无关的数据结构部分的方法,从而使它们更容易测试.

我在这里纯粹使用颜色/尺寸作为一个例子,为无意中误导任何人认为这些选择有意义而道歉.T可以是一个简单的数据项,如浮点数或其他一些简单的数据结构.

标记为F#和C#,因为我对任何一种解决方案感到满意.

public interface IByColour<T>
{
    T Green { get; }
    T Red { get; }
    T Blue { get; }
}

public interface IBySize<T>
{
    T Small { get; }
    T Big { get; }
}

internal class ByColour<T> : IByColour<T>
{
    public T Green { get; private set; }
    public T Red { get; private …
Run Code Online (Sandbox Code Playgroud)

c# f# data-structures

11
推荐指数
1
解决办法
844
查看次数

自我子域的内容安全策略

为了为self设置default-src,它将排除原始网站的子域.

default-src 'self'
Run Code Online (Sandbox Code Playgroud)

如何启用自我URL的子域?

security http

10
推荐指数
2
解决办法
3679
查看次数

F#将内部模块视为私有

任何想法为什么以下不编译?

在最后一行,它告诉我Module1没有定义.如果我从Module1中删除"内部"它工作正常.

我有两个代码文件,Module1.fs在项目中的Module2.fs之上.

Module1.fs

module internal Module1

let sample =
    5 + 4
Run Code Online (Sandbox Code Playgroud)

Module2.fs

module Module2

let sample2 =
    3 + Module1.sample
Run Code Online (Sandbox Code Playgroud)

.net f# visibility module

9
推荐指数
2
解决办法
1325
查看次数

Int和String F#

我在F#中有一个函数,我在其中取一个int值并返回int为a string.

let inttostring (x:int):string = 
    ""+x
Run Code Online (Sandbox Code Playgroud)

我无法让ToString工作.任何帮助,将不胜感激.

string int f#

8
推荐指数
1
解决办法
2万
查看次数

解释F#中的符号

我正在学习F#,当我在Visual Studio中键入任何代码并在F#Interactive上运行它时,它会显示我的内容

val foo : x:'a -> 'a
Run Code Online (Sandbox Code Playgroud)

我想这意味着这foo是一个接收x类型参数的函数,并返回相同x类型的值.

但是,这是什么'意思呢?许多功能也在intellisense上显示这样的东西.

f#

8
推荐指数
2
解决办法
1139
查看次数

如何用FsUnit检查歧视联盟的情况?

我想检查一个值是否是受歧视联合的特定情况,而不必检查任何包含的数据.我的动机是每个单元测试只测试一件事.

示例如下(最后两行给出编译错误):

module MyState

open NUnit.Framework
open FsUnit

type MyState =
    | StateOne of int
    | StateTwo of int

let increment state =
    match state with
    | StateOne n when n = 10 -> StateTwo 0
    | StateOne n -> StateOne (n + 1)
    | StateTwo n -> StateTwo (n + 1)

[<Test>]
let ``incrementing StateOne 10 produces a StateTwo`` ()=
    let state = StateOne 10
    (increment state) |> should equal (StateTwo 0)             // works fine
    (increment state) |> should …
Run Code Online (Sandbox Code Playgroud)

f# discriminated-union fsunit

8
推荐指数
1
解决办法
1833
查看次数

为什么F#list范围比for循环慢得多?

令我惊讶的是,下面的示例列表范围有多慢.在我的机器上,for循环的速度是8倍左右.

是否首先创建了10,000,000个元素的实际列表?如果是这样,是否有一个原因(除了尚未完成)为什么编译器无法优化它?

open System
open System.Diagnostics

let timeFunction f v =
    let sw = Stopwatch.StartNew()
    let result = f v
    sw.ElapsedMilliseconds

let length = 10000000

let doSomething n =
    (float n) ** 0.1 |> ignore

let listIter n =
    [1..length] |> List.iter (fun x -> doSomething (x+n))

let forLoop n = 
    for x = 1 to length do
        doSomething (x+n)

printf "listIter   : %d\n" (timeFunction listIter 1)  // c50
GC.Collect()
printf "forLoop    : %d\n" (timeFunction forLoop 1)  // c1000
GC.Collect()
Run Code Online (Sandbox Code Playgroud)

f# list

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

Google Charts unsafe-eval

script-src: 'unsafe-eval'出于安全考虑,我已从CSP标头中删除了.我注意到这已经破坏了Google Charts.图表现在无法呈现并显示错误:

Invalid JSON string: {}
Run Code Online (Sandbox Code Playgroud)

任何想法或谷歌只是吹嘘它并允许他们的图书馆不安全eval?我的地图遇到了同样的问题,不得不使用不同的库.

javascript jquery google-visualization google-chartwrapper

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