编写函数进行类型转换

丹尼斯

我正在尝试编写一个进行类型转换的函数,这似乎是Rascal代码中经常发生的活动。但我似乎无法正确解决。以下及其一些变体失败。

public &T cast(type[&T] tp, value v) throws str {
    if (tp tv := v)
        return tv;
    else
        throw "cast failed";
}

有人可以帮我吗?

更多信息:我经常对“类型变量”形式的模式(即针对变量声明)使用模式匹配,以告知Rascal表达式具有某种类型,例如

map[str,value] m := myexp

这通常是在我知道myexp具有map [str,value]类型的情况下,但是省略匹配将使Rascal的类型检查机制抱怨。为了更防错,我通常将匹配的结构包装在if-then-else中,如果匹配失败,则会引发异常:

if (map[str,value] m := myexp) {
  // use m
} else {
  throw "cast failed";
}

我想使用一个一般执行此功能的函数来缩短所有这些类似的代码段,以便我可以编写

cast(#map[str,value], myexp)

PS。另请参阅如何在Rascal中将值类型转换为Map?

于尔根·文朱(Jurgen Vinju)

该代码有一个错误。这是固定的代码:

public &T cast(type[&T] tp, value v) throws str {
    if (&T tv := v)
        return tv;
    else
        throw "cast failed";
}

请注意,我们不希望将其包含在标准库中。而是让我们收集需要的案例,并找出如何以其他方式修复它。

如果发现您经常需要这种转换,那么您可能会避免使用Rascal的更好部分,例如基于模式的调度。另请参阅马克·希尔斯的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编写函数以进行类型转换

来自分类Dev

interface {}进行函数类型转换

来自分类Dev

在通用Swift函数中进行类型转换

来自分类Dev

在通用Swift函数中进行类型转换

来自分类Dev

在 Java 8 中使用 map 函数无法进行类型转换

来自分类Dev

为类型或返回类型的函数编写接口

来自分类Dev

函数类型转换JavaScript

来自分类Dev

类型转换函数的参数

来自分类Dev

迅速进行类型转换的困惑

来自分类Dev

从AnyObject进行Swift类型转换

来自分类Dev

使用类型变量进行转换

来自分类Dev

在Haskell中进行类型转换

来自分类Dev

使用对象进行类型转换

来自分类Dev

在malloc中进行类型转换

来自分类Dev

如何编写将读取XElement.Value并将其转换为C#中指定类型的函数?

来自分类Dev

是否可以为每个monad转换器t编写类型为Monad m => t Identity a-> tma的函数?

来自分类Dev

如何为该函数编写类型声明?

来自分类Dev

打字稿:编写可转换函数

来自分类Dev

将数据对象转换为数据框时如何编写自定义函数以半自动进行列命名

来自分类Dev

在c ++中基于模板函数中所需类型进行转换的标准方法是什么

来自分类Dev

Haskell多态函数可在代数数据类型之间进行转换

来自分类Dev

如何在TypeScript中使用泛型在重载函数中进行类型转换

来自分类Dev

使用类型参数进行类型转换

来自分类Dev

函数类型的隐式转换

来自分类Dev

类型转换/回调函数

来自分类Dev

自由函数中的类型转换

来自分类Dev

PHP 类函数的类型转换

来自分类Dev

函数 ptr 分配类型转换

来自分类Dev

将类型的方法转换为类型的函数