Yesod的内置i18n消息文件非常好,但我注意到两个问题:
谢谢你的任何建议!
conNameOf允许我显示给定数据的构造函数名称,假设该类型是Generic.
我想要的是类似的东西。对于给定的类型,我想获取构造函数名称的完整列表。例如:
data Nat = Z | S Nat
deriving (Generic)
-- constrNames (Proxy :: Proxy Nat) == ["Z", "S"]
Run Code Online (Sandbox Code Playgroud)
类似的东西constrNames存在吗?如果没有,我该怎么写?
在为模块实现hook_menu时,我试图将一些项目放入子菜单中.
到目前为止,我有类似的东西
$items['MyModule'] = array(
//...
'page callback' => 'system_admin_menu_block_page',
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module','system'),
);
$items['MyModule/MenuItem1'] = array(
//...
);
$items['MyModule/SubMenu'] = array(
//...
'page callback' => 'system_admin_menu_block_page',
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module','system'),
);
$items['MyModule/SubMenu/SubMenuItem1'] = array(
//...
);
Run Code Online (Sandbox Code Playgroud)
我希望它SubMenu显示为菜单的子MyModule菜单,并SubMenuItems显示在该子菜单下.这是Drupal API文档中描述的默认行为.
但是,所有项目都显示在MyModule菜单下.
我究竟做错了什么?
*编辑:一个错字(我已修复)导致SubMenu是一个单独的元素而不是一个子元素MyModule.不过,我仍然不明白为什么SubMenuItem1不渲染下SubMenu.
由于这里不应该枚举的原因,我发现将函数附加到窗口对象可能是有用的.但是,我发现了相当奇怪的行为.
<html><head><script>
function sideEffect() { console.log("Side effect happened. Wewt."); }
window.foo = function() {
sideEffect();
return true;
}
window.bar = function() {
sideEffect();
}
</script></head>
<body>
<a href="javascript:window.foo();">Replaces entire window with "true"</a>
<br />
<a href="javascript:window.bar();">Doesn't</a>
</body></html>
Run Code Online (Sandbox Code Playgroud)
为什么调用具有返回值的函数决定替换窗口的内容?这种情况发生在Firefox和Opera中,但不适用于IE9,Chrome或Safari(均在Win7上测试过).
所以问题是:是否有某种文档指定了这种行为?或者这是FF/Opera中的(已知)错误?
[编辑]有趣的是(根据答案和评论,因此很多)似乎滥用window对象是一个红鲱鱼在这里.
我是函数式编程的新手.我有一个基本问题.
我正在使用Hugs翻译,
我想在Haskell中编写一个函数; 我去了几个教程,但我没有得到它.
fact :: Int -> Int
fact n = if n == 0 then
1
else
n * fact (n-1)
Run Code Online (Sandbox Code Playgroud)
这给了我一个语法错误:-S
ERROR - Syntax error in input (unexpected `=')
Run Code Online (Sandbox Code Playgroud) haskell functional-programming syntax-error hugs read-eval-print-loop
sum1::[Int]->[Int]
sum1 [] =0
sum1 (x:xs) = [x|x<-xs,x `mod` 2 ==0]
Run Code Online (Sandbox Code Playgroud)
我需要返回在提供列表时可被2整除的数字,但上面的代码给出了这个编译错误:
Instance of Num [Int] required for definition of sum1
Run Code Online (Sandbox Code Playgroud)
还请解释一下(x:xs).它是' xs list 的X元素吗?'
如果我们想获得列表的第n个元素,我们如何得到它?
我想写一个如下属性:
(prop/for-all [x (gen/nat)
y (gen/nat)]
(= (g x y) (f x y)))
Run Code Online (Sandbox Code Playgroud)
但是,该物业仅在何时持有x > y.表达此属性的前提条件的正确方法是什么?(更好的是,我怎么能写出这个属性,这个属性y生成的自然数小于x?)
我有一个记录,包括一个:name.有没有办法告诉clojure.core/name如何:name从我的记录中提取出来?
例如,我有一个像['a','b','c','d','e']这样的列表.
我想做这样的事情:
首先用前两个元素做一些事情,f'a''b'
然后用f的返回值和列表中的下一个元素做同样的事情,结果= f'a''b ',让我们说像结果'c'.然后f得到(结果'c')'d',依此类推.
我该怎么做这样的事情?
我尝试了以下方法:
intType = typeOf (5::Int)
stringType = typeOf "s"
dynFunc :: Dynamic -> IO ()
dynFunc d =
case dynTypeRep d of
stringType -> polyFunc ((fromDyn d "") :: String)
intType -> polyFunc ((fromDyn d 0) :: Int)
_ -> error "Could not coerce dynamic value"
Run Code Online (Sandbox Code Playgroud)
但它警告重叠模式匹配并且不能正常工作.它始终是第一个模式而不是正确模式.
haskell ×6
clojure ×2
drupal ×1
dynamic ×1
fold ×1
function ×1
hugs ×1
javascript ×1
list ×1
menu ×1
module ×1
quickcheck ×1
recursion ×1
reflection ×1
return-value ×1
submenu ×1
syntax-error ×1
types ×1
window ×1
yesod ×1