如何在函数F#中传递值?

时间:2016-02-06 22:22:02

标签: function f# functional-programming

这是我学习F#的第一天。当我遇到主题作为值的函数

的示例时,我将通过tryfsharp.org
let chrisTest test =
 test "Chris"
let isMe x =
 if x = "Chris" then
    "it is Chris!"
 else
    "it's someone else"
chrisTest isMe

网站上的说明: - chrisTest是一个简单的高阶函数,它对字符串值执行测试。 isMe函数检查字符串是否等于“Chris”。传递isChris到chrisTest将字符串“Chris”作为参数传递给`isChris'函数,并返回“它是Chris!”的结果。

我的想法: - isMe函数的值传递给程序的最后一行中的函数chrisTest。但是我没有得到的是没有传递给isMe函数的值。 isMe函数如何决定执行要返回的值?

2 个答案:

答案 0 :(得分:4)

对于这种情况,我们可以先替换christest中的所有内容。那你有

chrisTest isMe = isme "Chris" (as test=isme)

然后其余部分遵循类似的程序

答案 1 :(得分:3)

为什么不将它提供给F#interactive,以便您可以随时查看类型:

let chrisTest test = test "Chris";;
  

val chrisTest:test :( string - >'a) - > “一

这里我们有一个函数,我们可以从string -> 'a提供另一个函数作为参数(称为test),它将使用参数“Chris”调用这个提供的函数,返回一些结果'a

let isMe x =
    if x = "Chris" then
        "it is Chris!"
     else
        "it's someone else";;
  

val isMe:x:string - >串

这里我们有简单的名称检查功能。

请注意,此isMe函数适合作为christTest函数的参数提供。另请注意,如果我们提供chrisTest的参数类型为string -> string,我们将获得string结果。希望您可以在此处看到如何使用类型签名来帮助您推断程序的行为。

因此,当我们将isMe作为chrisTest的参数提供时,chrisTest函数使用参数“Chris”运行isMe函数,返回结果“它是克里斯!“。