Информация об изменениях

Сообщение Re[3]: Декларация типа по полному имени от 18.01.2016 15:33

Изменено 18.01.2016 15:33 STDray

Здравствуйте, vaskir, Вы писали:

V>
V>def fieldType = PExpr.FromQualifiedIdentifier(builder.Manager, node.BoxedValue.GetType().FullName);
V>def fieldName = $"_$name";
V>def defaultValue = node.BoxedValue.ToString();
V>builder.Define(<[decl: private mutable $(fieldName: usesite): $fieldType = $(defaultValue: usesite); ]>);
V>


V>В результате для YAML "Person: 1" выдается ошибка: error : unbound name `1'


Надо написать функцию преобразования скаляра в квазицитату, что-то вроде

    ToExpr(scalar : Scalar) : PExpr
    {
      | Int(v)      => <[ $v ]>;
      | String(v)   => <[ $v ]>;
      | TimeSpan(v) => <[ TimeSpan.FromMilliseconds($(v.TotalMilliseconds)) ]>
      | Bool(v)     => <[ $v ]>;
      | Uri(v)      => <[ Uri($(v.OriginalString)) ]>
      | Float(v)    => <[ $v ]>
    }


Потом
def defaultValue = ToExpr(node.BoxedValue);
builder.Define(<[decl: private mutable $(fieldName: usesite): $fieldType = $defaultValue; ]>);
Re[3]: Декларация типа по полному имени
Здравствуйте, vaskir, Вы писали:

V>
V>def fieldType = PExpr.FromQualifiedIdentifier(builder.Manager, node.BoxedValue.GetType().FullName);
V>def fieldName = $"_$name";
V>def defaultValue = node.BoxedValue.ToString();
V>builder.Define(<[decl: private mutable $(fieldName: usesite): $fieldType = $(defaultValue: usesite); ]>);
V>


V>В результате для YAML "Person: 1" выдается ошибка: error : unbound name `1'


Надо написать функцию преобразования скаляра в квазицитату, что-то вроде

    ToExpr(scalar : Scalar) : PExpr
    {
      | Int(v)      => <[ $v ]>;
      | String(v)   => <[ $v ]>;
      | TimeSpan(v) => <[ TimeSpan.FromMilliseconds($(v.TotalMilliseconds)) ]>
      | Bool(v)     => <[ $v ]>;
      | Uri(v)      => <[ Uri($(v.OriginalString)) ]>
      | Float(v)    => <[ $v ]>
    }


Потом
def defaultValue = ToExpr(node);
builder.Define(<[decl: private mutable $(fieldName: usesite): $fieldType = $defaultValue; ]>);