请注意:这个问题与这个问题不同。
我最近遇到了一些我以前没有遇到过的 C# 语法:
有没有办法在 F# 中做到这一点?
class Two
{
public string Test { get; set; }
}
class One
{
public One()
{
TwoProperty = new Two();
}
public Two TwoProperty { get; private set; }
}
var test = new One(){ TwoProperty = { Test = "Test String" }};
(请注意,TwoProperty
当 setter 为私有时,初始化程序中的初始化 - 它正在为存储在 中的对象设置属性TwoProperty
,但不在属性中存储 的新实例Two
)
编辑:我最近在 monotouch 的构造函数中遇到了一些 C# 代码,如下所示:
nameLabel = new UILabel {
TextColor = UIColor.White,
Layer = {
ShadowRadius = 3,
ShadowColor = UIColor.Black.CGColor,
ShadowOffset = new System.Drawing.SizeF(0,1f),
ShadowOpacity = .5f
}
};
我能想到的最好的 F# 翻译是这样的:
let nameLabel = new UILabel ( TextColor = UIColor.White )
do let layer = nameLabel.Layer
layer.ShadowRadius <- 3.0f
layer.ShadowColor <- UIColor.Black.CGColor
layer.ShadowOffset <- new System.Drawing.SizeF(0.0f,1.0f)
layer.ShadowOpacity <- 0.5f
这并不可怕,但它确实有更多的重复layer
引用加上它更多的命令性和更少的声明性。