Tag: scala

函数式编程中如何存在时间函数?

我不得不承认,我对函数式编程知之甚less。 我从这里到那里读了一遍,所以知道在函数式编程中,无论调用多less次函数,函数都会返回相同的输出。 这与math函数完全相同,即对函数expression式中涉及的input参数的相同值进行相同的输出。 例如,考虑一下: f(x,y) = x*x + y; //it is a mathematical function 无论你使用f(10,4)多less次,它的值总是104 。 因此,无论你在哪里写f(10,4) ,都可以用104replace它,而不用改变整个expression式的值。 这个属性被称为expression式的引用透明 。 正如维基百科所说( 链接 ), 相反,在函数代码中,函数的输出值仅仅依赖于input到函数的参数,所以用参数x的相同值调用函数f两次将产生相同的结果f(x)。 所以我的问题是:函数式编程中是否可以存在时间函数(返回当前时间)? 如果是,那么它又如何存在? 这是否违反函数式编程的原则? 它特别违反了参照透明性 ,这是函数式编程的一个属性(如果我正确地理解它的话)。 或者如果没有,那么在函数式编程中如何知道当前的时间呢?

如果案例类只有一个字段,如何将json转换为案例类

在播放2.1读取是用来编组Json的对象。 但是,如果案例类只有一个字段,我怎么能做到这一点。 为更多领域工作的ideom不起作用,因为一个领域“和”不使用。 所以我没有得到一个FunctionBuilder。 下面的代码给我一个types不匹配。 我该如何解决这个问题? case class Data(stamm: Seq[String]) implicit val dataReads = ( (__ \ "stamm").read(Reads.list[String]) )(Data)

ScrollView内的Google Maps API v2 SupportMapFragment – 用户不能垂直滚动地图

我正在尝试在滚动视图中放置Google地图,以便用户可以向下滚动其他内容以查看地图。 问题是,这个滚动视图正在吃掉所有的垂直触摸事件,所以地图的UI体验变得非常奇怪。 我知道在谷歌地图的V1,你可以重写onTouch,或setOnTouchListener调用motionEvent.ACTION_DOWN的requestDisallowInterceptTouchEvent。 我试图用V2来实现类似的技巧无济于事。 到目前为止我已经尝试过: 覆盖SupportMapFragment,并在onCreateView中为View设置一个监听器 调用SupportMapFragment实例的.getView(),然后调用setOnTouchListener 环绕相对布局或框架布局,用透明视图或图像视图遮罩片段 这些都没有解决滚动问题。 我在这里错过了什么? 如果任何人有滚动视图内的地图的工作示例,请你分享代码示例?

Scala是否支持尾recursion优化?

Scala是否支持尾recursion优化?

编辑器不包含主types

只要通过Scala网站上的示例Scala代码,但尝试运行时遇到一个恼人的错误。 这是代码: http : //www.scala-lang.org/node/45 。 在Eclipse上运行它时,我收到了一条消息:“编辑器不包含主types”,阻止它运行。 有什么我需要做的…即将该文件分成多个文件,或什么?

如何使用Scala的这种打字,抽象types等来实现一个Selftypes?

在其他任何问题上我都找不到答案。 假设我有一个具有两个子类Concrete1和Concrete1的抽象超类Abstract0。 我想能够在Abstract0中定义类似的东西 def setOption(…): Self = {…} 自我将成为具体的子types。 这将允许链接调用setOption像这样: val obj = new Concrete1.setOption(…).setOption(…) 仍然得到Concrete1作为obj的推断types。 我不想要的是定义这个: abstract class Abstract0[T <: Abstract0[T]] 因为这使得客户难以处理这种types。 我尝试了各种可能性,包括抽象types: abstract class Abstract0 { type Self <: Abstract0 } class Concrete1 extends Abstract0 { type Self = Concrete1 } 但是那么就不可能实现setOption,因为Abstract0中没有typesSelf。 并且使用this: Self =>在Abstract0中也不起作用。 这个问题有什么解决scheme?

Eclipse,Android,Scala变得简单,但仍然无法正常工作

我最近遵循了使用Scala和Eclipse进行Android编程的方法,这样可以在不使用Proguard或Treeshake的情况下减less代码和编译时间。 在本文后面,我应该能够使用最后一个Eclipse版本(3.7),几乎是最新版本的Scala(2.8.1)在模拟器版本10上更新,在Eclipse中使用提供的插件版本2.8.3。 提出的方法是提供一个特定的ramdisk映像版本,我们可以上传scala库,这大大缩小了代码上传到仿真器的大小。 我遵循这些步骤,创build了一个hello world,添加了scala自然,添加了一个scala类,在Android Package Installer之前移动了Scala构build器,一切都很完美,但是当我从Eclipse的模拟器上启动apk时,应用程序崩溃我得到以下错误,看起来像这里 (在文档的末尾)相同: 03-29 10:29:38.505: E/AndroidRuntime(839): java.lang.NoClassDefFoundError: upg.TestSinceInstallation.ComputeSum 如果我删除活动文件中的scala引用,它运行良好。 这里是TestSinceInstallation.java文件: package upg.TestSinceInstallation; import android.app.Activity; import android.os.Bundle; import upg.TestSinceInstallation.ComputeSum; public class TestSinceInstallationActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int a = 1; int b = 5; ComputeSum cs […]

Java VM上的内存障碍和编码风格

假设我有一个静态的复杂对象,它被一个线程池定期更新,并且在一个长时间运行的线程中或多或less地持续读取。 对象本身总是不变的,反映了最近的状态。 class Foo() { int a, b; } static Foo theFoo; void updateFoo(int newA, int newB) { f = new Foo(); fa = newA; fb = newB; // HERE theFoo = f; } void readFoo() { Foo f = theFoo; // use f… } 我不关心我的读者是否看到旧的或新的Foo,但是我需要看到完全初始化的对象。 IIUC,Java规范说,在这里没有内存屏障,我可能会看到一个fb被初始化的对象,但是还没有被提交到内存。 我的程序是一个现实世界的程序,它迟早会将内容提交到内存中,所以我不需要马上将新的值赋给内存(尽pipe它不会造成伤害)。 你认为什么是实现内存屏障最可读的方式? 如果需要的话,我愿意为了可读性而付出一些性能价格。 我想我可以把这个任务同步到Foo,这个工作就可以了,但是我不确定读这个代码的人很明显为什么这么做。 我也可以同步新的Foo的整个初始化,但是这会引入更多的实际需要的locking。 你怎么写它,使其尽可能可读? 奖金赞成Scala版本:)

asynchronous的jdbc调用是可能的吗?

我想知道是否有办法对数据库进行asynchronous调用? 例如,假设我有一个需要很长时间处理的大请求,我想发送请求,并在请求返回一个值(通过传递一个监听器/callback或其他)时收到一个通知。 我不想阻止等待数据库回答。 我不认为使用线程池是一个解决scheme,因为它不扩展,在繁重的并发请求的情况下,这将产生大量的线程。 我们正面临networking服务器的这种问题,我们通过使用select / poll / epoll系统调用来find解决scheme,以避免每个连接有一个线程。 我只是想知道如何有一个类似的function与数据库请求? 注:我知道使用FixedThreadPool可能是一个很好的解决方法,但我很惊讶没有人开发出一个真正asynchronous的系统(没有使用额外的线程)。 **更新** 由于缺乏切实可行的解决scheme,我决定自己创build一个库(finagle的一部分): finagle-mysql 。 它基本上解码/解码MySQL的请求/响应,并使用Finagle / Netty下的。 即使有大量的连接,它也能很好地扩展。

如何扩展一个Scala列表来启用切片,而不是通过显式的位置,而是通过给定的谓词/条件

对于 trait Item case class TypeA(i: Int) extends Item case class TypeB(i: Int) extends Item 考虑一个斯卡拉项目列表如 val myList = List(TypeA(1), TypeB(11), TypeB(12), TypeA(2), TypeB(21), TypeA(3), TypeB(31)) 目标是定义一个新的分slice方法,可以应用到myList ,并将谓词或条件作为参数; 例如 myList.slice { x => x.isInstanceOf[TypeA] } 会交付 List(List(TypeA(1), TypeB(11), TypeB(12)), List(TypeA(2), TypeB(21)), List(TypeA(3), TypeB(31))) 在这个例子中,相同的结果将通过 myList.slice { case TypeA(x) => x < 10 } 非常感谢。