我正在设计一个由Web应用程序使用的小型SQL数据库.
假设一个特定的表有一个Name字段,其中不允许两行具有相同的值.但是,用户可以随时更改"名称"字段.
此表中的主键将用作其他表中的外键.因此,如果将Name字段用作主键,则需要将任何更改传播到其他表.另一方面,唯一性要求将自动处理.
我的直觉是添加一个整数字段作为主键,可以由数据库自动填充.有这个领域有什么意义,还是浪费时间?
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) 我需要一个多维数据结构,其中每个维度都是一个在设计时已知的小列表.
在我的程序的不同位置,我希望能够以强类型的方式访问不同维度的"切片"数据.
我在下面放了一些示例代码,用于使用嵌套接口的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) 为了为self设置default-src,它将排除原始网站的子域.
default-src 'self'
Run Code Online (Sandbox Code Playgroud)
如何启用自我URL的子域?
任何想法为什么以下不编译?
在最后一行,它告诉我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) 我在F#中有一个函数,我在其中取一个int值并返回int为a string.
let inttostring (x:int):string =
""+x
Run Code Online (Sandbox Code Playgroud)
我无法让ToString工作.任何帮助,将不胜感激.
我正在学习F#,当我在Visual Studio中键入任何代码并在F#Interactive上运行它时,它会显示我的内容
val foo : x:'a -> 'a
Run Code Online (Sandbox Code Playgroud)
我想这意味着这foo是一个接收x类型参数的函数,并返回相同x类型的值.
但是,这是什么'意思呢?许多功能也在intellisense上显示这样的东西.
我想检查一个值是否是受歧视联合的特定情况,而不必检查任何包含的数据.我的动机是每个单元测试只测试一件事.
示例如下(最后两行给出编译错误):
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) 令我惊讶的是,下面的示例列表范围有多慢.在我的机器上,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) script-src: 'unsafe-eval'出于安全考虑,我已从CSP标头中删除了.我注意到这已经破坏了Google Charts.图表现在无法呈现并显示错误:
Invalid JSON string: {}
Run Code Online (Sandbox Code Playgroud)
任何想法或谷歌只是吹嘘它并允许他们的图书馆不安全eval?我的地图遇到了同样的问题,不得不使用不同的库.
f# ×7
.net ×1
c# ×1
fsunit ×1
http ×1
int ×1
javascript ×1
jquery ×1
list ×1
module ×1
primary-key ×1
security ×1
string ×1
visibility ×1