PL/pgSQL的文档说,变量的声明和赋值完成:=.但是简单,更短,更现代 (见脚注) =似乎按预期工作:
CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$
DECLARE
i int;
BEGIN
i = 0;
WHILE NOT i = 25 LOOP
i = i + 1;
i = i * i;
END LOOP;
RETURN i;
END;
$$ LANGUAGE plpgsql;
> SELECT foo();
25
Run Code Online (Sandbox Code Playgroud)
请注意,Pl/pgSQL可以清楚地区分分配和比较,如行中所示
WHILE NOT i = 25 LOOP
Run Code Online (Sandbox Code Playgroud)
所以,问题是:
=代替的已知后果:=?编辑/脚注:
请使用" 简短,不完整和错误的编程语言历史 "中的"更现代"部分:
1970年 - Niklaus Wirth创建了Pascal,一种程序语言.批评者立即谴责Pascal,因为它使用"x:= x + y"语法而不是更熟悉的类C"x = x + y".尽管C还没有被发明,但这种批评仍在发生. …
为什么常规赋值语句(比方说 x = 5)返回赋值的值(5在本例中),而赋值与变量declaration(var x = 5)一起返回undefined?
我通过在Chrome浏览器的Javascript控制台中执行这些语句获得了返回值:
> var x = 5;
undefined
> y = 5;
5
Run Code Online (Sandbox Code Playgroud) 这个问题我有一段时间以来一直有点恼火,而且从来没有到处寻找答案.
但是我想我至少可以问这个问题,也许有人可以解释一下.
基本上我使用的许多语言都使用语法糖来编写(使用C++中的语法):
int main() {
int a = 2;
a += 3; // a=a+3
}
Run Code Online (Sandbox Code Playgroud)
虽然在lua +=中没有定义,所以我必须写a=a+3,这也是关于语法糖.当使用更"有意义"的变量名称时,例如:bleed_damage_over_time或者它开始变得乏味的东西:
bleed_damage_over_time = bleed_damage_over_time + added_bleed_damage_over_time
Run Code Online (Sandbox Code Playgroud)
代替:
bleed_damage_over_time += added_bleed_damage_over_time
Run Code Online (Sandbox Code Playgroud)
所以如果你没有一个好的解决方案,我想知道如何解决这个问题,在这种情况下,我当然会有兴趣听到它; 但是为什么lua没有实现这种语法糖.
如果我说let 5 = 10,为什么5 + 1返回6而不是11?
haskell pattern-matching variable-assignment let assignment-operator
我想data.table在一个函数内修改一个.如果我:=在函数中使用该功能,则仅为第二次调用打印结果.
请看下图:
library(data.table)
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
dt
}
Run Code Online (Sandbox Code Playgroud)
当我只调用该函数时,表格不会被打印(这是标准行为.但是,如果我将返回的内容保存data.table到新对象中,则不会在第一次调用时打印,仅针对第二次调用.
myfunction(mydt) # nothing is printed
result <- myfunction(mydt)
result # nothing is printed
result # for the second time, the result is printed
mydt
# x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么会发生这种情况以及如何预防吗?
我回答了关于std :: vector of objects和const-correctness的问题,得到了不应有的 downvote和关于undefined行为的评论.我不同意,因此我有一个问题.
考虑使用const成员的类:
class A {
public:
const int c; // must not be modified!
A(int c) : c(c) {}
A(const A& copy) : c(copy.c) { }
// No assignment operator
};
Run Code Online (Sandbox Code Playgroud)
我想要一个赋值运算符,但我不想const_cast在下面的代码中使用其中一个答案:
A& operator=(const A& assign)
{
*const_cast<int*> (&c)= assign.c; // very very bad, IMHO, it is undefined behavior
return *this;
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案是
A& operator=(const A& right)
{
if (this == &right) return *this;
this->~A()
new (this) A(right); …Run Code Online (Sandbox Code Playgroud) 我在Java中遇到了一个声明
while ((line = reader.readLine()) != null) {
out.append(line);
}
Run Code Online (Sandbox Code Playgroud)
赋值操作如何在Java中返回值?
我们正在检查的声明是line = reader.readLine(),我们将其与之进行比较null.
既然readLine会返回一个字符串,我们究竟要检查的是null什么?
这是我长期以来一直想知道的事情.请看以下示例:
struct matrix
{
float data[16];
};
Run Code Online (Sandbox Code Playgroud)
我知道默认构造函数和析构函数在这个特定示例中做了什么(没有),但是复制构造函数和复制赋值运算符呢?
struct matrix
{
float data[16];
// automatically generated copy constructor
matrix(const matrix& that) : // What happens here?
{
// (or here?)
}
// automatically generated copy assignment operator
matrix& operator=(const matrix& that)
{
// What happens here?
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
它涉及std::copy或std::uninitialized_copy或memcpy或memmove或什么?
赋值运算符可以使用成员函数重载,但不能使用非成员friend函数重载:
class Test
{
int a;
public:
Test(int x)
:a(x)
{}
friend Test& operator=(Test &obj1, Test &obj2);
};
Test& operator=(Test &obj1, Test &obj2)//Not implemented fully. just for test.
{
return obj1;
}
Run Code Online (Sandbox Code Playgroud)
它会导致此错误:
错误C2801:'operator ='必须是非静态成员
为什么friend函数不能用于重载赋值运算符?编译器允许重载其他运算符,例如+=和-=使用friend.支持的固有问题/限制是operator=什么?
基类中的赋值运算符似乎在派生类中不可用.鉴于此代码:
#include <iostream>
class A{
int value;
public:
A& operator=(int value){
this->value = value;
return *this;
}
};
class B : public A{};
int main(){
B b;
b = 0; // Does not work
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC 6.4说:
错误:'operator ='不匹配(操作数类型为'B'和'int')
怎么了?
c++ ×4
arrays ×1
colon-equals ×1
const ×1
data.table ×1
expression ×1
function ×1
haskell ×1
inheritance ×1
java ×1
javascript ×1
let ×1
lua ×1
plpgsql ×1
postgresql ×1
r ×1