编写函数以进行类型转换

丹尼斯

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

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

有人可以帮我吗?

更多信息:我经常对“ Type Var”形式的模式(即针对变量声明)使用模式匹配,以告知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的更好部分,例如基于模式的调度。另请参阅马克·希尔斯(Mark Hills)的答案。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

如何编写Java函数以返回动态类型的数组?

如何编写函数以按层大小对样本进行分层

interface {}进行函数类型转换

Typecasting vs函数以在PHP中转换变量类型

Haskell编写自己的函数以编写函数

如何在ReasonML中编写带有类型变量的函数以接受任何类型的参数?

我如何编写单个函数以与不同类型一起使用

在C#中编写函数以按基本类型的属性来过滤项目列表

如何编写函数以使用字典类型 Serires 和 Dataframe 中的列?

如何在r中编写函数以对记录进行标定?

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

如何制作通用类型转换函数以将上下文转换为任何活动?

如何编写针对 null 或 undefined 进行测试的类型保护函数?

编写PLSQL Oracle函数以查询表

编写函数以返回节点的位置

编写函数以计算R中的除数

编写递归函数以识别偶数/奇数

编写函数以替换R中的循环

编写函数以计算单位向量

如何编写此迭代函数以递归?

编写函数以引用特定的列

转换函数以处理 Double 和 Float... 使用 FloatingPoint 类型?

创建一个函数以转换数组元素的类型并返回数组的地址

编写函数以从映射中获取字符串键的片段,而不管映射是什么值类型

编写自定义函数以基于另一个表转换数据框中的变量类

Python yield(从Ruby迁移):如何编写不带参数且仅具有yield的函数以进行打印?

编写Haskell函数以计算函数的n次幂?

如何在Powershell中编写函数以创建函数