说我有一个Stream相当昂贵的计算.我可以通过编写类似的东西轻松创建一个"提前计算"的线程
import scala.actors.Futures._
val s = future { stream.size }
Run Code Online (Sandbox Code Playgroud)
如果我然后抛弃对此的引用,该Future线程是否会被垃圾收集器杀掉?
Python不鼓励检查类型.但在许多情况下,这可能有用:
检查构造函数参数.例如,检查foe布尔值,字符串,字典等.如果我不这样做并将对象的成员设置为参数,则稍后会引起问题.
检查函数参数.
在属性中.如果有人设置了错误的值或不同的类型,我应该快速回复.
我可以使用Java Futures(java.util.concurrent.Future<T>)运行多个类似进程(SIMD)的唯一模型如下:
class Job extends Callable<T> {
public T call() {
// ...
}
}
List<Job> jobs = // ...
List<Future<T>> futures = ExecutorService.invokeAll(jobs);
for (Future<T> future : futures) {
T t = future.get();
// Do something with t ...
}
Run Code Online (Sandbox Code Playgroud)
此模型的问题在于,如果作业0需要很长时间才能完成,但作业1,2和3已经完成,则for循环将等待从作业0获取返回值.
是否有任何模型允许我获得每个Future结果,因为它变得可用而不只是呼叫Future.isDone()和忙碌等待(或呼叫Thread.sleep())如果没有准备好了吗?
我正在尝试包装Windows API函数以在我选择时检查错误.正如我在之前的SO问题中发现的那样,我可以使用模板函数来调用API函数,然后调用GetLastError()以检索它可能设置的任何错误.然后,我可以将此错误传递给我的Error班级让我知道.
这是模板函数的代码:
template<typename TRet, typename... TArgs>
TRet Wrap(TRet(WINAPI *api)(TArgs...), TArgs... args)
{
TRet ret = api(args...);
//check for errors
return ret;
}
Run Code Online (Sandbox Code Playgroud)
使用这个我可以有如下代码
int WINAPI someFunc (int param1, BOOL param2); //body not accessible
int main()
{
int ret = someFunc (5, true); //works normally
int ret2 = Wrap (someFunc, 5, true); //same as above, but I'll get a message if there's an error
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.但是,有一个可能的问题.采取这个功能
void WINAPI someFunc();
Run Code Online (Sandbox Code Playgroud)
将其转换为模板函数时,它看起来如下:
void Wrap(void(WINAPI *api)())
{
void ret …Run Code Online (Sandbox Code Playgroud) 我想知道你认为最好的做法是什么 - 它是否非常适合在PHP中输入检查参数?也就是说,你实际上看到你已经实现了参数类型检查的项目与那些没有实现参数类型检查的项目中的错误明显减少了吗?我在考虑这样的事情:
public function __construct($screenName, $createdAt) {
if (!is_string($screenName) || !is_string($createdAt) {
return FALSE;
}
}
Run Code Online (Sandbox Code Playgroud) 我明白你为什么需要使用Object.prototype.toString()或String()进行类型检查数组,但不是的typeof足够的类型检查功能和字符串?例如,MDN for Array.isArray上的polyfill使用:
Object.prototype.toString.call(arg) == '[object Array]';
Run Code Online (Sandbox Code Playgroud)
在数组的情况下非常清楚,因为你不能typeof用来检查数组.Valentine使用instanceof:
ar instanceof Array
Run Code Online (Sandbox Code Playgroud)
但对于字符串/函数/布尔/数字,为什么不使用typeof?
jQuery和Underscore都使用这样的东西来检查函数:
Object.prototype.toString.call(obj) == '[object Function]';
Run Code Online (Sandbox Code Playgroud)
这不等于这样吗?
typeof obj === 'function'
Run Code Online (Sandbox Code Playgroud)
甚至这个?
obj instanceof Function
Run Code Online (Sandbox Code Playgroud) 是否可以将Java FutureTask与Spring TaskExecutor 一起使用来获取Future对象?
我正在寻找一个实现Java ExecutorService接口的TaskExecutor,特别是submit()方法.浏览Spring Javadocs并没有透露任何类似这样的类.是否有一些替代方法通过Spring TaskExecutors处理未来,我不知道?
如果有可能,你还可以包括一个例子吗?
只是一个想法.
在C#中使用可选类型参数不是很有用吗?
这会让生活更简单.我厌倦了多个具有相同名称但类型参数不同的类.另外VS不支持这个非常vell(文件名):-)
例如,这将消除对非通用IEnumerable的需求:
interface IEnumerable<out T=object>{
IEnumerator<T> GetEnumerator()
}
Run Code Online (Sandbox Code Playgroud)
你怎么看?
我有传递对象的方法.在这个方法中,我检查它的类型,并根据类型我用它做什么,并返回一个长.我已经尝试过每一种我能想到的方式来做这件事我总是会遇到几个编译器错误,告诉我它需要一个特定的对象,但却得到另一个.有人可以向我解释我做错了什么并引导我朝着正确的方向前进吗?我到目前为止所尝试的内容如下:
override def getInteger(obj:Object) = {
if (obj.isInstanceOf[Object]) null
else if (obj.isInstanceOf[Number])
(obj:Number).longValue()
else if (obj.isInstanceOf[Boolean])
if (obj:Boolean) 1 else 0
else if (obj.isInstanceOf[String])
if ((obj:String).length == 0 | (obj:String) == "null")
null
else
try {
Long.parse(obj:String)
} catch {
case e: Exception => throw new ValueConverterException("value \"" + obj.toString() + "\" of type " + obj.getClass().getName() + " is not convertible to Long")
}
}
Run Code Online (Sandbox Code Playgroud) 当我等待 Scala Future的结果时,它是否更像接收,或者像反应,即是否阻塞线程,或者如果可用,则在结果后安排继续?
typechecking ×5
future ×4
scala ×3
concurrency ×2
java ×2
actor ×1
c# ×1
c++ ×1
c++11 ×1
casting ×1
compile-time ×1
futuretask ×1
generics ×1
javascript ×1
parameters ×1
php ×1
promise ×1
python ×1
spring ×1
types ×1