如何获取Scala函数的参数/返回类型?

2024-03-16

我有一个函数,想要获取它的参数类型和返回类型以在 Scala 宏中使用。

scala> val fn = (a: String, b: Double) => 123
fn: (String, Double) => Int = <function2>

scala> fn.getClass
res1: Class[_ <: (String, Double) => Int] = class $anonfun$1

在上面的示例中,参数类型和返回类型已经打印在两行中,但我不知道如何访问它们。即使toString我会被困住<function2> and class $anonfun$1的右侧部分=符号——否则可能会进行一些难看的字符串解析。

我发现MethodSymbolApi提供了一种为方法提取此信息的方法,但似乎这对于这种特殊情况可能没有帮助。

我目前正在研究 AST 解析(作为scala.meta)来提取信息,但我认为这个问题似乎足够基本,可以被标准反射库涵盖,尽管我未能在那里找到我想要的东西。有任何想法吗?

根据@johanandren的回答进行编辑:

我还没有找到一种更简洁的方法来从 TypeTag/Type 中提取它们,但这已经可行了。 :)

scala> val fn = (a: String, b: Double) => 123
scala> import scala.reflect.runtime.{universe => ru}
scala> def getTypeTag[T: ru.TypeTag](obj: T) = ru.typeTag[T]
scala> getTypeTag(fn).tpe.toString.split(" => ")
res179: Array[String] = Array((String, Double), Int)

getClass 是 Java 反射 API 的一部分,它不太理解 Scala 类型,您应该查看 Scala Reflection API。这应该让你开始,http://docs.scala-lang.org/overviews/reflection/overview.html http://docs.scala-lang.org/overviews/reflection/overview.html

不确定,但我认为函数类型的 TypeTag 就是您想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取Scala函数的参数/返回类型? 的相关文章

随机推荐

  • Javascript Fetch api [对象对象]

    为什么我尝试在下面运行的代码返回为 object object var request new Request data some json fetch request then function response return respo
  • 如何将 React + NodeJS Express 应用程序部署到 AWS?

    我有一个 React Webpack Babel Node Express 应用程序 我想将其部署在 AWS 上 我需要单独部署 React 和 Node Express 吗 或者他们可以同时部署在一起吗 1 如果你有两个不同的项目 例如一
  • 如何在本机反应中使 ScrollView 水平

    我正在使用 ScrollView 滚动列表 我怎样才能使它水平它看起来垂直 我也尝试用不同的视图进行总结 但它不起作用 for eg
  • 在 java 9 中处理 PrintGCApplicationStoppedTime 标志

    我的应用程序正在使用 gc 标志 PrintGCApplicationStoppedTime 但是当我使用 Java 9 运行它时 它失败并出现以下错误 Unrecognized VM option PrintGCApplicationSt
  • Apache Xalan 的替代 XSLT 处理器

    我目前在 Java 应用程序中使用 Apache Xalan XSLT 处理器 但我想使用一些支持使用扩展函数的替代解决方案 Xalan 似乎已经过时并且有问题 我知道 Saxonixa Saxon 但它是闭源的 有没有一些开源且运行良好的
  • IBM WebSphere 8 与 Axis2 Web 服务发生内存泄漏

    将应用程序从 v6 迁移到 WebSphere v8 并开始出现内存泄漏 主要嫌疑人是 org apache axis2 看起来每次应用程序调用 Web 服务时 WAS8 都会创建一个名为 ServiceClient 的对象 并将其存储在名
  • 通知中的待定意图不起作用

    下面是我应该打开的代码块NotificationActivity当点击通知时 但它不起作用 private void setNotification String notificationMessage Uri alarmSound get
  • angular2 等待 if 条件下的 observable 完成

    我已经实现了这样的 if 语句 if this service check return true else 这个 if 条件等待后端的响应 但在 observable 执行之前 它会进入 else 语句并完成条件 而不在开始时检查 if
  • 如何使用 PySpark 将 CSV 文件读取为数据帧时跳过行?

    我有一个 CSV 文件 其结构如下 Header Blank Row Col1 Col2 1 200 1 456 2 000 3 450 我在阅读该文件时遇到两个问题 我想忽略标题并忽略空白行 值中的逗号不是分隔符 这是我尝试过的 df s
  • 使用 Hibernate 避免 Oracle 选择时从日期到时间戳的隐式转换

    我使用 Hibernate 3 2 7 GA 标准查询从 Oracle Enterprise Edition 10 2 0 4 0 数据库中选择行 并按时间戳字段进行筛选 有问题的字段是类型java util Date在 Java 中 以及
  • GCM 返回空消息类型

    我创建了一个使用 GoogleCloudMessaging 的应用程序 应用程序可以注册到 gcm 并将其注册 ID 存储到我服务器上的数据库中 我正在使用 php 来发送推送通知 但是当 google 将其发送到我的设备时 意图服务发现其
  • 使用 SQL REGEXP 忽略数字并仅获取字符串和“/”

    我有一个 MySQL 表 其中有一列 typevarchar 255 它保存以下格式的数据 400 mg 50 12 5 mg ml 20 mikrog 500 mg 400 IU 60 mikrog 15 mikrog 在某些情况下 我需
  • 设置可由我的网络上的其他设备访问的 Django 开发服务器

    我想设置一个 Django 开发服务器 我的计算机和智能手机都可以通过 Wi Fi 在我的网络上访问该服务器 我已经设置了我的计算机可以访问的开发服务器http 127 0 0 1 8000 http 127 0 0 1 8000 但是 我
  • 如何向 c3.js 图表添加标题

    任何人都可以建议我向 C3 js 折线图和条形图添加标题的方法吗 我有以下示例 但它用于仪表图表 对于任何 c3 图表 是否有任何选项可以设置图表标题 donut title Title 这是谷歌的热门结果 所以我想我应该补充一点 它现在是
  • 固定背景封面在移动视图中放大

    我在这里为我的网站使用固定背景封面 http www datisdesign com http www datisdesign com 每个页面都有一个很大的标题图像 但在手机等小型设备中 封面图像变得很大 我想让它在移动设备上变得更小 这
  • 虚假评论数据集

    互联网上有包含常见垃圾邮件的数据集 但我需要包含虚假评论的数据集来进行一些研究 但我找不到任何数据集 有人能给我关于在哪里可以获得虚假评论数据集的建议吗 我们的数据集可以在我的康奈尔大学主页上找到 http www cs cornell e
  • 强制下载mp4文件

    我想强迫用户下载 YouTube 视频 例如this http goo gl zNUlV网址 我下载了视频 可以播放原始视频 但即使视频的长度 大小相同 我在强制下载时也无法播放 function force download file v
  • 保留 WinRT 应用程序设置的最佳方式?

    我正在开发一个 WinRT 应用程序 它实际上也是一个游戏 我需要以文件或其他方式保存不同的信息 例如音频设置或播放器统计信息 如果它是一个文件 只需将设置写入或 我有一个想法 但我认为太初级了 获得这个的最佳方法是什么 非常感谢任何帮助或
  • PostgreSQL 字符串转义设置

    我有 2 台服务器 S1 S2与相同的SELECT version 使用相同的数据库test包含一个表t1具有类型的列text 我尝试插入 2 个带有符号的字符串数组 其中之一 INSERT into t1 columnname VALUE
  • 如何获取Scala函数的参数/返回类型?

    我有一个函数 想要获取它的参数类型和返回类型以在 Scala 宏中使用 scala gt val fn a String b Double gt 123 fn String Double gt Int