小编use*_*899的帖子

领先的美元符号如何影响Bash中的单引号?

我需要将一个字符串传递给程序作为Bash CLI中的参数,例如

program "don't do this"
Run Code Online (Sandbox Code Playgroud)

该字符串可能包含任何字符,如'$','\'等等,我不希望Bash做任何修改.所以我考虑使用单引号.

但是以下不起作用:

 program 'don\'t do this'            //escape doesn't work in single quote
Run Code Online (Sandbox Code Playgroud)

虽然以下两个工作:

 program $'dont\'t do this'          //seems fine, but any other side effects?
 program 'dont'\''do this'           //breaking into 3 parts
Run Code Online (Sandbox Code Playgroud)

第一种方法似乎更好,因为它获得前修改以下(把美元符号在前面,并替换每\\\),但我不知道还有什么美元符号可能会做.

我真的用谷歌搜索了这个,但我找不到我需要的东西......

bash quotes double-quotes single-quotes

54
推荐指数
2
解决办法
2万
查看次数

Rust 允许分发闭源库吗?

我是 Rust 新手,刚刚读完这本书。我试图了解 Rust 中的所有内容是否都必须以源代码的形式分发,就像 golang 一样。这可能不是准确的提问方式,但这是我想知道的:

在 C/C++ 时代,我可以将代码编译到某个库(xx.a 或 xx.so)中,并将其与头文件一起分发给可以链接其代码的人,只要我们使用大约相同的编译器/操作系统/平台。现在,Rust 的每个依赖项都以源代码的形式从 crates.io 中提取,并在本地构建和链接。但是,如果由于某种原因我不想发布源代码而只想发布目标平台的库,可以通过操作工具链来完成此操作吗?我相信由于 Rust 的一些固有设计,这是不可能做到的。例如,我可以在 Rust 库中编写这样的代码:

pub trait Summary {
  // snip
}

fn returns_summarizable() -> impl Summary {
  // snip
}
Run Code Online (Sandbox Code Playgroud)

如果依赖于库的代码调用returns_summarizable,则编译器必须能够确定返回值的大小,以便在堆栈上为结果变量分配空间。这意味着虽然代码只关心它返回一些实现该Summary特征的类型,但编译器实际上必须知道它返回的具体类型。如果没有库的源代码,就无法完成此操作,甚至无法使用头文件之类的等效文件,因为头文件(如果存在)应该只包含特征声明,而不包含函数可能返回的任何内部类型。

我对此感到好奇,不是因为我想在没有源的情况下分发包,而是因为我想到借用检查器和编译器从不查看调用它的函数或方法的主体,而只查看签名。当函数像上面那样返回时,情况似乎并非如此impl xxx,因为 Rust 必须查看实际返回的实现类型来确定返回类型大小,对吗?

programming-languages lang rust

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

有关scala类型推断的编译错误

我正在做一个简单的练习,要求我使用foldRight在列表上实现一个独立的"map"函数.我想出的解决方案是这样的:

def mapFun[T,U](xs: List[T], f: T => U): List[U] = {
  (xs foldRight List[U]())((x, y) => f(x) :: y)
}

val sl = List(1,2,3)

//now try to square every item
mapFun(sl, x => x * x)  //**missing parameter type**
mapFun(sl, (x:Int) => x * x) //ok, gives List(1,4,9)
Run Code Online (Sandbox Code Playgroud)

如上所述,必须为要编译的代码指定显式的"Int"类型.然而在我看来,编译器应该能够推断'x'的类型,因为'sl'是'List [Int]'类型,这意味着T是'Int'然后'x*x'表达式的类型U也应该是'Int'.

我想这可能与方差或反方差类型的东西或子类型与泛型类型混合的东西有关.

我的scala编译器版本是2.11 bundle(动态).


标准答案的补充:来自Scala中的函数编程第3章:

这是Scala编译器的一个不幸限制; 其他功能语言如Haskell和OCaml提供了完整的推理,这意味着几乎不需要类型注释

types scala

4
推荐指数
1
解决办法
90
查看次数

为什么以下scala实验代码不起作用?

我正在尝试为数值定义一个通用的添加函数:

def add[A](x:A, y:A): A = {
  x + y
}
Run Code Online (Sandbox Code Playgroud)


console:16:错误:类型不匹配; found:A required:String x + y ^

什么是编译器抱怨?我用谷歌搜索的一些东西在这一刻对我来说并没有多大意义.

functional-programming scala

3
推荐指数
1
解决办法
87
查看次数

DICOM实例编号沿着什么方向发展?

通过方向,我的意思是例如从患者的头部到底部或从他的底部到头部.我到目前为止看到的CHEST CT扫描表明,Instance Number 1切片通常是从身体上部向下的第一个切片,但我不知道这是否是标准的一部分或者我应该有其他一些标签检查确定.

medical dicom itk simpleitk

3
推荐指数
1
解决办法
401
查看次数

使用tr命令发生意外的bash分配结果

这是有bash问题的陈述:

xx="$(echo 'a_b' | tr '_' '\t')"
Run Code Online (Sandbox Code Playgroud)

为什么下划线用空格而不是标签取代?

bash shell tr

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

为什么切片值有时会过时但不能映射值?

我发现切片图功能和通道经常一起作为参考类型提及。但是我注意到,切片的东西不会表现出任何参考行为,因为它们可能会过时:

   var s []int
   //must update slice value
   s = append(s, ...) 
Run Code Online (Sandbox Code Playgroud)

要么

   //must use pointer if we want to expose the change
   func foo(s *[]int) error  
   //or change the function signature to return it like _append_
   func foo(s []int) (r slice, err error)
Run Code Online (Sandbox Code Playgroud)

通常,我通过牢记切片描述符实现的内部组件来理解这一点:切片值可以视为len,cap和data指针的结构。

但是地图值永远不需要像

   m := make(map[string]int)
   ...
   // don't know how to express with insertion, but you know what i mean.
   m = delete(m, "well")  
Run Code Online (Sandbox Code Playgroud)

为什么?映射值仅仅是指向映射描述符的指针吗?如果是这样,为什么还不这样做呢?

dictionary pointers reference go slice

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