我看到一些带有这样结构的代码示例:
type point struct {
x, y int
}
func newPoint() *point {
return &point{10, 20}
}
Run Code Online (Sandbox Code Playgroud)
我有C++背景,对我来说似乎是错误的.这种构造的语义是什么?是否在堆栈或堆上分配了新点?
是否有类似getchar能够在控制台中处理标签按下的功能?我想在我的控制台应用程序中完成某种完成.
我们f x y = x * y.我们可以通过两种方式应用此函数:f 5 6或者,使用中缀表示法5 `f` 6.运算符规则是否适用于最后一个表达式?这个应用程序有什么优先权?它只是另一种形式的功能应用程序,它也具有最高优先级吗?
我想编译器会看到这种特殊形式(由于``和/或名称以字母(?)开头),并且实际上将其视为普通函数应用程序,而不是将其视为运算符.
haskell function operators infix-notation operator-precedence
让我们转换string为[]byte:
func toBytes(s string) []byte {
return []byte(s) // What happens here?
}
Run Code Online (Sandbox Code Playgroud)
这个演员阵营有多贵?正在进行复制吗?就我在Go规范中看到的那样:字符串的行为类似于字节切片但是不可变,这至少应该涉及复制以确保后续切片操作不会修改我们的字符串s.反向对话会发生什么?[]byte <-> string会话是否涉及编码/解码,如utf8 < - >符文?
我想学习Lisp家族的一些语言.它可能是CL或Scheme,并尝试将其用于Web编程.纯娱乐.我有很多C++经验(专业发展).
但我希望我的选择是没有遗产的现代语言(在语言本身和库中),因为我想从一开始就学习好的设计模式.
我无法决定什么是更好的:CL或Scheme.CL拥有更大更优质的库和框架(Weblocks),但我听说它在语法和库方面有很多遗产.Scheme是另一种:简单,简洁的语法但是库很差.如果它没有遗产,我更喜欢CL.
我不喜欢学习像C++这样的另一个怪物.CL是否像Lisp系列中的C++一样?而Scheme就像是C#或Java - "修订版"的C++.
编辑:我想写功能样式,OOP可能是,但可选.
在OCaml中有一系列函数,如print_int,print_endline和Printf.我做不了类似的事情:
let n = 10 in
print n;; (* And I haven't to change `print` in case type of `n` changed *)
Run Code Online (Sandbox Code Playgroud)
这就是Java,C#,Python等中的多态打印.相反,我们有类似C的类型,由程序员明确定义.所以我认为OCaml在编译过程中丢失了类型信息,并且在运行时没有它,对吧?这就是为什么我们还需要mli文件的原因?
编辑:我很累写函数像*print_listi*,*print_list_tuple2i*等等.我怎样才能做得更好?
关于C++右值引用的Artima文章(http://www.artima.com/cppsource/rvalue.html)有一些词:这就是为什么在传递给基类时有必要说move(x)而不是x .这是移动语义的一个关键安全功能,旨在防止意外地从某个命名变量移动两次.
当这样的双重动作可以执行时,我无法想到情况.你能举个例子吗?换句话说,如果所有成员T&&都是rvalue引用而不仅仅是引用会出什么问题?
不久前学习Haskell,我感觉爱上了无点符号,特别方便的部分功能应用 - 只需提供你知道的args.在Clojure,我一直partial都有.我认为在阅读器中使用特殊语法会很好.
看一下示例代码:
; Notation with points:
(map (+ 10 (* % 2)) [1 2 3])
; With partial:
(map (comp (partial + 10) (partial * 2)) [1 2 3])
; Let #[] syntax means partial application in reader:
(map (comp #[+ 10] #[* 2]) [1 2 3])
Run Code Online (Sandbox Code Playgroud)
真是太好了!有这样的事吗?是否有可能定义自定义阅读器宏?
我有以下代码,我觉得它很难看:
loginCheck = do
ml <- getPostParam "login" -- ml and mp :: Maybe ByteString
mp <- getPostParam "password"
if isJust ml && isJust mp
then authAs (fromJust ml) (fromJust mp)
else render "Msg" [("text", "Form incomplete")]
Run Code Online (Sandbox Code Playgroud)
这段代码似乎非常迫切.我可以以某种方式简化它吗?
Golang http /模板有替换功能,if构造,但我没有找到for构造.我怎样才能遍历切片?像这样:
{{for x in xs}}
Hello, {{x.Name}}!
{{end}}
Run Code Online (Sandbox Code Playgroud)