我正在编写使用绑定的hspec
测试套件,如下所示:
it "should take the x component" $ do
(getX $ coord $ [1,0,2]) `shouldBe` 1
但是,对于更复杂的语句,单行代码不方便读取,所以我尝试在where
表达式中删除变量:
it "should take the x component" $ do
(getX c) `shouldBe` 1
where c = coord $ [1,0,2]
但这在Haskell中发现了非法声明。使用let
也不会成功。
it "should take the x component" $ do
let c = coord $ [1,0,2]
in (getX c) `shouldBe` 1
如何在let
绑定中为where
或do
分配辅助变量?探索文档,但无法找到一个好的例子。
答案 0 :(得分:4)
很难说为什么第一个失败而没有看到更多的背景。第二个失败,因为let
在do
块中的工作方式不同。要么缩进in
另外几个空格,要么删除关键字in
,然后将该行的其余部分与关键字let
对齐。
答案 1 :(得分:4)
.factory('socket', function($rootScope, $timeout, socketFactory, $q, $log) {
// create a promise instance
var socket = $q.defer();
// listen for the authenticated event emitted on the rootScope of
// the Angular app. Once the event is fired, create the socket and resolve
// the promise.
$rootScope.$on('authenticated', function() {
// resolve in another digest cycle
$timeout(function() {
var token = window.localStorage["socket_token"];
var token_query = 'token=' + token;
var newSocket = (function() {
return socketFactory({
ioSocket: io.connect('http://example.com:3000', {
query: token_query
})
});
})();
socket.resolve(newSocket);
});
});
return socket.promise
});
内的 let
语句不需要do
关键字。换句话说,试试这个:
in