问题标签 [inout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
159 浏览

verilog - 用魔杖使用 inouts

考虑下面的代码。

对不起,我知道这是很多代码,但要构建一个测试场景,我想不出比这更小的。现在的问题是在模拟上面的代码时,

变量的值如下 在m1中,

三态,I = 1,正如预期的那样。

. , IO = 0, 意外为 IO = I ?

. , O = 0 ;//= IO 符合预期

. , OE = 1 // 显然

平方米,

三态,I = 0,正如预期的那样。

. , IO = 0, 预期为 IO = I

. , O = 0 ;//= IO 符合预期

. , OE = 1 // 显然

现在我不明白 m1 中 IO 的值是 0 吗?是不是因为我将 wand 作为参数传递给 inout,这是否会使 inout 成为 wand 类型,如果是这样,它会引发以下问题,

指向我关于 stackoverflow 的另一个问题的链接

我先问了(链接中的问题),但有一些需要添加的澄清,所以我根据一个新问题添加了澄清部分。基本上我想知道 inout 如何表现得像 wand,如果是这样,我如何使 inout 表现得像 wand 而不使用不同的顶级模块来实例化 .

0 投票
1 回答
3076 浏览

swift - Swift 泛型与任何

我在苹果网站上阅读了 swift 文档。有一个函数 swapTwoValues,可以交换两个任意给定的值

现在我想编写类似的函数,但我不想使用 T 泛型类型,而是想使用 Any

调用我写的这个函数

我有两个问题。

1) 为什么编译器会为第二个函数给出此错误(不能将不可变值作为 inout 参数传递:从“Int”到“Any”的隐式转换需要临时)

2) Generic types 和 Any 有什么区别

0 投票
1 回答
1634 浏览

swift - Swift 闭包通过引用捕获数组

在 Swift 中,集合默认是按值传递的,我们可以inout让它在函数参数中通过引用传递,但是我们如何在闭包捕获变量中做到这一点?

结果将是 [1, 2, 3, 4]

如何修改闭包内的原始变量 ()?

更新:

实际上,我有一个解决方法来处理这种情况,方法是将数组放入一个对象中,这样我就可以通过引用将该对象传递给函数,我们可以在函数内部修改相同的数组实例。但我想看看有什么聪明的方法来存档

0 投票
0 回答
410 浏览

ios - 转义闭包只能通过值显式捕获 inout 参数 - 将 inout 参数分配给本地 var

希望将 inout 数组参数分配给本地 var 但出现错误

转义闭包只能通过值显式捕获 inout 参数

以下是代码

0 投票
0 回答
205 浏览

swift - 访问作为“inout”传递的“var”是未定义的行为?

参数的文档中inout

传入传出参数如下:

  1. 调用函数时,会复制参数的值。
  2. 在函数体中,副本被修改。
  3. 当函数返回时,副本的值被分配给原始参数。

仅从这个描述中,我会假设在作为inout参数传递的范围内对作为参数传递的变量进行修改inout是没有意义的,因为在调用返回后保证会覆盖原始变量。作为一个人为的例子:

原始变量x可以通过变异捕获访问,因此仍然可以分配给它。预期的打印输出是“7”,因为这是inoutX函数调用结束时的值。但是如果我在 Swift 4 REPL 中运行它,我实际上会得到“6”!

该文档阐明了这种行为:

作为优化,当参数是存储在内存中物理地址的值时,函数体内部和外部都使用相同的内存位置。

但接下来是一个非常明显不准确的陈述:

优化的行为称为引用调用;它满足了copy-in-copy-out模型的所有要求,同时消除了复制的开销。

显然,优化的行为不满足inout参数声称符合的按值调用结果约定。然后文档承认了这一点,但反过来解释了为什么不应该依赖引用调用行为:

使用由copy-in-copy-out给出的模型编写代码,而不依赖于引用调用优化,以便无论是否有优化它都能正确运行。

不要访问作为输入输出参数传递的值,即使原始参数在当前范围内可用。当函数返回时,您对原始文件的更改将被副本的值覆盖。不要依赖引用调用优化的实现来尝试防止更改被覆盖。

那么我可以收集的是,inout参数是按值调用的结果,除非它们是按引用调用的。而且,基于文档不希望您依赖引用调用语义的程度,我只能猜测优化不是在定义明确的情况下执行的。如果是这种情况,那么我只能得出结论,在它所在的范围内访问作为参数传递的变量是未定义的行为。inoutinout

这是一个相对不幸的结论,我对文档是多么不愿意做出它感到困惑。inout当(除了设置器或属性观察器)这些调用约定的语义不能以定义的方式观察时,为什么它会尝试将参数呈现为遵守特定的调用约定?令人困惑的是,我在这里怀疑自己的结论,所以问题来了:我的理解正确吗?

0 投票
1 回答
573 浏览

ios - 无法将“NSLayoutConstraint”类型的不可变值作为 inout 参数传递

我尝试重新分配一个referecend NSLayoutConstraint。

但在这里它给了我错误:

我不明白为什么它说不可变值,而约束被声明为变量,而不是常量。

0 投票
2 回答
14354 浏览

documentation - 这是一个输入或输入/输出参数吗?氧,C++

如果将指针传递给只读函数,则该指针是 IN 参数。

如果一个指针被传递给一个只读函数,但是这个函数复制了一个指针以便在模块相关函数中访问它以进行只读操作,这个指针仍然是 IN。

如果函数仍然使用指针作为只读,但其他与模块相关的函数使用指针进行写操作,那么指针是什么?一个 IN 参数,但没有 const?输入/输出参数?

我的意思的例子:

0 投票
2 回答
180 浏览

swift - 在实例函数中初始化实例变量

这就是页脚是:

我明白了:

无法将“页脚”类型的不可变值作为 inout 参数传递

如何在它的函数中传递 TestVC 实例的页脚并能够初始化它们?为什么页脚是不可变的(声明为 var)?

0 投票
1 回答
144 浏览

system-verilog - 使用 PLI 进行仿真期间输入输出端口的活动方向

我试图从我的基于 PLI 的 C 代码的模拟过程中找出一个 inout 端口是用作输入端口还是用作输出端口。怎么做到呢?

0 投票
1 回答
148 浏览

swift - 隐式展开的可选项真的是可选项吗?

在 Swift 4.0 中,以下代码无法编译:

现在我想这实际上str是一种类型String?,Swift 编译器似乎同意:

无法传递“字符串”类型的不可变值?作为 inout 参数

我可以通过将变量更改为类型String?或函数参数来解决此问题,(_ s: inout String!)但我不明白为什么必须这样做。Swift 似乎已经同意这var str : String!是“'String' 类型的?”——那为什么不让我在这里传递呢?

是否有另一个选项可以让我的变量隐式展开,但仍将其传递给修改可选的函数?

我试过someFunc(&(str?))了,这让事情变得更奇怪了——<strong>然后 Swift 抱怨道:

无法传递“字符串!”类型的不可变值 作为 inout 论点”。

所以str是 aString?但不能作为 a 传递String?str?而是 a String!?!

该代码实际上是:

所以也许 Swift 在它的错误消息中错误地说明了参数的类型,而不是传递的值……或者什么?