正如Nikita Volkov在他的问题中提到的Data.Text vs String我也想知道为什么我必须处理不同的String实现type String = [Char]
和Data.Text
haskell.在我的代码中,我经常使用pack
和unpack
函数.
我的问题:有没有办法在两种字符串类型之间进行自动转换,这样我就可以避免写入pack
而且unpack
经常这样?
在其他编程语言(如Python或JavaScript)中,例如,如果需要,可以在整数和浮点数之间进行自动转换.我可以在haskell中达到类似的效果吗?我知道,提到的语言是弱类型的,但我听说C++有类似的功能.
注意:我已经知道语言扩展{-# LANGUAGE OverloadedStrings #-}
.但据我所知,这种语言扩展只适用于定义为的字符串"..."
.我希望自动转换字符串,这是我从其他函数获得的,或者我在函数定义中作为参数.
扩展问题: Haskell.Text或Bytestring也涵盖了Data.Text
和之间的区别Data.ByteString
.有没有办法在三个字符串之间进行自动转换String
,Data.Text
并且Data.ByteString
?
我正在编写一个用于制作音频和视频播客的python脚本.有一堆录制的媒体文件(音频和视频)和包含元信息的文本文件.
现在我想编写一个函数,它将元数据文本文件中的信息添加到所有媒体文件(原始文件和转换文件).因为我要处理很多不同的文件格式(wav
,flac
,mp3
,mp4
,ogg
,ogv
...),这将是巨大的,有一个工具,它的元数据添加到任意格式.
我的问题:
如何在ffmpeg/avconv
不更改文件的音频或视频且不创建新文件的情况下更改文件的元数据?是否有另一个命令行/ python工具可以帮我完成这项工作?
到目前为止我尝试了什么:
我认为ffmpeg/avconv
可以成为一种工具,因为它可以处理几乎所有的媒体格式.我希望,如果我设置-i input_file
和output_file
相同的文件,ffmpeg/avconv
将足够聪明,保持文件不变.然后我可以设置-metadata key=value
,只是元数据将被更改.
但我注意到,如果我键入avconv -i test.mp3 -metadata title='Test title' test.mp3
音频test.mp3
将以另一个比特率重新转换.
所以我想用来-c copy
复制所有的视频和音频信息.不幸的是,这也不起作用:
:~$ du -h test.wav # test.wav is 303 MB big
303M test.wav
:~$ avconv -i test.wav -c copy -metadata title='Test title' test.wav
avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the
Libav developers
built …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来设置范围require_once()
到全局范围,何时require_once()
在函数内部使用.类似下面的代码应该工作:
文件`foo.php':
<?php
$foo = 42;
Run Code Online (Sandbox Code Playgroud)
实际代码:
<?php
function includeFooFile() {
require_once("foo.php"); // scope of "foo.php" will be the function scope
}
$foo = 23;
includeFooFile();
echo($foo."\n"); // will print 23, but I want it to print 42.
Run Code Online (Sandbox Code Playgroud)
有没有办法明确设定范围require_once()
?有一个很好的解决方法吗?
如何在haskell中重新导出合格的导入模块?有可能的?
示例:我有两个文件.Utils.hs
带代码的文件:
module Utils (...) where
import qualified Data.Map as Map
Run Code Online (Sandbox Code Playgroud)
和文件main.hs
:
import Utils
main = putStrLn $ show $ Map.fromList [(1,2),(3,4)]
Run Code Online (Sandbox Code Playgroud)
我需要将什么内容放在...
文件中,Utils.hs
以便上面的文件编译并打印fromList [(1,2),(3,4)]
到标准输出?
目标:在导入Utils.hs
另一个文件之后,import Utils
我希望能够访问Data.Map
代码的函数和类型Map.<function or data name>
,即通过写入import Utils
我不必再写import qualified Data.Map as Map
了.这可能吗?
注意:除了模块中定义的所有内容之外,Haskell重新导出模块还有类似的问题.不幸的是,答案在这种情况下无济于事.
到目前为止我尝试了什么:以下代码
module Utils (module Map) where
import qualified Data.Map as Map
Run Code Online (Sandbox Code Playgroud)
编译,但main.hs:3:26: Not in scope: …
对于我使用hxt的工作,我实现了以下功能:
-- | Construction of a 8 argument arrow from a 8-ary function. Same
-- implementation as in @Control.Arrow.ArrowList.arr4@.
arr8 :: ArrowList a => (b1 -> b2 -> b3 -> b4 -> b5 -> b6 -> b7 -> b8 -> c)
-> a (b1, (b2, (b3, (b4, (b5, (b6, (b7, b8))))))) c
arr8 f = arr ( \ ~(x1, ~(x2, ~(x3, ~(x4, ~(x5, ~(x6, ~(x7, x8)))))))
-> f x1 x2 x3 x4 x5 x6 x7 x8 )
Run Code Online (Sandbox Code Playgroud)
正如在haddock注释中提到的,上面的函数 …
我试图用ghci 检查这个stackoverflow的答案,并得到以下错误:
> import Data.List
> let m = head . sort
> m [2,3,4]
<interactive>:5:4:
No instance for (Num ()) arising from the literal `2'
Possible fix: add an instance declaration for (Num ())
In the expression: 2
In the first argument of `m', namely `[2, 3, 4]'
In the expression: m [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
不幸的是我无法在写入的haskell文件中重现错误:
-- file.hs
import Data.List
main = do
let m = head . sort
putStrLn $ show $ m [2,3,4]
Run Code Online (Sandbox Code Playgroud)
运行此文件runhaskell …
想象一下我有一个像
def foo(x):
...
Run Code Online (Sandbox Code Playgroud)
当我用字典{ 'x': 42, 'y': 23 }
作为关键字参数调用它时,我得到一个TypeError
:
>>> foo(**{ 'x': 42, 'y': 23 })
...
TypeError: foo() got an unexpected keyword argument 'y'
Run Code Online (Sandbox Code Playgroud)
是否有一种使用关键字参数进行函数调用的好方法,而其他关键字参数会被忽略?
到目前为止我的解决方案:我可以定义一个辅助函数:
import inspect
def call_with_kwargs(func, kwargs):
params = inspect.getargspec(func).args
return func(**{ k: v for k,v in kwargs.items() if k in params})
Run Code Online (Sandbox Code Playgroud)
现在我可以做
>>> call_with_kwargs(foo, { 'x': 42, 'y': 23 })
42
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我使用jQuery来解析RSS提要.我可以使用AJAX成功获取RSS提要:
$.get("podcast.xml", function (data) {
xml = $(data);
}, "xml");
Run Code Online (Sandbox Code Playgroud)
现在我可以通过使用获得播客的标题xml.find("channel > title").text()
.如何<itunes:image>
在RSS源中选择标签?
该命令xml.find("channel > itunes:image")
不起作用,因为:
在CSS中分隔标记名称和伪类.我也试过,xml.find("channel > image")
但它不起作用.
如何在CSS选择器或jQuery中处理XML命名空间?
我注意到我的浏览器可能会在<img>
标记后设置换行符,即使此图像标记后面跟着
:
<p style="width: 12ex; font-family:monospace;">
12345678 <img style="width: 2ex" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/25px-Smiley.svg.png"> 123
</p>
Run Code Online (Sandbox Code Playgroud)
笑脸应该在第二行,因为图像标签后面跟着nbsp;
.我可以通过添加<span>
with 来强制执行此操作white-space: nowrap
:
<p style="width: 12ex; font-family:monospace;">
12345678 <span style="white-space: nowrap"><img style="width: 2ex" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/25px-Smiley.svg.png"> 123</span>
</span>
</p>
Run Code Online (Sandbox Code Playgroud)
有没有添加额外<span>
标签的解决方案?例如:是否有一个CSS语句<img>
来防止它之后的换行?
注意:<p>
不应更改CSS的CSS .我只用它来模拟问题.
I just noticed that an interface cannot be assigned to Record<string, unknown>
(playground link):
interface Foo {
foo: number
}
const foo: Foo = { foo: 1 }
const bar: Record<string, unknown> = foo
// |-> Error: Type 'Foo' is not assignable to type 'Record<string, unknown>'
// Index signature is missing in type 'Foo'.(2322)
Run Code Online (Sandbox Code Playgroud)
However the same is possible, when the type declaration for Foo
is omitted (playground link):
const foo = { foo: 1 } …
Run Code Online (Sandbox Code Playgroud) haskell ×4
css ×2
python ×2
command-line ×1
export ×1
ffmpeg ×1
function ×1
ghci ×1
html ×1
hxt ×1
image ×1
javascript ×1
jquery ×1
line-breaks ×1
metadata ×1
module ×1
object ×1
php ×1
require-once ×1
runhaskell ×1
scope ×1
string ×1
tuples ×1
types ×1
typescript ×1