假设以下文件与 makefile 位于同一目录中:
01.1.dot
01.2.dot
02.1.dot
03.1.dot
03.2.dot
03.3.dot
Run Code Online (Sandbox Code Playgroud)
这意味着我们有 [0-9][0-9].[0-9].dot 形式的文件
此外,makefile 包含以下目标:
%.dot.tex: %.dot
dot2tex <...>
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个依赖于 [0-9][0-9].tex 形式的文件的目标,并且它们还应该依赖于 [0-9][0-9].* 形式的所有文件.dot.tex,使得前两位数字匹配。例如,应make 03.pdf依赖于03.tex、03.1.dot.tex和03.2.dot.tex。03.3.dot.tex我想出了以下几点:
%.pdf: %.tex $(addsuffix .tex,$(wildcard %.*.dot))
@echo $?
pdflatex <...>
Run Code Online (Sandbox Code Playgroud)
但是,通配符函数中不会计算百分比。有人知道如何解决这个问题吗?
在C11中,该术语temporary lifetime已定义:
C11 6.2.4p8:具有结构或联合类型的非左值表达式,其中结构或联合包含具有数组类型的成员(递归地,包括所有包含的结构和联合的成员)是指具有自动存储期限和临时性的对象一生。36)当表达式被求值并且其初始值为表达式的值时,其生命周期开始。当包含完整表达式或完整声明符的求值结束时,其生存期结束。任何试图使用临时生存期修改对象的尝试都会导致未定义的行为。
我想知道为什么这仅适用于具有数组类型成员的结构或联合类型的右值。数组有什么特别之处?
struct x { int xx; };
struct y { int yy[1]; };
(struct x) { 42 }; // *not* a temporary object
(struct y) { { 42 } }; // a temporary object
Run Code Online (Sandbox Code Playgroud)
为什么第一个对象不是临时对象而第二个对象是临时对象?
是否可以在使用通过 shebang 调用的 nix-shell 时设置环境变量?例如,我正在使用
#! /usr/bin/env nix-shell
#! nix-shell -i runghc --pure
Run Code Online (Sandbox Code Playgroud)
并想设置一个环境变量,例如FOO=bar. 注意,FOO不一定是由周围环境定义的。因此这--keep FOO不是一个选择。
我有一个 F# 文件,到目前为止我是通过构建的
fsc --standalone Foo.fs
Run Code Online (Sandbox Code Playgroud)
到一个可执行文件中,我可以将其分发给尚未安装 F# 工具链的其他人。
现在我想我转移到 .fsproj 文件,添加到项目中的文件越多,它的扩展性就越好。考虑以下 .fsproj 文件:
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="FSharp.NET.Sdk;Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FSharp.NET.Sdk" Version="1.0.*" PrivateAssets="All" />
<PackageReference Include="FSharp.Core" Version="4.5.*" />
<Compile Include="Foo.fsx" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
如果我dotnet build在包含这两个文件的目录中运行,则会得到以下输出:
C:\Users\BillGates\.nuget\packages\fsharp.net.sdk\1.0.5\build\FSharp.NET.Core.Sdk.targets(170,9): error MSB6006: "dotnet.exe" exited with code -2147450730. [C:\temp\Foo.fsproj]
Run Code Online (Sandbox Code Playgroud)
搜索错误代码对-2147450730我没有帮助。知道我的设置有什么问题吗?有关如何从 F# 文件构建独立可执行文件的任何提示吗?
我正在使用以下 .NET 版本:
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.1.401
Commit: 91b1c13032
Runtime Environment:
OS Name: Windows
OS Version: 10.0.15063
OS …Run Code Online (Sandbox Code Playgroud) 我在 Fedora 28 系统上安装了以下 RPM 包:
ghc-ghc-8.2.2-66
ghc-containers-0.5.10.2-66
Run Code Online (Sandbox Code Playgroud)
根据hackage,设置模块应包含在给定的 RPM 中。然而试图import Data.Set导致
<no location info>: error:
Could not find module ‘Data.Set’
Perhaps you meant Data.Int (from base-4.10.1.0)
Run Code Online (Sandbox Code Playgroud)
我错过了要安装的东西吗?如何检查哪些模块可用?
编辑:
$ ghc-pkg list
/usr/lib64/ghc-8.2.2/package.conf.d
base-4.10.1.0
ghc-prim-0.5.1.1
integer-gmp-1.0.1.0
rts-1.0
Run Code Online (Sandbox Code Playgroud)
如何注册一个模块?
我尝试做的是提出一个案例类,我可以在模式匹配中使用它只有一个字段,例如一个不可变集.此外,我想使用map,foldLeft等函数,这些函数应该传递给集合.我试过它,如下所示:
case class foo(s:Set[String]) extends Iterable[String] {
override def iterator = s.iterator
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用例如map函数,我会收到类型错误:
var bar = foo(Set() + "test1" + "test2")
bar = bar.map(x => x)
found : Iterable[String]
required: foo
bar = bar.map(x => x)
^
Run Code Online (Sandbox Code Playgroud)
类型错误完全正常(在我的理解中).但是,我想知道如何为集合实现一个包装器案例类,以便可以调用map,foldLeft等,并仍然接收案例类的对象.是否需要覆盖所有这些功能还是有其他方法吗?
编辑
我倾向于接受为我工作的RégisJean-Gilles的解决方案.然而,谷歌搜索了几个小时后,我发现了另一个有趣的Scala特征SetProxy.我找不到任何琐碎的例子,所以我不确定这个特性是否符合我的要求:
Set我的第一个想法是扩展,Set但我的自定义类型Foo已经扩展了另一个类.因此,第二个想法是混合特性Iterable和IterableLike.现在我对这个SetProxy让我思考哪种特质是"最好的"方式的特性有所了解.你有什么想法和经历?
自从我三天前开始学习Scala以来,我们非常感谢任何指针!
例如:
#[macro_use]
extern crate serde_derive;
extern crate toml;
#[derive(Deserialize)]
struct Entry {
foo: String,
bar: String,
}
let toml_string = r#"
[[entry]]
foo = "a0"
bar = "b0"
[[entry]]
foo = "a1"
bar = "b1"
"#;
let config: toml::value::Table<Entry> = toml::from_str(&toml_string)?;
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,并会引发有关 的意外类型参数的错误Table。
我想知道是否有理由使用一个而不是另一个进行字符串连接:
?> "foo" ++ "bar"
"foobar"
?> "foo" <> "bar"
"foobar"
Run Code Online (Sandbox Code Playgroud)
运算符++定义为列表连接,<>而是半群的关联二元运算符。在GHC.Base我们甚至有列表它们是相同的:
instance Semigroup [a] where
(<>) = (++)
Run Code Online (Sandbox Code Playgroud)
使用一个而不是另一个有什么优点/缺点吗?典型地,我更喜欢<>,因为这意味着我可以类型之间切换String和Text更容易。任何其他优点/缺点?