我使用Scala隐式类来扩展我经常使用的对象.作为一个例子,我有一个类似于Spark上定义的方法DataFrame:
implicit class DataFrameExtensions(df: DataFrame) {
def deduplicate: Boolean =
df.groupBy(df.columns.map(col): _*).count
}
Run Code Online (Sandbox Code Playgroud)
但是如果类已经定义了相同的方法,则不会调用隐式defs.如果我以后升级到定义DataFrame#deduplicate方法的新版Spark,会发生什么?客户端代码将静默切换到新的实现,这可能会导致细微的错误(或明显的错误,这些问题较少).
使用反射,如果在我的隐式定义它之前已经定义,我可以抛出运行时错误.从理论上讲,如果我的隐式方法与现有方法冲突,我可以检测它并重命名我的隐式版本.但是,一旦我升级Spark,运行应用程序并检测问题,使用IDE重命名旧方法为时已晚,因为现在任何引用都引用了本机Spark版本.我将不得不恢复我的Spark版本,通过IDE重命名该方法,然后再次升级.不是世界末日,而是一个伟大的工作流程.DataFramededuplicatedf.deduplicate
有没有更好的方法来处理这种情况?如何安全地使用"皮条客我的图书馆"模式?
我正在尝试构建一个@dataclass定义架构但实际上并未使用给定成员实例化的模型。(基本上,我@dataclass为了其他目的劫持了方便的语法)。这几乎就是我想要的:
@dataclass(frozen=True, init=False)
class Tricky:
thing1: int
thing2: str
def __init__(self, thing3):
self.thing3 = thing3
Run Code Online (Sandbox Code Playgroud)
但是我FrozenInstanceError在__init__方法中得到了一个:
dataclasses.FrozenInstanceError: cannot assign to field 'thing3'
Run Code Online (Sandbox Code Playgroud)
我需要frozen=True(为了哈希)。有什么方法可以在__init__冻结上设置自定义属性@dataclass吗?
我的 html 表单有多个具有相同name属性的复选框:
<form id='cheese-selector'>
<input type="checkbox" name="cheese" id="limburger" value="Limburger">Limburger</input>
<input type="checkbox" name="cheese" id="camembert" value="Camembert">Camembert</input>
<input type="checkbox" name="cheese" id="roquefort" value="Roquefort">Roquefort</input>
<input type="submit" id="pick-cheese">Pick My Cheese!</input>
</form>
Run Code Online (Sandbox Code Playgroud)
我是通过ajax提交的。当我创建一个FormData对象时,即使我检查了多个复选框,也仅包含第一个选定的复选框:
$('#limburger').click()
$('#camembert').click()
console.log(FormData(this).get('cheese'))
// 'Limburger'
Run Code Online (Sandbox Code Playgroud)
如何将FormData所有检查的值编码为数组?
我用ag用ctrlp,如建议在这里:
if executable('ag')
set grepprg=ag\ --nogroup\ --nocolor
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
let g:ctrlp_use_caching = 0
else
let g:ctrlp_custom_ignore = '\.git$\|\.hg$\|\.svn$'
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others']
endif
Run Code Online (Sandbox Code Playgroud)
如果我从包含文件夹的项目文件夹中运行vim,这非常有用.git.但是,每当我从一个不是git项目根目录的目录运行Vim时,我得到一个空文件列表(没有结果).为了澄清,使用以下文件夹层次结构:
Proj1/ # ctrlp works; finds foo.js and bar.js (unless they are .gitignored)
.git/
bin/
foo.js
bar.js
Proj2/ # ctrlp doesn't work; has empty file list
bin/
foo.py
bar.py
Run Code Online (Sandbox Code Playgroud)
当我从同一目录中的命令行运行它时,实际的ag命令ag …
我需要一个Spark数据框的有用的字符串表示形式。我得到的df.show那个很棒-但是我不能以字符串形式获得该输出,因为showStringby调用的内部方法show是私有的。有什么方法可以得到相似的输出,而无需编写重复相同功能的方法?
我的 python 应用程序的文件夹结构如下:
my_repo/
src/
main.py
util/ <-- util is a git submodule
src/
torgle.py
test/
test_torgle.py
test/
test_main.py
Run Code Online (Sandbox Code Playgroud)
在内部main.py,我可以util像这样在子模块中导入内容:
from util.src.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)
但这src/只是在我的 git 子模块存储库中组织事物的一种方法,并且不应该真正成为主存储库中包名称的逻辑部分。有什么方法可以跳过src模块导入的部分吗?我宁愿这样做:
from util.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)
也就是说,我可以util/src为 Pythonutil包设置别名文件夹吗?
(请注意,在我的实际情况中,我有更深层的嵌套包 ( util.x.y.z.torgle),因此from util import torgle; torgle.Torgler(...)无法很好地扩展。我对 特别感兴趣from util.torgle import Torgler。)
我有BarService多个相关的重载update方法,如下所示:
BarService#update(Bar bar);
BarService#update(Bar bar, boolean checkX);
BarService#update(Bar bar, boolean checkX, boolean checkY);
Run Code Online (Sandbox Code Playgroud)
我想确保在特定测试中没有调用它们。目前,我正在这样做:
@Test
public test doFoo_shouldNotUpdateBar() {
setUpTest();
doFoo();
verify(barService, never()).update(any(Bar.class)));
verify(barService, never()).update(any(Bar.class), anyBoolean()));
verify(barService, never()).update(any(Bar.class), anyBoolean(), anyBoolean()));
...
}
Run Code Online (Sandbox Code Playgroud)
verify我可以通过将所有调用移至辅助方法来检查所有重载版本来清理此问题:
@Test
public test doFoo_shouldNotUpdateBar() {
setUpTest();
doFoo();
verifyBarServiceNeverUpdates(any(Bar.class));
}
Run Code Online (Sandbox Code Playgroud)
但是有没有办法让 Mockito 做我想做的事情呢?基本上,检查重载方法是否被调用而不考虑其参数?
我正在以FlatSpec编程方式运行ScalaTest()套件,如下所示:
new MyAwesomeSpec().execute()
Run Code Online (Sandbox Code Playgroud)
有什么办法可以确定所有测试是否通过?Suite#execute()返回Unit此处,因此无济于事。理想情况下,我想运行整个套件,然后获得一个返回值,指示是否有任何测试失败;另一种选择是在任何失败的测试上立即失败/返回。
我可能可以通过编写一个FlatSpec重写Scalatest Suite#execute()方法以返回值的新子类来实现此目的,但是有没有更好的方法来执行我想要的操作?
我正在编写一个自定义 Jest 匹配器来以某种任意方式比较对象:
expect.extend({
toTorgle(received, expected) {
...
return {
pass: false,
message: () => "expect(received).toTorgle(expected):" + ???
}
}
})
Run Code Online (Sandbox Code Playgroud)
如何打印两个对象之间的良好对象差异,就像我使用(内置匹配器)获得的对象一样expect(received).toEqual(expected)?
我有一个简单的两行布局。顶行应确定宽度(基于其内容,而不是 css 值),底行中的两个元素应扩展以匹配该宽度:
---------------------------------
| row one is exactly this wide |
---------------------------------
| [...thing1...] [...thing2...] |
---------------------------------
Run Code Online (Sandbox Code Playgroud)
<div.parent style='display: flex; flex-direction: column'>
<div.row1>row 1 is exactly this wide</div>
<div.row2 style='flex: 1; display: flex'>
<span style='flex: 1'>thing1</span>
<span style='flex: 1'>thing2</span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
问题是thing1andthing2扩展到祖父母的宽度,而不是row1的:
----------------------------------------------------------------------
| row one is exactly this wide |
----------------------------------------------------------------------
| [..........thing1.............] [............thing2..............] |
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
如何将parentdiv 的宽度限制为 的宽度row1?或者说,如何实现这样的布局?