آیا انواع رکورد F # بصورت Stret یا Class اجرا می شوند؟

من از انواع ضبط در F # برای ذخیره برخی داده های ساده استفاده می کنم ، به عنوان مثال به شرح زیر:

open Vector

type Point =
    {
        x: float;
        y: float;
        z: float;
    }
    static member (+) (p: Point, v: Vector) = { Point.x = p.x + v.x ; y = p.y + v.y ; z = p.z + v.z }
    static member (-) (p: Point, v: Vector) = { Point.x = p.x - v.x ; y = p.y - v.y ; z = p.z - v.z }
    static member (-) (p1: Point, p2: Point) = { Vector.x = p1.x - p2.x ; y = p1.y - p2.y ; z = p1.z - p2.z }
    member p.ToVector = { Vector.x = p.x ; y = p.y ; z = p.z }

من نمی توانم بررسی کنم که آیا این وجود دارد به عنوان یک مقدار یا نوع مرجع پیاده سازی شده است. با استفاده از `line-seq` با` خواننده` ، پرونده چه وقت بسته است؟ من با استفاده از (line-seq (خواننده "input.txt") خطوط را از يك پرونده متني مي خوانم. اين مجموعه من نگرانم که این ممکن است سبک بدی باشد ، اما من ...

من با استفاده از سطرهای یک فایل متنی را می خوانم (line-seq ( خواننده "input.txt")) .این مجموعه سپس توسط برنامه من مورد استفاده قرار می گیرد و مورد استفاده قرار می گیرد.

من نگران هستم که این ممکن است سبک بدی باشد ، زیرا من قاطعانه پرونده را نمی بندم. من تصور می کنم که نمی توانم از (with-open (line-seq (خواننده "input.txt")))] استفاده کنم ، زیرا قبل از اینکه کل دنباله را مرور کنم ، جریان پرونده به طور بالقوه بسته می شود.

آیا باید از lazy-seq در رابطه با خواننده برای پرونده ها جلوگیری شود؟ آیا الگوی دیگری وجود دارد که من باید در اینجا استفاده کنم؟

6
задан pauldoo 7 July 2011 в 15:55
поделиться