Обратите внимание: этот вопрос не совпадает с этим вопросом.
Недавно я столкнулся с некоторым синтаксисом С#, с которым я раньше не сталкивался:
Есть ли способ сделать это в 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
в инициализаторе, когда сеттер является закрытым - он устанавливает свойство объекта, хранящегося в TwoProperty
, но НЕ сохраняя новый экземпляр Two
в свойстве)
Изменить: Недавно я встретил некоторый код С# в конструкторе в монототе:
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
, а также более насущной и менее декларативной.