问号运算符“?”的含义Haxe 中的参数之前

2024-05-13

这两个函数签名有什么区别?

function f(?i:Int = 0) {}
function f(i:Int = 0) {}

参数是否带有前缀似乎没有任何区别?,两者都编译良好。


确实没有理由使用?在这个例子中,但是有一个区别。

On a 静态类型目标 https://haxe.org/documentation/introduction/compiler-targets.html, f(null)由于基本类型而无法编译Int, Float and Bool不是nullable https://haxe.org/manual/types-nullability.html那里。但是,那? 意味着可为空 http://haxe.org/manual/types-function-optional-arguments.html, 意思是

function f(?i:Int)

实际上是一样的

function f(i:Null<Int> = null)

如您所见,?有两个作用:

  • A null 默认值 https://haxe.org/manual/types-function-default-values.html已添加,因此可以省略i通话期间:f();
  • 该类型被包裹在Null<T> https://api.haxe.org/Null.html?。虽然这对动态目标没有影响,但它通常会在静态目标上产生运行时性能成本(同样:only for Int / Float / Bool论据)。

我能想到为什么您希望基本类型的参数可为空的唯一原因是启用可选参数跳过。打电话时f在这个例子中,i仅当可为空时才能跳过:

class Main {
    static function main() {
        f("Test"); // 0, "Test"
    }

    static function f(?i:Int = 0, s:String) {
        trace(i, s);
    }
}

请注意,如果您添加默认值 http://haxe.org/manual/types-function-default-values.html对于可选参数,即使您明确传递该值,也会使用该值null:

class Main {
    static function main() {
        f(); // 0
        f(null); // 0
    }

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

问号运算符“?”的含义Haxe 中的参数之前 的相关文章

  • Haxe: class, object, new and constructor

    haxe 类 对象 new 和 构造函数 package if neko import neko Lib import neko io File end class Thing public function new trace new f
  • Haxe 在 PHP 环境中部署的 Web“框架”?

    最近我一直在看Haxe 构建要部署到运行 PHP 的 Apache 的应用程序 好吧 虽然它看起来可能适合我的需求 部署到 PHP 但不使用糟糕的语言 但我还没有发现任何东西可以使实际应用程序开发比构建传统的非 MVC PHP 应用程序更容
  • Haxe - 打印命令行参数

    使用 Haxe 编程语言 是否可以打印传递给应用程序的命令行参数 我正在尝试在 Haxe 中重写这个 Java 程序 它只是打印命令行参数 public class JavaExample public static void main S
  • 通用构建枚举的一些错误

    Solved对于第一个宏来说 编写这并不是最容易的 但我学到了很多东西 感谢 Gama11 为我指明了正确的方向 以及创造如此美丽事物的核心团队 Haxe And I even added some slick doc field stri
  • Haxe 中的常量

    如何在 Haxe 中创建公共常量 我只需要旧的模拟const in AS3 public class Hello public static const HEY String hey 在 Haxe 中声明常量的常用方法是使用static a
  • Mac 上的 ActionScript 开发

    我知道适用于 Windows 的 FlashDevelop 但是在 Mac 上开发 ActionScript 或 haxe 怎么样 除了 eclipse flex builder 和 FDT 的 Flex 插件之外 还有什么好的 IDE 可
  • FlashDevelop Haxe (Flash) 调试器

    FlashDevelop中有Haxe的调试器吗 FlashDevelop 现在附带一个运行良好的 Haxe 调试器 仅限 Flash 目标
  • 使用 Haxe 将参数传递给延迟函数

    你知道是否有一种简单的方法可以将一些参数传递给通过调用的函数 haxe Timer delay func delay 我所说的 简单 是指无需创建任何自定义计时器 您可以使用bind https haxe org manual lf fun
  • 如何在 FDT 内导航/更新 Haxe SDK?

    在 OSX 上 FDT 在此处提供 Haxe SDK Applications FDT 5 app Contents FDT5 haxe haxe 2 09 osx 因为它位于 OSX 包内部 所以我无法导航到它 我如何 在首选项中选择它
  • Haxe——像 ActionScript 一样嵌入文件?

    在 ActionScript 中 您可以执行以下操作 Embed source src myfile xml mimeType application octet stream private var xml Class 它会嵌入您的文件以
  • 在 Haxe 中使用对象作为 Map 键

    我正在尝试做一个Map以一个对象作为键 问题是 当我尝试从这张地图中获取元素时 我总是得到null 这是因为我没有提供与密钥完全相同的参考 我正在提供一个具有相同的对象values 所以参考不同 有什么办法可以解决吗 我可以让它使用某种eq
  • 错误:失败并出现错误:没有这样的项目:polymod

    我正在尝试制作一个 Friday Night Funkin mod 但是当我编译它时 出现以下错误 Error Could not find haxelib polymod does it need to be installed 所以我当
  • 迭代器(不是迭代器)上的 Lambda 迭代

    我经常读到在迭代器上调用 Lambda 函数是不可能的 直到现在我也一直抱着这样的信念 然而 阅读 Franco Ponticelli 和 Lee McColl Sylvester 所著的 Professional Haxe 一书 了解如何
  • Haxe + Webpack 导出空对象

    我正在尝试在 Haxe 编译器导出的 JS 上运行 webpack dev server 我正在使用 hxgenjs 库将 haxe 输出拆分为单独的模块 并尝试通过 webpack 合并它们 以使用热模块替换功能 一切似乎都正常 但输出是
  • Haxe 编译器可以将任何 C# 代码转换为 Haxe 吗?

    首先 我对 Haxe 非常陌生 所以我在这里问超级菜鸟问题 我有两个问题 1 我的第一个问题是我知道Haxe编译器可以从Haxe转换为任何其他语言 支持 但是它可以将其他语言 支持 的源代码转换为Haxe吗 2 如果它能做到这一点 它的能力
  • Haxe - 创建 C++ 独立可执行文件

    我编写了一个 haxe 程序 尝试与远程服务器进行通信 我能够成功编译到 C 目标 该可执行文件在我的系统上运行得很好 但是 当我尝试在另一个 Windows 盒子上运行相同的命令时 它失败并出现以下错误 错误 无法加载模块 std soc
  • 使用Haxe宏进行条件编译,而不是#if #end

    假设我们有一个 Local 类 class Local static inline public var logLevel Int 3 以及一些功能 Tool debug s String compiled if logLevel gt 0
  • 从 JS 中暂停 chrome 中的代码执行。可能的?

    我可以在 JS 代码中暂停执行吗 我正在开发一个简单的基于 haxe 的调试 util 并且我希望能够通过调用将触发执行暂停的 util 方法来模拟断点 不确定这是否是您正在寻找的 但在 Chrome 如果安装了 Firebug 则为 Fi
  • 问号运算符“?”的含义Haxe 中的参数之前

    这两个函数签名有什么区别 function f i Int 0 function f i Int 0 参数是否带有前缀似乎没有任何区别 两者都编译良好 确实没有理由使用 在这个例子中 但是有一个区别 On a 静态类型目标 https ha
  • Haxe for javascript 没有全局命名空间污染?

    此问题仅适用于 Haxe 版本 我知道 haxe 一段时间了 但直到昨天才真正使用过它 出于好奇 我决定移植对决 js http wmd editor com examples splitscreen 一个 javascript 端口降价

随机推荐