在早期版本的C#IEnumerable中定义如下:
public interface IEnumerable<T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
从C#4开始,定义是:
public interface IEnumerable<out T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
string[] <: object[]C#中的(破坏的数组方差)相同的问题吗?它是否缺乏时间,某些技术问题还是有理由不存在?
我想知道为什么scala.Option没有fold这样定义的方法:
fold(ifSome: A => B , ifNone: => B)
Run Code Online (Sandbox Code Playgroud)
相当于
map(ifSome).getOrElse(ifNone)
Run Code Online (Sandbox Code Playgroud)
有没有比使用map+ 更好的getOrElse?
旧的,或多或少已弃用的java.io.FileAPI有一个方法exists,如果File指向文件系统中的现有API ,则返回true ,但我找不到任何类似的方法java.nio.file.Path:
scala> import java.nio.file._
import java.nio.file._
scala> val path = Paths.get("/foo")
path: java.nio.file.Path = /foo
scala> path.
asInstanceOf compareTo endsWith getFileName getFileSystem getName getNameCount
getParent getRoot isAbsolute isInstanceOf iterator normalize register
relativize resolve resolveSibling startsWith subpath toAbsolutePath toFile
toRealPath toString toUri
Run Code Online (Sandbox Code Playgroud)
当然我可以将path背面转换为a File但我想有更好的方法可以做到这一点.
编辑:好的,感谢所有人指出Files.exists.有人知道为什么它变得更复杂(比有一个简单的exists方法Path)?
我有一个日期变量
var date: Date = new Date()
Run Code Online (Sandbox Code Playgroud)
然后我将这个日期转换为String:
var dateStr = date.toString()
Run Code Online (Sandbox Code Playgroud)
现在我需要将此String转换回日期.我试过了两个:
1:
var stringToDate: Date = date2Str.asInstanceOf[Date]
Run Code Online (Sandbox Code Playgroud)
和2:
stringToDate: Date = new SimpleDateFormat("dd.MM.yyyy").parse(dateStr);
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下我都收到了错误:
java.lang.ClassCastException:
java.lang.String cannot be cast to java.util.Date
Run Code Online (Sandbox Code Playgroud) 前段时间,Oracle决定在Java 8中添加Closures是个好主意.我想知道与Scala相比,那里的设计问题是如何解决的,Scala从第一天就开始关闭.
援引未解决的问题,从javac.info:
方法句柄可以用于函数类型吗? 如何做到这一点并不明显.一个问题是Method Handles重新定义类型参数,但是以一种干扰函数子类型的方式.
我们可以摆脱"throws"类型参数的显式声明吗? 只要声明的边界是一个经过检查的异常类型,这个想法就是使用析取类型推断.这不是严格向后兼容的,但它不太可能破坏真正的现有代码.然而,由于语法模糊,我们可能无法摆脱类型参数中的"抛出".
在旧式循环索引变量上禁止@Shared
处理像Comparator这样定义多个方法的接口,除了其中一个接口之外的所有接口都将由继承自Object的方法实现."使用单一方法的接口"的定义应仅计算不会由Object中的方法实现的方法,并且如果实现其中一个方法将全部实现它们,则应将多个方法计为一个方法.主要是,这需要更精确地说明接口只有一个抽象方法的含义.
指定从函数类型到接口的映射:名称,参数等.我们应该完全指定从函数类型到系统生成的接口的映射.
类型推断.需要增加类型推断的规则以适应异常类型参数的推断.同样,闭包转换使用的子类型关系也应该反映出来.
Elined异常类型参数有助于改进异常透明度. 也许使得省略的异常类型参数意味着绑定.这样可以通过添加新的通用异常参数来改进没有异常类型参数的现有通用接口,例如java.util.concurrent.Callable.
函数类型的类文字是如何形成的? 是#void().class?如果是这样,如果擦除对象类型,它是如何工作的?它是#?(?).class?
系统类加载器应动态生成函数类型接口. 与函数类型对应的接口应该由引导类加载器按需生成,因此它们可以在所有用户代码之间共享.对于原型,我们可能有javac生成这些接口,因此原型生成的代码可以在库存(JDK5-6)VM上运行.
每次对lambda表达式的求值必须产生一个新的对象吗? 希望不是.例如,如果lambda没有从封闭范围捕获变量,则可以静态分配.类似地,在其他情况下,如果lambda不捕获循环内声明的任何变量,则lambda可以移出内部循环.因此,如果规范不承诺关于lambda表达式的结果的引用标识,那么最好是这样的,因此这样的优化可以由编译器完成.
据我所知2.,6.和7.在Scala中不是问题,因为Scala不使用Checked Exceptions作为某种类似Java的"影子类型系统".
剩下的呢?
我想从语言设计的角度来看为什么Scala已经删除了Java的类文字(例如String.class)并将其替换为classOf[String],但是后来添加了一个"类型文字",其中包含Singletons Singleton.type而不是类似的东西typeOf[Singleton]?
[...]λ-cube是一个框架,用于探索Coquand构造计算中的细化轴,从简单类型的lambda演算开始,作为放置在原点的立方体的顶点,以及构造的微积分(更高阶)依赖型多态lambda演算作为其完全相反的顶点.立方体的每个轴代表一种新的抽象形式:
- 术语取决于类型或多态性.系统F,又名二阶lambda演算,仅通过强加此属性获得.
- 类型取决于类型或类型运算符.简单地键入lambda-calculus与类型运算符λω,只通过强加此属性获得.与系统F结合,产生系统Fω.
- 类型取决于术语或依赖类型.仅施加此属性会产生λΠ,这是一种与LF密切相关的类型系统.
所有八个计算都包括最基本的抽象形式,术语取决于术语,普通函数与简单类型的lambda演算一样.立方体中最富有的微积分,包括所有三个抽象,是结构的微积分.所有八个结石都强烈正常化.
是否有可能在Java,Scala,Haskell,Agda,Coq等语言中找到代码示例,以便在缺少此优化的结石中无法实现每个细化?
我有约.6000个PNG文件(256*256像素),并希望将它们组合成一个大PNG,以编程方式保存所有这些文件.
最好/最快的方法是什么?
(目的是在纸上打印,因此使用某些网络技术不是一种选择,只有一个单一图片文件将消除许多使用错误.)
我尝试了fahd的建议,NullPointerException但当我尝试创建一个BufferedImage宽24576像素,高15360像素的时候,我得到了一个.有任何想法吗?
我有al:List [Char]我要连接的字符并在一个for循环中作为String返回.
我试过这个
val x: String = for(i <- list) yield(i)
Run Code Online (Sandbox Code Playgroud)
导致
error: type mismatch;
found : List[Char]
required: String
Run Code Online (Sandbox Code Playgroud)
那么如何更改产量的结果类型呢?
谢谢!
scala ×8
java ×3
map ×2
types ×2
c# ×1
class ×1
closures ×1
collections ×1
covariance ×1
date ×1
file ×1
filesystems ×1
fold ×1
generics ×1
ienumerable ×1
image ×1
java-7 ×1
java-8 ×1
mutable ×1
path ×1
png ×1
scala-option ×1
theory ×1
tree ×1
yield ×1
yield-return ×1