在PHP中,您可以执行以下令人惊奇/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有没有办法用Java做类似的事情?
例如,如果我有一个名称,var name = 'the name of the variable';
可以得到对变量的引用name
吗?
由于ECMA-/ JavaScript是所有关于Objects
和Contexts
(其也somekind的对象的),每个变量被存储在这样的被称为
可变 (或在功能方面,的情况下, 激活对象 )。
因此,如果您创建这样的变量:
var a = 1,
b = 2,
c = 3;
在 全局范围 (= NO函数上下文)中,您将这些变量隐式写入 全局对象 (window
在浏览器中= )。
可以使用“点”或“括号”表示法来访问它们:
var name = window.a;
要么
var name = window['a'];
这仅适用于在这种特定情况下的全局对象,因为 变量对象 中的 全局对象 是window
对象本身。在函数的上下文中,您没有直接访问
Activation Object的 权限。例如:
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
alert(name);
name = this['a']; // === 1
alert(name);
}
new foobar();
new
创建一个自定义对象(上下文)的新实例。没有new
该功能的范围也将是global
(=
window)。此示例将分别警告undefined
和1
。如果我们替换this.a = 1; this.b = 2
为:
var a = 1,
b = 2;
两个警报输出均未定义。在这种情况下,变量a
和b
将存储在foobar
无法访问的激活对象中(我们可以通过调用a
和直接访问它们b
)。
我想使用在数据帧中创建多个新列。列名及其内容应动态生成。 来自IRIS的示例数据: 我创建了一个函数来从变量中更改新列:
我想使用<code>dplyr::mutate()</code>在数据帧中创建多个新列。应动态生成列名及其内容。 来自iris的示例数据: 我创建了一个函数,可以从<code>Petal中修改我的新列。宽度变量: 现在我创建一个循环来构建我的列: 然而,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname),而不是四个(称为petal.2-petal.5
问题内容: 如何在Java中使用动态名称分配变量?例如: 问题答案: 这不是你在Java中做事的方式。Java中没有动态变量。Java变量必须在源代码中声明。 根据要实现的目标,应使用数组、List或 Map;例如 可以使用反射来动态引用源代码中已声明的变量。但是,这仅适用于属于类成员的变量(即静态字段和实例字段)。它不适用于局部变量。
我的问题很简单,但我认为Velocity不支持这一点。我必须使用vm文件中定义的变量名访问映射或对象。 配置为Map 这里的问题是,当我发送此模板进行渲染时,我得到以下代码: 所以看起来在呈现模板时,$img_src、$img_link和$img_alt没有正确定义,velocity试图在自身上呈现config对象,在下一轮呈现时,config对象已经呈现为纯文本,其余变量就放在其中。 比这更奇怪
问题内容: 我想使用运行时之前不知道的字段名称过滤器来调用查询…不确定如何构造变量名称…或者我很累。 如果funct()返回的名称等于 不知道该怎么做… 问题答案: 您可以创建字典,设置参数,然后通过解压缩字典作为关键字参数将其传递给函数: