标签: self-reference

如何使用 Arc 和 BufReader 编写自引用 Rust 结构?

我正在尝试为服务器编写以下代码:

use std::io::{BufReader, BufWriter};
use std::net::TcpStream;

struct User<'a> {
    stream: Arc<TcpStream>,
    reader: BufReader<&'a TcpStream>,
    writer: BufWriter<&'a TcpStream>,
}

fn accept_socket(users: &mut Vec<User>, stream: Arc<TcpStream>) {
    let stream_clone = stream.clone();
    let user = User {
        stream: stream_clone,
        reader: BufReader::new(stream_clone.as_ref()),
        writer: BufWriter::new(stream_clone.as_ref()),
    };
    
    users.push(user);
}
Run Code Online (Sandbox Code Playgroud)

该流位于 Arc 后面,因为它是跨线程共享的。BufReader 和 BufWriter 指向用户自己的 Arc,但编译器抱怨该引用的寿命stream_clone.as_ref()不够长,尽管它显然是这样的(它指向 Arc,只要用户还活着,它就不会被删除)。如何让编译器接受这段代码?

self-reference rust

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

最佳实践:网站上的自引用脚本

根据经验丰富的开发人员的建议,我总是将需要用户输入(表单处理,数据库管理等)的网页编码为自引用页面.对于PHP页面,我将表单的操作设置为预定义变量的'PHP_SELF'元素$_SERVER,并且根据我传递的参数,页面逻辑确定要执行的代码块.

我喜欢所有代码都包含在一个文件中,而不是传播到各种结果页面.我发现的一个问题是我的统计数据解析程序无法区分页面的第一个视图和后续视图(例如,表单已提交时).很久以前,当我使用CGI或CF创建页面时,我将用户引导到一个不同的结果页面,该页面非常巧妙地显示了实际使用该表单的次数.

Web开发中这些类型页面的最佳实践是什么?使用(或不使用)自引用页面还有其他更有说服力的理由吗?

self-reference

2
推荐指数
1
解决办法
1706
查看次数

核心数据:自我引用表

我的核心数据模型中有一个实体,其中包含对自身的引用.即一个页面可以有一个子页面集合.编译时我收到警告:

"Page.pages - to-many关系没有反转:这是一个高级设置(对象不能在特定关系的多个目的地中)"

现在我已经读过,核心数据需要一个反向关系来维护完整性,并希望提供这一点.我不介意我的数据模型被改变它是一个早期的开发阶段.处理这种情况的适当方法是什么?

替代文字

iphone core-data self-reference

2
推荐指数
1
解决办法
1871
查看次数

将自习引用传递给子类

在C#4.0中(如果可以的话,可以更早),父类如何将自身的引用传递给子类.例如:

class Book
{

    public string bookname = "a";
    public static List<Page> pages = new List<Page>();

    static void Main(string[] args)
    {
        Page pageone = new Page("one");
        pages.Add(new Page("one"));
    }
}
public class Page
{
    Book book;
    public Page(string pagetitle)
    {
        Console.WriteLine(pagetitle);
        Console.WriteLine("I'm from bookname :?");
    }
}
Run Code Online (Sandbox Code Playgroud)

如何让Page识别它所在的书?我试图在构造函数中传递Book类,但不知道如何.

c# class self-reference

2
推荐指数
1
解决办法
6858
查看次数

模块导入自己

我正在尝试从特定于应用程序的终端导入模块(在这种情况下是Maya,但最终是其他终端).我从git下载了一个项目,我有一个像这样的结构:

modulename
    submodule
        __init.py__
        subsubmodule
        ...
    submodule
    ...
    __init.py__
    modulename.py
Run Code Online (Sandbox Code Playgroud)

然后在我的执行shell中,我正在尝试导入模块以在shell上使用,所以我有:

import sys,os
modulepath = 'C:/path/to/module'
sys.path.append(modulepath)
import modulename
Run Code Online (Sandbox Code Playgroud)

如果导入的modulename.py为空,则一切正常.然而,该模块的前两行是试图导入自己的模块(我真的不知道为什么,因为这是别人的项目,但它似乎对结构很重要)

import sys,os
import modulename from modulename as mod
Run Code Online (Sandbox Code Playgroud)

这会得到错误:

# Error: ImportError: cannot import name modulename# 
Run Code Online (Sandbox Code Playgroud)

其他任何事情都无法进行.

最后,我想知道为什么一个模块无法导入自己,和/或如何解决这个问题?

我已经读过一个模块认为自己被命名为main以便相对导入不起作用,在这种情况下我会期望

import __main__ as mod
Run Code Online (Sandbox Code Playgroud)

以错误的方式工作,而不是

# Error: ImportError: Cannot re-init internal module __main__ #
Run Code Online (Sandbox Code Playgroud)

这是完全有道理的.

[问题是,如何从内部导入模块?]

python module importerror self-reference

2
推荐指数
1
解决办法
6633
查看次数

在SQLAlchemy(+ Flask)中创建自引用M2M关系

在尝试学习Flask时,我正在构建一个简单的Twitter克隆.这将包括用户跟随其他用户的能力.我试图通过SQLAlchemy建立一个关系数据库来允许这个.

我想我需要在用户上自我引用多对多关系.根据SQLAlchemy文档,我到达:

#imports omitted    

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///twitclone.db'
db = SQLAlchemy(app)

Base = declarative_base()

user_to_user = Table("user_to_user", Base.metadata,
    Column("follower_id", Integer, ForeignKey("user.id"), primary_key=True),
    Column("followed_id", Integer, ForeignKey("user.id"), primary_key=True)
)

class User(db.Model):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String, unique=False)
    handle = Column(String, unique=True)
    password = Column(String, unique=False)
    children = relationship("tweet")
    following = relationship("user",
                    secondary=user_to_user,
                    primaryjoin=id==user_to_user.c.follower_id,
                    secondaryjoin=id==user_to_user.c.followed_id,
                    backref="followed_by"
    )

#Tweet class goes here

db.create_all()

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

运行此代码会导致创建数据库时不会出现任何错误消息.然而,简单地省略了将用户连接到用户的整个部分(表).这是User表的定义:

CREATE TABLE user (
    id INTEGER …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask self-reference

2
推荐指数
1
解决办法
1301
查看次数

Crystal报告 - 使用公式中当前对象的值

我正在使用c#创建一个Crystal Report,我必须在320个不同的参数中复制一个简单的公式,但总是使用相同的条件,如下所示:

if ({Precios.AhorroE1}[1] = '-') then crGreen else ( crRed )
Run Code Online (Sandbox Code Playgroud)

每个对象都有一个不同的名称(在示例aboce中,Precios.AhorroE1但我必须为320个不同的对象制作相同的条件.

我一直试图找到一种方法来引用正在评估公式的对象,但我找不到它.我想知道是否有可能做类似的事情:

if ({currentobject}[1] = '-') then crGreen else ( crRed )
Run Code Online (Sandbox Code Playgroud)

currentobject评估公式的对象在哪里?

c# vb.net crystal-reports self-reference

2
推荐指数
1
解决办法
4619
查看次数

从派生类引用基类的更好的习惯用法?

假设我有一个

template <typename T>
class A : 
    class_with_long_name<T, and_many_other, template_arguments, oh_my_thats_long>,
    anotherclass_with_long_name<and_many_other, template_arguments_that, are_also_annoying, including_also, T> { ... }
Run Code Online (Sandbox Code Playgroud)

现在,A类的定义,和/或它的方法,我需要参考两个超类(例如,要在超成员访问,或者在它等定义的类型),但我想避免重复超的名字.目前,我正在做的是:

template<typename T>
class A : 
    class_with_long_name<T, and_many_other, template_arguments, oh_my_thats_long>,
    anotherclass_with_long_name<and_many_other, template_arguments_that, are_also_annoying, including_also, T> 
{
    using parent1 = class_with_long_name<T, and_many_other, template_arguments, oh_my_thats_long>;
    using parent2 = anotherclass_with_long_name<and_many_other, template_arguments_that, are_also_annoying, including_also, T>;
    ...
 }
Run Code Online (Sandbox Code Playgroud)

显然,这有效,并将重复次数减少到2; 但如果可能的话,我宁愿避免这种重复.有合理的方法吗?

笔记:

  • "合理",例如没有宏,除非有非常好的理由.

c++ inheritance idioms idiomatic self-reference

2
推荐指数
1
解决办法
97
查看次数

在C预处理器中为自己定义一些东西

我遇到了这些问题:

#define bool  bool
#define false false
#define true  true
Run Code Online (Sandbox Code Playgroud)

我不认为我需要说的不仅仅是"wtf?",而是要明确:为自己定义一些东西有什么意义?

这些行来自clang stdbool.h

c self-reference c-preprocessor

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

Python:如何在列表理解中引用自己?

lsit_a = [2, 4, 3, 6, 3, 8, 5]
Run Code Online (Sandbox Code Playgroud)

列表理解非常有用。

list_b = [a**2 for a in list_a]
Run Code Online (Sandbox Code Playgroud)

我想知道如何在python列表理解中编写自引用。

例如 -

list_c = [a**2 if i == 0 else a*2 + (itself[i-1]) for i, a in enumurate(list_a)]
Run Code Online (Sandbox Code Playgroud)

怎么写的一部分itself[i-1]

对不起,我的解释不好。

我想通过高速方式获得这份清单。

输入清单

list_a = [0,0,1,0,0,0,1,0,0,1,0]

输出清单

list_c = [0,0,1,0.9,0.8,0.7,1,0.9,0.8,1,0.9]

就像锯齿列表。

python list-comprehension self-reference

2
推荐指数
1
解决办法
2389
查看次数