小编Gre*_*ber的帖子

将Typescript添加到Coffeescript

我有一个构建链设置,将文件从coffeescript转换为typescript到javascript.我的问题是:将类型签名添加到coffeescript函数的最简单的侵入方法是什么?

coffeescript通过反引号支持原始javascript.但是,这意味着coffeescript不再理解反引号片段.

Coffeescript拒绝这些:

f = (`a:String`) -> a + 2
f = (a`:String`) -> a + 2
Run Code Online (Sandbox Code Playgroud)

我可以在函数上面写这个:

`var f = (String) => any`
Run Code Online (Sandbox Code Playgroud)

它编译,但不进行类型检查.我想这是因为Coffeescript已经宣布了这个变量.

我能弄清楚如何使其工作的唯一方法需要大量的样板

f = (a) ->
  `return (function(a:String){`
  a + 2;
  `})(a)`
Run Code Online (Sandbox Code Playgroud)

在新的Coffeescript Redux编译器中,反引号似乎无法正常工作:https: //github.com/michaelficarra/CoffeeScriptRedux/issues/71

我很清楚这是一个值得怀疑的努力,它现在只是一种体验.我目前使用contract.coffee,但我正在寻找实际类型.

coffeescript typescript

18
推荐指数
2
解决办法
7276
查看次数

capybara-webkit:自动保存RSpec测试失败的屏幕截图

如果使用带有Rspec的capybara-webkit测试失败,如何自动保存html和屏幕截图?如何在RSpec测试失败时执行回调.

加分:如何避免出现以下错误:

Capybara::Driver::Webkit::WebkitInvalidResponseError 
Run Code Online (Sandbox Code Playgroud)

执行此代码时:

require 'capybara/util/save_and_open_page'
path = "/#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}"
png = Capybara.save_and_open_page_path + "#{path}.png"
page.driver.render Rails.root.join(png)
Run Code Online (Sandbox Code Playgroud)

ruby testing rspec capybara

10
推荐指数
2
解决办法
1万
查看次数

在Windows Phone 7上快速全文搜索

如何在Windows Phone 7上进行非常快速的全文搜索?

我知道C库可以做到这一点 - 有什么方法可以为此接口到C库?

是否有Windows Phone 7的数据库提供全文搜索功能?除了答案中提到的数据库之外,我还遇到了RavenDB和FileDB,它们没有全文搜索.

是否有用于全文搜索的.NET库选项?我遇到了Lucene项目.NET端口,该端口必须移植到使用隔离存储.有一个使用Azure的端口,但这不是我想要的.

windows-phone-7

7
推荐指数
1
解决办法
1257
查看次数

提升函数的实例?

我需要将一个函数放入Template Haskell代码中.我使用的是表达式语法:

[|f|]
某些功能似乎自动运行.但是,对于这个特定的一个,我得到以下错误消息:

   No instance for (Lift (String -> [Content]))

我不知道如何为一个函数创建一个提升实例,似乎无法找到任何有用的信息.任何人都可以向我指出一个资源或者让我知道一般情况下这是如何实现的?与此同时,我将看看我是否可以削减我的具体例子.

haskell

6
推荐指数
1
解决办法
919
查看次数

如何使线程出现紧急情况以立即终止主线程?

在Rust中,紧急情况会终止当前线程,但不会发送回主线程。我们被告知的解决方案是使用join。但是,这会阻塞当前正在执行的线程。因此,如果我的主线程产生了2个线程,那么我将无法同时加入这两个线程并立即感到恐慌。

let jh1 = thread::spawn(|| { println!("thread 1"); sleep(1000000); };
let jh2 = thread::spawn(|| { panic!("thread 2") };
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果我在线程1上然后在线程2上加入,我将在等待1之前从任一线程收到恐慌

尽管在某些情况下我希望当前的行为,但我的目标是默认使用Go的行为,在该行为中我可以生成线程并使它在该线程上处于紧急状态,然后立即结束主线程。(Go规范还记录了一个protect功能,因此很容易在Go中实现Rust行为)。

rust

5
推荐指数
3
解决办法
1839
查看次数

使用StateT与ReaderT IORef进行异常处理

通过坚持而IORef不是尝试使用State Monad 来维持状态似乎要容易得多.下面我们有2个可供选择的State Monads.一个使用StateT,另一个使用ReaderT IORef.该ReaderT IORef可以轻松地运行在一个已知状态的最终处理.

{-# LANGUAGE GeneralizedNewtypeDeriving, ScopedTypeVariables #-}
import Control.Monad.State (MonadState, execStateT, modify, StateT)
import Control.Applicative (Applicative)
import Control.Monad (void)
import Control.Monad.IO.Class ( MonadIO, liftIO )
import Data.IORef
import Control.Exception.Base
import Control.Monad.Reader (MonadReader, runReaderT, ask, ReaderT)

type StateRef = IORef Int
newtype ReadIORef a = ReadIORef { unStIORef :: ReaderT StateRef IO a } deriving (Functor, Applicative, Monad, MonadIO, MonadReader StateRef)
newtype St a        = StM       { unSt      :: …
Run Code Online (Sandbox Code Playgroud)

monads haskell ioref

2
推荐指数
1
解决办法
470
查看次数

直接从Rust中的读者那里写

如何将数据从读取器流传输到Rust中的写入?

我的最终目标实际上是以流方式写出一些压缩数据。似乎我缺少的是一个对读取器中的数据进行迭代并将其写出到文件中的函数。

使用read_to_string等可以轻松完成此任务。但是我的要求是流传输数据以降低内存使用量。我还没有找到一种简单的方法来完成此任务,该方法不会分配大量的缓冲区。

use std::io;
use std::io::prelude::*;
use std::io::{BufReader};
use std::fs::File;
use flate2::read::{GzEncoder};
use flate2::{Compression};

pub fn gzipped<R: Read>(file: String, stream: R) -> io::Result<()> {
    let file = File::create(file)?;
    let gz = BufReader::new(GzEncoder::new(stream, Compression::Default));
    read_write(gz, file)
}

pub fn read_write<R: BufRead, W: Write>(mut r: R, mut w: W) -> io::Result<()> {
  // ?
}
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
384
查看次数

StateT newtype:从mtl切换到变换器

使用mtl,派生MonadState似乎可以使状态操作正常解除:


:set -XGeneralizedNewtypeDeriving
import Control.Applicative (Applicative)
import Control.Monad.Trans ( MonadIO, liftIO )
import Control.Monad.State (MonadState, evalStateT, modify, StateT, gets)

data State = State { int:: Int }
newtype St a = St { unSt :: StateT State IO a } deriving (Functor, Applicative, Monad, MonadIO, MonadState State)

let testLift = gets int >> return () :: St ()
Run Code Online (Sandbox Code Playgroud)

对于变形金刚,没有MonadState


:set -XGeneralizedNewtypeDeriving
import Control.Monad.Trans.State.Strict (runStateT, evalStateT, modify, StateT, gets)
import Control.Monad.IO.Class ( MonadIO, liftIO )
import Control.Applicative (Applicative)


data State = State …
Run Code Online (Sandbox Code Playgroud)

haskell monad-transformers

0
推荐指数
1
解决办法
495
查看次数