我有一个像这样定义的协议:
@protocol Container
- (BOOL)putStuff: (Stuff *) theStuff;
@end
Run Code Online (Sandbox Code Playgroud)
以及以下声明的类:
@interface Stuff : NSObject {
}
@property(readwrite,nonatomic,retain) NSObject <Container> * containerHoldingMe;
@end
Run Code Online (Sandbox Code Playgroud)
我在putStuff声明中得到一个错误 - "预期类型".但是,如果我将方法的参数更改为NSObject,它编译正常 - 所以,我认为Objective C不允许循环依赖.
在我正在工作的实际课程中,我想实现两个 - 但是,如何在没有它的情况下实现这样的逻辑?
我有一个Hashtable,其中包含解析某个JSON的结果:decodedJson.decodedJson["key"]可以是int,double,float,decimal或string.我需要将它转换为十进制,如果它是一个数字(我计划用它(decimal)decodedJson["key"]),或者如果不是则处理错误.
什么是最有效的方法来确定?
我有这样的事情:
class Node
{
protected Node Parent
{
get; private set;
}
}
class NodeDerived : Node
{
void SomeMethod()
{
Node parentIterator = this.Parent;
while (parentIterator != null)
{
// ... some logic
parentIterator = parentIterator.Parent; // Here's the error
}
}
}
Run Code Online (Sandbox Code Playgroud)
但由于一些奇怪的原因,我无法访问parentIterator.Parent属性:
error CS1540: Cannot access protected member `Node.Parent' via a qualifier of type `Node'. The qualifier must be of type `NodeChild' or derived from it
Run Code Online (Sandbox Code Playgroud)
为什么会这样?顺便说一句,我还发现,虽然我可以访问this.Parent,但我无法访问((Node) this).Parent.
我有2个静态方法,只有一个做了我想做的事情,我无法弄清楚另一个有什么问题.更具体地说,Method_A似乎不生成其参数的实例,并且在main中创建的同一变量上运行,而B似乎在实例上运行.
public static Method_A(Vector2[] in, int n)
{
for(int i = 0; i < in.Length; i++)
{
in[i].x = n;
in[i].y = n;
}
}
public static Method_B(Vector2 in, int n)
{
in.x = n;
in.y = n;
}
Run Code Online (Sandbox Code Playgroud)
然后从主要:
// This works, and changes values directly in "test"
Vector2[] test = meshFilter.uv;
Method_A(test, n);
meshFilter.uv = test;
// This FAILS, doesn't affect test
Vector2 test = meshFilter.uv[i];
Method_B(test, n);
meshFilter.uv[i] = test;
// This also FAILS, doesn't affect test …Run Code Online (Sandbox Code Playgroud) 我有一个sendMessage来自第三方库的函数,带有参数:
function sendMessage(chatId: number | string, text: string, extra?: tt.ExtraEditMessage)
Run Code Online (Sandbox Code Playgroud)
我想创建另一个函数来向特定用户发送消息。我希望这个函数具有原始函数的所有参数:
export async function sendMessageToAdmin(text: string, extra?: tt.ExtraEditMessage)
Run Code Online (Sandbox Code Playgroud)
但我希望此类型声明是 DRY 的,并在更新第三方依赖项时自动更新,因此我可以使用Parameters实用程序类型:
type SendMessageParameters = Parameters<sendMessage>
export async function sendMessageToAdmin(...parameters: SendMessageParameters)
Run Code Online (Sandbox Code Playgroud)
但是,我还想省略第一个参数 ,chatId因为我将自行设置它。不幸的是,Omit实用程序类型仅适用于属性,不适用于元组成员。
如何构造一个类型,该类型将具有函数的所有参数,而不是第一个参数或具有特定名称的参数?
我有一个问题:如果我尝试使用Texture2D.ReadPixels创建屏幕截图,游戏会在某些设备上崩溃(最值得注意的是,iPod 4G).据说,它是因为内存不足而发生的.在创建屏幕截图之前,我想检测一下,如果我可以安全地分配所需的内存量,并且如果我想我会崩溃就向玩家显示警告.
但是,似乎纹理之类的资源是在Mono VM之外进行管理的.当我有大约16mb的地图集时,System.GC.GetTotalMemory返回9mb.所以,似乎我必须为此编写一个插件.
(有一节描述我没有收到低内存警告,但似乎我错了,在Objective-C级别,警告成功提出).
如何在不崩溃的情况下获得可以分配的"免费"内存量?可能有其他方法来实现我想要的功能吗?
这是断言.在什么样的合理情况下它会失败,为什么游戏会检查呢?
因此,在本教程的帮助下,我决定在我的node.js应用程序中添加一些单元测试.我的gruntfile似乎没问题,当我输入grunt nodeunit我的唯一测试运行就好了,但在那之后,它崩溃了错误Fatal error: Cannot find module 'tap':
$> grunt nodeunit
Running "nodeunit:all" (nodeunit) task
Testing db.test.js
.OK
Fatal error: Cannot find module 'tap'
Run Code Online (Sandbox Code Playgroud)
我对这个模块一无所知,但是在搞砸之后,似乎这是nodeunit需要的东西.事实上,它$MY_NODE_APP/node_modules/nodeunit/node_modules/tap存在:存在,当我启动节点$MY_NODE_APP/node_modules/nodeunit并输入require('tap')交互式控制台时,我得到一些带有很多东西的对象,这给我的印象是它应该正常工作.
所以,显而易见的问题是:为什么我会收到此错误,我该如何解决?
Gruntfile:
module.exports = function(grunt) {
grunt.initConfig({
nodeunit: {
all: ['./**/*.test.js']
}
});
grunt.loadNpmTasks('grunt-contrib-nodeunit');
};
Run Code Online (Sandbox Code Playgroud)
更新:安装tap到我的项目,但它也没有帮助.
偶尔我会错误地输入一些标识符,但是不要注意,然后使用SuperTab扩展重复完全相同的错误.在Sublime中,我会使用多光标快速编辑此错字的所有实例.打字:%s/Identfier/Identifier/g需要更长时间; 我怎样才能更快更有效地做同样的事情?
我只是在学习Haskell,发现自己为作业分配了以下代码:
eval :: ExprT -> Integer
eval (Lit x) = x
eval (Add x y) = (eval x) + (eval y)
eval (Mul x y) = (eval x) * (eval y)
evalMayBe :: Maybe ExprT -> Maybe Integer
evalMayBe Nothing = Nothing
evalMayBe (Just x) = Just (eval x)
Run Code Online (Sandbox Code Playgroud)
第二个函数似乎有点多余,所以我写了一个转换器:
toMayBe :: (a -> b) -> Maybe a -> Maybe b
toMayBe _ Nothing = Nothing
toMayBe f (Just x) = Just (f x)
Run Code Online (Sandbox Code Playgroud)
并将功能重写为
evalMayBe :: Maybe ExprT -> …Run Code Online (Sandbox Code Playgroud)