我已经做了很明显的事情 - USB驱动程序是从最新的Android SDK安装的,并且在平板电脑中打开了USB调试.
当连接Nexus 7时,设备在Windows 设备管理器中显示为"Android Phone"/"Android Composite ADB Device",其属性显示驱动程序版本6.0.0.0,因此安装并运行正确的驱动程序.
这也证明了设备处于USB调试模式,因为如果不是它在Windows中的"便携设备"/"Nexus 7"下显示.
问题是adb devices没有显示设备,Eclipse也(不出意外)也没有提供Nexus 7作为运行应用程序的硬件设备.
我重启了两台设备而没有效果.
我能解决的唯一调试是启用ADB_TRACE=all,但这没有告诉我:
mkh@MULE ~/AppData/Local/Android/android-sdk/platform-tools
$ export ADB_TRACE=all
mkh@MULE ~/AppData/Local/Android/android-sdk/platform-tools
$ adb devices
system/core/adb/adb.c::main():Handling commandline()
system/core/adb/adb_client.c::adb_query():adb_query: host:devices
system/core/adb/adb_client.c::_adb_connect():_adb_connect: host:version
system/core/adb/sysdeps_win32.c::socket_loopback_client():socket_loopback_client: port 5037 type tcp => fd 100
system/core/adb/transport.c::writex():writex: fd=100 len=4: 30303063 000c
system/core/adb/transport.c::writex():writex: fd=100 len=12: 686f73743a76657273696f6e host:version
system/core/adb/transport.c::readx():readx: fd=100 wanted=4
system/core/adb/transport.c::readx():readx: fd=100 wanted=4 got=4
4f4b4159 OKAY
system/core/adb/adb_client.c::_adb_connect():_adb_connect: return fd 100
system/core/adb/adb_client.c::adb_connect():adb_connect: service host:devices
system/core/adb/transport.c::readx():readx: fd=100 wanted=4 …Run Code Online (Sandbox Code Playgroud) 阅读由专家撰写的Scala文档可以得到尾部递归优于while循环的印象,即使后者更简洁明了.这是一个例子
object Helpers {
implicit class IntWithTimes(val pip:Int) {
// Recursive
def times(f: => Unit):Unit = {
@tailrec
def loop(counter:Int):Unit = {
if (counter >0) { f; loop(counter-1) }
}
loop(pip)
}
// Explicit loop
def :@(f: => Unit) = {
var lc = pip
while (lc > 0) { f; lc -= 1 }
}
}
}
Run Code Online (Sandbox Code Playgroud)
(要清楚的是,专家根本没有解决循环问题,但在这个例子中,他们选择以这种方式编写一个循环,就好像本能一样,这就是我提出的问题:我是否应该发展出类似的本能.. )
while循环唯一可能更好的方面是迭代变量应该是循环体的局部变量,并且变量的变异应该在固定的位置,但Scala选择不提供该语法.
清晰度是主观的,但问题是(尾部)递归样式是否提供了改进的性能?
以下内容无法编译:
package play
object Stats2 {
def variance(data: Seq[Double], dof: Int = 0): Double = {
println("variance Double direct"); 1.0
}
def variance[T](data:Seq[T], dof: Int = 0)(implicit ex: T => Double): Double = {
println("variance Double extracted"); 1.0
}
}
Run Code Online (Sandbox Code Playgroud)
编译器说:
$ scalac erasure2.scala
erasure2.scala:7: error: double definition:
method variance$default$2:[T]=> Int and
method variance$default$2:=> Int at line 4
have same type after erasure: ()Int
def variance[T](data:Seq[T], dof: Int = 0)(implicit ex: T => Double): Double = {
^
one error …Run Code Online (Sandbox Code Playgroud) 为了理解Android生命周期,android.support.v7.app.AppCompatActivity#AppCompatActivity我简单地重写了许多"on"方法来记录它们的执行.
我添加了以下内容:
// This override will crash app!
override fun onCreateView(name: String?, context: Context?, attrs: AttributeSet?): View {
//log {"onCreateView(3)"}
return super.onCreateView(name, context, attrs)
}
Run Code Online (Sandbox Code Playgroud)
结果是应用程序现在崩溃:
06-18 06:56:54.627 1004-1004/com.hanafey.prefone E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.hanafey.prefone, PID: 1004
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hanafey.prefone/com.hanafey.prefone.MainActivity}: android.view.InflateException: Binary XML file line #24: Error inflating class LinearLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: …Run Code Online (Sandbox Code Playgroud) Scala不允许说:
def m(f:(numer:Double,denom:Double)=>tan:Double) = {...}
Run Code Online (Sandbox Code Playgroud)
就像使用类型注释变量意味着变量至少具有一些文档一样,因此允许函数类型定义中的变量提供一些文档.由于它是可选的,程序员将决定何时这样做.但上述内容肯定比以下内容更具信息性:
def m(f:(Double,Double)=>Double) = {...}
Run Code Online (Sandbox Code Playgroud)
这会增加灵活性会破坏语言语法吗?
我发现自己想要避免元组只是因为访问语法很难看.鉴于arity是有限的,为什么Scala不支持更好的语法,看起来更好,更容易键入?这是我的建议:
val t = (1,2,3)
// Proposed equivalent reference syntax.
assert(t.a == t._1)
assert(t.b == t._2)
assert(t.c == t._3)
Run Code Online (Sandbox Code Playgroud)
那么,我想要优雅,还是只是愚蠢?