[英]Using properties in F#
希望这是连贯的,尽管是漫长的。
我试图在一个.fs
文件中创建一个属性,该属性可以从一个单独的.fs
文件中设置,然后在第一个.fs
文件的模块中使用该值...例如,
在我的第一个文件function.fs
,我想定义一个属性theta
。
然后,我想在function.fs
定义一个函数Q
:
function Q = Q(r)
和... Q(r)
取决于某些与theta
有关的计算,
即
A1(theta), A2(theta), A3(theta)
Q
返回列表形式的数据集。
我还想在我的主.fs文件program.fs
维护一组theta值(即
theta = [90;120;150;180])
然后,我想从function.fs
为每个theta
生成一个数据集。
我的想法是通过设置属性theta的值,运行程序以生成数据集,为theta
设置新值,运行程序以生成数据集,重复……来做到这一点。从研究的角度来看,我不清楚我实际上是如何在代码Q(r)
回想该属性的值的。
我已经在我的function.fs
文件中成功设置了可以从program.fs
设置的属性:
在function.fs
我有:
namespace models.test
type ContactAngle() =
let mutable m_theta = 90.0
//read only property
member this.Empty =
m_theta = 90.0
//read-write property
//i think i'm onto something with this static...
member this.Angle
with get() =
m_theta
and set newAmt =
m_theta <- newAmt
//module HTModel =
在program.fs
我有:
open models.test
let me = new ContactAngle()
printfn "%A" me.Angle
me.Angle <- 120.0
printfn "%A" me.Angle
这使我可以重新定义值theta
。 我正在苦苦挣扎的地方是我现在如何在function.fs
中的函数中使用新的属性值。
我觉得我缺少一些基本知识,需要一些帮助! 任何见解将不胜感激!
由于函数会在不创建时就评估它们何时被调用(就像在C#中一样),因此您可以像这样在ContactAngle
类型中创建一个普通函数:
member this.DoSomenthingWithTheta multiplier
m_theta <- m_theta * multiplier
您可以在班级中的任何地方重用可变值。 为了阐明所有内容,您应该阅读F#语言参考的 “成员”部分。
但是,如果您想在类型之外和没有初始化实例的地方使用该值。 那么,您将不得不采用其他方法。 例如,创建一个静态可变字段并使用静态属性公开它。 或创建一个单例以在整个应用程序中存储您的价值。
但这杀死了函数编程的“精神” :)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.