标签: dispatch

如何以编程方式确定哪个类/模块定义了被调用的方法?

在Ruby中,我如何以编程方式确定哪个类/模块定义了被调用的方法?

在我调用的给定范围内说some_method().在同一范围内,我想调用一个函数find_method(:some_method),将返回其类,单例类或模块定义some_method.

这里有一些代码来说明我的意思:

class Foo
  include ...

  def bar
    ...
    some_method() # calls a method in scope, assume it exists

    find_method(:some_method) # Returns where the method is defined
                              # e.g. => SomeClassOrModule
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

我猜我不得不使用的反射功能,从复杂的混合物self,用self.ancestors走了继承树,使用method_defined?检查的方法在类或模块,并且可能是一些其他技巧来检查从范围界定最里面到最外层(因为代码可以在例如a内运行instance_eval).

我只是不知道正确的顺序和Ruby的元模型的所有细微之处来实现find_method,使得它在其搜索既详尽和正确的方法分派分辨率的观点.

谢谢!

ruby methods metaprogramming dispatch

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

Android NFC前台调度问题

我对android开发完全陌生,必须编写一个简单的应用程序来读取大学的nfc标签(带有nexus s)。

我的问题是,当 nexus 发现一个标签时,我的应用程序未列在“选择操作”-弹出窗口中。目的是使用前景调度方法读取标签,如http://developer.android.com/guide/topics/nfc/index.htmlhttp://developer.android.com/resources/samples/ApiDemos 中所述/src/com/example/android/apis/nfc/ForegroundDispatch.html

我认为清单中缺少某些内容,但我不知道是什么。这是清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.iforge.android.nfc"
>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
>
<activity android:name=".simulator.FakeTagsActivity"
    android:theme="@android:style/Theme.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

</activity>

    <activity android:name="TagViewer"
        android:theme="@android:style/Theme.NoTitleBar"
    >
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
            <data android:mimeType="mime/type" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.nfc.action.TECH_DISCOVERED"/>

        </intent-filter>

        <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED"/>
        </intent-filter>
    </activity>
</application>
<uses-sdk android:minSdkVersion="10" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
Run Code Online (Sandbox Code Playgroud)

这是在发现标签时应调用的活动代码(由 android NFCDemo 以及 ForegroundDispatch-example 构建):

public class TagViewer extends Activity …
Run Code Online (Sandbox Code Playgroud)

android foreground nfc dispatch

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

用3个点定义S4方法

我正在尝试为我创建的对象定义"c"方法.

就像是

setMethod("c", 
          signature(...), 
          definition=function (...) {
            myObject = list(...)[[1]]
            myObject@mySlot=lapply(list(...), FUN = function(x) slot(x, "mySlot"))
            return(myObject)
         }
)
Run Code Online (Sandbox Code Playgroud)

问题是我无法定义...的类,以便正确完成调度.任何的想法?

r dispatch s4

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

dispatch_sync中的dispatch_sync导致死锁

我刚刚在objc.io上看到了这完全异步,但找不到好的解释

dispatch_queue_t queueA; // assume we have this
dispatch_sync(queueA, ^(){  // (a)
    dispatch_sync(queueA, ^(){ // (b)
        foo();
    });
});
Run Code Online (Sandbox Code Playgroud)

一旦我们点击了第二个dispatch_sync,我们就会死锁:我们无法调度到queueA,因为有人(当前线程)已经在该队列上并且永远不会离开它.

只要我明白

  1. dispatch_sync只需添加工作项(我避免使用"块",因为它可能会混淆)到queueA,然后这个工作项将被发送到queueA的目标队列,然后GCD将为此工作项保留一个线程 threadWorkItem
  2. 当我到达(b)时,我在线程threadWorkItem(假设threadWorkItem是这个线程的名称),所以我认为将另一个工作项排入队列是没有问题的.但有人说,此时,queueA被保留,queueA被阻止 - >导致死锁,这让我感到困惑

我已经阅读了很多与此相关的线程,比如使用dispatch_sync进行死锁,为什么我们不能在当前队列中使用dispatch_sync?,为什么这个dispatch_sync()调用冻结?,...但是找不到好的解释.有人说dispatch_sync阻止队列,有人说它阻止当前线程,...... :(

那为什么会导致僵局呢?

deadlock sync dispatch grand-central-dispatch ios

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

对 socket.on() 回调的调度操作

所以基本上我得到了这个套接字,它工作正常,向我发送“新订单”消息。

我正在使用 redux,我想分派一个动作,而不是减速器会得到它并且我的商店会被更新。但这段代码没有做任何事情!

socket.on('new order', (order) => {    
    return (dispatch) => {
      dispatch(socketNewOrder(order));
    }
});
Run Code Online (Sandbox Code Playgroud)

这是我的操作,它位于同一个文件中:

export const socketNewOrder = (order) => {
  return {
    type: 'SOCKET_NEW_ORDER',
    payload: order
  }
}
Run Code Online (Sandbox Code Playgroud)

我也试着这样称呼我的行动:

socket.on('new order', (order) => {    
    socketNewOrder(order));        
});
Run Code Online (Sandbox Code Playgroud)

它确实调用了动作,但我的减速器没有“听到”动作!:(

我听说了一些关于使用中间件的消息,但我就是不知道如何去做。

谁能解释我如何在接收套接字消息时使用中间件来调度操作,以及为什么我的代码不起作用?感谢和抱歉新手问题

sockets action dispatch socket.io redux

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

有什么方法可以在 Laravel 5 中发送闭包吗?

在 laravel 4 中,我可以使用 将闭包推送到队列上queue::push(function...),但这在 laravel 5 中不再有效。相反,我似乎必须为要推送到队列中的每个函数创建一个自定义 Job 类。

由于我想要推送的函数只有几行长,并且只在一个地方使用过,所以为每种情况编写一个完整的类似乎真的是浪费时间和空间。

我目前能想到的最好的“解决方案”是要么有一个辅助函数,它使用 PHP 的反射方法在调用时动态生成一个新类,要么有一个接受闭包作为参数的通用作业,即dispatch(new ClosureJob(function(){...}));

这些对我来说似乎不太理想。还有其他方法可以做到这一点吗?或者我必须实施其中之一吗?

queue closures dispatch laravel-5

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

C 中的“本地”标签和跳转表实现

我正在尝试用 C 制作一个基于宏的跳转表。

下面是一些示例代码:

#include "stdio.h"

#define GOTO(X) static void* caseArg[] = {&&I0, &&R0, &&S0, &&F0, &&G0, &&H0}; \
    goto *caseArg[X];

#define FINISH() goto caseEnd;

int main(int argc, char** argv) {

    GOTO(1);

    I0: printf("in I0\n"); FINISH();
    R0: printf("in R0\n"); FINISH();
    S0: printf("in R0\n"); FINISH();
    F0: printf("in R0\n"); FINISH();
    G0: printf("in R0\n"); FINISH();
    H0: printf("in R0\n"); FINISH();

    caseEnd:;

}
Run Code Online (Sandbox Code Playgroud)

可能的标签(I0、R0 等)必须相同。

问题是:我希望能够在同一个源文件的不同范围内使用同一个宏。但是,编译器抱怨标签已定义。

我想要达到的目标:

int main(int argc, char** argv) {

     { // scope 1 

        GOTO(1);

        I0: printf("in I0\n"); FINISH();
        R0: printf("in …
Run Code Online (Sandbox Code Playgroud)

c macros goto jump-table dispatch

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

如何正确使用 Redux Toolkit 中的 createAsyncThunk 和 TypeScript?

我想为我所从事的项目内的用户创建一个 Redux 切片。我有这个代码沙箱fetchAll,我不知道为什么文件中的调用出现以下错误MyButton.tsx

fetchAll(arg:any): AsyncThunkAction<未知,任意,{}>

预期有 1 个参数,但得到 0 个。

createAsyncThunk.d.ts(107, 118):未提供“arg”参数。

我在我从事的项目中有类似的代码,但它没有这个错误。我希望它能像在其他类似文件中一样工作。

沙箱中的相关文件:

我的按钮.tsx

import React from "react";
import { useDispatch } from "react-redux";
import { fetchAll } from "./redux/usersSlice";

export const MyButton = ({ children }: { children: any }) => {
  const dispatch = useDispatch();

  return (
    <button
      onClick={() => {
        dispatch(fetchAll()); // I get an error on this fetchAll() call
      }}
    >
      {children}
    </button>
  );
};
Run Code Online (Sandbox Code Playgroud)

fetchAll 的定义

export const fetchAll …
Run Code Online (Sandbox Code Playgroud)

dispatch typescript redux react-redux redux-toolkit

4
推荐指数
2
解决办法
7043
查看次数

我可以将 Arc&lt;dyn MyTrait&gt; 传递给需要 Arc&lt;impl MyTrait&gt; 的函数吗?

Jon Gjengset在Rust for Rustaceans中指出(强调我的):

\n
\n

当您\xe2\x80\x99 在静态和动态调度之间进行选择时,\n很少有明确的正确答案。不过,从广义上讲,您\xe2\x80\x99ll\n希望在库中使用静态调度,在二进制文件中使用动态调度。在库中,您希望允许用户决定哪种类型的调度最适合他们,因为您不知道他们的需求是什么。如果您使用动态调度,它们\xe2\x80\x99将被迫执行相同的操作,而如果您使用\n静态调度,它们可以选择是否使用动态调度。

\n
\n

我对此的解释是:

\n
    \n
  • 在库中应该使用:fn execute(x: Arc<impl MyTrait>) -> ...这是静态调度。

    \n
  • \n
  • 在二进制文件中:let x: Arc<dyn MyTrait> = Arc::new(my_obj)这是动态的。

    \n
  • \n
\n

然后我想调用execute(x),但编译器抱怨:

\n
error[E0277]: the size for values of type `dyn MyTrait` cannot be known at compilation time\n  --> src/main.rs:12:13\n   |\n12 |     execute(x);\n   |     ------- ^ doesn\'t have a size known at compile-time\n   |     |\n   |     required by a bound introduced …
Run Code Online (Sandbox Code Playgroud)

types traits dispatch rust

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

AS3从一个类到另一个类调度自定义事件

我想从Country()sto MenuButton()调度自定义事件;

CountryEvent

package  {
import flash.events.Event;

public class CountryEvent extends Event {

    public static const COUNTRY_HOVERED:String = "onCountryOver";

    private var _countryName:String = "";

    public function CountryEvent(type:String, countryName:String, bubbles:Boolean=true, cancelable:Boolean=false) {
        super(type, bubbles, cancelable);
        _countryName = countryName;
    }

    public function get countryName():String {
        return _countryName;
    }

    public override function clone():Event
    {
        return new CountryEvent(type,countryName,bubbles,cancelable);
    }
}
Run Code Online (Sandbox Code Playgroud)

} 国家类

package 
{

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;

    public class Country extends MovieClip
    {
        private var countryEvent:CountryEvent;


        public function Country()
        {
            this.addEventListener(MouseEvent.MOUSE_OVER,onMouseOver); …
Run Code Online (Sandbox Code Playgroud)

events actionscript-3 dispatch

3
推荐指数
1
解决办法
8887
查看次数