我知道将标量传递给sub实际上是通过引用,但由于我是perl的新手,我仍然进行了以下测试:
#!/usr/bin/perl
$i = 2;
subr(\$i);
sub subr{
print $_[0]."\n";
print $$_[0]."\n";
}
Run Code Online (Sandbox Code Playgroud)
我认为第一行是打印一个地址,第二行是给回数,但第二行是空行.我被其他人指出要这样做:${$_[0]}
它打印出数字.但她不知道为什么没有{}它不起作用以及为什么它与{}合作.那发生了什么?
可能重复:
按字符串获取PHP类属性
这是我的原始代码:
function generateQuery($type, $language, $options)
{
// Base type
$query = $this->Queryparts->print['filter'];
// Language modifiers
// Additional options
return $query;
}
Run Code Online (Sandbox Code Playgroud)
"print"是定义为对象的数组/散列(具有"(对象)"转换).我希望做这样的事情:
$query = $this->Queryparts->$type['filter'];
Run Code Online (Sandbox Code Playgroud)
使用$ type变量作为对象名称.这可能吗?
我想我总是天真地认为SQL查询的select部分中的标量函数只会应用于满足where子句所有条件的行.
今天我正在调试供应商提供的一些代码并且让这个假设受到挑战.我能想到这个代码失败的唯一原因是,对于本应由WHERE子句过滤掉的数据调用了Substring()函数.但似乎在过滤发生之前应用了子串调用,查询失败.这是我的意思的一个例子.假设我们有两个表,每个表有2列,分别有2行和1行.每个中的第一列只是一个id.NAME只是一个字符串,NAME_LENGTH告诉我们名称中具有相同ID的字符数.请注意,只有具有多个字符的名称在LONG_NAMES表中具有相应的行.
NAMES: ID, NAME
1, "Peter"
2, "X"
LONG_NAMES: ID, NAME_LENGTH
1, 5
Run Code Online (Sandbox Code Playgroud)
如果我想要一个查询来打印最后3个字母的每个名字,我可能会先尝试这样的事情(现在假设是SQL Server语法):
SELECT substring(NAME,1,len(NAME)-3)
FROM NAMES;
Run Code Online (Sandbox Code Playgroud)
我很快就会发现这会给我一个错误,因为当它到达"X"时它将尝试在子串调用中使用负数,它将失败.我的供应商决定解决这个问题的方法是过滤掉字符串太短以至于len-3查询无效的行.他通过加入另一张桌子来做到这一点:
SELECT substring(NAMES.NAME,1,len(NAMES.NAME)-3)
FROM NAMES
INNER JOIN LONG_NAMES
ON NAMES.ID = LONG_NAMES.ID;
Run Code Online (Sandbox Code Playgroud)
乍一看,这个查询看起来可能有效.连接条件将消除任何具有足够短的NAME字段以使子字符串调用失败的行.
但是,根据我的观察,SQL Server有时会尝试计算表中所有内容的子字符串表达式,然后应用连接来过滤掉行.这应该是这样发生的吗?是否有记录的操作顺序,我可以在何时发现某些事情?它是特定于特定的数据库引擎还是SQL标准的一部分?如果我决定在我的NAMES表中包含一些谓词来过滤短名称(如len(NAME)> 3),SQL Server是否也可以选择在尝试应用子字符串后应用它?如果是这样,那么做一个子串的唯一安全方法似乎是将它包装在select中的"case when"构造中?
我正在寻找一个子程序mysub
,它应该表现为以下两个调用实际上是相同的.
mysub(["values", "in", "a", "list"]);
mysub("Passing", "scalar", "values");
Run Code Online (Sandbox Code Playgroud)
实现这一目标的正确语法是什么?
我想在 Google 查询语言中实现一系列带有舍入的查询,例如:
select round(age,-1), count(id) group by round(age,-1)
Run Code Online (Sandbox Code Playgroud)
或int/floor/等的任意组合。
select int(age/10)*10, count(id) group by int(age/10)*10
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?我怀疑不会,因为 GQL 中的标量函数列表非常有限,但确实想知道是否有解决方法。
http://code.google.com/apis/chart/interactive/docs/querylanguage.html#scalar_functions
我有一个使用PDL
. 最后一步是点积,因此它返回一个标量。然而,当我尝试打印这个标量时,它显然仍然是一个小数点,并在屏幕上打印如下:
[
[ 3 ]
]
Run Code Online (Sandbox Code Playgroud)
我想知道如何将它转换回常规 Perl 标量,以便它打印如下:
3
Run Code Online (Sandbox Code Playgroud)
更重要的是,如果我不转换并将该 piddle 在纯 Perl 上下文(不涉及 PDL)中进行进一步的算术操作,会产生什么后果。谢谢!
我正在寻找Objective C中所有标量数据类型的列表,包括它们的范围(最大/最小值等).
对不起这个简单的问题,我真的很难找到这样的东西.
在Perl中,很容易保佑hashref
并使用它来存储和读取属性:
package MyPackage;
use strict;
use warnings;
sub new {
bless {}, __PACKAGE__;
}
sub SomeProperty {
my $self = shift;
if (@_) {
return $self->{SomeProperty} = shift;
}
$self->{SomeProperty};
}
# Or even like this to be able to call $obj->OtherProperty = $x;
sub OtherProperty : lvalue {
my $self = shift;
$self->{OtherProperty};
}
Run Code Online (Sandbox Code Playgroud)
但是,我已经看到一些类(来自不同的Perl模块),当转储时,显示一个简单的标量祝福:
$obj = bless( \$8756489, 'Some::Package' );
Run Code Online (Sandbox Code Playgroud)
然而,他们有方法和属性.我理解的方法,can
当询问祝福时,将调用包调用的任何子例程$object->name
.我不理解的部分是它们如何存储属性.这些物业存放在哪里?
有几次他们接受类似的东西$obj->property = $x
,$obj->property($x)
并且可以独立于同一类的其他实例.这些物业存放在哪里?
我知道这实际上取决于类的底层实现,它正在做什么或它正在与之交互,并且实际上可以多次回答这个问题(例如,对象只是在某个地方与另一个对象或连接接口,只发送或向它求价值).
但是,如果有一个标量基于对象存储的属性(如在一个不同的概念或方法在Perl类结构)的方式,我真的很想知道.
提前感谢您的任何意见!:-)
在以下perl片段中:
my $a1 = [ qw(rock pop musical) ];
my $b1 = [ qw( mystery action drama )];
my $c1 = [ qw( biography novel periodical)];
my @a2d = (
$a1,
$b1,
$c1
);
Run Code Online (Sandbox Code Playgroud)
这@a2d
是一个包含对数组的引用的数组.
我的问题是为什么以下打印相同的东西(musical
)?:
print ${$a2d[0]}[2],"\n";
print $a2d[0][2],"\n";
Run Code Online (Sandbox Code Playgroud)
我期望第二个打印ARRAY或给出一个错误,因为数组的元素是refences
我正在尝试按照Nexus-Schema (nexusjs)网站上的文档向我的 GraphQL 应用程序添加标量类型。
\n我尝试src/types/Types.ts
使用文档和交互式示例中提供的示例将许多不同的实现添加到我的文件中。我的尝试包括:
没有第三方库:
\nconst DateScalar = scalarType({\n name: \'Date\',\n asNexusMethod: \'date\',\n description: \'Date custom scalar type\',\n parseValue(value) {\n return new Date(value)\n },\n serialize(value) {\n return value.getTime()\n },\n parseLiteral(ast) {\n if (ast.kind === Kind.INT) {\n return new Date(ast.value)\n }\n return null\n },\n})\n
Run Code Online (Sandbox Code Playgroud)\n使用graphql-iso-date
第 3 方库:
import { GraphQLDate } from \'graphql-iso-date\'\nexport const DateTime = GraphQLDate\n
Run Code Online (Sandbox Code Playgroud)\n使用第 3 方库(如Ghost 示例graphql-scalars
所示):
export const GQLDate …
Run Code Online (Sandbox Code Playgroud)