小编kay*_*ahr的帖子

如何获取JavaScript类的名称

我们来看下面的示例代码:

var ns = {}; // Some namespace

ns.Test = function()
{
    // Constructor of class Test
};

var inst = new ns.Test();
var className = hereIsTheMagic(inst); // Must return "ns.Test"
Run Code Online (Sandbox Code Playgroud)

所以我在命名空间'ns'中创建了一个名为'Test'的类,并且这个类的实例名为'inst'.现在我想找出班级名称.我怎样才能做到这一点?

到目前为止,我通过为每个类提供一个带有类名的字符串属性来解决这个问题,因此我可以使用它inst.constructor.className来访问类名.但是如果可能的话,我想停止这样做,因为在复制/粘贴类时它很容易出错.

如果没有适用于所有当前浏览器的解决方案,可能在未来的ECMAScript规范中至少有一些新功能可以提供对类名的访问?

javascript ecmascript-5

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

Android上的OpenGL深度缓冲区

我目前正在Android(2.1)上学习OpenGL ES编程.我从强制旋转立方体开始.它旋转正常,但我不能让深度缓冲区工作.多边形始终按GL命令渲染它们的顺序显示.我在初始化GL时这样做:

gl.glClearColor(.5f, .5f, .5f, 1);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearDepthf(1f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
Run Code Online (Sandbox Code Playgroud)

在表面变化上我这样做:

gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100f);
Run Code Online (Sandbox Code Playgroud)

当我启用背面剔除时,一切看起来都是正确的.但背面剔除只是一种速度优化,所以它也应该只与深度缓冲区一起使用?那么这里缺少什么?

android opengl-es

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

Java中的快速4x4矩阵乘法与NIO浮点缓冲区

我知道有很多这样的问题,但我找不到具体的情况.我有4x4矩阵实现为NIO浮点缓冲区(这些矩阵用于OpenGL).现在我想实现一个乘法方法,它将Matrix A与Matrix B相乘并将结果存储在Matrix C中.所以代码可能如下所示:

class Matrix4f
{
    private FloatBuffer buffer = FloatBuffer.allocate(16);

    public Matrix4f multiply(Matrix4f matrix2, Matrix4f result)
    {
        {{{result = this * matrix2}}} <-- I need this code

        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

执行此乘法的最快代码是什么?一些OpenGL实现(与Android中的OpenGL ES相似)为此提供本机代码,但其他实现不提供.所以我想为这些实现提供通用的乘法方法.

java math nio matrix

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

Eclipse将堆释放回系统

我正在使用Eclipse 3.6和Linux(64位)上的最新Sun Java 6以及大量项目.在某些特殊情况下(例如SVN更新),Eclipse需要最多1 GB的堆.但大多数时候它只需要350 MB.当我启用堆状态面板时,我大部分时间都会看到这个:

350M的878M

我使用以下设置启动Eclipse:-Xms128m -Xmx1024m

因此,大多数时候MB的大量浪费只是在内存使用达到峰值时很少使用.我根本不喜欢它,我希望Eclipse将内存释放回系统,所以我可以将它用于其他程序.

当Eclipse需要更多内存而没有足够的可用RAM而Linux可以换掉其他正在运行的程序时,我可以忍受.我听说有一个-XX:MaxHeapFreeRatio选项.但我从来没有弄清楚我必须使用什么价值,所以它有效.没有任何价值我试过有所作为.

那么我如何告诉Eclipse(或Java)发布未使用的堆?

java eclipse linux heap

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

用Java加载32位或64位JNI库

可能重复:
Java:在dll之间切换取决于系统架构(32/64)

在我的Java应用程序中,我需要一个可用于32位和64位的JNI库.我不想发送我的应用程序的两个不同版本,所以我想运送两个库的应用程序,应用程序必须确定自己要加载哪个库(foobar32.so或foobar64.so).我怎么做?

我想要尝试加载第一个,如果这引发异常,那么我加载第二个但这听起来很难看.

是否有一些系统属性我可以检查以确定是否使用32位Java或64位Java来运行我的应用程序?我知道有一些os.arch属性,但根据这个答案,返回值似乎是不可预测的.

那么让应用程序决定是否加载32位或64位JNI库的最佳方法是什么?

java java-native-interface

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

如何访问封闭函数的变量?

我在其他函数中使用了一个回调函数,我需要从这个封闭函数中访问一个变量,但不知道该怎么做.这是一个例子:

function outer($flag)
{
    $values = array(1, 5, 3, 9);

    usort($values, function($a, $b)
    {
        if ($flag)
        {
            // Sort values in some way
        }
        else
        {
            // Sort values in some other way
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

所以我将一些标志传递给外部函数,然后在排序回调函数中使用它来决定如何对值进行排序.是的,我知道我可以检查外部函数中的标志,然后调用不同的排序函数,但这不是问题.

问题是如何在回调中访问外部函数的变量(或参数).而不是使用全局变量.如果真的没办法,"这是不可能的"答案也是可以接受的.

php

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

在PHP中归档私有变量

是否可以在PHP脚本中定义私有变量,以便这些变量仅在这个单独的PHP脚本中可见而在其他地方不可见?我想要一个包含文件,它可以在不污染全局命名空间的情况下执行某些操作.它必须与PHP 5.2一起使用,因此PHP命名空间不是一个选项.这里没有使用OOP所以我不是在寻找私人班级成员.我正在寻找"有点全局"的变量,这些变量在当前脚本中是全局的,但在其他任何地方都没有.

在CI中可以使用static关键字来实现它,但在PHP中是否有类似的东西?

以下是"common.php"脚本的简短示例:

$dir = dirname(__FILE__);
set_include_path($dir . PATH_SEPARATOR . get_include_path());
// Do more stuff with the $dir variable
Run Code Online (Sandbox Code Playgroud)

当我在一些脚本中包含此文件时,$ dir变量在所有其他脚本中也是可见的,我不希望这样.那我怎么能阻止这个呢?

php

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

如何告诉PHPEclipse使用空格而不是制表符

我刚刚从PDT切换回PHPEclipse(因为PDT太不稳定了我的口味)但现在我遇到的问题是我无法告诉PHPEclipse如何用空格而不是制表符来缩进PHP代码.我已在以下首选项位置启用了空格:

PHPEclipse/PHP/Formatter/ (Unchecked "Indentation is represented by a tab")
General/Editors/Text Editors/ (Checked "Insert spaces for tabs")
Run Code Online (Sandbox Code Playgroud)

*.php文件仅与PHPEclipse编辑器和标准文本编辑器相关联.PHPEclipse首选项页面显示"一些常规首选项现在存在于文本编辑器页面上",因此听起来PHPEclipse应该使用常规文本编辑器首选项.但它只是不起作用.PHPEclipse总是使用制表符而不是空格.

任何提示如何让它使用空格?

php eclipse phpeclipse

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

如何从HTMLEditorKit获取特定操作?

我想创建一个简单的测试应用程序,其中JEdi​​torPane显示一些HTML内容和一个按钮,使所选文本变为粗体.在一个HTMLEditorKit已经提供了此按钮的必要行动,使我能够像这样复杂的代码中使用它:

// Build action map
Map<String, Action> actionMap = new HashMap<String, Action>();
for (Action action: editor.getActions())
    actionMap.put("" + action.getValue(Action.NAME), action);

// Get the action
Action action = actionMap.get("font-bold");
Run Code Online (Sandbox Code Playgroud)

但我很确定有什么不对劲.我无法相信我必须创建这个辅助映射来按名称获取操作.我发现用于检索动作的唯一官方方法似乎是JEdi​​torPane的getActions()方法,它只返回一个数组.

那么是否有更好的方法从a获取特定的操作EditorKit,我只是错过了它或者它只是糟糕的API设计?

java swing jeditorpane htmleditorkit

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

如何在优秀的C++ API中正确使用shared_ptr

我目前正在尝试找出如何shared_ptr在C++ API中正确使用C++ 11 的功能.我需要它的主要区域是容器类(例如场景图中的节点,例如可能包含子节点列表和父节点的引用以及类似的东西).创建节点的副本不是一个选项,使用引用或指针是痛苦的,因为没有人真正知道谁负责破坏节点(当有人破坏仍被其他节点引用的节点时,程序将崩溃).

所以我认为shared_ptr在这里使用可能是一个好主意.让我们看一下下面的简化示例(它演示了一个必须连接到父节点的子节点):

#include <memory>
#include <iostream>

using namespace std;

class Parent {};

class Child {
    private:
        shared_ptr<Parent> parent;
    public:
        Child(const shared_ptr<Parent>& parent) : parent(parent) {}
        Parent& getParent() { return *parent.get(); }
};

int main() {
    // Create parent
    shared_ptr<Parent> parent(new Parent());

    // Create child for the parent
    Child child(parent);

    // Some other code may need to get the parent from the child again like this:
    Parent& p = child.getParent();

    ...        

    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

解析GLSL错误消息

当我编译损坏的GLSL着色器时,NVidia驱动程序会给我以下错误消息:

0(102) : error C1008: undefined variable "vec"
Run Code Online (Sandbox Code Playgroud)

我知道方括号内的数字是行号。我想知道0错误消息开头的含义是什么。我希望传递给源数组中的索引,glShaderSource但事实并非如此。总是这样0。有人知道第一个数字是什么意思吗?

而且错误消息格式有一些官方标准,因此我可以从中解析行号,或者其他OpenGL实现是否使用其他格式?我只能访问NVidia硬件,因此无法检查使用AMD或Intel硬件时的错误消息。

opengl glsl

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