我正在寻找一种方法来生成这种形式的scala流(相当于F#的序列):
let allRows resultSet : seq<Row> =
seq {
while resultSet.next() do
yield new Row(resultSet)
}
有没有办法轻松地在scala中执行此操作?我发现涉及(非tailrecursive)递归的唯一方法,对于resultSet
中的大量行,这意味着某些堆栈溢出。
由于
答案 0 :(得分:1)
您可以像这样实现:
def toStream(rs:ResultSet):Stream[Row] =
if(!rs.next) Stream.Empty
else new Row(rs) #:: toStream(rs)
请注意,由于toStream是使用def定义的(与val定义相反),因此该解决方案不会将整个流保存在内存中,并且流的头部将被垃圾收集。
您可以使用的另一个选项是定义新的迭代器:
def toIterator(rs:ResultSet) = new Iterator[Row] {
override def hasNext: Boolean = rs.next()
override def next(): Row = new Row(rs)
}
答案 1 :(得分:1)
假设您有类似
的内容var connection = $.hubConnection("http://192.168.9.6:3030/signalr");
var setupHubProxy = connection.createHubProxy('SetupHub');
setupHubProxy.on('addMessage', function (msg) {
alert(msg);
});
connection.start()
.done(function () {
console.log('connected');
})
.fail(function (a) {
console.log('not connected' + a);
});
您可以将您的功能定义为
trait ResultSet {
def next: Boolean
}
class Row(rs: ResultSet)