问题标签 [hacklang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Hack 和 PHP 有什么区别?
我离开 PHP 世界几年了,从那时起我就在 C#.Net 中工作。我正在考虑再次深入 PHP,今天我遇到了http://hhvm.com/,它似乎比纯 PHP 更类似于 C#。
所以我的问题是Hack 编程语言和 PHP有什么区别?
hhvm - HHVM+Hacklang:错误/警告输出到浏览器
有什么方法可以告诉 HHVM 将 Hacklang 警告和错误输出到浏览器中?像 PHP 一样的东西 enabled display_errors
,display_startup_errors
并error_reporting
设置为E_ALL
HHVM 版本:
我尝试了以下配置:
和 :
command-line - 严格模式下的 Hacklang 命令行程序
有什么方法可以在 Hack 的严格模式下创建命令行程序?由于 Hack 的严格模式不允许函数外的语句,我不能调用我的main
函数。
(这是一个理论上的问题,因为很容易通过使用非严格文件来调用主函数来规避这个问题。)
generics - Hack 语言:集合类型的泛型
为什么这段代码有效?
它不应该抛出错误吗?应该是为了什么<int>
?
syntax - Hack 语言中的顶级类型是什么?
在Hack 语言类型系统中,是否存在“top”类型,也称为“any”类型,还是通用的“Object”类型?也就是说,所有类型都是子类的类型?
手册中提到了“混合”类型,它们可能相似,但没有真正解释。也有可能在某些地方简单地省略类型声明。但是,这不能在任何地方完成,例如,如果我想将某个东西声明为string
顶级类型的函数,我不清楚我是如何做到这一点的。function (string): mixed
?
global-variables - Hacklang:如何对局部/全局变量进行类型注释?
Hack 手册非常清楚地说明了如何对函数参数、函数返回类型和成员变量进行类型注释。但是,我尝试对全局变量或函数局部变量进行类型注释的所有方式都会导致语法错误:
这样的注释可能吗?如果可能,那么正确的语法是什么?如果不可能,那么这是设计使然,还是开发人员计划实现的?(肯定会有用。)
vector - hacklang 中用于 Maps 和 Vectors 的 array_merge
给定以下代码
引发以下错误:
警告:使用了无效的操作数类型:array_merge 需要数组
向量和地图是否有任何解决方法array_merge
,而无需手动制作向量?
hhvm - HHVM - 如何正确使用 hh_client
所以我很高兴能加入一些 Hacklang 和 HHVM,并最终设法让它在 CentOS 6 VM 上运行(提示:servergrove.com 有一个来自他们的 repo 的 RPM,但它仍然需要 MySQL 5.0 共享库才能工作- 仍然是我能找到的最接近简单 CentOS 6 安装的工具……),我想我会处理我的一个相当小的 PHP 项目,作为转换为严格的 Hack 代码的一个很好的测试用例。
我已经完成了代码,但我认为我并不完全理解 hh_client 应该如何工作。我在.hhconfig
项目的根目录中创建了一个文件,然后hh_client start
从该目录运行,它似乎开始正常 - 我看到三个hh_server -d /var/www/html/groundwork
进程在执行此操作后运行。但是,每次我想输入检查我的代码时,我都必须运行 a hh_client check
,因为文档和其他来源中使用的语言一直暗示这应该是一个自动反馈的实时检查器 - 我可以运行一个watch hh_client check
I猜,但似乎我错过了一些东西。
我确保按照Common php functions in hack的建议获取 hhi 文件的副本
此外,有时当我启动 hh_client 时,它会报告一些事后直接检查不会,尽管没有更改代码中的任何内容。检查的错误通常较少。停止和启动 hh_client 再次报告更多。
谢谢。
hacklang - 在 Hack 中编写 IoC 容器
我正在将 PHP 项目转换为 Hack,但遇到了一些障碍。我正在尝试做的是将 IoC 容器从 PHP 重写为 Hack,我在让所有内容都通过 Hack 类型检查器工具时遇到了一些麻烦。
所以基本上我拥有的是一个容器,它可以让你将字符串注册到闭包映射。这个想法是闭包包含实例化一个类的逻辑。容器还存储它创建的实例,还允许您强制创建新实例。这是我的容器代码:
这个类本身似乎通过了类型检查器,但是当使用Container::get()
or时Container::getNew()
,由于返回是 type mixed
,当我尝试对这些返回的对象执行方法时,它会抛出此错误:
您正在尝试访问成员 x 但这不是一个对象,它是一个混合值
现在我知道这是有道理的,因为混合显然允许非对象,所以我必须确保将此类代码包装在 a 中is_object()
,但是这样做似乎并不能抑制类型检查器中的错误。有没有更好的方法来确认某个东西是 Hack 中的一个对象,类型检查器会理解?
另外,这个 IoC 容器类严重依赖于混合类型,这对我来说有点难看。在运行时必须确保它的返回是对象也不理想。有没有更好的方法可以做到这一点?我确实尝试过将混合更改为接口(如 IContainable 或其他东西)的想法,并让我想存储在容器中的任何类实现这一点,但随后类型检查器抱怨 IContainable 接口不包含该方法我试图调用从容器返回的对象(因此代码中的同一点出现错误,但原因不同)。也许我用这种方法接近成功了?
谢谢你的帮助。