2009-06-12 9 views
5

Tengo dos clases, Foo y Bar, dos archivos distintos, foo.fs y bar.fsdos clases, consiguiendo "tipo no está definido" error

namespace Ganymede.Versioning 

type foo = class 
    val Bar : bar 
    new(input) = { Bar = input }  
    end 


namespace Ganymede.Versioning 

type bar = class 
    val Test : string 
    new (input) = { Test = input; } 
    end 

consigo un 'bar' "El tipo de no está definido." error dentro de la clase foo, para val Bar : bar

¿Por qué es eso?

Respuesta

11

Los archivos en un proyecto deben ordenarse por dependencia, por lo que debe poner bar.fs encima de foo.fs en el proyecto para que foo pueda ver bar.

2

Consulte this blog entry, pero brevemente, si no especifica un espacio de nombres o un módulo en la parte superior de un archivo, el código entra implícitamente en un módulo nombrado por el nombre del archivo. Entonces, si su proyecto contiene bar.fs y foo.fs (en ese orden, el orden es importante), entonces para hacer referencia al tipo llamado 'bar' del archivo 'foo.fs' debe usar 'bar.bar' (donde el primero es el nombre del módulo, y el segundo es el nombre del tipo).

+0

Pero como pueden ver, tengo un espacio de nombre definido ?! – kitsune

+2

(¡Uy! Lamento no haber notado el espacio de nombres.) ¿Los dos archivos están en el orden correcto en el proyecto? – Brian