这是我在Rust文档中看到的两个函数签名:
fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }
Run Code Online (Sandbox Code Playgroud)
为什么不同的位置mut?
似乎第一个函数也可以声明为
fn modify_foo(foo: mut Box<i32>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud) 关于Scala,我有些不明白的地方collection.mutable.Seq.它描述了所有可变序列的接口,但是我没有看到在不创建新序列的情况下附加或前置元素的方法.我错过了一些明显的东西吗?
有:+和+:分别追加和前插,但他们创造新的集合-为了与不变序列的行为是一致的,我想.这是好的,但为什么会出现不一样的方法+=和+=:,如ArrayBuffer和ListBuffer定义,用于就地追加和预先准备?这是否意味着我不能引用一个可变的seq,它被键入,collection.mutable.Seq就像我想要就地添加一样?
再一次,我一定错过了一些明显的东西,却找不到什么......
据我所知,
可以更改可变字符串,并且不能更改不可变字符串.
在这里,我想像这样更改String的值,
String str="Good";
str=str+" Morning";
Run Code Online (Sandbox Code Playgroud)
和其他方式是,
StringBuffer str= new StringBuffer("Good");
str.append(" Morning");
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我试图改变其价值str.任何人都可以告诉我,这两种情况有什么不同,并给我清晰的可变和不可变对象的图片.
我通常del在我的代码中使用删除对象:
>>> array = [4, 6, 7, 'hello', 8]
>>> del(array[array.index('hello')])
>>> array
[4, 6, 7, 8]
>>>
Run Code Online (Sandbox Code Playgroud)
但我听到很多人说使用del是unpythonic.使用del不好的做法?
>>> array = [4, 6, 7, 'hello', 8]
>>> array[array.index('hello'):array.index('hello')+1] = ''
>>> array
[4, 6, 7, 8]
>>>
Run Code Online (Sandbox Code Playgroud)
如果没有,为什么有很多方法可以在python中完成同样的事情?一个比其他人好吗?
选项1:使用 del
>>> arr = [5, 7, 2, 3]
>>> del(arr[1])
>>> arr
[5, 2, 3]
>>>
Run Code Online (Sandbox Code Playgroud)
选项2:使用 list.remove()
>>> arr = [5, 7, 2, 3]
>>> arr.remove(7)
>>> arr
[5, 2, 3] …Run Code Online (Sandbox Code Playgroud) 我在JavaScript中编写一个Array派生类,需要知道要重载哪些函数,这样我才能知道对数组所做的更改.
我知道Array.push()并且Array.splice()正在变异.是否有其他任何明确的清单?
这与此问题相反:为什么字符串在Java和.NET中不可变?
这种选择是否仅仅因为操作(追加等)在可变字符串上有效,或者是否有其他原因而在Ruby中进行?
(如果它只是效率,那似乎很奇怪,因为Ruby的设计似乎不会高度重视促进有效的实施.)
我已经定义了一个类,我希望公共属性看起来好像是由一个NSArray.这很简单,但在我的情况下,实际的支持ivar是NSMutableArray:
@interface Foo
{
NSMutableArray* array;
}
@property (nonatomic, retain) NSArray* array;
@end
Run Code Online (Sandbox Code Playgroud)
在我的实现文件(*.m)我@synthesize的属性,但我立即遇到警告,因为使用self.words与尝试修改一样NSArray.
这样做的正确方法是什么?
谢谢!
它是否缺乏时间,某些技术问题还是有理由不存在?
我有一个简短的问题:
假设我有一个(可变的)位图,我需要修改(添加图像,文本等...).
我没有考虑使用许多特殊的类来绘制画布(画布,画布,矩阵等),而是考虑为什么不使用Android的内置类来完成这项任务,只有当我需要真正定制的操作时,我仍然可以使用画布?
因此,例如,为了在位图上显示任何类型的视图(当然没有父视图),我可以调用下一个函数:
public void drawViewToBitmap(Bitmap b, View v, Rect rect) {
Canvas c = new Canvas(b);
// <= use rect to let the view to draw only into this boundary inside the bitmap
view.draw(c);
}
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?也许这就是它在幕后工作的方式?
我应该在绘图和画布创作之间的部分写什么?
编辑:我已经尝试了下一个代码,但它没有工作:
public void drawFromViewToCanvas(final View view, final Rect rect, final Canvas canvas) {
final int widthSpec = View.MeasureSpec.makeMeasureSpec(rect.width(), View.MeasureSpec.EXACTLY);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(rect.height(), View.MeasureSpec.EXACTLY);
view.measure(widthSpec, heightSpec);
// Lay the view out with the known dimensions
view.layout(0, 0, rect.width(), rect.height());
// …Run Code Online (Sandbox Code Playgroud) 在看了Herb Sutter的演讲" 你不知道const和mutable"之后,我想知道我是否应该总是将互斥量定义为可变的?如果是的话,我想同样适用于任何同步容器(例如tbb::concurrent_queue)?
一些背景:在他的演讲中,他说const == mutable == thread-safe,并且std::mutex每个定义都是线程安全的.
关于这个话题也有相关的问题,const在C++ 11中是否意味着线程安全.
编辑:
在这里,我发现了一个相关的问题(可能是重复的).不过,它在C++ 11之前被问过.也许这会产生影响.
mutable ×10
immutability ×2
scala ×2
string ×2
android ×1
arrays ×1
bitmap ×1
c++ ×1
c++11 ×1
collections ×1
const ×1
draw ×1
ios ×1
java ×1
javascript ×1
map ×1
nsarray ×1
objective-c ×1
python ×1
reference ×1
ruby ×1
rust ×1
sequence ×1
side-effects ×1
slice ×1
stringbuffer ×1
syntax ×1
tree ×1
variables ×1