小编ric*_*ard的帖子

从javascript调用Dart代码

我的公司有一个用Javascript编写的非常多的胖客户端应用程序.与通常的大型JavaScript应用程序一样,代码正在迅速变得难以管理.

我个人认为用Dart写作会是一个更好的解决方案.但是,"重新开始"的管理方法是行不通的.

我知道可以从Dart调用javascript代码,但是可以从Javascript调用Dart代码吗?

这将允许我们逐步用Dart版本替换更重要的库,并且仍然能够使用原始代码库.

谢谢理查德

dart

12
推荐指数
2
解决办法
2725
查看次数

将orElse函数添加到firstWhere方法

我试图将onElse函数添加到itterator.firstWhere方法但我无法正确获得语法.

我尝试过类似的东西

List<String> myList = 

String result = myList.firstWhere((o) => o.startsWith('foo'), (o) => null);
Run Code Online (Sandbox Code Playgroud)

但编译器有错误

预期1个位置参数,但发现2个

我确信这是一个简单的语法问题,但它让我难过

dart

12
推荐指数
3
解决办法
6267
查看次数

是地球表面上多边形内部或外部的点

如何确定点是位于地球表面的多边形内部还是外部?

多边形的内部可以通过右手规则确定,即.当您在多边形周围走动时,多边形的内部位于右侧.

多边形可以

  1. 圈出任一极
  2. 穿过180经度
  3. 覆盖全球50%以上的地区

由于地球是一个球体,正常的射线穿越算法无法正常工作.

java math geometry geocoding

10
推荐指数
1
解决办法
3882
查看次数

如何在NOSQL存储系统中实现架构更改

当您使用SimpleDB等Nosql存储时,如何管理主要模式更改?

我知道我仍在思考SQL术语,但在使用SimpleDB几周后,我需要对正在运行的数据库进行更改.我想将其中一个对象类更改为具有唯一ID,而不是商业名称,并且由于它被另一个对象引用,我还需要更新这些对象中的引用值.

使用SQL数据库,您将运行一组sql语句作为客户端软件部署过程的一部分.显然,这不适用于像SimpleDB这样的东西

  • 没有等效的SQL更新语句.
  • 由于SimpleDB的分布式特性,无法知道您对数据库所做的更改何时"过滤"到运行客户端软件的所有节点.

我想到的一些解决方案是

  • 每个域都有一个版本号.客户端软件知道应该使用哪个版本的域.编写一些代码,将数据从一个域版本复制到另一个域版本,随时进行所需的更改.然后,您可以安装新的客户端软件,然后访问新的域版本.除非您可以在更新过程中"冻结"所有写访问权限,否则此方法将无效.

  • 每个项目都有一个版本属性,指示存储时使用的格式.将对象加载到内存时,客户端使用此属性.然后,在将对象写回SimpleDB时,可以将对象转换为最新格式.这样做的问题是,在新格式的任何写入发生之前,需要将新软件部署到所有服务器,或者运行旧软件的客户端不知道如何读取新格式.

这一切都相当复杂,我想知道我是否遗漏了什么?

谢谢

理查德

nosql amazon-simpledb

8
推荐指数
1
解决办法
1426
查看次数

如何测试将来的异常

继续昨天的问题,我将如何测试异步方法引发异常。

main(){
  test( "test2", () async {
    expect( await throws(), throwsException);
  });

}

Future throws () async {
  throw new FormatException("hello");
}
Run Code Online (Sandbox Code Playgroud)

dart dart-unittest dart-async

6
推荐指数
3
解决办法
1771
查看次数

Dart - 如何模拟返回未来的方法

我有一个类定义了一个返回 Future 的方法。Future 包含一个类列表,这些类也返回一个未来。

    class User{
      Future<List<Album>> albums(){

      };
    }
    class Album{
      Future<List<Photos>> photos(){
      }
    };
Run Code Online (Sandbox Code Playgroud)

在测试另一个类时模拟这些类中方法的最佳方法是什么?

我试图测试的课程看起来有点像

class Presenter {
   Presenter( User user){
       user.albums().then( _processAlbums);
   }
   _processAlbums(List<Album> albums) {
      albums.forEach( (album)=>album.photos.then( _processPhotos));
  }
  _processPhotos(List<Photo> photos) {
     ....stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试编写这样的单元测试

class MockUser extends Mock implements User{}
class MockAlbum extends Mock implements Album{}
class MockPhoto extends Mock implements Photo{}

class MockFutureList<T> extends Mock implements Future<T>{

  MockFutureList( List<T> items){
    when( callsTo( "then")).thenReturn( items);
  }
}

void main(){

  test("constuctor should request the …
Run Code Online (Sandbox Code Playgroud)

dart dart-unittest dart-async

5
推荐指数
2
解决办法
7250
查看次数

Dart 如何模拟程序

我如何模拟一个过程(与函数有关,请参见此处

例如,给定以下 typedef 和过程,

typedef int Adder(int a, int b);

int useAdder(Adder adder) {
  return adder(1, 2);
}
Run Code Online (Sandbox Code Playgroud)

你怎么能写一个允许你测试 userAdder 过程调用你模拟函数的模拟?

这是我的尝试,但失败并显示测试失败的消息:Caught The null object does not have a method 'call'。

class MyMock extends Mock {
  MyMock(){
    when(callsTo('call')).alwaysCall(this.foo);
  }
  int foo(int a, int b) => a+b;
}

void main() {

  test("bb", () {
    var mockf = new MyMock();
    expect(useAdder( mockf.call), 3);
    mockf.getLogs(callsTo('call', 1, 2)).verify(happenedOnce);
  });
}
Run Code Online (Sandbox Code Playgroud)

如果我改变

 expect(useAdder( mockf.call), 3);
Run Code Online (Sandbox Code Playgroud)

 expect(useAdder( mockf.foo), 3);
Run Code Online (Sandbox Code Playgroud)

方法调用没有出现在日志中

dart dart-unittest

5
推荐指数
1
解决办法
971
查看次数

如何抑制“缺少具体实施”的警告?

我该怎么做才能防止编译器抛出以下警告

缺少 setter 'MyClass.field' 和 getter 'MyClass.field' 的具体实现

在下面的代码?

import 'package:mock/mock.dart';

class MyClass {
  String field;
}
@proxy
class MockMyClass extends Mock implements MyClass{}
Run Code Online (Sandbox Code Playgroud)

warnings dart

5
推荐指数
2
解决办法
1万
查看次数

Dart访问文件或目录的名称

如何读取文件或目录的名称?

有一个属性'path'但返回整个文件路径.

很高兴有一个像'name'这样的属性只返回路径的最后一部分.

在Java中有一个名为File.name()的方法;

dart

4
推荐指数
1
解决办法
200
查看次数