那里有[<Pojo>]
应该做什么的文件吗?我得到了redux样本,并认为它解开了歧视的工会。问题是我将动作定义为一个有区别的联合,但是redux不允许除了一个对象文字之外的任何东西作为动作传递,因此一个有区别的联合不能成为动作。
以下类型
[<Pojo>]
type TodoAction =
| EditTodo of id:int * text:string
| ClearCompleted
console.log(EditTodo(22,"Hello World"))
console.log(ClearCompleted)
汇编为:
console.log({
type: "EditTodo",
id: 22,
text: "Hello World"
});
console.log({
type: "ClearCompleted"
});
对象文字具有“类型”属性(在redux中需要这个)是幸运的“意外”。
如果没有Pojo,那就是:
console.log(new TodoAction("EditTodo", [22, "Hello World"]));
console.log(new TodoAction("ClearCompleted", []));
如果你尝试store.dispatch,那是行不通的,因为一个动作只能是一个对象文字(具有“type”属性)
因此尝试从一个工作示例中进行逆向工程很有趣,但是有一个说明它应该如何工作的文档会更有趣。
有这样的事吗?
在根源目录中使用grep获取以下文件:./ src /fable /Fable.Core /Fable.Core.fs
使用:
/// Compile a record as a JS object literals.
/// More info: http://fable.io/docs/interacting.html
type PojoAttribute() =
inherit Attribute()
但是,交互的文档没有关于它的功能的更多信息。我将尝试更多地使用它,看看是否可以将该值用作联合或者它是否已经解开。
如果寓言的创造者/贡献者碰巧读到了这个;谢谢,这是一个好主意,如果需要,我很乐意做出贡献。
所以问题是:如果没有这样的东西,文档在哪里,那么我们如何创建呢?我想写一些,但只会猜测大多数寓言编译器是如何工作的。
如果您收到以下错误:
错误FSHARP:未定义“Pojo”类型
请确保导入Fable.core.dll并将其打开:
#r "./node_modules/fable-core/Fable.Core.dll"
open Fable.Core
答案 0 :(得分:0)
我最近发现的最好的指南之一是 F# Interop with Javascript in Fable: The Complete Guide by Zaid Ajaj。
顺便说一下,属性 #include <iostream>
template <typename T>
class SmartPointer
{
private:
T * ptr;
public:
template <typename... Args>
explicit SmartPointer (Args && ... args)
: ptr{ new T{ std::forward<Args>(args)... } }
{ }
~SmartPointer ()
{ delete(ptr); }
T & operator* ()
{ return *ptr; }
T * operator-> ()
{ return ptr; }
};
int main ()
{
SmartPointer<int> intSP1; // OK
//SmartPointer<int> intSP2(); // Error: vexing parse
SmartPointer<int> intSP3{}; // OK
SmartPointer<int> intSP4{5}; // OK
SmartPointer<int> intSP5(5); // OK (no more vexing parse)
}
适用于 F# 记录并确保它们编译为 javascript 对象文字(Plain Old Javascript Object)。显然,转换到这样的对象并不是记录的默认行为,这看起来很奇怪。