Как получить значение типа - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь получить значение типа в моем коде.Есть топор, который является stmt, и значение ("x" 1).Я хочу получить это «х» и использовать его в качестве ключа, чтобы найти значение в хеш-таблице.Я спрашиваю, как извлечь "x".

type variable = string
type expr = int
type arrayref = variable * expr
type stmt = Dim of arrayref
let x = Dim("x",1);;

let aa (sbc:stmt) = match sbc with
|Dim a -> None;;

Я должен заменить None на некоторые коды, но не знаю, как это сделать.

1 Ответ

0 голосов
/ 24 января 2019

Я не совсем уверен, но думаю, вы спрашиваете, как получить доступ к компоненту составного значения.Для кортежей и вариантов это можно сделать путем сопоставления с образцом.Таким образом, вы имеете это право.Вам просто нужно сделать свой рисунок немного глубже.Чтобы получить "x" из вашего значения x, вы должны сделать что-то вроде этого:

let extracted_value =
    match x with
    | Dim (k, _) -> k
in
. . .

Поскольку в вашем типе stmt (по крайней мере, прямо сейчас) есть только один конструктор, вы можете сделатьэто без совпадения выглядит следующим образом:

let Dim (extracted_value, _) = x in
. . .

Это работает, потому что существует один шаблон, который является исчерпывающим.Для типов с большим количеством конструкторов вам нужно использовать match для обработки всех возможностей.

Если это не то, о чем вы спрашиваете, возможно, попробуйте задать вопрос еще раз.

Обновление

Чтобы напечатать строку, вы можете написать что-то вроде этого:

let Dim (k, _) = x in print_string k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...