这是Scala中Y-combinator的一个实现:
scala> def Y[T](func: (T => T) => (T => T)): (T => T) = func(Y(func))(_:T)
Y: [T](func: (T => T) => (T => T))T => T
scala> def fact = Y {
| f: (Int => Int) =>
| n: Int =>
| if(n <= 0) 1
| else n * f(n - 1)}
fact: Int => Int
scala> println(fact(5))
120
Run Code Online (Sandbox Code Playgroud)
Q1:结果120是如何逐步产生的?因为Y(func)定义为func(Y(func)),Y应该变得越来越多,Y在哪里迷失120了?在形式过程中如何出现?
Q2:有什么区别
def Y[T](func: (T => T) => (T => …Run Code Online (Sandbox Code Playgroud) 我不明白这句话的意思(来自Scala-Threading/Odersky/18-stateful-objects.txt第88行):
一个类可能是有状态的,没有定义或继承任何变量,因为它将方法调用转发给具有可变状态的其他对象.
任何人都可以在Scala中给我一个很好的例子吗?
package p;
public abstract class A { abstract void a(); }
class A1Impl extends A {
/** @see A#a() */
@Override void a() { } } // cursor on a() in A1Impl, ctrl+alt+h,show method hierarchy
class A2Impl extends A {
/** @see A#a() */
@Override void a() { } }
class Caller {
void call(A1Impl a) {
a.a();
}
}
Run Code Online (Sandbox Code Playgroud)
光标在 A1Impl 中的 a() 上,ctrl+alt+h,显示方法层次结构,如何设置在选择红色框中不显示其他 2 个不相关的调用者,但不远程显示代码中的 @see ..?
是否有一个clojure IDE可以帮助自动完成Java对象方法?
例如:
(def my-temp-file (java.io.File/createTempFile "filename" ".txt"))
Run Code Online (Sandbox Code Playgroud)
然后我想输入:
(.deleteOnExit my-temp-file)
Run Code Online (Sandbox Code Playgroud)
我怎么能够 :
(.my-temp-file delet |"cursor here");; 我怎样才能获得自动编译del*方法
要么
(.delet |"cursor here"my-temp-file);; 我怎样才能获得自动编译del*方法
...
刚才,我尝试了intellij14.1.4 + cursive0.1.60,这太棒了.
我试图自动编译从"删除"到"deleteOnExist"
如何在情境2中获得"deleteOnExist"自动完成功能?请帮忙
我想反映MyRow的一个对象然后得到一个My MyTable对象,我该怎么办?
这是我的java代码:
import java.util.*;
import java.text.*;
import java.util.concurrent.*;
import java.lang.reflect.*;
class MyTable {
private MyRows rows;
private List columns;
public List getColumns(){return this.columns;}
}
class MyRows extends ArrayList<MyRow> {//...
}
class MyRow {
protected MyTable table;
private List<Object> data;
private MyRow(MyTable p_table) {
this.table = p_table;
this.data = Collections.synchronizedList(new ArrayList(this.table.getColumns().size()));
}
}
public class Test2 {
public static void main(String args[]){
try{
MyTable myTable = new MyTable();
MyRows myRows = new MyRows();
Constructor ctor = MyRow.class.getDeclaredConstructor(MyTable.class);
ctor.setAccessible(true);
MyRow myRow …Run Code Online (Sandbox Code Playgroud) java ×3
scala ×2
clojure ×1
combinators ×1
cursive ×1
emacs ×1
object ×1
reflection ×1
stateful ×1
y-combinator ×1