所以,我正在将文件数据提供给需要a的API,Reader我想要一种报告进度的方法.
看起来应该直截了当地编写一个FilterInputStream包装的实现,FileInputStream跟踪读取的字节数与总文件大小,并触发一些事件(或调用某些update()方法)来报告小数进度.
(或者,它可以报告绝对字节读取,而其他人可以进行数学计算 - 在其他流式传输情况下可能更常用.)
我知道我以前见过这个,我甚至可能以前做过,但我找不到代码,而且我很懒.有没有人得到它?或者有人可以提出更好的方法吗?
一年(有点)之后......
我在下面根据Adamski的答案实施了一个解决方案,并且它有效,但经过几个月的使用后我不推荐它.当您有大量更新时,解雇/处理不必要的进度事件会产生巨大的成本.基本的计数机制很好,但是对于那些关心进展调查的人来说要好得多,而不是把它推到他们身上.
(如果你知道总的大小,你可以尝试每隔1%的变化或者其他任何事情来发射一个事件,但这不值得麻烦.通常,你没有.)
我on_spray-can_1.1按照Spray的" 入门 "页面上的建议克隆了Spray模板项目(分支),并使用sbt-idea生成相应的IDEA项目.它建立得很好,但是当我打开我的build.sbt文件时,最后一行让IDEA不高兴:
seq(Revolver.settings: _*)
Run Code Online (Sandbox Code Playgroud)
它不承认Revolver,并建议进口spray.revolver.RevolverPlugin.Revolver,这似乎是合理的.但是,当我这样做时,它仍然抱怨"表达式类型(Def.SettingsDefinition)必须符合SBT文件中的设置[_]".
显然,这不是一个真正的问题,或者IDEA的(外部)make会失败,和/或SBT会从命令行中抱怨.但为什么IDEA认为这是一个问题?最近版本的SBT有什么变化吗?
当我看到SBT 0.13.0源代码时,我注意到seq它已被弃用; 它说"在build.sbt文件中,可以删除此调用." 但是,如果我这样做,Revolver会停止工作("不是有效命令:重新启动").
FWIW,我在Scint 2.10.3上使用SBT 0.13.0,在Mint 14上使用IDEA 12.1.6.
在Scala中,+ (k -> v) 运算符on immutable.Map返回包含immutable.Map原始内容的新内容以及新的键/值对.同样,在C#中,ImmutableDictionary.add(k, v)返回一个新的,更新的ImmutableDictionary.
然而,在Swift中,Dictionary似乎只有变异updateValue(v, forKey: k)函数和变异[k:v]运算符.
我想也许我可以玩一些技巧flatten(),但没有运气:
let updated = [original, [newKey: newValue]].flatten()
Run Code Online (Sandbox Code Playgroud)
抓住我
Cannot convert value of type '() -> FlattenCollection<[[String : AnyObject]]>'
to specified type '[String : AnyObject]'
Run Code Online (Sandbox Code Playgroud)
如何Dictionary从现有内容创建一个新的,修改过的不可变的?
更新:根据这个答案的说明,Swift字典是值类型,这个答案的可变版本,我想出了以下扩展运算符,但我对此并不感兴趣 - 似乎必须有一个更清洁的开箱即用的替代方案.
func + <K, V>(left: [K:V], right: [K:V]) -> [K:V] {
var union = left
for (k, v) in right …Run Code Online (Sandbox Code Playgroud) 我刚刚进入红宝石世界,我可以伸出援助之手.
假设b是nil.
我想要返回以下代码nil而不是"NoMethodError:undefined method"
a.b.c("d").e
Run Code Online (Sandbox Code Playgroud)
我尝试的第一件事是重载NilClass的missing_method只是返回一个零.这是我想要的行为,除了我不想成为这种侵扰.
如果我能做到这样的话,我会喜欢它
SafeNils.a.b.c("d").e
Run Code Online (Sandbox Code Playgroud)
所以它就像是一种干净的方式来本地重载NilClass的行为.
我很想听到一些想法或很多资源来挖掘这个.只要它相当干净,我也对其他方法持开放态度.
非常感谢你.
我想创建一个否定的字符类来匹配像[方括号标记]这样的方括号标记.问题是,]字符结束了角色类!
我试过了
\[[^\]]+]
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时出现语法错误.(这是在查找和替换正则表达式引擎,它与标准的.NET引擎fyi略有不同).
我正在实现一个不可变字典的特例,为了方便实现IEnumerable<KeyValuePair<Foo, Bar>>.通常修改字典的操作应该返回一个新实例.
到现在为止还挺好.但是当我尝试为类编写一个流畅的单元测试时,我发现我尝试过的两个流畅的断言库(Should和Fluent Assertions)都不支持对NotBeSameAs()实现的对象的操作IEnumerable- 除非你第一次执行他们来Object.
当我第一次碰到这个时,我认为它只是框架中的一个洞,但当我看到Fluent Assertions有同样的洞时,它让我觉得(因为我是C#的相对新人)我可能会遗漏一些关于C#集合的概念 - 当我提交问题时,应该隐含的作者.
显然还有其他方法来测试这个 - 投射Object和使用NotBeSameAs(),只是使用Object.ReferenceEquals,无论如何 - 但如果有充分的理由不这样做,我想知道那是什么.
我正在尝试在Swift中创建一个可重用的测试工具,其想法是子类将扩展测试工具以提供测试中的实例,并且可以添加他们自己的子类特定的测试方法,如下所示:
class FooTestHarness: XCTestCase {
let instance: Foo
init(instance: Foo) {
self.instance = instance
}
func testFooBehavior() {
XCTAssert(instance.doesFoo())
}
}
class FooPrime: Foo {
func doesFooPrime(): Bool { /* ... */ }
}
class FooPrimeTests: XCTestCase {
init() {
super.init(FooPrime())
}
func myInstance(): FooPrime {
return instance as FooPrime
}
func testFooPrimeBehavior() {
XCTAssert(myInstance().doesFooPrime())
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当XCode的testrunner尝试运行时FooPrimeTests,它不会调用no-arg init(),它会调用init(invocation: NSInvocation!)(并且因为没有调用而失败).我试图覆盖这个FooTestHarness:
init(invocation: NSInvocation!, instance: Foo) {
self.instance = instance
super.init(invocation)
}
Run Code Online (Sandbox Code Playgroud)
并在FooPrimeTests: …
我正在努力的rails应用程序上遇到这个问题.我正在开发一个功能分支,并希望从最新的主人那里重新定义.我运行了以下命令:
$ git checkout master
$ git pull --rebase
Run Code Online (Sandbox Code Playgroud)
如果我尝试检出我的功能分支,我会收到以下错误:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Gemfile.lock
Run Code Online (Sandbox Code Playgroud)
我尝试了以下命令将Gemfile.lock解析回aster,但没有一个成功:
$ git checkout -- Gemfile.lock
$ git stash
$ git reset HEAD --hard
Run Code Online (Sandbox Code Playgroud)
每次我运行一个新的git命令时,我都会回到Gemfile.lock,其中的更改没有为commit提交.
以下是我正在使用的以下版本的库:
$ git --version => 2.3.3
$ bundler --version => 1.7.9
Run Code Online (Sandbox Code Playgroud) 我正在尝试为自由职业者选择单选按钮,代码如下(当我们在浏览器上检查元素时)
<label for="registration_payer_type_business"><input checked="checked" id="registration_payer_type_business" name="registration[payer_type]" type="radio" value="business">
Company
</label>
<label for="registration_payer_type_freelancer"><input id="registration_payer_type_freelancer" name="registration[payer_type]" type="radio" value="freelancer">
Freelancer
</label>
Run Code Online (Sandbox Code Playgroud)
我试过了
page.choose("registration_payer_type_freelancer")
Run Code Online (Sandbox Code Playgroud)
这不会给出任何错误,但是当在水豚中保存和打开页面时,仍然没有选择对抗自由职业者的广播框.如果人们可以使用xpath给出示例并选择,我将不胜感激.
与此jar命令等效的Java是什么:
C:\>jar cvf myjar.jar directory
Run Code Online (Sandbox Code Playgroud)
我想以编程方式创建这个jar文件,因为我不能确定该jar命令将位于我可以运行外部进程的系统路径上.
编辑:我想要的只是归档(和压缩)一个目录.不必遵循任何java标准.即:标准拉链很好.
java ×2
ruby ×2
swift ×2
bundler ×1
c# ×1
capybara ×1
collections ×1
equality ×1
gemfile.lock ×1
git ×1
immutability ×1
inputstream ×1
java-io ×1
nsinvocation ×1
null ×1
regex ×1
rspec ×1
rspec-rails ×1
sbt ×1
spray ×1
zip ×1