F#租车商业模式

问题描述 投票:0回答:3

我是 F# 新手,所以请怜悯。尝试在 F# 中对汽车租赁业务进行建模。我的类型是:
顾客
司机
汽车
车辆类型
租赁协议尚未实施

我的具体问题是 F# 类可以有受歧视联盟的成员吗?汽车应该有一个属性来反映它是什么类型的车辆...紧凑型、轿车、卡车等...下面是我到目前为止的代码...

namespace DSL2

// a DU
type vehicleType =  Truck | Compact | Econ | Sedan

// a record
type Customer =  {firstName: string; lastName: string; gender: string}

//a class implicit ctor'tion
type Car(numdoors:int ,  make: string , year:int)  = class
    member this.NumDoors = numdoors
    member this.Make = make
    member this.Year = year  
end

//a class explicit ctor'tion
type Car2 = class
    val NumDoors: int
    val Make: string
    val Year: int

    (*first ctor*)
    new (numDoors, make, year) = 
        {NumDoors = numDoors; Make = make; Year = year}

 end
f#
3个回答
3
投票

是的,可区分联合就像任何其他类型一样,可以用作任何字段、属性、构造函数参数等的类型。

只需将

vehicleType
类型的参数添加到
Car
构造函数即可:

type Car(numdoors:int, make: string, year:int, vehicleType : vehicleType) = class
    member this.NumDoors = numdoors
    member this.Make = make
    member this.Year = year
    member this.VehicleType = vehicleType
end

请注意,使用首字母小写字母命名类型是不好的 F# 风格,因此我建议将其重命名为

VehicleType


0
投票

是的,只需将成员添加到类中并将其包含在具有所需值的构造函数中即可。

// a DU
type vehicleType =  Truck | Compact | Econ | Sedan

// a record
type Customer =  {firstName: string; lastName: string; gender: string}

//a class implicit ctor'tion
type Car(numdoors:int ,  make: string , year:int)  = class
    member this.NumDoors = numdoors
    member this.Make = make
    member this.Year = year  
end

//a class explicit ctor'tion
type Car2 = class
    val NumDoors: int
    val Make: string
    val Year: int
    val DU: vehicleType

    (*first ctor*)
    new (numDoors, make, year, cust) = 
        {NumDoors = numDoors; Make = make; Year = year;  DU = Truck }
 end

-3
投票

我们最近在一个汽车租赁网站www.rent-a-car-otopeni.ro

以一种非凡的模式实现了这一点
© www.soinside.com 2019 - 2024. All rights reserved.