例如,我有这个案例类:
case class Student (firstName : String, lastName : String)
Run Code Online (Sandbox Code Playgroud)
如果我使用这个case类,那么向case类中的字段提供数据是否可选?例如,我会这样做:
val student = new Student(firstName = "Foo")
Run Code Online (Sandbox Code Playgroud)
谢谢!
堆栈失败并显示 404 HTTP 状态,无法下载 lts-14.1 的构建计划:
$ stack new my-project
[...]
Downloading lts-14.1 build plan ...
RedownloadInvalidResponse Request {
host = "raw.githubusercontent.com"
port = 443
secure = True
requestHeaders = []
path = "/fpco/lts-haskell/master//lts-14.1.yaml"
queryString = ""
method = "GET"
proxy = Nothing
rawBody = False
redirectCount = 10
responseTimeout = ResponseTimeoutDefault
requestVersion = HTTP/1.1
}
"/home/michid/.stack/build-plan/lts-14.1.yaml" (Response {responseStatus = Status {statusCode = 404, statusMessage = "Not Found"}, responseVersion = HTTP/1.1, responseHeaders = [("Content-Security-Policy","default-src 'none'; style-src 'unsafe-inline'; sandbox"),("Strict-Transport-Security","max-age=31536000"),("X-Content-Type-Options","nosniff"),("X-Frame-Options","deny"),("X-XSS-Protection","1; mode=block"),("X-GitHub-Request-Id","10DA:4457:1D507:285B9:5D55DA2D"),("Content-Length","15"),("Accept-Ranges","bytes"),("Date","Thu, 15 …Run Code Online (Sandbox Code Playgroud) 尽管多次阅读"Scala编程",我仍然经常发现书中未解释的重要Scala结构,如
@uncheckedVariance
@specialized
Run Code Online (Sandbox Code Playgroud)
和其他奇怪的结构一样
new { ... } // No class name!
Run Code Online (Sandbox Code Playgroud)
等等.
考虑到这本书是由斯卡拉"发明家"本人和其他人写的,我觉得这很令人沮丧.
我试图阅读语言规范,但它是为学者而不是练习程序员.它让我头晕目眩.
在Scala中有"Everything"编程的网站"没有告诉你"吗?
还有是日常斯卡拉博客,但它在一年前去世了.
人们说“ monad是计算模型”的确切含义是什么?从完整性的意义上讲,这意味着计算吗?如果是这样,怎么办?
澄清:这个问题不是要解释单子,而是人们在此上下文中对“计算模型”的含义以及它与单子的关系。有关此短语的典型用法,请参阅此答案的结尾。
在我对图灵机的理解中,递归函数理论,lambda微积分等都是计算模型,我完全看不出monad与它之间的关系。
我最近发现了如何 以某种迂回的方式在 Java 中模拟高阶类型,如下所示
interface H<F, T> { }
Run Code Online (Sandbox Code Playgroud)
这里H编码一个高阶类型,它采用类型参数,F该类型参数本身采用参数T。
现在这让我想知道,我们可以用它来实现一些更高级的构造吗?例如,Haskell 中的 Fix 等函子的不动点及其相应的变形?
java functor higher-kinded-types catamorphism fixed-point-iteration
最近我终于开始觉得我理解了catamorphisms.我在最近的一个回答中写了一些关于它们的内容,但简单地说,对于递归遍历该类型的值的过程,我会说类型抽象的一个变形,其中该类型的模式匹配在每个类型具有的构造函数中被赋予一个函数. .虽然我欢迎对这一点或上面链接的答案中的较长版本进行任何更正,但我认为我或多或少都有这种情况,这不是这个问题的主题,只是一些背景知识.
一旦我意识到你传递给一个catamorphism的函数完全对应于类型的构造函数,并且这些函数的参数同样对应于那些构造函数的字段的类型,所有这些都突然感觉很机械,我看不到有哪些替代实施的任何摆动空间.
例如,我只是编造了这种愚蠢的类型,没有关于它的结构"意味着什么"的真实概念,并为它导出了一个变形.我没有看到任何其他方式我可以定义这种类型的通用折叠:
data X a b f = A Int b
| B
| C (f a) (X a b f)
| D a
xCata :: (Int -> b -> r)
-> r
-> (f a -> r -> r)
-> (a -> r)
-> X a b f
-> r
xCata a b c d v = case v of
A i x -> a i x
B -> b
C f x …Run Code Online (Sandbox Code Playgroud) 在 Haskell 中关于不动点的文本中,经常提到最小和最大不动点。例如在Data.Functor.Fixedpoint文档或这里。
最少和最多暗示所涉及类型的顺序(或者仅在固定点上定义它就足够了?)无论如何,我从未见过这个顺序被明确表示。
在 Haskell 中,一个不动点大于另一个不动点的正式含义是什么?
我现在正在阅读"Scala编程"一书.在第11章中,它提到:
请注意,值类空间是平的.
但没有人解释它的含义.那很重要么?为什么?如何使用以及如何检查价值类空间是非常平坦的.看来,它应该告诉ref类空间不平坦,但不是,没有其他的话再说一遍.所以我想知道"空间是平的"是什么意思,以及为什么价值类空间是平的.
我想从类标记映射到以下代码行的实例:
trait Instances {
def put[T](key: Class[T], value: T)
def get[T](key: Class[T]): T
}
Run Code Online (Sandbox Code Playgroud)
这可以在不必解析get方法中的强制转换的情况下完成吗?
更新:
对于更普遍的情况,如何用一些Foo[T]而不是Class[T]?