小编Kry*_*ian的帖子

在Grails 2.2中可以对mongodb动态属性进行单元测试吗?

在单元测试部分,mongodb-1.1.0GA的文档似乎已经过时了:http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.html

以下代码

@TestFor(Employee)
class EmployeeTests extends GroovyTestCase {

    void setUp() {
    }

    void tearDown() {
    }

    void testSomething() {
        mockDomain(Employee)

        def s = new Employee(firstName: "first name", lastName: "last Name", occupation: "whatever")
        s['testField'] = "testValue"
        s.save()

        assert s.id != null

        s = Employee.get(s.id)

        assert s != null
        assert s.firstName == "first name"
        assert s['testField'] == "testValue"

    }
}
Run Code Online (Sandbox Code Playgroud)

失败并出现此错误:

No such property: testField for class: Employee
Run Code Online (Sandbox Code Playgroud)

员工类非常简单:

class Employee {

    String firstName
    String lastName
    String occupation


    static constraints …
Run Code Online (Sandbox Code Playgroud)

grails unit-testing grails-orm mongodb

5
推荐指数
1
解决办法
282
查看次数

Lua表 - 具有相同键的两个条目

我不确定如何,但我们设法创建一个两个键完全相同的表.当执行表的for循环pairs并打印键和值时,我们得到:

1    true
1    true
Run Code Online (Sandbox Code Playgroud)

我们认为这可能是不同类型或类似问题,因此我们决定将其转换为json(我们使用Corona SDK和内部json模块).

结果非常惊人:

"ourTable" : { "1" : true, "1" : true }
Run Code Online (Sandbox Code Playgroud)

我们将其存储在一个文件中,以便检查的值,两个十六进制值"1"分别为31.

所以另一个测试:将json转换为lua表并且...与之前的结果相同:两个具有相同键的条目.

我以前从未见过这样的事情,说实话,我不知道如何发现和预防这种情况.我们已经使用lua&corona几年了,这是我们第一次检测到这样的东西,但它有可能发生在之前,我们没有发现.这可能导致一些令人难以置信的搞砸的结果.

Corona SDK使用的是Lua 5.1.

我们将这个表json编码存储在一个文件中.重新启动应用程序后,文件再次加载,它只包含单个条目!现在......这个表只包含"id"和boolean,这两个值完全相同,但我想知道如果值不同会发生什么,哪一个会保留?现在我想到了很多场景.

我无法重现这个问题,但我们做了什么:

  1. 用json读取文件
  2. 将json解码为lua表
  3. 简单地在表中添加/更新条目 tab[key] = value
  4. 保存存档

编辑:嗯,现在重现这个问题:

local d = {true} 
d["1"]=true 
for k,v in pairs(d) do 
    print(k,v) 
end


1   true
1   true
Run Code Online (Sandbox Code Playgroud)

lua json coronasdk lua-table

5
推荐指数
1
解决办法
586
查看次数

Lua继承 - 超级调用方法

我正在使用cocos2d-x [lua binding]来移植我的cocos2d [objective-c]游戏并且我有几个类子类.例如,我有一个CCScene的子类[永远不要做它的作用],它有一个onEnter方法.在我的子类中,KCCScene我也有onEnter,在那里我调用了[super onEnter].

所以我已经阅读了很多描述Lua继承的文档,但我从未见过对super方法的调用.

有可能吗?如果是,我应该怎么做像super:onEnter()?

谢谢

inheritance lua

4
推荐指数
1
解决办法
5074
查看次数

Composer - 无法下载 Flex 食谱 JSON 文件 - 404 与curl 200 OK

今天我想启动我旧的基于 Symfony Flex 的项目(我前段时间已经在本地删除了 docker 容器/图像/缓存)。启动容器时,在入口点composer应该安装所有依赖项,但它失败了。我已经启动了该项目,但没有安装依赖项,因此我可以手动运行它,但奇怪的事情发生了。Composer 无法下载食谱index.json文件,而我可以使用curl 来下载。

以下是composer日志:

# composer update symfony/flex

In CurlDownloader.php line 623:

  The "https://raw.githubusercontent.com/symfony/recipes-contrib/flex/main/index.json" file could not be downloaded (HTTP/2 404 )


update [--with WITH] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-dev] [--lock] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--no-autoloader] [--no-suggest] [--no-progress] [-w|--with-dependencies] [-W|--with-all-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>...]
Run Code Online (Sandbox Code Playgroud)

这是卷曲:

# curl -IL --http2 https://raw.githubusercontent.com/symfony/recipes/flex/main/index.json
HTTP/2 200
cache-control: max-age=300
content-security-policy: default-src …
Run Code Online (Sandbox Code Playgroud)

php symfony composer-php

4
推荐指数
1
解决办法
1374
查看次数

问题包括来自不同目录的头文件[不是路径问题]

我早就忘记了c ++以及如何正确使用它,但现在我必须处理一个类而且我有点卡住了.所以我使用cocos2dx为ios编写游戏,但是我使用的是Lua绑定而不是c ++.但是......尽管如此,我还是需要编写一些使用JNI的东西,所以... c/c ++我们来了.

我有这样的头文件和cpp文件:

DeviceInfoAndroid.h:

#include <jni.h>
#include "../libs/cocos2dx/platform/android/jni/JniHelper.h"

extern "C" {

    const char* getAndroidDeviceId();

}
Run Code Online (Sandbox Code Playgroud)

DeviceInfoAndroid.cpp:

#ifndef _DEVICE_INFO_ANDROID_
#define _DEVICE_INFO_ANDROID_

#include "DeviceInfoAndroid.h"
#include <string>

extern "C" {

const char *getAndroidDeviceId() {
    JniMethodInfo t;
    const char* retVal;
    if (JniHelper::getStaticMethodInfo(t
            , "org/cocos2dx/lib/Cocos2dxActivity" //org/cocos2dx/lib/Cocos2dxActivity
            , "getIMEI"
            , "()Ljava/lang/String;")) {
        jstring jstr;
        jstr = (jstring);
        t.env->CallStaticObjectMethod(t.classID, t.methodID);
        char *cstr;
        cstr = (char *) t.env->GetStringUTFChars(jstr, 0);
        std::string ret(cstr);
        t.env->ReleaseStringUTFChars(jstr, cstr);
        t.env->DeleteLocalRef(jstr);
        retVal = ret.c_str();
    }
    return retVal;
}
}

#endif
Run Code Online (Sandbox Code Playgroud)

我知道所有这些#ifndef废话都不需要,因为我只在一个地方和一个地方使用它,所以不会发生循环依赖,但我还是添加了它[当我删除它时它不会改变].

所以.. …

c c++ java-native-interface header-files

3
推荐指数
1
解决办法
6988
查看次数

如何删除dynamodb列表中的条目?

我有一个 lambda 函数,它作为一个表上的触发器,拥有最好的用户分数来处理排行榜表。

在我的排行榜表中,排序键是分数,玩家的名字是一个单独的条目,带有一个列表,因为可能有多个玩家的分数相同。没关系。

因此,在添加播放器时,我会这样做:

var paramsNewEntry = {
            "TableName": leaderboardTable,
            "Key": {
                "trackId": trackId,
                "time": newValue
            },
            "UpdateExpression": "SET players = list_append(if_not_exists(players, :emptyList), :playersList),
            "ExpressionAttributeValues": {
                ":playersList": [userId],
                ":emptyList":[]
            },
            "ReturnValues": "NONE"
        };
Run Code Online (Sandbox Code Playgroud)

这工作正常。我想以这种方式删除它:

var paramsOldEntry = {
                    "TableName": myTable,
                    "Key": {
                        "trackId": trackId,
                        "time": oldValue
                    },
                    "UpdateExpression": "DELETE players :playerToRemove",
                    "ExpressionAttributeValues": {
                        ":playerToRemove": [userId]
                    },
                    "ReturnValues": "ALL_NEW"
                }
Run Code Online (Sandbox Code Playgroud)

但我得到:Invalid UpdateExpression: Incorrect operand type for operator or function; operator: DELETE, operand type: LIST错误。

players属性是一个列表,查询响应示例:

{ …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-dynamodb aws-lambda

3
推荐指数
1
解决办法
3881
查看次数

如何在Lua中使用回调进行异步HTTP调用?

我需要对我的服务器进行异步HTTP调用才能接收XML响应.在我得到响应之后,如果成功则会调用[先前指定的]函数,如果是错误则调用其他函数.

所以我首先想到的是协同程序.不幸的是,在我进行http.get调用后,我无法屈服,因为它会等待整个事情完成.我知道我可以使用单独的函数来读取响应,但是我必须至少等待数据的第一个字节才能触发此函数,这将允许我屈服.无论如何,因为使用协同程序我想做的事情看起来不像是要走的路.

然后我尝试从lua调用一个C函数,创建单独的线程来获取XML,然后在Lua中调用一个函数,但是这不起作用,因为在创建新线程后lua_state会发生变化.在创建线程之前,我可以在堆栈上看到3个参数,并且在创建新线程后[我传递lua_State作为参数]它只有一个.无论如何,根据我的理解,一旦原始的cfunction调用结束,lua_State将被关闭,所以我将无法回拨.

因为我刚开始使用lua而且我对lua到c绑定更不熟悉,所以我只能希望我犯了一些愚蠢的错误,这很容易解决.但是现在我不知道如何进一步发展.

这个问题背后的故事:我将我的游戏从Cocos2D目标C框架移植到Cocos2d-X C++框架.我想使用Lua绑定,因为我认为我将无法将其移植到C++.无论如何,我想在Lua做.所以我有一个场景,有人访问他们在游戏中的库存清单.如果响应是立即的,他们基本上会看到一个打开的窗口,其中包含库存清单.但是,如果需要更长的时间来获取数据[连接问题,服务器过载......无论如何]屏幕将淡出,并且一些表示数据传输的动画将显示在屏幕上.至少这是它如何在游戏的objc版本上工作,我想要同样的事情.

在我的研究中是否有我遗漏的东西,是否有可能做到这一点?

BTW我已经看到了Lua套接字异步调用,它对我没有帮助,因为它仍然会等待转移的开始,然后再启动另一个.

lua multithreading pthreads coroutine cocos2d-x

2
推荐指数
1
解决办法
2205
查看次数

调用 calloc 函数时切换参数会发生什么?

我今天花了很长时间试图弄清楚为什么一个读取文本文件的超级简单的 C 函数不起作用。我能够通过在calloc函数中交换参数来使其工作:

代替:

calloc(1, size_of_the_memory_to_allocate)

我做了:

calloc(size_of_the_memory_to_allocate, 1)

因此,我做了 20 个大小为 1 的元素,而不是 1 个大小为 20 的元素。

calloc(size, 1)
Run Code Online (Sandbox Code Playgroud)

分配上有区别吗?

EDIT2:我想我对这个问题不够清楚,或者被误解了。问题是:“为什么使用 calloc 分配指向指针的指针需要交换参数?”。这不是关于调试代码,也不是我要求任何人运行它,而是关于如何calloc工作。@chqrlie 给出的答案正是我想要的。我想我在向问题中添加任何代码时犯了一个错误,而读者却专注于它,而不是我所要求的内容。所以,这是一个编辑,现在 chqrlie 的答案非常合适。如果这仍然对其他用户没有帮助,让我们删除问题并完成它。

c pointers

2
推荐指数
1
解决办法
286
查看次数

如何显示在textArea中创建的String以保持Grails中的格式?

我想知道显示字符串的正确方法是什么,由用户使用textArea输入字段创建?使用fieldValue时,所有内容都是单行:/

谢谢,克里斯蒂安

grails gsp

1
推荐指数
1
解决办法
1827
查看次数

如何编写一个返回const char*的函数,这是一个修改过的const char*参数?

我必须编写一个函数(c ++),其定义是:

const char* getFileName(const char* name);
Run Code Online (Sandbox Code Playgroud)

为了简化,这个函数将取名,检查一些条件并附加一个后缀,使其成为一个正确的文件名.例如:

name ="someFile",return ="someFile-hd.png"

const char*由此函数返回的函数将立即传递给另一个函数,该函数const char*作为参数

something->loadFile(getFileName("someFile"));
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我const char*在我的函数中创建一个范围时,它的范围仅限于它所创建的函数.另一方面,我无法修改loadFile函数代码,因为它是第三方库我我正在使用.

我可以编写一个包装loadFile来删除const char*我创建的包装,但我不想这样做,因为这是一个移植练习,这会打破我创建的一些模板,使其更容易.

有没有办法像我所描述的那样编写这个函数?

谢谢

编辑:小解释:

getFileName是我正在尝试编写的函数,我可以更改返回类型,但它必须适合作为参数才能loadFile运行.我的主要问题是const char*返回的getFileName要么丢失了,因为它超出了范围,要么我必须明确删除它,这会破坏我的移植模板.我想在一个函数调用中生成文件名而不对它做任何其他事情[换句话说,在原始代码中我有loadFile("something.png"),我想在loadFile(getFileName("something"))不添加任何新行之后将其更改为.

c c++ scope

0
推荐指数
1
解决办法
2904
查看次数