我用 c# 编写了一个函数,它最初返回一个命名元组。但是现在,我只需要这个元组的一个字段,我想保留这个名称,因为它有助于我理解我的代码。
private static (bool informationAboutTheExecution, bool field2thatIdontNeedAnymore) doSomething() {
// do something
return (true, false);
}
Run Code Online (Sandbox Code Playgroud)
这个函数编译。但这是我想要的以下功能
private static (bool informationAboutTheExecution) doSomething() {
// do something
return (true);
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
元组必须至少包含两个元素
不能隐式转换类型 'bool' 到 '(informationAboutTheExecution,?)
有人有保留返回值名称的解决方案吗?
我从头开始在 WSL 上重新启动安装:
wsl --unregister Nixos
wsl --import NixOS .\NixOS\ nixos-wsl-installer.tar.gz --version 2
wsl -s Nixos
wsl
Run Code Online (Sandbox Code Playgroud)
nixos-wsl-installer.tar.gz 来自 https://github.com/nix-community/NixOS-WSL/releases/tag/22.05-5c211b47
安装完成。尼克斯开始了
我还没有更改 /etc/nixos/configuration.nix 中的任何内容
sudo nixos-rebuild switch
Run Code Online (Sandbox Code Playgroud)
/tmp/.X11-unix 的 fchmod() 失败:只读文件系统
这是什么意思?
我先说我认为我已经理解的内容。
使用显式游标是因为我们稍后需要重用查询。如果使用非显式游标(即 for cs in (select .........)),则每次使用游标时都会重新执行请求。因此,显式游标用于提高效率。
为了分解代码,我们可以使用“流水线表函数”或“视图”来创建游标。我想知道为什么我应该使用一种解决方案而不是另一种解决方案。
以下是我对这些解决方案的了解:
不赞成也不反对
我可以使用 select 语句提取视图或流水线表函数函数的一部分。
骗局
必须声明“流水线表”使用的记录类型和表类型。这需要时间
pro:我们可以在管道表(例如循环)中使用 pl/sql 语句的所有可能性
我说的都是真的吗?还有其他我应该知道的事情吗?
我已经安装了 PostgreSQL:
nix-env -iA nixos.postgresql
Run Code Online (Sandbox Code Playgroud)
现在当我使用 时psql,我得到:
psql: error: connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
Run Code Online (Sandbox Code Playgroud)
我必须添加一些东西/etc/nixos/configuration.nix吗?
更新
我尝试像此链接那样进行操作(即,将其安装在nix-shell而不是安装在中nix-env),但我仍然遇到相同的错误:
$ nix-shell --pure shell.nix
done
server started
$ psql
psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on …Run Code Online (Sandbox Code Playgroud) 这段代码没有问题:
#include "iostream"
#include "functional"
std::function<double (double)> retFun(double* a) {
return [a](double x) { return x+*a; };
}
int main(){
double*e = new double(3);
std::cout << retFun(e)(3) << std::endl;}
Run Code Online (Sandbox Code Playgroud)
但如果我retFun在一个对象中声明:
.H
class InternalVariables : public Page
{
private:
std::function<double ()> retFun(double* a);
};
Run Code Online (Sandbox Code Playgroud)
的.cpp
std::function<double ()> InternalVariables::retFun(double *a)
{
return [a](double b){ return b+ *a;};
}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误
错误:无法将'InternalVariables :: retFun(double*):: __ lambda44 {a}'从'InternalVariables :: retFun(double*):: __ lambda44'转换为'std :: function'返回[a](双b) {return b +*a;};
let vec = iter::repeat("don't satisfy condition 1") // iterator such as next() always "don't " satisfy condition 1"
.take_while(|_| {
satisfycondition1.satisfy() // true is condition 1 is satisfied else false
})
.collect();
Run Code Online (Sandbox Code Playgroud)
此代码创建的n元素向量n等于不遵守条件1的次数。
我现在想创建一个n + m元素向量,其向量n等于不遵守条件1 m的次数和不遵守条件2的次数。
该代码应类似于以下内容:
let vec = iter::repeat("dont't satisfy condition 1")
.take_while(|_| {
satisfycondition1.satisfy()
})
.union(
iter::repeat("has satisfed condition 1 but not 2 yet")
.take_while(|_| {
satisfycondition2.satisfy()
})
)
.collect();
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建两个向量,然后将它们连接起来,但是效率较低。
您可以使用以下代码来了解重复的内容:
use std::iter;
fn main() { …Run Code Online (Sandbox Code Playgroud) db fiddle 现在不工作。稍后我会上传代码...
SELECT COUNT (*) FROM sys.odcivarchar2list ('2', '2');
Run Code Online (Sandbox Code Playgroud)
该查询无需使用关键字表即可工作。但在动态查询中:
DECLARE
c INTEGER;
towtimestwo SYS.odcivarchar2list := sys.odcivarchar2list ('2', '2');
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT (*) FROM :1'
INTO c
USING towtimestwo;
DBMS_OUTPUT.put_line (c);
END;
Run Code Online (Sandbox Code Playgroud)
它不起作用:
无效的表名
因此我必须添加关键字。
DECLARE
c INTEGER;
towtimestwo SYS.odcivarchar2list := sys.odcivarchar2list ('2', '2');
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT (*) FROM table( :1)'
INTO c
USING towtimestwo;
DBMS_OUTPUT.put_line (c);
END;
Run Code Online (Sandbox Code Playgroud)
为什么?
我正在使用 Oracle 19.0
这是这个问题的另一个续集:
我必须应用多态表函数,用某些内容替换 varchar2 的所有空值。
在这个例子中:
WITH
a(aa1,aa2,aa3)
AS
(SELECT 1, '2', SYSDATE FROM DUAL
UNION ALL
SELECT NULL, NULL, NULL FROM DUAL)
SELECT *
FROM TABLE (f_replace_nulls(a))
Run Code Online (Sandbox Code Playgroud)
aa2 的类型是 varchar2(1),因为 '2' 是 varchar2(1)。如果 f_replace_nulls 将空值替换为“n/a”,则 dbfiddle 中只会给出“n”,并且在我的计算机上会出现以下错误。
[错误] 执行 (2: 1): ORA-62576: 放置列中的列 (AA2) 的目标大小 (1) 小于源大小 (3)
为了删除这个问题,我想明确提及 aa2 是 varchar2(5)。
或者如果有其他方法可以解决这个问题,我很高兴知道。
LNNVL 存在,因为以下语句有效。
select 1 from dual where not(LNNVL(1=1));
Run Code Online (Sandbox Code Playgroud)
但我在 DBA_PROCEDURE 中找不到它
SELECT *
FROM SYS.DBA_PROCEDURES
WHERE UPPER (procedure_name) = 'LNNVL';
Run Code Online (Sandbox Code Playgroud)
无效的
这是一个内置过程,但也是 REGXXP_LIKE,以下查询返回一行
SELECT *
FROM SYS.DBA_PROCEDURES
WHERE UPPER (procedure_name) = 'REGEXP_LIKE';
Run Code Online (Sandbox Code Playgroud)