标签: side-effects

使用NSArray的makeObjectsPerformSelector来产生副作用

我在Objective-C程序中有一个FoA的NSArray.我想调用每个Foo的doIt函数,但是,根据文档,NSArray的makeObjectsPerformSelector函数不允许修改原始Foos .当调用doIt时,doIt选择器为每个Foo更改m数据成员.如何在NSArray中的每个Foo上有效地执行此功能?

@interface Foo : NSObject {
    NSString *m;
}

@property (nonatomic, retain) NSString *m;

-(void)doIt;

@end
Run Code Online (Sandbox Code Playgroud)

side-effects objective-c nsarray

0
推荐指数
1
解决办法
618
查看次数

Python副作用我不明白

def group_move(group, damper):
    # Make a copy to test values
    new = group

    # See what the original group value is
    print("Test = " + str(group.ctris[0].p1.x))
    dr = some float
    dx = some float
    dy = some float
    # Make changes to new
    moveGroup(new, dr, dx, dy)
    # See if those changes produce allowed values
    if (off_board_check(new) == 1):
        damper += 2.0
        # Reset to original to try again
        print("Test Here = " + str(group.ctris[0].p1.x))
        group_move(group, damper)
    else:
        # If …
Run Code Online (Sandbox Code Playgroud)

python side-effects

0
推荐指数
1
解决办法
552
查看次数

Scala中方法副作用的含义

Martin Odersky的书"Scala编程"讲述了避免有副作用的方法.例如,以下方法具有写入标准输出流的副作用.

def printArgs(args: Array[String]): Unit = {
  args.foreach(println)
}
Run Code Online (Sandbox Code Playgroud)

然后它说,更好的方法是定义一个格式化传递的args进行打印的方法,但只返回格式化的字符串,如:

def formatArgs(args: Array[String]) = args.mkString("\n")
Run Code Online (Sandbox Code Playgroud)

我不明白这两种方法在概念上是如何不同的.总之,我们的目标是打印一个字符串.如果我们不在目标方法中这样做,那么客户端代码会这样做,这意味着我们只是转移代码导致从一个地方到另一个地方的"副作用".

functional-programming scala side-effects

0
推荐指数
1
解决办法
298
查看次数

无副作用的日志记录

我有一个Scala包,应该从上到下记录,尽管我希望它是纯粹的功能。有没有办法在不破坏功能风格的情况下实现日志记录?

functional-programming scala side-effects

0
推荐指数
1
解决办法
129
查看次数

Haskells 绑定运算符和 >> 运算符及其关系

我最近发布了一个关于>>操作员的问题,因为尽管我已经阅读了 LYAH walk the linee 部分,但我的理解仍然存在一些差距。下面是我偶然发现的一些代码/MVE,因为它们引发了以下思考。我怎么能得到代码后面的输出?是否不会出现没有向绑定运算符提供参数的情况,因此无法str连接任何参数,否则它们会使用>>=定义中所示的绑定,并且结果不应该与预期的不相似结果如下:

import Control.Monad
import Data.List

data Value =
    NoneVal
  | IntVal Int
  | ListVal [Value]
  deriving (Eq, Show, Read)

data RErr = EBVar String  | EBInt Int
  deriving (Eq, Show)

newtype Compuptaton a = Computation {runComputation :: [(String, Value)] -> (Either RErr a, [String]) }

instance Monad Computation where
  return a = Computation( \_ -> (Right a, []))
  m >>= f = Computation(\env -> case runComputation m env of …
Run Code Online (Sandbox Code Playgroud)

monads haskell functional-programming side-effects

0
推荐指数
1
解决办法
144
查看次数

在c中使用运算符' - >'的奇怪副作用

我在C中编写的代码中使用运算符' - >'时得到了这种奇怪的副作用.我使用的指针 - > on,被改为有一些垃圾.

进一步来说:

我有以下结构:

typedef void* ListElement ;

typedef  struct List_t* List ;

typedef struct Node_t* Node;

Struct Node_t {
  ListElement data ;
  Node next;
}

Struct List_t {
  Node* head;
  Node* current
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下内容时ListGetFirst(),我得到了有线行为:

ListElement ListGetFirst(List list)
{
  if( list == NULL || list->head==NULL)
  {
    return NULL;
  }
  list->current=list->head;
  Node* head =list->head; // here is the problem
  ListElement data = (*head)->data;
  return data;
}
Run Code Online (Sandbox Code Playgroud)

当我使用调试器时,我发现指针列表 - >头部在标记的前述行上发生了变化.

我真的不知道为什么,而且我不知道' - >'会有副作用

提前致谢

c pointers linked-list side-effects

-2
推荐指数
1
解决办法
275
查看次数