Scala 中所有函数的超类型是什么?

2023-12-25

我知道我能做到instanceOf检查Function1 or Function2等等,但是有没有一种通用的方法来查看某些东西是否功能正常(它可以有任意数量的参数)。我尝试定义这样的东西:

type FuncType = (Any*) -> Any

但这也不起作用。基本上我有一些代码看起来像这样:

call = (name: Any, args: Any*) -> if name.isFunction then name.castAs[Function].apply(args) else name
aFunction = (name: String) => "Hello " + name
notAFunction = "Hello rick"
call(aFunction, "rick")
call(notAFunction)

没有适用于所有函数类型的通用超类型。

Scala 无法抽象函数的数量。但是,您可能会查看无形的 https://github.com/milessabin/shapeless库,它引入了一个叫做HList您可以使用它来抽象函数的数量。

但是,我认为这并不是您真正需要的。听起来你只是想做一个检查,比如“这是一个函数吗?”你可能会觉得没有参数不可知论很奇怪Function超类型,但如果你想用函数做一些有用的事情,你几乎总是需要知道函数的数量。

或者,您也许可以使用curried函数上的方法,它将返回一个Function1.

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

Scala 中所有函数的超类型是什么? 的相关文章

  • 查找使用特定 T 类型实现某个通用接口的所有类型

    我有几个类继承自abstract class BrowsingGoal 其中一些实现了一个名为的接口ICanHandleIntent
  • 作为单例集合的选项 - 现实生活中的用例

    标题几乎概括了这一点 Option作为单例集合有时会令人困惑 但有时它允许一个有趣的应用程序 我脑子里有一个例子 并且想了解更多这样的例子 我唯一的例子是运行for对的理解Option List T 我们可以执行以下操作 val v Som
  • 从 Monoids 的 HList 类型派生 0 的 HList

    我正在学习 Shapeless 目前我正在尝试创建一个执行以下操作的函数 给定一个类型HList它返回HList of Nones 与Option对应于给定的类型HList type 例如 create String Int HNil re
  • 使用带反射的 XPath 样式查询

    我有一个类树 其中包含层次结构中的多个对象 因此 我可能有一个 Container 对象 它托管 3 个 SubContainer 对象 而这些对象又托管任意数量的 Item 对象 有什么方法可以在此对象树上使用 XPath 样式表达式 这
  • Scala 插入列表中的特定位置

    这是我确实解决的问题 但是作为一个完全命令式的 Scala 菜鸟 我觉得我发现了一些完全不优雅的东西 任何改进的想法表示赞赏 val l1 4 1 2 3 4 Nil original list val insert List 88 99
  • scala 元组拆包

    我知道这个问题已经以不同的方式出现过很多次 但我仍然不清楚 有没有办法达到以下目的 def foo a Int b Int foo a b right way to invoke foo foo getParams is there a w
  • Java:支持宏吗?

    我只是好奇人们如何解决这个问题 我经常一直编写相同类型的代码 例如 new Thread Change this line start 我不断更改显示 更改此行 的行 然后启动一个线程 这一变化可以是一行或几行 我将如何压缩这段代码 好吧
  • 在sbt的build.sbt文件中添加模块依赖信息

    我在 IntelliJ 中有一个多模块项目 如该屏幕截图所示 contexProcessor 模块依赖于 contextSummary 模块 一旦我在项目结构中设置了依赖项 IntelliJ 就会处理所有事情 然而 当我跑步时sbt tes
  • 在 URL 中嵌入 ETag

    有关 Play 中资产指纹识别的问题 如何要求 Play 在 URL 中嵌入 ETag 而不使用第三方插件 例如 如果 css resource cssETag 为1234 那么它就会变成 css responsive 1234 css 相
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • 在 Scala 中定义具有多个隐式参数的函数

    如何定义具有多个隐式参数的函数 def myfun arg String implicit p1 String implicit p2 Int doesn t work 它们必须全部放入一个参数列表中 并且该列表必须是最后一个 def my
  • Scala 中简单表达式的非法开始

    我刚刚开始学习scala 在尝试实现递归函数时 我在 Eclipse 中收到错误 简单表达式的非法开始 def foo total Int nums List Int if total nums sorted head 0 0 else r
  • 如何获取调用方法的参数值?

    Question 我正在编写一些需要能够获得的代码values调用该类的方法的参数 我知道如何一直获取 ParameterInfo 数组 但我不知道如何获取值 这可能吗 如果是 我认为这与使用 MethodInfo 对象中的 MethodB
  • Scala Eclipse 自动完成功能损坏?

    我正在尝试让自动完成功能在 Eclipse 中用于 Scala 开发 我试图从 Scala 类引用 java 类 但自动完成功能从未找到它 例如 以这个 scala 类为例 object Main def main args Array S
  • 从单个字符串创建 Spark DataFrame

    我正在尝试采用硬编码字符串并将其转换为 1 行 Spark DataFrame 具有单列类型StringType 这样 String fizz buzz 将得到一个 DataFrame 其 show 方法如下 fizz buzz 迄今为止我
  • 如何在不进行硬编码的情况下使用 Cake 模式进行依赖注入?

    我刚刚阅读并享受蛋糕图案文章 http jonasboner com real world scala dependency injection di 然而 在我看来 使用依赖项注入的关键原因之一是您可以改变 XML 文件或命令行参数所使用
  • mssql 的 UUID 疯狂

    我的数据库条目有一个 UUID 及其值 使用 Microsoft SQL Server Management Studio 提取 CDF86F27 AFF4 2E47 BABB 2F46B079E98B 将其加载到我的 Scala 应用程序
  • Go中通过反射给struct成员赋值

    我有一个结构 v 其中包含成员 A B C 字符串 使用反射 我可以获得字段的名称及其值 typ v Type for i 0 i lt v NumField i gets us a StructField fi typ Field i f
  • 结合记忆和尾递归

    是否有可能以某种方式将记忆和尾递归结合起来 我目前正在学习 F 理解这两个概念 但似乎无法将它们结合起来 假设我有以下内容memoize函数 来自现实世界的函数式编程 http www manning com petricek let me
  • Scala Play 2.3 IntelliJ 14 *社区版 - 是否可以在没有命令行激活器命令的情况下运行项目

    From http blog jetbrains com scala 2012 12 28 a new way to compile http blog jetbrains com scala 2012 12 28 a new way to

随机推荐