15.3.1 读取值

来源:互联网 发布:网络用语2016 三个字的 编辑:程序博客网 时间:2024/06/14 07:55
 

15.3.1 读取值

 

    计算行为在给定时间的值很容易,其内部表示为一个函数,取时间作为参数值,计算出值,所以,我们需要执行这个函数。清单 15.7 显示函数,叫 readValue,取时间和行为作为参数,返回行为的值。有了这个函数,就可以从我们先前创建的基元行为中读取值。

 

Listing 15.7 Reading values of behaviors at the specified time (F# Interactive)

 

> let readValue time (BehaviorFunc bfunc) =
     bfunc { Time = time };;
val readValue : float32 -> Behavior<'a> –> 'a

> 42.0f.forever |> readValue 1.5f;;
val it : System.Single = 42.0f

> time |> readValue 1.5f;;
val it : float32 = 1.5f

> wiggle |> readValue 1.5f;;
val it : float32 = -1.0f


 

    清单 15.7 中的函数取行为作为第二个参数,使用流运算符,有可能使函数调用更优雅。我们使用模式匹配提取由行为所携带的函数,传递给这个函数。下一步,构建一个 BehaviorContext 值,打包给定的时间,并将它作为参数值,传递给这个函数,它可以计算在指定的时间的行为值。

    清单 15.7 其余部分显示,用我们早先实现的基元行为,计算出的值。常量行为不出所料,time 基元在 1.5 秒后返回 1.5,wiggle 值的最低点是 –1.0f。交互式开发模式再一次帮助我们,确保开始有正确的代码。读取基元行为的值,是一个良好的开端,但是,如何可以创建更复杂的行为呢?假设我们想要创建行为表示当前时间的平方。我们可以使用 sample 来写,但是相当复杂,我们希望对最终用户隐藏细节。理想情况下,我们想要应用 square 函数到行为。

原创粉丝点击