相关疑难解决方法(0)

方便的F#片段

关于F#/功能片段已经存在两个 问题.

然而,我在这里寻找的是有用的片段,可重复使用的小"帮助"功能.或者模糊但又漂亮的模式,你永远不会记得.

就像是:

open System.IO

let rec visitor dir filter= 
    seq { yield! Directory.GetFiles(dir, filter)
          for subdir in Directory.GetDirectories(dir) do 
              yield! visitor subdir filter} 
Run Code Online (Sandbox Code Playgroud)

我想把它作为一个方便的参考页面.因此,没有正确的答案,但希望有很多好的答案.

EDIT Tomas Petricek专门为F#片段创建了一个网站http://fssnip.net/.

f# reference code-snippets

66
推荐指数
15
解决办法
1万
查看次数

Elixir的退货声明

我需要一个具有某种逐步逻辑的函数,我想知道如何制作一个.我们以站点上的登录过程为例,所以我需要以下逻辑:

1)电子邮件存在?是的 - >继续; 否 - >返回错误

2)电子邮件至少有5个字符?是的 - >继续; 否 - >返回错误

3)密码存在?是的 - >继续; 否 - 返回错误

等等 ...

为了实现这一点,我通常会使用一个return语句,以便如果电子邮件不存在,我退出执行该函数并使其返回错误.但是我在Elixir找不到类似的东西,所以我需要一个建议.我现在能看到的唯一方法是使用嵌套条件,但也许有更好的方法?

elixir phoenix-framework

30
推荐指数
3
解决办法
9608
查看次数

F#:函数中有更多返回点,如何处理它们?

在复杂函数中返回值时出现问题.示例总是更好:

考虑以下功能:

let myf (mypar: int) =
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

这里没有问题,这个函数编译正确,签名是:

val myf: int -> int
Run Code Online (Sandbox Code Playgroud)

好吧好吧.现在考虑这段代码:

let myf (mypar: int) =
   if mypar = 2 then
      4 (* ERROR *)
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

这不起作用:

这个表达式应该有类型单位,但这里有int

每当我尝试从我的函数返回时,当我在a if,whilea for或其他每个块中时,都会引发此错误.我认为问题是确保所有可能的返回路径返回相同的类型,但在这里我不明白会发生什么.

请注意,如果我插入一个()单元,一切都可以工作,例如:

let myf (mypar: int) =
   if mypar = 2 then
      () (* No error *)
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

但那个单位不会让我的功能恢复!它继续!!! 此外,你能解释一下F#如何处理这个???

谢谢

.net f# functional-programming return unit-type

6
推荐指数
2
解决办法
2959
查看次数