ChatGPT解决这个技术问题 Extra ChatGPT

编程中的“上下文”一词? [关闭]

关闭。这个问题需要更加集中。它目前不接受答案。想改进这个问题?更新问题,使其仅通过编辑此帖子专注于一个问题。 3年前关闭。社区在 9 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决 改进此问题

我已经编程了几个月了,一个经常使用的词是课堂上的“上下文”。像 ServletContext (Java)、Activity (Android)、Service (Java、Android)、NSManagedContext (Objective-C、iOS)。

通过查看字典,我看到这个词的意思是:情况、环境、情况等。但是,因为我不是以英语为母语的人,所以我不明白我应该直接把它翻译成什么。例如,如果我要编写一个名为 SomeClassContext 的类,或者一个具有上下文参数的方法,我将不明白何时应该将其命名为上下文,因为我不明白。

我一直在寻找有关 Stack Overflow 的上下文,但没有任何问题/答案能够帮助我。

如果有人可以为我提供解释,我会很高兴。

上下文是说:这个对象作用的区域。
上下文是对象或系统在某个时间点的状态

B
Brian Kelly

假设您去看牙医拔了一颗牙齿。

当接待员询问您的姓名时,这是他们开始约会所需的信息。在此示例中,您的姓名是上下文信息。因此,在看牙医的情况下,您需要提供您的姓名才能拔牙。

现在假设你走到银行。

在银行,您要求提取 100 美元。出纳员需要在给您钱之前确定您的身份,因此您可能需要向他们出示驾驶执照或刷您的 ATM 卡并输入您的 PIN 码。无论哪种方式,您提供的是上下文。出纳员使用此信息推动交易向前发展。然后他们可能会询问您要退出哪个帐户。当您回答“我的储蓄账户”时,这是更多的上下文。

您提供的上下文越多,对方帮助处理您的请求的知识就越多。有时上下文是可选的(例如在您的 Google 搜索中输入越来越多的词以获得更好的结果),有时它是必需的(例如在 ATM 上提供您的 PIN 码)。无论哪种方式,通常都是有助于完成工作的信息。

现在假设你带着 100 美元买了一张飞机票,在你的嘴愈合时飞往温暖的地方。

你到达了一个阳光明媚的目的地,但你的包没能成功。它在机场系统的某个地方丢失了。因此,您将您的“行李领取票”(上面有条形码的贴纸)带到“丢失行李处”。服务台后面的人首先要的是那张带有您的行李号的票。这是一些必需上下文的示例。

但随后行李员会要求您提供有关您的行李的更多信息,以便他们更容易找到它。他们问:“它是什么颜色?尺寸是多少?它有轮子吗?是硬的还是软的?虽然他们不一定需要这些信息,但如果你提供这些信息,它有助于缩小范围。它减少了问题区域。它使搜索更快。这是可选的上下文。

这是有趣的部分:对于许多软件和 API,所需的上下文通常最终作为方法签名中的实际参数,而可选上下文则放在其他地方,例如可以包含任何内容的灵活键值映射(并且可能为空) ) 或进入线程本地存储,如果需要可以访问它。

上面的示例来自现实生活,但您可以轻松地将它们映射到计算机科学领域。例如,HTTP 标头包含上下文信息。每个标头都与关于正在发出的请求的信息相关。或者,当您将全局事务 ID 作为 two-phase commit process 的一部分发送时,该事务 ID 就是上下文。它有助于事务经理协调工作,因为它是关于手头整体任务的信息。

希望有帮助。


@Brian:从您的帖子和此处给出的其他答案中,我想我可能会开始理解它。携带有关事件的状态信息的对象是“上下文”对象吗?那会是正确的吗?所以 RequestContext 对象将携带有关特定请求的信息,对吗?当另一个请求到来时,附加到 RequestContext-object 的信息将会改变。说上下文对象有点像 DTO(数据传输对象)是错误的吗?但是,上下文携带有关不同相关“事物”的信息,而 DTO 携带诸如人之类的对象的信息?谢谢
你已经搞定了,那是完全正确的。 RequestContext 确实会携带有关正在进行的请求的信息(例如,客户端的语言环境)。上下文类似于 DTO/VO,但通常不是强类型的。但是你的概念没问题。
@Brian:在谈论上下文菜单时,又想到了一个问题,我从这个答案中学到的上下文的含义在我的脑海中没有意义。据我所知,上下文是(简称)关于某事的进位状态。那么,以这种方式使用“上下文”一词意味着什么?
好问题。 “上下文菜单”中“上下文”的含义是,“您将在菜单上看到的内容取决于您单击的位置、单击时间以及应用程序中发生的其他情况”。这些信息(您单击的位置/时间/内容)代表上下文,并将被发送到 GUI 代码,以便它可以决定在菜单上提供哪些内容。
因此,该方法的参数是上下文。我错了吗?
T
Taylor

上下文可以看作是一个传递信息的桶。它通常用于传递不一定直接与方法调用相关的东西,但仍然可能是相关的。外行的描述方式可能是“您可能关心的东西”。

例如,如果您正在编写一个服务来更新数据库中的值,您可能会传入记录 ID 和新值。

如果您想要通用接口,您还可以定义要传递的上下文,以便服务可以执行任意业务逻辑。因此,您可以在上下文中包含用户身份验证、用户会话状态等,因为服务可能会根据这些值执行附加逻辑。


另一种有用的思考方式是“关于正在发生的事情的信息”。或者在学术上,它是“元信息”。这是一个非常学术的短语,但它是准确的。在这种情况下。
它基本上是某个时间点的状态,没有比这更复杂的了
R
Ram

这是 2015 年——可能是在这个话题开始之后的几年。

尽管如此,我发布这条消息是为了帮助像我这样努力理解“上下文”的人

我绝不声称在 Java 程序中使用了 Context - 所以完全取决于你用硬编码写出 Context 所以这里是:-

“概念上的上下文”与“告诉我更多”相同。当客户端向服务器发出请求时 - 为了执行请求,服务器会说“给我更多信息,以便我可以帮助你”。因此,与请求一起,客户端提供了一系列详细信息。服务器从捆绑包中挑选并选择服务请求所需的所有信息。这个包就是所谓的“上下文”

例如

病人去找医生说treat_me(“我头疼”)医生办公室给病人一张表格来填写。患者填写表格。医生使用该表格来执行“treat_me”请求。

这是请求现在的样子:

treat_me ( "i have a headache", filled_form_num_23321 ) 

以下是 filled_form_num_23321 的外观:

Q. 是什么导致了这种情况? A. 10 颗干净的苏格兰威士忌最后一夜 Q. 患者姓名? A. Joe Bigdrinker 问:年龄? 98

在此事务中 filled_form_num_23321 是“上下文”。

希望这有助于澄清“上下文”的概念。


M
Matt

我总是将上下文视为与我正在使用的对象或构造相关的特定状态。

例如,当您在视图中使用 drawRect 时(必须为视图完成所有绘图),您必须始终获取 currentGraphicsContext,您将在其中发出核心图形语句。此上下文包含视图边界、笔触颜色、绘制线条的笔触粗细、填充闭合路径的填充颜色等内容。此上下文(与大多数其他上下文一样)只是此时的当前状态。因此,在这种情况下,将图形上下文视为一组状态,例如

描边加厚为 1.5 像素 填充颜色为黑色 视图边界为 (155, 200) 描边颜色为红色

它基本上是当前时间点的状态......


l
lukin

举一个实际的例子。假设您有某个网页可以根据用户(已登录)和浏览器的语言来获取/呈现一些信息。获取信息的逻辑独立于用户和语言。您的页面将收到一个用户和一种语言……对于逻辑而言,无论是我还是您,还是英语或西班牙语,都无关紧要。

一些伪代码:

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

它并不难,但需要一些时间来理解这个概念


A
Apalala

上下文是指执行上下文,它是从代码中给定点可到达的符号,以及在特定执行中这些符号的值。

上下文是一个重要的概念,因为:

可执行单元(函数、过程、指令)可能会产生不同的结果或在不同的上下文中表现不同。上下文越大或越复杂,就越难以理解一段代码的作用(这就是避免使用全局变量的原因)。

您不必编写上下文类或传递上下文参数。任何传递给函数/方法的参数在调用时都会成为执行上下文的一部分。

即使您不会说英语,我也建议您阅读 Code Complete 的副本,以温和而全面地介绍 context模块化 等概念>耦合内聚等。


我看还有第二版。我也可以在那里找到它吗?
我在书店浏览了第二版,并决定坚持原版。我不记得为什么。
u
user6656519

您的情况下的上下文是您的应用程序运行的环境。

它提供了您的应用程序正常运行所需的信息/服务/能力。

高温高压


C
Community

年后所以可能有点晚了,但是,也许这个线程会对你有所帮助。它说明了“上下文”一词在编程中具有技术含义(不仅仅是简单的英语含义)。

What programming languages are context-free?

不确定您是否可以将其用作示例并从中提取一些信息。我也很想听到对技术编程术语“上下文”的语言不可知论的解释

编辑:或者它至少表明术语“上下文”可以应用于技术,编程上下文(没有双关语)。可能在该术语的不止一个具体应用中。


j
john

作者经常假设读者对“上下文”一词所使用的上下文有详细的了解。

如何在以下句子中定义上下文“? 运行时创建一个可以存储注入的可能值的上下文。可以修改此上下文,例如,应用程序和框架可以将元素添加到上下文中。

似乎作者使用上下文来表示某种容器,也许是一个堆,它包含某物的上下文。它已成为流行语,具有许多含义和令人困惑的事物。是上下文元素并存储在上下文中吗?为了减少使用上下文一词的上下文的混淆,可以说“运行时创建了一个容器来以元素的形式存储上下文”。更好的是,“运行时创建了一个容器来以元素的形式存储状态,这个带有状态的容器称为 CONTEXT。”