我正在查看 MonoTouch 上的复数视频。有一次,培训师右键单击派生类的名称,在“重构”菜单中有一个函数可以覆盖/实现该类的成员。然而,当我点击(最新版本)时,我只看到“重命名”。
此链接中的人前段时间遇到了同样的问题,并包含了屏幕截图 - 但在 MonoTouch 讨论组中没有人回复他们:
有没有人经历过(并解决了!)这个?
如何根据列入白名单的 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/
不知道如何表达它,但这是交易。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为类以进行更好的封装。
但是,我在脚本中使用的所有变量都需要转换为对象变量。我会改变类似的东西
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)
它使公式可读,但输入所有重命名真的很痛苦,有没有更优雅的方法来做到这一点?
我写了一些代码,它接受一堆对象,在每个对象上使用一个实例方法,并将实例方法返回的值放在一个列表中。
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)
有没有一种优雅的方法来重构这个问题的代码?
如果我有这一系列电影 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) 我有一种方法可以这样工作:
它的代码如下:
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) 我将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)
这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?
我正在写一个函数来计算积分图的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) 我正在尝试重构我的脚本以使其可读并且仍然可以在一行中使用。
我的脚本做:
我在重构中最挣扎的部分是在不使用任何 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) 我发现我多次重复此代码,并且希望得到一些帮助以正确重构它。我将如何传递我希望从通话中返回的类型列表?
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) refactoring ×10
javascript ×2
python ×2
angularjs ×1
api ×1
arrays ×1
bash ×1
blazor ×1
c# ×1
c++ ×1
c++11 ×1
date ×1
java ×1
loops ×1
monodevelop ×1
performance ×1
python-3.x ×1
regex ×1
rust ×1
sed ×1
shell ×1
xamarin.ios ×1