美好的一天.
我现在讨厌Haskell的一件事是用于处理字符串的数量.
首先我使用了原生的Haskell [Char]字符串,但是当我尝试开始使用hackage库时,完全失去了无休止的转换.每个包似乎都使用不同的字符串实现,有些采用自己手工制作的东西.
接下来我用Data.Text字符串和OverloadedStrings扩展名重写了我的代码,我选择了Text因为它有更广泛的功能集,但似乎很多项目更喜欢ByteString.
有人可以简短推理为什么要使用其中一个?
PS:顺便想怎么转换Text成ByteString?
无法匹配期望类型 Data.ByteString.Lazy.Internal.ByteString 对抗推断类型文本 预期类型:IO Data.ByteString.Lazy.Internal.ByteString推断类型:IO文本
我试过encodeUtf8了Data.Text.Encoding,但没有运气:
无法匹配期望类型 Data.ByteString.Lazy.Internal.ByteString 对抗推断类型Data.ByteString.Internal.ByteString
UPD:
谢谢你的回复,*Chunks的善良看起来像是要走的路,但我对结果感到有些震惊,我原来的功能看起来像这样:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
Run Code Online (Sandbox Code Playgroud)
现在成了:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS …Run Code Online (Sandbox Code Playgroud) 我正在将一个旧的html页面从jQuery迁移到Angular,它包含一些旧的学校表单<input type="submit">.当我用ng-app指令丰富我的页面时,旧表单停止工作(我的意思是当你按下submit按钮然后没有任何反应).
我搜索了这个问题,并扫描了Angular文档,但似乎没有人再提交表单了.
任何关于如何在没有太多按键的情况下重新使用这些表格的建议将不胜感激.
目前表单有以下标记:
<form name="form_upload" method="post" action="" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" name="send" value="Upload">
</form>
Run Code Online (Sandbox Code Playgroud)
我清除了所有jQuery代码并使用Angular重新开始.
UPD:
我想我现在找到了原因,它的action属性是空的,似乎空行动不受标准欢迎,但使用起来非常方便,允许你将表单提交到当前页面的URL,是否有Angular方式来做呢?
我需要sublist在页面的几个地方使用指令,它应该包含有时完整的fields列表,但有时会被过滤.这是我的天真方法:
HTML:
<div ng-controller="MainCtrl">
<sublist fields="fields" /> <!-- This one is OK -->
<sublist fields="fields | filter: 'Rumba'" /> <!-- This one raises error -->
</div>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
angular.module('myApp', [])
.directive('sublist', function () {
return {
restrict: 'E',
scope: { fields: '=' },
template: '<div ng-repeat="f in fields">{{f}}</div>'
};
})
.controller('MainCtrl', function($scope) {
$scope.fields = ['Samba', 'Rumba', 'Cha cha cha'];
});
Run Code Online (Sandbox Code Playgroud)
当我尝试使用过滤器时,我收到此错误:
Error: 10 $digest() iterations reached. Aborting!
Run Code Online (Sandbox Code Playgroud)
有这个问题的解决方案吗?
有没有一种简单的方法可以将regex匹配作为数组返回?
以下是我的尝试方式2.7.7:
val s = """6 1 2"""
val re = """(\d+)\s(\d+)\s(\d+)""".r
for (m <- re.findAllIn (s)) println (m) // prints "6 1 2"
re.findAllIn (s).toList.length // 3? No! It returns 1!
Run Code Online (Sandbox Code Playgroud)
但我接着尝试了:
s match {
case re (m1, m2, m3) => println (m1)
}
Run Code Online (Sandbox Code Playgroud)
这很好用!m1为6,m2为1等.
然后我发现了一些让我感到困惑的事情:
val mit = re.findAllIn (s)
println (mit.toString)
println (mit.length)
println (mit.toString)
Run Code Online (Sandbox Code Playgroud)
打印:
non-empty iterator
1
empty iterator
Run Code Online (Sandbox Code Playgroud)
"length"调用以某种方式修改迭代器的状态.这里发生了什么?
美好的一天,我为我的小服务设置了以下设置:
-module(mrtask_net).
-export([start/0, stop/0, listen/1]).
-define(SERVER, mrtask_net).
start() ->
Pid = spawn_link(fun() -> ?MODULE:listen(4488) end),
register(?SERVER, Pid),
Pid.
stop() ->
exit(?SERVER, ok).
....
Run Code Online (Sandbox Code Playgroud)
这是repl摘录:
(emacs@rover)83> mrtask_net:start().
<0.445.0>
(emacs@rover)84> mrtask_net:stop().
** exception error: bad argument
in function exit/2
called as exit(mrtask_net,ok)
in call from mrtask_net:stop/0
(emacs@rover)85>
Run Code Online (Sandbox Code Playgroud)
如您所见,停止进程会产生错误,但进程正在停止.这个错误意味着什么,以及如何使事情干净?
关于clojure中地图的第一个奇怪的事情是在以下片段中:
(apply map list '((1 a) (2 b) (3 c)))
Run Code Online (Sandbox Code Playgroud)
结果令我惊讶:
((1 2 3) (a b c))
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释它的工作原理
我正试图在clojure中重写以下片段,但这一切都很难看,也许有人会建议一个更优雅的解决方案?
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipFileRdrExp {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("C:\\MyZip.zip");
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze;
while((ze=zis.getNextEntry())!=null){
System.out.println(ze.getName());
zis.closeEntry();
}
zis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我对getNextEntry重复调用的丑陋尝试:
(ns app.core
(:import
(java.io FileInputStream FileNotFoundException IOException File)
(java.util.zip ZipInputStream ZipEntry)))
(defn- read-zip [zip-file]
(let [fis (FileInputStream. zip-file)
zis (ZipInputStream. fis)]
(loop [ze (.getNextEntry …Run Code Online (Sandbox Code Playgroud) 这是示例代码(http://jsfiddle.net/epsSZ/1/):
HTML:
<form enctype="multipart/form-data" action="/echo/html" method="post" name="fileinfo" accept-charset="windows-1251">
<label>Label:</label>
<input type="text" name="label" size="12" maxlength="32" value="får løbende" /><br />
<input type="submit" value="Send standart">
</form>
<button onclick="sendForm()">Send ajax!</button>
Run Code Online (Sandbox Code Playgroud)
JS:
window.sendForm = function() {
var oOutput = document.getElementById("output"),
oData = new FormData(document.forms.namedItem("fileinfo"));
var oReq = new XMLHttpRequest();
oReq.open("POST", "/echo/html", true);
oReq.send(oData);
}
Run Code Online (Sandbox Code Playgroud)
当我通过标准格式提交提交这种旧方式时,请求有效负载如下所示:
------WebKitFormBoundary2890GbzEKCmB08rz
Content-Disposition: form-data; name="label"
får løbende
Run Code Online (Sandbox Code Playgroud)
但是当我提交这种AJAX方式时,它看起来有点不同:
------WebKitFormBoundaryPO2mPRFKj3zsKVM5
Content-Disposition: form-data; name="label"
får løbende
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,在前一种情况下有一些字符被字符实体替换,但是在使用的情况下FormData有普通的字符串,这当然很好,因为它是utf-8,但是有没有可能使它表现得像标准表格提交?
javascript ajax form-data character-encoding xmlhttprequest-level2
我想在Haskell中做这样的事情,但编译器不让我.
有没有办法完成这项任务?
-- both modules export function named "hello"
-- and I want to run it in every module
import qualified MyMod as M1
import qualified MyAnotherMod as M2
runmodules = map (\m -> m.hello) [M1, M2]
Run Code Online (Sandbox Code Playgroud) 美好的一天,
我有一个gen_server进程,它定期执行一些长期运行的状态更新任务
handle_info:
handle_info(trigger, State) ->
NewState = some_long_running_task(),
erlang:send_after(?LOOP_TIME, self(), trigger),
{noreply, NewState}.
Run Code Online (Sandbox Code Playgroud)
但是当这样的任务运行时,整个服务器都没有响应,任何对它的调用都会导致整个服务器崩溃:
my_gen_server:status().
** exception exit: {timeout,{gen_server,call,[my_gen_server,status]}}
in function gen_server:call/2
Run Code Online (Sandbox Code Playgroud)
如何避免阻止gen_server?当一个人my_gen_server:status()随时打电话时,结果应该是这样的:
{ok, task_active}