Fsharp интерактивный фу - PullRequest
       4

Fsharp интерактивный фу

1 голос
/ 09 марта 2012

У меня есть переменная в интерактивном fsharp

val toto : obj = [["NKY INDEX"]]

(я получил это значение от вызова обычной библиотеки точек, чей прототип говорит мне, что он возвращает obj )

Мне бы хотелось получить доступ к значению внутри него, но я точно не знаю тип. Поэтому я пытаюсь обдумать это:

>toto.GetType();;
val it : Type =
  System.Object[,]
    {Assembly = mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;
     AssemblyQualifiedName = "System.Object[,], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
     Attributes = AutoLayout, AnsiClass, Class, Public, Sealed, Serializable;
     BaseType = System.Array;
     ContainsGenericParameters = false;
     CustomAttributes = seq [[System.SerializableAttribute()]];
     DeclaredConstructors = [|Void .ctor(Int32, Int32);
                              Void .ctor(Int32, Int32, Int32, Int32)|];
     DeclaredEvents = [||];
     DeclaredFields = [||];
     DeclaredMembers = [|Void Set(Int32, Int32, System.Object);
                         System.Object& Address(Int32, Int32);
                         System.Object Get(Int32, Int32);
                         Void .ctor(Int32, Int32);
                         Void .ctor(Int32, Int32, Int32, Int32)|];
     DeclaredMethods = [|Void Set(Int32, Int32, System.Object);
                         System.Object& Address(Int32, Int32);
                         System.Object Get(Int32, Int32)|];
     DeclaredNestedTypes = seq [];
     DeclaredProperties = [||];

У него есть метод Get, однако, когда я пытаюсь извлечь элемент, я получаю сообщение об ошибке.

>toto.Get(0,0);;

  toto.Get(0,0);;
  -----^^^

  error FS0039: The field, constructor or member 'Get' is not defined

Как правильно извлечь внутренний элемент?

PS: заблаговременное приведение к тому же результату

>(toto :?> System.Object[,]).Get(0,0);;

(toto :?> System.Object[,]).Get(0,0);;
----------------------------^^^

error FS0039: The field, constructor or member 'Get' is not defined

то же самое для. [0, 0]

> toto.[0, 0];;

  toto.[0, 0];;
  ^^^^^^^^^^^

error FS0039: The field, constructor or member 'Item' is not defined

Ответы [ 2 ]

2 голосов
/ 09 марта 2012
let toto = box (Array2D.init 1 1 (fun _ _ -> "NKY INDEX"))
(toto :?> string[,]).[0,0]
1 голос
/ 09 марта 2012

я представляю

let arr = toto :?> obj[,]  // downcast to actual type
let item = arr.[0,0]

это то, что вы хотите.

...