Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何更改类中的x,y坐标_F# - Fatal编程技术网

F# 如何更改类中的x,y坐标

F# 如何更改类中的x,y坐标,f#,F#,我有一个作业,我在课上做了“无人机”和“空域”。 我需要移动存在的所有无人机的x,y坐标,我将其作为列表存储在Airspace类的x.drones中。但是,我在x.drones中访问和操作列表时遇到问题。如何在类中更改来自其他成员的列表的值 到目前为止,我已经给出了我所有的代码,这是我需要帮助的x方法。 我试着做一个for循环,但似乎不起作用 module Drones type Drone(x1:int, y1:int, x2:int, y2:int, spd:int) = stat

我有一个作业,我在课上做了“无人机”和“空域”。 我需要移动存在的所有无人机的x,y坐标,我将其作为列表存储在Airspace类的x.drones中。但是,我在x.drones中访问和操作列表时遇到问题。如何在类中更改来自其他成员的列表的值

到目前为止,我已经给出了我所有的代码,这是我需要帮助的x方法。 我试着做一个for循环,但似乎不起作用

module Drones

type Drone(x1:int, y1:int, x2:int, y2:int, spd:int) =
    static let mutable count = 0
    static let mutable hinsta = []
    let mutable position = (x1,y1)
    let mutable destination = (x2,y2)
    let mutable speed = spd
    do count <-count + 1
    let mutable insta = [x1,y1,x2,y2,spd]
    do hinsta <- hinsta @ insta
    static member Count = count
    static member Collection = hinsta
    member x.fly =
        if fst destination - fst position > 0 then position <- (x1+1,y1)
        else if snd destination - snd position > 0 then position <- (x1,y1+1)
    member x.isFinished =
        fst destination - fst position = 0 && snd destination - snd position = 0


type Airspace =
    member x.drones = Drone.Collection
    member x.droneDist(drone1, drone2) =
        let dist = ((fst drone1 - fst drone2),(snd drone1 - snd drone2))
        dist
    member x.flyDrones =
        for drone in x.drones do

    member x.addDrone(x1, y1, x2, y2, spd) = new Drone(x1, y1, x2, y2, spd)
    //member x.willCollide(time) = 


模块无人机
类型无人机(x1:int、y1:int、x2:int、y2:int、spd:int)=
静态let可变计数=0
静态let可变hinsta=[]
设可变位置=(x1,y1)
设可变目标=(x2,y2)
让可变速度=spd

很抱歉让你失望了,奥利弗,但这不会成功的。我相信我能看到你的意图,但这需要完全重写,而不是修复。让我试着给你一些建议

首先,为什么要使用类呢?我不会,但我会假设作业上说你应该这样做,所以让我们继续这样做

无人机类应负责保存单个无人机的信息,但空域中的x.Drone设置为“无人机.集合”,它不是无人机的集合或列表,而是无人机类中作为静态列表保存的
int*int*int*int
。那真是一团糟。为什么无人机类有静力学?空域类别应负责保存无人机列表,因此请清除无人机中的所有静态信息,并找到一种方法来维护空域类别中的无人机列表

空域类型有实例成员(不是静态成员),但没有构造函数。您可能需要一个默认构造函数,因此它应该是
Airspace()=
,然后您需要实例化一个Airspace

当您可以通过获取无人机列表的长度来查找无人机的数量时,您不需要维护计数

您可以解决整个赋值,而无需在任何地方使用单个静态变量

成员名称以大写字母开头

像x.fly和x.flydrone这样的成员不是方法,因为它们没有参数。您至少需要
()
参数才能将它们作为方法

x、 addDrone正确地创建了一个新的无人机,但它应该将其添加到Airspace类应有的无人机列表中

Drone类使用元组作为位置和目的地,这导致在整个过程中使用
fst
snd
的代码可读性大大降低。不要那样做。通常,如果元组引起混淆,请使用记录而不是元组。不要使用诸如x1、y1、x2、y2、spd、insta、hinsta、fly等神秘名称

虽然我并没有完全按照自己的建议来做,但一些改动会使无人机类变得更好。使用相同名称的可变项隐藏类参数的要点是1)它们确实是可变的,这意味着它们可以更改;2)阻止进一步使用原始参数,这避免了任何类型的混淆,无论是在编写代码还是在阅读代码时

type Drone(x1:int, y1:int, x2:int, y2:int, speed:int) =
    let mutable x1 = x1
    let mutable y1 = y1
    let mutable x2 = x2
    let mutable y2 = y2
    let mutable speed = speed
    member _.X1 = x1
    member _.Y1 = y1
    member _.X2 = x2
    member _.Y2 = y2
    member _.Speed = speed
    member _.Fly() =
        if x2 - x1 > 0 then x1 <- x1 + 1
        elif y2 - y1 > 0 then y1 <- y1 + 1
    member _.IsFinished = x2 - x1 = 0 && y2 - y1 = 0
型无人机(x1:int,y1:int,x2:int,y2:int,速度:int)=
设可变x1=x1
设可变y1=y1
设可变x2=x2
设可变y2=y2
让可变速度=速度
成员X1=X1
成员u0.Y1=Y1
成员ux2=X2
成员u0.Y2=Y2
成员速度=速度
成员u.Fly()=

如果x2-x1>0,那么x10,那么y1很抱歉让你失望,奥利弗,但这不会飞。我相信我能看到你的意图,但这需要完全重写,而不是修复。让我试着给你一些建议

首先,为什么要使用类呢?我不会,但我会假设作业上说你应该这样做,所以让我们继续这样做

无人机类应负责保存单个无人机的信息,但空域中的x.Drone设置为“无人机.集合”,它不是无人机的集合或列表,而是无人机类中作为静态列表保存的
int*int*int*int
。那真是一团糟。为什么无人机类有静力学?空域类别应负责保存无人机列表,因此请清除无人机中的所有静态信息,并找到一种方法来维护空域类别中的无人机列表

空域类型有实例成员(不是静态成员),但没有构造函数。您可能需要一个默认构造函数,因此它应该是
Airspace()=
,然后您需要实例化一个Airspace

当您可以通过获取无人机列表的长度来查找无人机的数量时,您不需要维护计数

您可以解决整个赋值,而无需在任何地方使用单个静态变量

成员名称以大写字母开头

像x.fly和x.flydrone这样的成员不是方法,因为它们没有参数。您至少需要
()
参数才能将它们作为方法

x、 addDrone正确地创建了一个新的无人机,但它应该将其添加到Airspace类应有的无人机列表中

Drone类使用元组作为位置和目的地,这导致在整个过程中使用
fst
snd
的代码可读性大大降低。不要那样做。通常,如果元组引起混淆,请使用记录而不是元组。不要使用诸如x1、y1、x2、y2、spd、insta、hinsta、fly等神秘名称

虽然我并没有完全按照自己的建议来做,但一些改动会使无人机类变得更好。使用相同名称的可变项来隐藏类参数的要点是1)它们确实是可变的,这意味着它们可以更改;2)阻止进一步使用原始参数,这避免了任何类型的混淆,无论是