我试图在Haxe3中为模板类型A编写一个通用比较函数(如c strcmp),假设此模板类型具有小于或等于运算符"<=".
我在Haxe3文档(http://haxe.org/manual/haxe3/features)中看到,如果您想假设模板类型具有新功能,您可以执行类似的工作:
@:generic static function foo<T:{function new(s:String):Void;}>(t:T) {
trace(Type.typeof(t)); // TClass([class String]) / TClass([class Template])
return new T("foo");
}
Run Code Online (Sandbox Code Playgroud)
所以,我用"le"函数尝试了相同的技术:
class Main {
@:generic static public function compare_<A:{function le(y:A):Bool;}>(x:A,y:A): Int {
if (x.le(y) && y.le(x)) return 0;
else if (x.le(y)) return -1;
else return 1;
}
static function main() {
var a:MyInt = new MyInt(1);
var b:MyInt = new MyInt(2);
trace(compare_(a,b));
}
}
class MyInt {
var data:Int;
public function new(i:Int) {this.data = i; }
public function …Run Code Online (Sandbox Code Playgroud) 有没有办法std::tie在c ++ 11/1y中编写一个与元组深深联系的变体.也就是说 ,分别tie((x,y),z) = make_tuple(make_tuple(1,2),3)绑定x, y, z到的一个1, 2 and 3,如下例所示.这会很好.谢谢.
#include <tuple>
#include <iostream>
using namespace std;
int main() {
int x, y ,z;
auto t = make_tuple(1,2);
std::tie(y,x)= t;
//std::tie((x,y),z) = make_tuple(t,3); //not working
cout << x << y << z << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种ls文件在没有给定扩展名的文件夹中?例如,如果我有一个文件夹.cpp和.h文件,我想看看是否有其他类型的文件(如配置文件和make文件),我该如何列出或查找?
谢谢,
我在想,如果有做非一元的错误处理哈斯克尔一种优雅的方式在语法上比使用普通简单的Maybe或Either.我想要处理的是非IO异常,例如在解析中,您自己生成异常以便稍后知道,例如,输入字符串中出现错误.
我问的原因是monad似乎对我有病毒感染.如果我想使用异常或异常机制来报告纯函数中的非严重错误,我总是可以使用either并对case结果进行分析.一旦我使用monad,它很麻烦/不容易提取monadic值的内容并将其提供给不使用monadic值的函数.
更深层次的原因是monad似乎对许多错误处理来说是一种过度杀伤.我学习使用monad的一个理由是monad允许我们穿过状态.但是在报告错误的情况下,我认为不需要线程状态(失败状态除外,我真的不知道使用monad是否必不可少).
(
编辑:正如我刚才所读到的,在monad中,每个动作都可以利用之前动作的结果.但是在报告错误时,通常不必知道先前操作的结果.因此,使用monads可能存在过度杀戮.在许多情况下,所需要的只是在不知道任何先前状态的情况下中止并报告现场故障.Applicative这对我来说似乎是一个限制较少的选择.
在解析的具体例子中,我们自己提出的行为/错误是否真的有效?如果没有,是否有比Applicative模型错误处理更弱的东西?
)
那么,是否存在比monad更弱/更一般的范例,可以用来模拟错误报告?我正在阅读Applicative并试图弄清楚它是否合适.只是想事先询问,以便我不会错过显而易见的事实.
关于这一点的一个相关问题是,是否存在一种机制,它只是简单地用每个基本类型包含,例如,一个Either String.我在这里问的原因是所有monad(或者可能是functor)都包含一个带有类型构造函数的基本类型.因此,如果您想要将非异常感知功能更改为异常感知,那么您可以从,例如,
f:: a -> a -- non-exception-aware
Run Code Online (Sandbox Code Playgroud)
至
f':: a -> m a -- exception-aware
Run Code Online (Sandbox Code Playgroud)
但是,这种改变打破了在非例外情况下可以起作用的功能组合.虽然你可以做到
f (f x)
Run Code Online (Sandbox Code Playgroud)
你不能这样做
f' (f' x)
Run Code Online (Sandbox Code Playgroud)
因为外壳.解决可能性问题的一种可能天真的方法是f改为:
f'' :: m a -> m a
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种优雅的方式在这条线上进行错误处理/报告工作?
谢谢.
- 编辑---
只是为了澄清这个问题,请从http://mvanier.livejournal.com/5103.html举个例子来制作一个像
g' i j k = i / k + j / k
Run Code Online (Sandbox Code Playgroud)
能够处理零除错误,当前的方法是逐项分解表达式,并在monadic动作中计算每个术语(有点像用汇编语言重写):
g' :: …Run Code Online (Sandbox Code Playgroud) 我正在测试使用GHC-7.8.2 在48小时内为自己编写一个Scheme的代码,这给我一个关于模糊性的错误,我不记得在以前版本的GHC中遇到过.摘录如下,问题行标记为:
data LispVal = Atom String
| List [LispVal]
| DottedList [LispVal] LispVal
| Number Integer
| String String
| Bool Bool
unpackNum :: LispVal -> Integer
unpackNum (Number n) = n
unpackNum (String n) = let parsed = reads n in --problem line
if null parsed
then 0
else fst $ parsed !! 0
unpackNum (List [n]) = unpackNum n
unpackNum _ = 0
Run Code Online (Sandbox Code Playgroud)
,错误说:
No instance for (Read a0) arising from a use of …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种reliable方法可以将Float xhaxe 转换String为指定的小数位数(例如3)。
一个直接的方法是首先转换x为字符串表示,然后修剪一切小数点之后的给定数目的字符之后.,如图所示在这里。但是,如果某个平台显示数字0.0111为,会发生什么1.11e-2?
我似乎也找不到“ printfhaxe”,这将允许我以正确的方式格式化数字。我想知道在haxe中执行此操作的最佳实践是什么。
我想在结果中获取字符串,因为在某些系统中,浮点数为您提供了例如0.19999.. from的信息2/10.0。仅截断小数点后的某些字符将是不准确的。
自从我前一段时间学习Haskell之后,我不断看到人员reverse列表,只是稍后反过来.使用分隔符拆分字符串的以下函数是一个示例:
splitOn ::Eq a => a -> [a] -> [[a]]
splitOn sep str = s_word str []
where s_word [] w = [reverse w]
s_word (c:cs) w = if (c == sep) then reverse w : s_word cs []
else s_word cs (c:w)
Run Code Online (Sandbox Code Playgroud)
我认为原因是"缺乏"正确/反向利润运算符,如:
rcons xs x = xs ++ [x]
Run Code Online (Sandbox Code Playgroud)
当然,rcons远远低于cons运算符(:).
但是上面的代码似乎通过使用来引入它自己的低效率reverse.我想知道它是否比以下变体更有效或效率更低:
splitOn' ::Eq a => a -> [a] -> [[a]]
splitOn' sep str = s_word str []
where …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写dbgassert类似于标准的宏assert。除了做什么以外assert,我还想dbgassert打印任意数量的其他参数(包含调试信息)。
下面列出了我到目前为止所拥有的,这是从SO答案改编而来的。但是我在代码中存在可变参数模板或宏的问题。如果我至少使用一个附加参数(“确定”行),则dbgassert可以按预期工作。但是,如果我不给出其他参数,则编译将失败(问题行)。
我在可变参数模板编程方面有一些经验(例如如何打印元组),但是我以前从未使用过可变参数宏。
能否请您解释编写这种可变参数宏组合的正确方法是什么?
顺便说一句,有人可以解释 #EX在宏中魔术吗?它显示了表达式并在gcc4.8.1上为我工作。它得到普遍支持吗?
谢谢,
码:
//corrected reserved identifier issue and assumption issues per comments
#include <cassert>
#include <iostream>
using namespace std;
template <typename ...Args>
void realdbgassert(const char *msg, const char *file, int line, Args ... args) {
cout << "Assertion failed! \nFile " << file << ", Line " << line << endl
<< " Expression: " << msg << endl;
std::abort();
}
#define …Run Code Online (Sandbox Code Playgroud) 我想知道是否有语法来引用带有减号的表名。例如,我导入了一个名为v-water-ausing的表shp2psql,然后执行了:
select * from v-water-a limit 1;
Run Code Online (Sandbox Code Playgroud)
我得到了一个错误:
ERROR: syntax error at or near "-"
LINE 1: select * from v-water-a limit 1;
Run Code Online (Sandbox Code Playgroud)
如果表名为 ,则相同的查询有效v_water_a。此外,该表v-water-a在 pgadmin3 中可见。我尝试用单引号引用名称,但没有用。
我应该以某种方式引用表名吗?或者它的名字是非法的?
这是在 Ubuntu 14.04 下的 PostgreSQL 9.3.5。
我有一个HTML5表单,如下所示,该表单使用Bootstrap3样式设置,并包含一个range输入和一个number输入。两个输入链接在一起,以便每当我更改range值时,number输入都会更新,反之亦然。
令我困扰的是,当我更改number输入值并按下Enter键时,整个网页将重新加载,这会使用JavaScript擦除加载到页面中的所有其他数据。
我的问题是,如何更改HTML /代码以禁用此重新加载行为?
谢谢。
<form class="form-horizontal">
<div class="form-group">
<div class="col-xs-6">
<input type="range" class="policy_slider" name="demandRange" min="0.1" max="10" value="1" oninput="this.form.demandInput.value=this.value"/>
</div>
<div class="col-xs-1">
<input type="number" name="demandInput" min="0.1" max="10" value="1" step="any" oninput="this.form.demandRange.value=this.value"/>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)