标签: self-reference

自我指涉型

什么类型的T使以下代码可编辑?

T f(){ return &f; }
Run Code Online (Sandbox Code Playgroud)

我更喜欢C答案,但我将问题标记为C和C++,以防只有使用模板的答案.

c c++ types self-reference

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

数组自引用映射 - 非常奇怪的结果

在尝试使用一些不同的方法生成JavaScript数组时,我偶然发现了一个奇怪的结果.使用mappush的自参考(阵列DEMO):

a=[1,1,1,1,1,1,1,1,1,1];
a=a.map(a.push,a);
Run Code Online (Sandbox Code Playgroud)

我得到以下结果(在Chrome中):

[13,16,19,22,25,28,31,34,37,40]
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?

javascript arrays map self-reference

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

对象方法内的自引用

刚刚开始在 Matlab OO 编程中速成,我想为一个对象编写一个 set 方法,该方法将设置值,然后通过在另一个对象的相关字段中设置自身来进行交互。

classdef Person
properties
  age;
  sex;
  priority; % net priority based on all adjustment values
  adjustment; % personal adjustment value for each interest
  family;
end

methods
  function obj = set.sex(obj, value)
    if value == 'm' || value == 'f'
      obj.sex = value;
    else
      error('Sex must be m or f')
    end
  end

  function obj = set.family(obj,value)
    if class(value) == 'Family'
      obj.family = value;
    else
      error('Family must be of type Family')
    end
  end
end
end



classdef Family …
Run Code Online (Sandbox Code Playgroud)

oop matlab self-reference

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

在DELETE CASCADE中,自引用MySQL表的深度超过15级失败

我有一个自我引用外键的MySQL表.ON DELETE CASCADE在它中工作得非常好,但是我注意到一个奇怪的行为,它对于父实体最多只能工作14个级别.一旦我添加一个15级孩子并尝试删除父级,它就会开始抛出错误

"无法删除或更新父行:外键约束失败"

这是层次结构的图像.

在此输入图像描述

尝试删除Parent将抛出错误.

  • 在删除Child15时,可以删除Parent
  • 在不删除Child15的情况下,如果我尝试删除Child1,则会成功删除它.

此处重现行为的示例模式.在构建架构之前粘贴此行查询,其中id = 1而不是id = 2

DELETE FROM table1 WHERE id = 1;

我知道删除它的可能的解决方法

  • SET FOREIGN_KEY_CHECKS = 0
  • 删除时向下移动

但是我想知道,对于ON CASCADE DELETE,这是一些已知的MySQL限制吗?

我使用的是MySQL服务器版本5.6

mysql foreign-keys cascading-deletes self-reference

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

如何在MySQL中创建具有自引用字段的表?

在GTFS中,该字段parent_station来自stop_id(自引用)或NULL.例如(注意parent_station可能NULL),

SELECT stop_id, stop_name, parent_station FROM stops where stop_id='1970324837184617' OR parent_station='1970324837184617';

+------------------+----------------------+------------------+
| stop_id          | stop_name            | parent_station   |
+------------------+----------------------+------------------+
| 1970324837184617 | Saint Agne-SNCF      |                  |
| 3377699720880648 | Saint Agne-SNCF      | 1970324837184617 |
| 3377699720880649 | Saint Agne-SNCF      | 1970324837184617 |
| 3377699722011100 | Saint Agne-SNCF      | 1970324837184617 |
| 3377699722011101 | Saint Agne-SNCF      | 1970324837184617 |
| 3377699722914835 | Saint Agne Gare SNCF | 1970324837184617 |
+------------------+----------------------+------------------+ …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys create-table self-reference gtfs

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

PostgreSQL 自引用表 - 如何在脚本中存储父 ID?

我有下表:

DROP SEQUENCE IF EXISTS CATEGORY_SEQ CASCADE;
CREATE SEQUENCE CATEGORY_SEQ START 1;

DROP TABLE IF EXISTS CATEGORY CASCADE;

CREATE TABLE CATEGORY (
  ID        BIGINT                 NOT NULL DEFAULT nextval('CATEGORY_SEQ'),
  NAME      CHARACTER VARYING(255) NOT NULL,
  PARENT_ID BIGINT
);

ALTER TABLE CATEGORY
  ADD CONSTRAINT CATEGORY_PK PRIMARY KEY (ID);
ALTER TABLE CATEGORY
  ADD CONSTRAINT CATEGORY_SELF_FK FOREIGN KEY (PARENT_ID) REFERENCES CATEGORY (ID);
Run Code Online (Sandbox Code Playgroud)

现在我需要插入数据。所以我从父母开始:

INSERT INTO CATEGORY (NAME) VALUES ('PARENT_1');
Run Code Online (Sandbox Code Playgroud)

现在我需要刚刚插入的父级的 ID 来向其中添加子级:

INSERT INTO CATEGORY (NAME, PARENT_ID) VALUES ('CHILDREN_1_1', <what_goes_here>);
INSERT INTO CATEGORY (NAME, PARENT_ID) …
Run Code Online (Sandbox Code Playgroud)

postgresql parent-child self-reference sql-returning

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

删除递归 PostgreSQL

我有一个表upload_temp如下:

CREATE TABLE upload_temp (
    codigo serial PRIMARY KEY NOT NULL,
    codigo_upload_temp_pai INTEGER,
    nome TEXT NOT NULL,
    codigo_extensao INTEGER,
    data_inclusao TIMESTAMP NOT NULL DEFAULT NOW(),
    codigo_usuario_inclusao INTEGER NOT NULL,

    CONSTRAINT fk_upload_upload_pai FOREIGN KEY (codigo_upload_temp_pai) REFERENCES upload_temp (codigo) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_extensao_upload FOREIGN KEY (codigo_extensao) REFERENCES extensao (codigo) MATCH SIMPLE ON UPDATE CASCADE ON DELETE NO ACTION,
    CONSTRAINT fk_usuario_upload FOREIGN KEY (codigo_usuario_inclusao) REFERENCES usuario (chave) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE, …
Run Code Online (Sandbox Code Playgroud)

php sql postgresql recursion self-reference

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

与 Spring Data jpa 的自引用关系

我正在使用 Spring Boot 构建一个应用程序,并且必须设置自引用关系。

为了使场景简单易懂,我尝试使用部门实体示例来处理类似的场景。

以下是我需要设置自引用关系的场景

  1. 创建的部门具有以下属性 - 名称、成本中心、位置。
  2. 部门可以与也是部门类型的父部门相关
  3. 一个部门可以有子部门(子部门),这些子部门也是部门类型。

为了设置这样的场景,我按以下方式定义了实体部门。

部门.java

public class Department {

    @Id
    @GenericGenerator(name = "sequence_department_id", strategy = "com.app.mycompany.AgileCenterServices.util.DepartmentIdGenerator")
    @GeneratedValue(generator = "sequence_department_id")
    @Column(unique = true)
    private String id;

    private String name;

    private String location;

    private String costCenter;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="parentDepartment")
    private Department parentDepartment;

    @OneToMany(mappedBy="parentDepartment")
    private Set<Department> linkedDepartments = new HashSet<Department>();

    /* getters & setters */

}
Run Code Online (Sandbox Code Playgroud)

DepartmentController.java

@CrossOrigin
    @RequestMapping(value = "/", method = RequestMethod.POST)
    public Department createDepartment(@RequestBody String trial) throws Exception {

        logger.info("Inside createDepartment() API "); …
Run Code Online (Sandbox Code Playgroud)

json self-reference spring-data-jpa spring-boot objectmapper

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

具有单个构造函数的自引用数据类型不能为 `Show`n

这是来自The Little MLer。我有这个

data Chain = Link Int (Int -> Chain)
Run Code Online (Sandbox Code Playgroud)

和这个

ints :: Int -> Chain
ints n = Link (n+1) ints
Run Code Online (Sandbox Code Playgroud)

我对这里到底发生了什么感到很困惑。这似乎是自身的无限递归,ints左侧只是ints无休止地重复整个过程。书上说

[...] 我们可以认为ints是一个很长的ints. 通过将 的第二个组件应用于第一个,我们从这个序列中的一个元素到下一个元素ints n

我不确定它是如何做到的。但是这会产生一个错误

> ints 0
* No instance for (Show Chain) arising from a use of `print'
:     * In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)

尝试加入deriving Show不会成功

data Chain = Link Int (Int …
Run Code Online (Sandbox Code Playgroud)

haskell types sml self-reference

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

如何从CL REPL获取函数/宏定义?

我在Common Lisp中有另一个涉及自引用的问题.我在Stack Exchange上发现了一个线程,它提出了编写最短程序的问题,该程序将打印程序源代码中不存在的所有可打印ASCII字符.这让我想到如何解决Common Lisp中的问题.我遇到了两个问题 - 一个可能是微不足道的,另一个更棘手:

  • 首先是编写CL脚本的情况,例如从#!/usr/bin/env sbcl --script.我认为通过*posix-argv*我可以访问所有命令行参数,包括被调用脚本的名称.我也寻找相当于Bash $0但却找不到.最终对我有用的是这个丑陋的Bash-ified SBCL脚本,它明确传递$0给SBCL并从那里继续:

    #!/bin/bash
    #|
    sbcl --script $0 $0
    exit
    |#
    (defun file-string (path)
      (with-open-file (stream path)
        (let ((data (make-string (file-length stream))))
          (read-sequence data stream)
          data)))
    
    (let* ((printable (mapcar #'code-char (loop for i from #x20 to #x7e collect i)))
           (absent (set-difference 
            printable 
            (coerce (file-string (cadr *posix-argv*)) 'list))))
      (print (coerce absent 'string)))
    
    Run Code Online (Sandbox Code Playgroud)

    关于这一点我的问题是:你能否想到任何方式这样做而不依赖于Bash提供相关论点?或者,更简单地说:是否有CL(特别是SBCL)相当于$0

  • 现在是我完全困惑的部分.在采用上面的脚本方法之前,我尝试以更加面向REPL的方式实现此目标.基于此线程中&whole说明符defmacro和注意事项,我试图从参数中获取宏的名称,并以某种方式"读入"其源代码.我完全不知道该怎么做.所以简而言之:给定宏的名称,我能以某种方式获得定义它的形式吗?我正在讨论通用解决方案,而不是解析REPL历史. …

lisp sbcl common-lisp self-reference

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