我正在尝试创建一个更高阶的函数来创建函数来捕获特定的密钥代码.该代码的灵感来自于他的todomvc实现中的Evan的"onEnter"功能,该功能仅捕获输入功能.
onKeyCode : Int -> Msg -> Attribute Msg
onKeyCode keycode msg =
let
captureKey code =
if code == keycode then
msg
else
NoOp
in
on "keydown" (Json.map captureKey keyCode)
onEnter = onKeyCode 13
onEsc = onKeyCode 27
Run Code Online (Sandbox Code Playgroud)
现在我想将它添加到查看器中的输入组件:
input
[ class "edit"
, id ("todo-" ++ toString item.uid)
, value item.message
, onInput (UpdateItem item.uid)
, onBlur (SwitchEditTodo item.uid False)
, onEnter (SwitchEditTodo item.uid False)
, onEsc (UndoEditTodo item.uid)
]
[]
Run Code Online (Sandbox Code Playgroud)
如果我只有onEnter,代码将按预期工作,但如果我添加onEsc,onEnter代码永远不会执行.我在哪里做错了?是高阶函数上下文的问题还是在单独的函数中使用多个值进行"on"映射?
我刚开始使用Golang,我看到了典型的交换函数示例:
func swap(x, y string) (string, string) {
return y, x
}
Run Code Online (Sandbox Code Playgroud)
我自动认为命名的返回可以解决它并且它是一个更甜的例子,所以我尝试了更短的版本:
package main
import "fmt"
func swap(z, y int) (z, y int) {
return
}
func main() {
fmt.Println(swap(2, 3))
}
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,它没有编译抱怨重复的论点.为什么不能返回输入参数?我做错了什么还是不支持?
我认为这是一个完全有效的用例,并且可能有许多其他示例用于此用法.
因为几天我试着写一个用于线路编码的Haxe hxcpp包装器,用C代码编程; 该库非常简单,标题还包含一个extern C.我遵循snowkit linc宏模板,但是我无法获得编译C模块的方法,并且它与项目的其余部分链接,我不确定怎么继续
我没有问题将代码编译为C对象并将其与我的系统中的C可执行文件(OSX el Capitan)链接,因此我假设我在haxe项目中做错了,也许我无法真正将hxcpp链接到C库直接使用来自haxe的构建过程,或者我应该通过手动编写命令来手动管道.
@:keep
@:structAccess
@:include('linenoise.h')
#if !display
@:build(linc.Linc.touch())
@:build(linc.Linc.xml('linenoise'))
#end
extern class LineNoise {
@:native("linenoiseClearScreen")
static function linenoiseClearScreen(): Void;
} //LineNoise
Run Code Online (Sandbox Code Playgroud)
最近我收到此错误:
g++ -o Test-debug -stdlib=libstdc++ -framework Cocoa -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -m64 @/Users/vresko/projects/linenoise/test/cpp/obj/darwin64-debug/all_objs
Undefined symbols for architecture x86_64:
"_linenoiseClearScreen", referenced from:
Test_obj::main() in ab184b9a_Test.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我知道这个错误有几个提及,但我不知道如何在haxe hxcpp的上下文中解决这个问题.
如果我使用包含hxcpp.h的C++包装器作为典型的linc示例,那么错误仍然是相同的,我在这里声明的函数(linenoiseClearScreen)实际上是一个简单的print语句.
我还读到了其他可能性,例如CFFI为neko创建了一个围绕库的包装器(我可能已经在互联网上阅读了所有关于它的内容)但是我希望尽可能保持代码静态链接并与所有hxcpp目标兼容.