标签: refactoring

在 MonoDevelop 中覆盖/实现成员

我正在查看 MonoTouch 上的复数视频。有一次,培训师右键单击派生类的名称,在“重构”菜单中有一个函数可以覆盖/实现该类的成员。然而,当我点击(最新版本)时,我只看到“重命名”。

此链接中的人前段时间遇到了同样的问题,并包含了屏幕截图 - 但在 MonoTouch 讨论组中没有人回复他们:

http://monotouch.2284126.n4.nabble.com/Right-Click-Class-name-gt-Refactor-gt-Override-Implement-members-tt4655504.html#none

有没有人经历过(并解决了!)这个?

refactoring monodevelop xamarin.ios

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

根据列入白名单的 id 数组过滤响应对象

如何根据列入白名单的 id 数组过滤响应对象?

我有一个工作版本,但我不喜欢forEach这里的嵌套,我想知道是否有办法改进它?!

function WhitelistCtrl($scope) {
    var visible = [];
    var whitelist = [123, 456]; // items to be visible
    var response = [{
        id: 123,
        name: 'my object #1'
    }, {
        id: 456,
        name: 'my object #2'
    }, {
        id: 789,
        name: 'my object #3'
    }];

    angular.forEach(whitelist, function (id) {
        angular.forEach(response, function (item) {
            if (id === item.id) {
                visible.push(item);
            }
        });
    });

}
Run Code Online (Sandbox Code Playgroud)

这是一个可以玩的 JSFiddle:http : //jsfiddle.net/gearsdigital/rv6vq2L7/

javascript performance refactoring angularjs

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

在没有自我的情况下重命名python中的类变量

不知道如何表达它,但这是交易。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为类以进行更好的封装。

但是,我在脚本中使用的所有变量都需要转换为对象变量。我会改变类似的东西

x = 5
Run Code Online (Sandbox Code Playgroud)

进入

self.x = 5
Run Code Online (Sandbox Code Playgroud)

做完之后,脚本中的所有函数都需要变成类的方法,然而,大多数方法都是数学公式,重构一些像这样干净的东西

z = x ** y + x
Run Code Online (Sandbox Code Playgroud)

进入

z = self.x ** self.y + self.x
Run Code Online (Sandbox Code Playgroud)

真的很伤可读性。

因此,作为对此的解决方案,我一直在方法的开头输入这些非常尴尬的重命名:

def method(self, ...):
  x = self.x
  y = self.y
  ...
Run Code Online (Sandbox Code Playgroud)

它使公式可读,但输入所有重命名真的很痛苦,有没有更优雅的方法来做到这一点?

python refactoring

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

选择要使用的实例方法

我写了一些代码,它接受一堆对象,在每个对象上使用一个实例方法,并将实例方法返回的值放在一个列表中。

object_list # list of objects
value_list = [object.method() for obj in object_list]
Run Code Online (Sandbox Code Playgroud)

我在代码的很多不同地方都需要这种结构,它们之间的唯一区别是实例方法method总是不同的。

如果方法是函数,那么使用这里解释映射方法是没有问题的。可以用 做类似的事情exec,但是它不是很优雅,而且我不确定它在返回值方面如何工作:

def call_method(obj, method_name: str):
    return exec("obj." + method_name + "()")  # returns None
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方法来重构这个问题的代码?

python refactoring instance-methods python-3.x

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

在对象数组中查找匹配 id 的最佳方法?

如果我有这一系列电影 ID

movies = [28, 14, 100, 53, 37]
Run Code Online (Sandbox Code Playgroud)

和这个对象数组。

genres = [
      {id: 28, name: "Action"},
      {id: 10770, name: "TV Movie"},
      {id: 53, name: "Thriller"},
      {id: 10752, name: "War"},
      {id: 37, name: "Western"}
    ]
Run Code Online (Sandbox Code Playgroud)

我想返回一个匹配 id 的数组。例如 ['动作'、'惊悚'、'西部']。

我已经有了解决方案,但觉得它可以更好。重构此代码的最佳方法是什么?谢谢。

genre_array = []
movies.forEach(function(e){
  genres.forEach(function(element){
    if (element.id == e) {
     genre_array.push(element.name)
    } 
  });
});
Run Code Online (Sandbox Code Playgroud)

javascript arrays refactoring

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

一种遍历列表以比较两个相邻元素的更优雅的方法

我有一种方法可以这样工作:

  1. 以3个参数作为参数-带有日期(按升序排列),间隔单位和间隔值的列表
  2. 检查下一个元素是否不超过上一个日期(间隔)。换句话说,给定间隔30分钟,上一个-10:00,下一个10:29-进一步迭代。如果下一个是10:31-打破它,然后连续返回日期计数器。

它的代码如下:

public static void main(String[] args)
{
    Date d1 = new Date();
    Date d2 = addOrSubtractTimeUnitFromDate(d1, Calendar.MINUTE, 10, true);
    Date d3 = addOrSubtractTimeUnitFromDate(d2, Calendar.MINUTE, 10, true);
    Date d4 = addOrSubtractTimeUnitFromDate(d3, Calendar.MINUTE, 10, true);
    Date d5 = addOrSubtractTimeUnitFromDate(d4, Calendar.MINUTE, 10, true);
    Date d6 = addOrSubtractTimeUnitFromDate(d5, Calendar.MINUTE, 10, true);

    List<Date> threeDates = new ArrayList<>();
    threeDates.add(d1);
    threeDates.add(d2);
    threeDates.add(d3);
    threeDates.add(d4);
    threeDates.add(d5);
    threeDates.add(d6);

    System.out.println(returnDatesInARowCounter(threeDates, Calendar.MINUTE, 30));
}

private static int returnDatesInARowCounter(List<Date> allDates, int intervalBetween2DatesTimeUnit, int intervalValue)
{
    int datesInARowCounter = allDates.size() > …
Run Code Online (Sandbox Code Playgroud)

java refactoring loops date

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

我应该将lambda或functor用于比较功能吗?

我将C ++ 03项目重构为C ++ 11。

我有一个类,其中定义了一个仿函数用于排序:

class Widget
{
public:

  class SortByRules
  {
  public:
    bool operator()(const Widget &lhs, const Widget &rhs) const;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的项目中,此仿函数在各个地方都使用过。用法示例:

std::vector<Widget> widgets;

// ...

std::sort(widgets.begin(), widgets.end(), Widget::SortByRules());
Run Code Online (Sandbox Code Playgroud)

据我了解,在C ++ 11中应优先使用lambda函数。但是我不确定在这种情况下是否应该坚持使用仿函数,因为我想在整个项目的其他多个类中调用它。

我正在考虑将其重构为以下内容:

// .h
class Widget
{
public:
 Widget();
 std::function<bool(Widget&, Widget&)> SortByRules;
};

// .cpp
Widget::Widget() :
SortByRules([](Widget& lhs, Widget& rhs) { /* ... */ }
{
}
Run Code Online (Sandbox Code Playgroud)

这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?

c++ refactoring c++11

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

如何简化Rust中这种可怕的嵌套错误处理代码?

我正在写一个函数来计算积分图Vec<Vec<isize>>拉斯特,而无需使用任何外部包装箱。我正在尝试尽可能地习惯这样做,但是我遇到了一些错误处理的障碍。

基本上,我想做的就是在Wikipedia页面上提到的:

在(x,y)处的总面积表中的值仅为:

其中i提供了来自网格的值以及I来自表的先前计算的值。显然,如果x或y为0,则其中某些将不存在,在这种情况下,它们将被替换0

但是,值得注意的是,如果I(x, y - 1)即使存在也不y - 1存在,那么我们正在使用的网格实际上是非矩形的,NonRectError在这种情况下我们想返回一个。

在所有这些背景下,下面是代码:我需要防止由于减法引起的溢出错误,并NonRectError在特殊情况下返回:

fn compute_summed_area_table(grid: &Vec<Vec<isize>>) -> Result<Vec<Vec<isize>>, NonRectError> {
    let mut summed_area_table =
        vec![Vec::with_capacity(grid[0].len()); grid.len()];

    for (yi, row) in grid.iter().enumerate() {
        for (xi, &value) in row.iter().enumerate() {
            let (prev_row, prev_column_idx) = (
                yi.checked_sub(1).and_then(|i| summed_area_table.get(i)),
                xi.checked_sub(1)
            );

            let summed_values =
                value +
                // I(x, y - 1)
                match prev_row {
                    None => &0,
                    Some(prev_row_vec) …
Run Code Online (Sandbox Code Playgroud)

error-handling refactoring rust

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

Shell - 重构连接数字的字符串正则表达式

我正在尝试重构我的脚本以使其可读并且仍然可以在一行中使用。

我的脚本做:

  • 字符串 (GXXRXXCXX) 上的正则表达式将所有数字匹配到一个数组中
  • 为数组中的所有字符串编号的字符串 (0X -> X)
  • '.'连接所有数字 分隔符
  • 最后,它在字符串的开头添加一个“v”

我在重构中最挣扎的部分是在不使用任何 tmp 变量的情况下将数组编号 (3 2 1) 连接到连接 (3.2.1) 中。

代码 :

GOROCO=G03R02C01
version=v$(tmp=( $(grep -Eo '[[:digit:]]+' <<< $GOROCO | bc) ); echo "${tmp[@]}" | sed 's/ /./g')
Run Code Online (Sandbox Code Playgroud)

过程 :

G03R02C01
03 02 01
3 2 1
3.2.1
v3.2.1
Run Code Online (Sandbox Code Playgroud)

regex bash shell refactoring sed

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

如何重构返回 List&lt;T&gt; 的 C# 代码?

我发现我多次重复此代码,并且希望得到一些帮助以正确重构它。我将如何传递我希望从通话中返回的类型列表?

masterData.PatternData = await GetMeetingData();
masterData.PatternDataDays = await GetMeetingDays();



    private async Task<List<MeetingPatternData>> GetMeetingData()
    {
        var retVal = new List<MeetingPatternData>();
        try
        {
            var client = ClientFactory.CreateClient("ServerAPI");
            retVal = await client.GetFromJsonAsync<List<MeetingPatternData>>("MeetingTimeManager/GetPatterns");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
        return retVal;
    }

    private async Task<List<MeetingPatternDays>> GetMeetingDays()
    {
        var retVal = new List<MeetingPatternDays>();
        try
        {
            var client = ClientFactory.CreateClient("ServerAPI");
            retVal = await client.GetFromJsonAsync<List<MeetingPatternDays>>("MeetingTimeManager/GetDays");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
        return retVal;
    }
Run Code Online (Sandbox Code Playgroud)

c# api refactoring blazor

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