问题标签 [coerce]

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 投票
4 回答
3122 浏览

c# - 在 C# 中使用相同布局强制不同命名空间中的类型

我已经开始为 FedEx 的网络服务 API 编写接口。他们有 3 个我感兴趣的不同 API;费率、运送和跟踪。我正在使用 SvcUtil.exe 生成服务代理。

不同的服务端点均由 FedEx 在其自己的 WSDL 文件中指定。每个服务端点都有自己的 xml 命名空间(例如http://fedex.com/ws/rate/v5http://fedex.com/ws/ship/v5

服务端点确实使用了很多相同的类型,例如 Address、Measures、Weight、AuthenticationDetail、ClientDetail 等...

这就是问题所在,我可以同时向 SvcUtil.exe 提供所有 WSDL 文件,通常它会将任何相同的类型合并为一个共享类型,但是由于 FedEx 的每个服务都在它们自己的命名空间中,并且他们在该命名空间下的每个 WSDL 文件中重新声明这些类型,而我最终得到的是每个命名空间的地址、地址 1 和地址 2。

为了解决这个问题,我现在要做的是通过 svcutil 分别运行每个 WSDL,并将它们分别放在自己的 .NET 命名空间中(例如 FedEx.Rate、FedEx.Ship、FedEx.Track)。问题在于,现在我在每个命名空间(Fedex.Rate.Address、FedEx.Ship.Address)中都有一个不同的地址类型。

这使得很难概括服务之间使用的代码,例如 GetAuthenticationDetail() 工厂方法,因此我不必在使用不同服务的每个地方重复该代码。

C# 中有什么方法可以将 FedEx.Rate.Address 强制为 FedEx.Ship.Address?

0 投票
2 回答
10821 浏览

ruby - 在 Ruby 中, coerce() 是如何工作的?

据说当我们有课Point并且知道如何执行point * 3时,如下所示:

输出:

但是之后,

不明白:

Point不能强制转换为Fixnum( TypeError)

所以我们需要进一步定义一个实例方法coerce

输出:

所以说3 * point是一样的3.*(point)。也就是说,实例方法*接受一个参数point并在对象上调用3

现在,由于这个方法*不知道如何乘以一个点,所以

将被调用,并取回一个数组:

然后*再次应用到它上面,是这样吗?

现在,这被理解了,我们现在有了一个新Point对象,由类的实例方法*执行Point

问题是:

  1. 谁调用point.coerce(3)?是自动使用Ruby,还是通过捕获异常在*方法内部的一些代码?Fixnum或者是通过case声明当它不知道其中一种已知类型时,然后调用coerce

  2. 是否coerce总是需要返回一个包含 2 个元素的数组?可以没有数组吗?还是可以是 3 个元素的数组?

  3. 并且是规则,*然后将在元素 0 上调用原始运算符(或方法),并使用元素 1 的参数?(元素 0 和元素 1 是由 . 返回的数组中的两个元素coerce。)谁做的?它是由 Ruby 完成的还是由代码完成的Fixnum?如果它是通过代码完成的Fixnum,那么这是每个人在进行强制时都遵循的“约定”?

    那么它可能是*Fixnum这样的事情的代码:

    /li>
  4. Fixnum那么在实例方法中添加东西真的很难coerce吗?它已经有很多代码,我们不能只添加几行来增强它(但我们会想要吗?)

  5. coerce类中的Point非常通用,它可以与*or一起使用,+因为它们是可传递的。如果它不具有传递性,例如我们将 Point 减去 Fixnum 定义为:

    /li>
0 投票
1 回答
309 浏览

ruby - 在Ruby中,如何使用coerce()实现“20-point”和“point-20”?

在 Ruby 中,操作

将被实施。

但是下面的代码:

输出:

30 - p实际上将被p - 30强制功能视为。它可以工作吗?

我实际上很惊讶该-方法不会以这种方式强制参数:

也就是说,该函数返回 anegated version of a - b而不是仅仅返回a - b

0 投票
2 回答
360 浏览

ruby - 在 Ruby 中, coerce() 方法能否知道需要帮助强制转换的运算符是什么?

在 Ruby 中,似乎可以通过以下方式完成很多 coerce() 帮助

也就是说,当

需要,Fixnum3不知道如何处理添加一个 Rational,所以它通过调用rational.coerce(3) 向 Rational#coerce 寻求帮助,这个 coerce 实例方法将告诉调用者:

那么如果大多数运营商都可以使用这种方法,但在 (a - b) != (b - a) 的情况下却不能使用呢?coerce() 可以知道它是哪个运算符,并且只处理那些特殊情况,同时只使用简单的 [self, something] 来处理 (a op b) == (b op a) 的所有其他情况吗?(op 是运算符)。

0 投票
1 回答
1307 浏览

wpf - 内容更改前的 WPF DependencyProperty 事件

首先,我将解释问题的背景,因为您也许可以为我指明更好的方向。

我需要在对象上实现类似撤消重做的系统。该对象具有一系列依赖属性。有些是 double、int、string,但有些也是 DependencyObject 类型。我需要在更改之前保存属性的值,为此我添加了 CoerceValueCallback。

在 OnPropertyChanging 中,我在更改之前保存值。MyCustomizableBackground 是 DependencyObject,它也有一些依赖属性。

问题是在这种情况下,我有一个自定义对象作为属性,不会触发 OnPropertyChanging 方法,但是当我有一个通用类型时,它会被触发。

后来编辑:我意识到我的部分问题很模棱两可,我在这里问了一个单独的问题。对于问题的第一部分,Julien 为我指明了一个更好的方向。

0 投票
2 回答
1205 浏览

r - 使用 R 程序(例如)通过 write.table 将“.rtest”输出写入文件?

我正在使用 R 以特定的成对方式打开一些保存的 .csv 文件并执行统计测试(mantel.rtest在包“ade4”中找到)。.csv 文件按顺序命名为“fileAX”或“fileBY”,其中 X 和 Y 是整数。

我想将此测试的结果保存在一个文件中,但遇到了一些问题。

这是代码(请原谅“粘贴”的低效用法:

尝试执行此操作会导致以下错误消息:

我尝试使用“unlist”和“as.vector”等各种功能将“mantelout”转换为更友好的格式,但无济于事。有什么想法吗?

谢谢,哇

编辑:我应该注意,在 R 环境中这个测试的输出如下所示:

0 投票
5 回答
1283 浏览

python - Python:强制新式类

我希望这段代码“正常工作”:

当然,简单的方法是编写int(c)/3,但我想为配置迷你语言启用更简单的 perl-ish 语法。

值得注意的是,如果我使用“旧式”类(不从对象继承),我可以通过定义一个__coerce__方法非常简单地做到这一点,但是旧式类已被弃用,并将在 python3 中删除。

当我对新式类做同样的事情时,我得到这个错误:

我相信这是设计使然,但是我怎样才能__coerce__用新样式的类来模拟旧样式的行为呢?您可以在下面找到我当前的解决方案,但它非常丑陋且冗长。

这是相关文件:(我认为)

奖励积分:

0 投票
9 回答
88170 浏览

r - 将数据框转换为 xts

我正在尝试使用 as.xts() 方法将数据框转换为 xts 对象。这是我的输入数据框q:

结果是:

这是我能想到的最简单的例子,所以没有让它工作是非常令人沮丧的......感谢任何帮助!

0 投票
1 回答
326 浏览

python - 在派生类上调用 __coerce__() 方法会导致错误

我的试验如下所示,但没有奏效。

我在 python 命令行上输入:

结果:

当我使用__coerce__()没有类派生的方法时,结果 x+y等于radd called // 32。但是,对于派生类,会发生错误。

请给我一些帮助,农历新年快乐,提前谢谢你。

0 投票
1 回答
168 浏览

perl - 如何使用从标量强制转换为 arrayref 的 AoArrayrefs 属性?

我想设置一个属性,它是一个 arrayrefs 数组,将 nonarrayrefs 强制转换为 array refs。例如。

[ 0, [ 0, 0, 0 ], [1,2,3] ] 变成 [ [0], [ 0, 0, 0 ], [1,2,3] ]

此外,我还希望能够通过强制将元素推送或设置到 AoA。这是我的尝试: