小编Ste*_*lla的帖子

haskell中String和Data.Text之间的自动转换

正如Nikita Volkov在他的问题中提到的Data.Text vs String我也想知道为什么我必须处理不同的String实现type String = [Char]Data.Texthaskell.在我的代码中,我经常使用packunpack函数.

我的问题:有没有办法在两种字符串类型之间进行自动转换,这样我就可以避免写入pack而且unpack经常这样?

在其他编程语言(如Python或JavaScript)中,例如,如果需要,可以在整数和浮点数之间进行自动转换.我可以在haskell中达到类似的效果吗?我知道,提到的语言是弱类型的,但我听说C++有类似的功能.

注意:我已经知道语言扩展{-# LANGUAGE OverloadedStrings #-}.但据我所知,这种语言扩展只适用于定义为的字符串"...".我希望自动转换字符串,这是我从其他函数获得的,或者我在函数定义中作为参数.

扩展问题: Haskell.Text或Bytestring也涵盖了Data.Text和之间的区别Data.ByteString.有没有办法在三个字符串之间进行自动转换String,Data.Text并且Data.ByteString

string haskell type-conversion

29
推荐指数
2
解决办法
8826
查看次数

如何在不创建新文件的情况下使用ffmpeg/avconv更改元数据?

我正在编写一个用于制作音频和视频播客的python脚本.有一堆录制的媒体文件(音频和视频)和包含元信息的文本文件.

现在我想编写一个函数,它将元数据文本文件中的信息添加到所有媒体文件(原始文件和转换文件).因为我要处理很多不同的文件格式(wav,flac,mp3,mp4,ogg,ogv...),这将是巨大的,有一个工具,它的元数据添加到任意格式.

我的问题:

如何在ffmpeg/avconv不更改文件的音频或视频且不创建新文件的情况下更改文件的元数据?是否有另一个命令行/ python工具可以帮我完成这项工作?

到目前为止我尝试了什么:

我认为ffmpeg/avconv可以成为一种工具,因为它可以处理几乎所有的媒体格式.我希望,如果我设置-i input_fileoutput_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)

python command-line metadata ffmpeg

19
推荐指数
5
解决办法
4万
查看次数

有没有办法将require_once()的范围显式设置为全局?

我正在寻找一种方法来设置范围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()?有一个很好的解决方法吗?

php scope global-variables require-once

13
推荐指数
2
解决办法
5747
查看次数

如何重新导出合格的导入模块?

如何在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: …

haskell module export

9
推荐指数
1
解决办法
963
查看次数

避免在haskell中使用长元组定义

对于我使用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注释中提到的,上面的函数 …

haskell tuples hxt

6
推荐指数
1
解决办法
250
查看次数

ghci中的错误,我无法在写入的haskell文件中重现

我试图用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 …

haskell ghci runhaskell

6
推荐指数
1
解决办法
100
查看次数

忽略python中的其他关键字参数

想象一下我有一个像

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)

有没有更好的办法?

python function keyword-argument

6
推荐指数
1
解决办法
3277
查看次数

如何在CSS选择器或jQuery中处理XML命名空间?

我使用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命名空间?

css jquery xml-namespaces css-selectors jquery-selectors

5
推荐指数
1
解决办法
2152
查看次数

如何在内嵌图像后防止换行?

我注意到我的浏览器可能会在<img>标记后设置换行符,即使此图像标记后面跟着&nbsp;:

<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">&nbsp;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">&nbsp;123</span>
 </span>
</p>
Run Code Online (Sandbox Code Playgroud)

有没有添加额外<span>标签的解决方案?例如:是否有一个CSS语句<img>来防止它之后的换行?

注意:<p>不应更改CSS的CSS .我只用它来模拟问题.

html javascript css image line-breaks

5
推荐指数
1
解决办法
107
查看次数

Why can't an interface be assigned to Record&lt;string, unknown&gt;?

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)

types compiler-errors object type-conversion typescript

5
推荐指数
2
解决办法
1988
查看次数