いてつくブログ

2ちゃんねるのスレッドをコピペしてまとめてみるブログ

メソッド

PC等C#, C♯, C#相談室 Part74

1 :デフォルトの名無しさん:2012/07/14(土) 13:52:30.23
前スレ
C#, C♯, C#相談室 Part73
http://toro.2ch.net/test/read.cgi/tech/1338512087/

Visual Studio 2010 Express
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx

180 :デフォルトの名無しさん:2012/07/27(金) 12:03:57.13
すんません、C#でこういうことできますか?

this.txtbox1.text="fuga";

a="this.txtbox1"; //または a="this.txtbox1.text";
&a.text="hoge"; //または &a="hoge";

b=this.txtbox1.text;
//b 出→ hoge

これの名称もわからず直な質問ですが理解できた方おしえてください。

191 :デフォルトの名無しさん:2012/07/27(金) 20:20:13.60
アプリをずっと回しているとメモリをガンガン消費しやがるな。



192 :デフォルトの名無しさん:2012/07/27(金) 20:21:06.40
GC.collect();

ってやっても意味が無いのか?

193 :デフォルトの名無しさん:2012/07/27(金) 21:12:21.63
>>191
環境と再現コード

194 :デフォルトの名無しさん:2012/07/27(金) 21:45:59.56
>>192-193
99%釣りだから触るな

196 :デフォルトの名無しさん:2012/07/27(金) 22:16:45.26
>>193
timerイベントの中でガリガリやってるので・・・
もうちょっとあたりをつけてみます。

>>194
釣りじゃねーよ。はげ。

200 :デフォルトの名無しさん:2012/07/27(金) 22:26:21.34
あんな一言で自分のバグ以外に原因を追求しようとするなんて
釣りじゃなかったらただの初心者だろw

201 :デフォルトの名無しさん:2012/07/27(金) 22:51:12.82
>>200
Webbrowser Navigate でメモリを消費してるっぽい。
調べてみたらどうも既知の問題みたいだな。

まいった。どうしようか。チックイベントでやってんだが。

218 :デフォルトの名無しさん:2012/07/28(土) 09:14:32.91
>>180です、メニューとかはメインFormを動的に作成させるよう仕込んだらDBのデータ元でメニュー管理や作成はできました。
ただFormなのですが、、説明が。。ぶっちゃけると
FormHoge.cs
FormHoge.Designer.cs
ってファイルをディレクトリから拾ってきて動的に実行したいって事なんです。。MDIFormで例をあげると
親だけはプロジェクトからコンパイルなどを行い。子Formらはコンパイルせず、えっと。。ファイルから立ち上げる。。みたいな?
説明むりスマソ
phpクラス読み込んでるんと似たような感じです。。
またはForm単一でコンパイルしたファイルみたいなのあるんですかね?

たぶん何いってんだこいつって思いでしょうが、説明がうまくできません、すまん

264 :デフォルトの名無しさん:2012/07/30(月) 17:51:42.68
ちょいと相談に乗ってくれ
テキストファイルを解析するツール作ろうとしてるんだけど
その入力フォーマットが空行で区切られたブロック毎に振り分け先を変えるってもの
ブロックの種類は、中に含まれてる特定の文字パターンで決まる
最初正規表現でやろうと思ったんだけど、複数行だと上手くヒットしない
このまま正規表現で進めていいものか不安になってきた
もしもっとマッチする技術があるなら教えて欲しい

297 :デフォルトの名無しさん:2012/08/01(水) 14:56:08.08
別スレッドで処理しろってのは正しいけど、Threadクラスはダメだって。
あれは生で使うものじゃない。
.NET 4以降ならTask、それ以前ならBackgroundWorkerとか。

321 :デフォルトの名無しさん:2012/08/01(水) 22:48:05.88
なんで、スレッドの話になるとスレッドがあれるんだろ?

さて、それはさておき質問させてください。

mene_strip コントロールをを初めて使い始めたんですけど、
マウスが上位階層の項目の上にフォーカスがあたったら
子要素を展開させたいんですけどどうすれば良いでしょうか?

335 :321:2012/08/02(木) 20:44:48.09
そんな事より誰か

オラにアイデアおぉううう

336 :デフォルトの名無しさん:2012/08/02(木) 20:49:17.25
>>>335
Windows Formのならデフォでそういう動作になってると思うんだけど...


337 :321:2012/08/02(木) 20:50:30.38
>>336
WEB系の開発が多かったから

JavaScriptのHoverイベントみたく展開したいのですよ。
それがどうもユーザライクな動きに見えます。

339 :デフォルトの名無しさん:2012/08/02(木) 20:57:08.55
>>337
言ってることがよくわからんが、だからデフォでそういう動作になってるって。

っていうか、たぶん問題の内容が伝わってないんだな。
最低でも他人に問題が伝わるように書かないと誰も回答してくれないと思うよ。

361 :デフォルトの名無しさん:2012/08/04(土) 17:50:35.62
C#のWindowsFormからデータ取得を押した時に
Webサーバ側で基本認証されたサイト上にID・PASSを送信し
認証が突破された場合には、
WEBサーバから特定のデータをクライアントに戻したいと思います。

これを実現する為にはどうすれば良いのでしょうか?

■図

Windows Form

実行 ボタンの押下

ID=takesi PASS=komaneti

認証突破

http://datatoruzo.com/get_data.php

"komaneti,komaneti2,komaneti3" をクライアントに戻す。


362 :デフォルトの名無しさん:2012/08/04(土) 18:12:18.65
突破ってなんか攻撃しているかのようだな

363 :デフォルトの名無しさん:2012/08/04(土) 18:19:02.72
>>361
認証が必要なページをダウンロードする
http://dobon.net/vb/dotnet/internet/usecredentials.html

サーバーサイドのphpの方は知ったことではないので適当にやってくれ

366 :デフォルトの名無しさん:2012/08/04(土) 20:30:25.71
>>363
サンキューやってみる。
DLってのが若干気になるけどね。

>>362
自分のサーバだから何をしようと勝手でしょ?



390 :デフォルトの名無しさん:2012/08/07(火) 13:55:49.60
http://www.02.246.ne.jp/~torutk/javahow2/commandline.html#doc1_id41
ここのサイトの

public class MyApplication {
private static int number;
private static String name;

public static void main(final String[] args) {
parseOptions(args);
:
}

private static void parseOptions(final String[] args) {
if (args.length<2) {
System.err.println("引数指定が不足です。");
System.exit(1);
}
number = Integer.parseInt(args[0]);
name = args[1];
}
}

このソースてすが
parseOptions(args);
この部分で引数としてargsを渡してるけど、
argsの中身ってつまりな何なのかわかりません…

ご教授お願いします。

443 :デフォルトの名無しさん:2012/08/09(木) 23:18:14.45
C#でエクセルを扱うアプリケーションを作ろうとして、例えば、あるセル番地を読み込むって場合に


var hage = sheet.Cells[1, 1];


ってハードコーディングしてしまうと、将来的にセル番地に変更が出たときに面倒なので変数で置き換えたいんです。
これ自体Excel VBAなどでは常識のような作法ですが、
Excel VBAの場合、適当なモジュールにConstでセル番地を宣言していましたが、
C#の場合は、何処にそういう定数を書くべきなのでしょうか?


(1) 外部の人間に保守・更新をする可能性がある場合、外部ファイルに定義する。
(2) 外部の人間は保守・更新をする可能性がない場合、内部ファイルにfinal変数で定義する。


と思っているのですが、(1)は、外部ファイル参照のオーバーヘッドがやや心配ですし、
そもそも、どういうファイルに定義するべきなのかも分かりません。

resxファイル?
txtファイル?
iniファイル?

どれを使うのが妥当なのでしょうか?

470 :デフォルトの名無しさん:2012/08/12(日) 10:06:46.29
.Net Framework 4.0 をWindows XP に入れて
同じプログラムを実行しているんですが

3台のうち1台のみ正常に動作し
他の2台については動きが怪しいです。

アプリは起動するものの
実行中にエラーは出ないものの特定の処理をスキップしている様なのです。

ここで疑問なのは、仮にプログラムのバグであれば3台とも
動かないハズなのですが1台だけ問題無く動くのです。

Windows 7 のマシンでやると全て正常に動作しています。

536 :デフォルトの名無しさん:2012/08/18(土) 02:58:57.36
An unmanaged resources are still unmanaged even if we use IDisposable.
The IDisposable just defines a general way to release some resources.

An managed resources are released automatically because GC will do the right thing at last, but it is not for unmanaged resources.

Therefore, a way is prepared for programmers that the resources to be released correctly, that is IDisposable.

537 :デフォルトの名無しさん:2012/08/18(土) 03:25:13.45
Corrected version of >>536

[For foreigners]

Unmanaged resources are still unmanaged even if we use IDisposable.
IDisposable just defines a general way to release some resources.

Managed resources are released automatically because GC will eventualy do the right thing, but it is not for unmanaged resources.

Therefore, a method is prepared for programmers so that the resources will be released correctly, that is the IDisposable.

541 :デフォルトの名無しさん:2012/08/18(土) 14:46:59.50
>>537
アンマネージドリソースはアンマネージドリソースだって言ってるだけだな。
言っちゃ悪いけど、ただの循環論だね。

問題は、最初から言ってるように内部でアンマネージドリソースを使ってるもの(例えばForm)をアンマネージドと
呼ぶべきかどうかじゃないのか。

548 :デフォルトの名無しさん:2012/08/18(土) 17:03:18.78
>>541
using,dispose,closeを呼ばないとファイナライザ走るまでメモリ以外のリソースが食いっぱなしになるならアンマネージド扱いしていい

551 :デフォルトの名無しさん:2012/08/18(土) 17:25:54.31
なるよ
だってアンマネージドリソースでもラップしてIDisposableを正しく実装したら
using Dispose Close ファイナライザのどれかでちゃんと解放してリソースリークから保護してくれる
これはすでにマネージドリソースそのもの

557 :デフォルトの名無しさん:2012/08/18(土) 17:51:10.03
>>551
残念ハズレ

665 :デフォルトの名無しさん:2012/08/23(木) 17:15:58.57
同じような話がスレが変わる後とにでてきて説明するのも疲れるな

674 :デフォルトの名無しさん:2012/08/23(木) 22:29:34.27
contentWindowでググれ
C#関係ないからもう来るな

675 :デフォルトの名無しさん:2012/08/23(木) 22:41:16.74
グーグルの検索なんてURLに検索文字列をエンコードしてリクエストするだけだカス

676 :デフォルトの名無しさん:2012/08/23(木) 22:44:07.66
初心者ほどクドイ真似したがるよな

695 :デフォルトの名無しさん:2012/08/23(木) 23:49:07.55
しかし、疑問があるな。
Google 検索 ボタンのソースを見ると↓になっていて、
typeにsubmitなんて記述が無いのに

<button id="gbqfba" aria-label="Google 検索" name="btnK" class="gbqfba gbqfba-hvr">
<span id="gbqfsa">Google 検索</span>
</button>

プログラムから追いかけると↓で正常に認識されてるんだよなぁ。不思議だ。。。
if (type.Equals("submit"))
{
//click

}

706 :デフォルトの名無しさん:2012/08/25(土) 09:39:05.97
プログラマのみなさんは2ちゃんブラウザは何を使っているの?

711 :デフォルトの名無しさん:2012/08/26(日) 18:54:29.29
質問なのですが、
class NumUpDownEx<T> {
 private T m_value;
private System.Windows.Forms.NumericUpDown m_ud; // これは適切に与えられる前提
 T Value { get (T)(object)m_ud.Value; } } // decimalをTにキャスト
 ...
}
は一応コンパイルできて動作もするのですが、(object)へのキャストを無くして、
decimalからTに直接キャストさせる方法って無いですか
(「decimalからTにキャストできる」ということを制約で与える等。)

729 :デフォルトの名無しさん:2012/08/27(月) 00:11:53.10

2chに一度に書き込める文字数は限られてるでしょ?

731 :デフォルトの名無しさん:2012/08/27(月) 00:27:18.44
>>729
こういう2ch専ブラのレスを表示するところをwebBrowserでやる場合に
こんな感じのコード書いたけど結果は上で書いたような動作するんだよ
http://ideone.com/oIgKB

740 :デフォルトの名無しさん:2012/08/27(月) 11:03:48.61
逆アセンブルされないアプリを作る場合
C++しかない?

747 :デフォルトの名無しさん:2012/08/27(月) 11:20:33.70
>>740
定番回答の三ヶ条
・お前の書いたコードなんて読みたがるやつは居ない
・カジュアルハック対策なら難読化しとけ
・隠したいデータはクライアントに渡すな

777 :デフォルトの名無しさん:2012/08/27(月) 21:21:19.16
自分で自力で考えて書いたコードがたまたま権利違反してたらアウトっておかしくね?

778 :デフォルトの名無しさん:2012/08/27(月) 21:25:01.79
>>777
完全に自力で書いたなら問題ないでしょ。特許侵害は起こりうるけど。
GPLと気付かずネットに転がってたコード片をコピペしただけでも感染する。

783 :デフォルトの名無しさん:2012/08/27(月) 21:41:39.31
>>778
一番悲惨なパターンはネットに転がっていたソースはフリーで、
後になってGPL判明でまとめてGPL感染するパターンかなw

回避というか、気付いてしまったときに、他のライセンス、つまり、
マルチライセンスの確認するぐらいしか今のところ手はないのかな。


787 :デフォルトの名無しさん:2012/08/27(月) 21:55:21.06
>>783
それいいな
dobonみたいなサイト作って釣ってコピペグラマ全滅とかおもしろそう

800 :デフォルトの名無しさん:2012/08/27(月) 22:29:45.78
GPL汚染の範囲をハッキリさせるために、誰か裁判やりまくってくれないかな

802 :デフォルトの名無しさん:2012/08/27(月) 22:41:42.02
.NET Frameworkを配布物に同梱したらアウトだよね
Windowsにプリインストールされてる.NETを利用するのはどうなんだろうな
.NET Frameworkが「システムライブラリ」かというと微妙だし
OSに含まれてるかどうかはWindowsのバージョンにもよるしなあ

831 :デフォルトの名無しさん:2012/08/28(火) 21:44:37.73
簡易Webサーバもどきみたいのを作っているのですがマルチスレッドについて詳しく解説している書籍などはありませんでしょうか
知っていたらお願いします
.net 3.5なので非Taskであれば嬉しいです

833 :デフォルトの名無しさん:2012/08/28(火) 23:12:22.04
あと、Thread建ててその中で同期I/OとかSleep書いてるのもアウト。

834 :デフォルトの名無しさん:2012/08/28(火) 23:33:14.35
>>833
> あと、Thread建ててその中で同期I/O
Unityだとそうしないと固まるAPIがあったわ

847 :デフォルトの名無しさん:2012/08/29(水) 17:18:14.08
stringプロパティをもつクラスの配列を、AtoZでソートしたいんだけどどうすればいいかな。Listを使わずにする方法があれば教えろください

849 :デフォルトの名無しさん:2012/08/29(水) 17:46:27.97
Array.Sort(array, (x, y) => x..String型のプロパティ.CompareTo(y.String型のプロパティ))
または
array.OrderBy(x => x.String型のプロパティ) 配列にしたければ最後に.ToArray()を付ける
foreachするだけなら後者でToArrayなしがおすすめ

862 :デフォルトの名無しさん:2012/08/29(水) 20:19:54.08
>ConditionalWeakTable
そんなもん追加されたのか。WeakReferenceを使うほとんどの用途はこれで十分だな。
Javaの弱参照は「GCしてもいいけどなるべくGCしないでね」という指定ができるから
キャッシュに使いやすい

894 :デフォルトの名無しさん:2012/08/30(木) 21:31:46.25
>>862の話はJVMなどの設定じゃなくてクラスの違いじゃね?
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ref/WeakReference.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ref/SoftReference.html
弱参照(すぐ消える)とソフト参照(余裕があれば残してくれるかもしれない)

895 :デフォルトの名無しさん:2012/08/30(木) 21:34:36.11
>>894
そんなもんユーザーコードレベルで実装できるわけないんだから
実際の挙動は当然JVMの実装次第でしょ

899 :デフォルトの名無しさん:2012/08/30(木) 21:44:10.77
>>895
残してくれる「かもしれない」って書いてるだろ
実装次第だからネックにもならないし、設定も特定の実装に依存もしない

ドキュメントにあることだけを前提にすべき
少なくともキャッシュしたい意図をJVMに伝えることは出来る

904 :デフォルトの名無しさん:2012/08/30(木) 22:06:11.17
>JavaだけでなくC#でもな

取ってつけたような一行w

906 :デフォルトの名無しさん:2012/08/30(木) 22:09:00.00
○○だけではなくC#もな、と付け加えることによって、あらゆる話題を扱うことを可能にする
このままこのスレはWin32APIスレの二の舞になってしまうのか!?

ご期待ください

909 :デフォルトの名無しさん:2012/08/30(木) 23:43:16.90
>>904 >>906
Monoや.NETCFとまで書かないと読み取れないか
色々残念だな

923 :デフォルトの名無しさん:2012/08/31(金) 01:03:19.31
お前らって高学歴なの?
1年ぐらい勉強してもお前らの会話さっぱりわからないんだが
大学でちょろっとC言語習った程度の俺には無理なのか

935 :デフォルトの名無しさん:2012/09/01(土) 19:33:01.22
ある条件を満たすまでスレッドをブロックしたとき,
昔はwhile(!条件){ Sleep(1); }を使っていました。
しかし、SpinWait.SpinUntil()を使うとよいと聞いたのですが、
両者にどのような違いがあるのでしょうか?
また最近の実装方法を知りたいのですが、Taskは終了するまでブロックという
使い方が主なようですが、条件でブロックすることはできないでしょうか?


http://toro.2ch.net/test/read.cgi/tech/1342241550/l50/../人気ブログランキングへ

PC等Objective-C [ObjC part:7];

1 :デフォルトの名無しさん:2012/02/27(月) 17:21:46.39
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
 (Wikipedia:http://ja.wikipedia.org/wiki/Objective-C より)

Objective-C [ObjC part:6];
http://toro.2ch.net/test/read.cgi/tech/1313891268/

Objective-C [ObjC part:5];
http://hibari.2ch.net/test/read.cgi/tech/1279730299/

Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/

Objective-C [ObjC part:3];
http://pc12.2ch.net/test/read.cgi/tech/1186543111/

Objective-C
http://pc11.2ch.net/test/read.cgi/tech/1106983092/

Objective-C
http://pc5.2ch.net/tech/kako/990/990574267.html

2 :デフォルトの名無しさん:2012/02/27(月) 17:23:02.21
*** プログラム技術板 ***
【マック】Macintoshプログラミング質問箱
http://toro.2ch.net/test/read.cgi/tech/1113058054/

*** 新・mac板 ***
Cocoaはさっぱり!!! version.16
http://anago.2ch.net/test/read.cgi/mac/1307162542/

Macでプログラミング{10}
http://anago.2ch.net/test/read.cgi/mac/1248682344/

iPod touch/iPhone ネイティブアプリ製作 ver.16
http://anago.2ch.net/test/read.cgi/mac/1312723856/

3 :デフォルトの名無しさん:2012/02/27(月) 17:23:48.25
*** 本家 ***
Objective-C 2.0 プログラミング言語
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/

Introduction to The Objective-C 2.0 Programming Language
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

そのほか英語
http://developer.apple.com/documentation/Cocoa/ObjectiveCLanguage-date.html

*** 書籍 ***
荻原本 第3版
http://amazon.jp/dp/4797368276

HMDTダイナミック本
http://amazon.jp/dp/4861006414

195 :デフォルトの名無しさん:2012/06/03(日) 21:07:21.67
そんなんで満足するわけねーだろ!クソが
笑いなんて要らねーんだよ。
普通でいいんだよ。贅沢は言わない。普通で。
iphoneの開発はしたいから本買ってきたらアップルのどこかでダウンロードしろって書いてあったから
しようと思ったら英語でわからんかった。
お前らはどうやって分かった?
英語できるやつばかりか?

302 :デフォルトの名無しさん:2012/06/14(木) 23:01:12.97
[delegate AdelegateMethod:...]
と、Aクラス内(でなくてもいいんだけど)で実行され、delegate の AdelegateMethod:... が呼ばれるだけ
BクラスオブジェクトでA.delegate=self と事前にしているなら、delegateがBクラスオブジェクトなんだから、Bクラスのメソッド(AdelegateMethod:...)が呼ばれるだけ
としか言えない

304 :デフォルトの名無しさん:2012/06/14(木) 23:57:20.03
>>302
事前にA.delegate=selfしてる場合なんですけど、その時はAクラスのADelegateMethodの内容に書かれている内容→BクラスのAdelegateMethodに書かれている内容、という流れになるんですかね??

349 :デフォルトの名無しさん:2012/06/16(土) 05:13:41.84
クラスの実装においても, インスタンスヴァリアブルへの(バキューン!)は, イニシャライザを除いて,
インスタンスヴァリアブルに直接アクセスするのではなくアクセッサを介して行うべきだ,と聞いたのですが
インタフェースとインプリメンテーションでインスタンスヴァリアブルの挙動を変えたい場合,
ようするに外からはreadonlyにしたいけれども, クラス内ではreadwriteにしたいとき,どのようにすべきなのでしょうか?
インタフェースにはreadonlyで宣言し,実装ファイルではクラスエクステンションを用いて,
プロパティ宣言をreadwriteでオーバーロードしようとすると,
Property attribute in continuation class does not match the primary class
と怒られてしまうのです.

350 :デフォルトの名無しさん:2012/06/16(土) 05:37:08.38
>>349
インスタンス「変数」でいいよw

Hoge.h
@interface Hoge
@property (readonly) id hogeValue;
@end

Hoge.m
@interface Hoge ()
@property (readwrite) id hogeValue;
@end

@implementation Hoge
@synthesize hogeValue;
...
@end

で、別にエラーにならずに、ちゃんと機能するけど?



352 :デフォルトの名無しさん:2012/06/16(土) 06:21:32.30
>>350
ありがとうございます。
readwriteだけだと上手くいくんですね。
strong, readwrite, atomicだと警告が出ますが
readwriteだけでも強参照にはなるのでしょうか?

353 :デフォルトの名無しさん:2012/06/16(土) 09:12:54.31
>>352
readonly 以外の部分は同じじゃないとダメ

354 :デフォルトの名無しさん:2012/06/16(土) 15:51:20.56
>>353
ありがとうございます.
なぜか, readonlyの方だけstrongをつけていなかったのですが, 確かに, readonly/readwrite以外同じにしたら警告が消えました.
サブクラスの実装を, スーパークラスと同じ実装ファイル内に書いて, クラスエクステンションを使えば, 親クラスのプロパティを隠蔽しつつ, サブクラスからはアクセス出来るように出来るので, 便利ですね.
しかし, プロパティを介してアクセスを行うと,インスタンス変数にアクセスする度にアクセサメソッドの呼び出しの処理や, さらにatomicにしているといちいちロックの処理が挟まれ, 無駄な処理が多くなる気がするのですが皆さんどうされてますか?

355 :デフォルトの名無しさん:2012/06/16(土) 16:00:17.46
本当にそこがボトルネックになるならば直接アクセスにすればいいし、
なるかどうかわからないのであれば気にしなければいい

atomicはたいして意味がないから基本nonatomicでいい

357 :デフォルトの名無しさん:2012/06/16(土) 19:59:01.73
>>354
気になるなら直接インスタンス変数使えばいいんじゃないの
getterはatomicの時(スレッド間で同期が必要なもんとか)にしか利点が無いような
setterは利点あるし、わざわざインスタンス変数直接ってのをするほど使わないような

364 :デフォルトの名無しさん:2012/06/17(日) 06:40:36.95
>>355>>357
ありがとうございます
うーんバンバンdispatch_asyncしてるのでatomicの方が安全かなと思うのですが難しい所ですね
atomicにしてても, インクリメント等するときや複数のプロパティをまとめてゲットしなきゃいけないときはさらに外側で@synchronizedしないといけなかったりするので
@synchronizedばっかりになってオーバーヘッドになりそうな気も

368 :デフォルトの名無しさん:2012/06/17(日) 18:22:09.87
スレッドプールとかGCDとかで複数のスレッドを使うようにするのは、
そのまま複数のCPUコアを均等に無駄なく使う事に繋がるのでは。

371 :デフォルトの名無しさん:2012/06/17(日) 23:55:29.52
>>368
そういうレベルの話じゃない。

ただ単にマルチスレッドな話だと、スレッドセーフにするために「ロック」や「セマフォ」を使いましょう。
といった内容になるだろう。

平行処理の方は、複数のCPUコアを同時に動かすことでパフォーマンスを稼いでいるので、
「ロック」や「セマフォ」などでスレッドを一時停止させては意味がない。
つまり、「ロック」や「セマフォ」を使わずに、スレッドセーフなプログラムを組む。
といった内容になります。

スレッドもCPUコアと同じ数しか作らないので、逆に言うとシングルCPUな環境だと無意味。
シングルCPUな環境なら、NSRunLoopを活用した方がよい。


378 :デフォルトの名無しさん:2012/06/18(月) 02:21:37.18
>>371
CPUで計算するだけなら並列処理にはマルチコア必要だけど、時間のかかるI/Oと
他の処理並行動作させたりするのもマルチスレッド化の大きな目的だから、
コア数どうこうは関係無いよ。排他制御の類は必ず必要だし、シングルコアだから
スレッド化不要とかロック多用して良いって事にもならない。
あと、単にカウンタ値増減したり、キューにデータ突っ込んだりとかは
atomic operationが用意されてるので(OSAtomicなんとか)これを上手く使えば
ロックの類は使わなくて済む。

411 :デフォルトの名無しさん:2012/06/20(水) 15:21:00.86
ARC=Auto Refarence Counting
自動で参照カウンタを操作する
自動で参照カウンタを
自動で
自動

426 :デフォルトの名無しさん:2012/06/20(水) 21:49:28.15
>>411,412,416
ありがとうございます。
ということは, 自動で変数を用意して代入してから引数として与えてしかる後に解放してくれるんでしょうか
単にretainやreleaseやautoreleaseを適切な場所に挟んでくれるだけだと思ってたので、
MRCだと挟めない書き方をするとダメだと思ってたんですが一時的に変数に移すのまで自動でやってくれるんですね・・・
- (NSString *)URLPathComponent1 {
return [[[[[self url] pathComponents] objectAtIndex:1] retain] autorelease];
}
↑これだと、この後メソッドから抜けるときに更にもう一度autoreleaseが掛かるはずなので、オーナーシップの数を超えてautoreleaseされると思うのですが大丈夫なんでしょうか?

484 :デフォルトの名無しさん:2012/06/30(土) 22:09:57.09
NSPredicateについて聞かせてください.
あるentityAから, 1:n対応でentityBと双方向のrelationshipがあるとき,
かつ, entityAに関連づけられたclassAのインスタンスaが既知のとき,
aとrelationshipを持つ, entityBに関連づけられたclassBのインスタンスb1, b2, ... bn全てをfetchするには,
NSPredicateじゃダメで, classBのインスタンスをどかっと全部fetchしてからプログラム上でaとrelationshipがあるものを抽出する...という形になるのでしょうか.

494 :デフォルトの名無しさん:2012/07/01(日) 00:20:04.31
>>484
CoreDataな話なんだよね?
インスタンスaに、インスタンスbへのrelationshipを表すNSSet型のプロパティbsがあるはずだよね?


504 :デフォルトの名無しさん:2012/07/01(日) 15:43:52.32
>>494-495
ありがとうございます。もちろん最初に書いたとおり、
全部オブジェクトとしてとってきてから、b.a(bからaへの対1参照)なり、a.bs(aからbへの対多参照)なりのプロパティで比較すれば出来るのですが、
コードをシンプルにするのとパフォーマンスを改善するためにNSPredicateで条件指定出来ればいいなと思いまして・・・

505 :デフォルトの名無しさん:2012/07/01(日) 23:29:14.28
>>504
> 全部オブジェクトとしてとってきてから、b.a(bからaへの対1参照)なり、a.bs(aからbへの対多参照)なりのプロパティで比較すれば出来るのですが、

ん??
要するに、EntityAに1:NでrelationshipしているEntityBを全て取得したい、ということなんだよね?

ClassA* a = fetchObject();
NSSet* bs = [a valueForKey:@"relationshipB"];

これで変数bsの中に、EntityAに1:NでrelationshipしているEntityBが全て入っていると思うのですが。


547 :デフォルトの名無しさん:2012/07/11(水) 00:35:47.36
LabelとTextFieldがあって、ボタンが押されたら
LabelにTextFieldの数値を加算するメソッドで
これをただ足すのではなく、数字がどんどん増えるようにしたいんだけど、
一気に増えちゃうのよね。どうすれば良い?

以下ソース
- (IBAction)addScore:(id)sender {
[self.view endEditing: YES];
NSInteger i;
NSInteger j;
i = [scoreText.text intValue];
j = [addScoreText.text intValue];
addScoreText.text = [NSString stringWithFormat:@""];
for (NSInteger l = 0; l <= j; l++) {
scoreText.text = [NSString stringWithFormat:@"%d",i + l];
}
}

627 :デフォルトの名無しさん:2012/07/22(日) 15:28:40.17
質問です。__weak修飾子について調べていたのですが、
下記の1回目のNSLog()をコメントアウトすると2回目のNSLog()で
aにnilが代入されているのですが、これはなぜでしょうか?
NSLog()がaを保持するのでしょうか?

__weak id a;
id b = [[NSObject alloc] init];
id c = [[NSObject alloc] init];

a = b;
NSLog(@"a:%p", a); // このNSLogをコメントアウトする次のNSLog()のaはnilが代入されている
b = c;
NSLog(@"a:%p", a);

665 :デフォルトの名無しさん:2012/07/31(火) 13:59:37.07
NSThreadで起動したスレッドの内部で、オブジェクトのbool型変数がFALSEに
なるまでwhile()ループする処理を入れています。
で、ループの直前でNSTimerでタイマを仕掛け、タイマ発火時にFALSEにする
ようにしましたが、ループが回っている間はタイマが発火しなく、無限ルー
プなってします。

ループの最後に[[NSRunLoop currentRunLoop] run];でメッセージを処理さ
せるようにすると指定時間でタイマが発火するのですが、runから処理が戻る
まで3秒以上かかってしまっていて、使えません。

Windowsですと、スレッド内でSetTimer()すると無限ループ中でもタイマ
イベントが発火するのですが、Macではどのようにしたらいいのでしょうか?


668 :デフォルトの名無しさん:2012/07/31(火) 14:41:28.39
>>665
>NSThreadで起動したスレッドの内部で、オブジェクトのbool型変数がFALSEに
>なるまでwhile()ループする処理を入れています。
出発点がそもそもおかしいと思うが。
普通はセマフォとかメッセージ待ちにするでしょ。

669 :デフォルトの名無しさん:2012/07/31(火) 14:50:52.21
行儀悪いけどこうやれば3秒後にループから抜けられるよ。

__block bool done = false;

dispatch_async(
 dispatch_get_global_queue(
  DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
  ^{ sleep(3); done = true; });

while (!done) {}


670 :デフォルトの名無しさん:2012/07/31(火) 15:06:34.03
>>668
同期したいんじゃなくて、一定時間だけ処理させたかったんです。

>>669
結局、それに近い処理で実装してみました。
ループ前にNSDateで現在時間を取って、ループの最後でtimeIntervalSinceDate
で差を取得し、指定時間が経過していたらbreakするように。行儀悪いですが、
ひとまずは目的は果たせています。

スレッド内でのループ処理をタイマで抜けるようにする手法はないんでしょう
かね。


732 :デフォルトの名無しさん:2012/08/08(水) 18:38:10.65
プログラムの基本的なことかもしれませんが質問させてください

現在、iPhoneのアプリを作成中です。
同じような処理をほぼ同時に(少し時間差をつけて)3つに分けて処理させてようと思っています
処理の過程で他のクラスで「3つの内のどの処理を行うか」という判断のフラグ処理で悩んでいます

スマートなプログラム書きたいんですがフラグの参照方法がこれぐらいしか思いつきません。
・グローバル変数に設定する
・引数で渡していく
isRecordingのように何かの状態を見て判断させる手もありますが、状態変化で判断する所もなさそうです

他のクラスの中でデータの削除->保存->参照というのをやっていくのでどうしても
「3つの内のどの処理を行うか」という判断が必要になります

なにかいい方法があれば教えてくださいm(__)m


737 :デフォルトの名無しさん:2012/08/08(水) 19:04:06.94
質問してキーワード貰ったら最低でもググれよ

738 :デフォルトの名無しさん:2012/08/08(水) 19:11:04.35
>>732
> 説明がわかりにくくてすいません。。。
謝るまえに、もっと分かり易く説明してくれ。
何をしようとしているのか、いまいちよく分からないぞ。

で、これってマルチスレッドな話なのか?
スレッド1: 保存処理 -> 参照 -> 削除処理
スレッド2:  保存処理 -> 参照 -> 削除処理
スレッド2:   保存処理 -> 参照 -> 削除処理
こんな感じ?

それで、話に出て来る「他のクラス」って、いったいなんなの?
それから、ここでいう「データ」って何?


739 :732:2012/08/08(水) 19:23:12.62
>>737
一応ググったんですが普通にフラッシュの光らせ方しか出てこなかったもんで・・・
ソースコードも見てみましたけど、フラグに使えるんでしょうか?

>>738
ご指摘の通りマルチスレッドを使った1->2->3という処理です
「他のクラス」はマルチスレッドをスタートさせるところ以外のクラスです
「データ」は画像データです



740 :デフォルトの名無しさん:2012/08/08(水) 19:34:55.82
>>739
じゃあ、処理を3つに分けることと、フラグとの関係は?

@implementation OtherClass

- (void)threadProcess:(NSImage*)image
{
[self save:image];
[self reference:image];
[self delete:image];
}

@end

これじゃ、ダメなの?


741 :732:2012/08/08(水) 19:40:47.99
>>740
まぁ、それが引数で値を渡すっていう形になりますよね。
その先で色々と処理をしてて、ずっとその引数を渡していくというのが
ちょっとややこしいもんで・・・。

755 :デフォルトの名無しさん:2012/08/09(木) 17:35:25.59
NSThreadはオワコン

757 :デフォルトの名無しさん:2012/08/09(木) 18:43:10.66
>>755,756
ありがとうございます。他にスレッドを使用する方法があったなんて!
NSInvocationOperationとNSOperationQueueで実装しました。
NSInvocationOperation initWithTargetからnil以外が返ってきたら、
NSOperationQueue addOperationすればスレッドの起動が失敗することは
ないと考えてよいですか?

因みに、オワコンの意味を調べたのは内緒です。


759 :デフォルトの名無しさん:2012/08/09(木) 20:56:50.87
>>757
> NSOperationQueue addOperationすればスレッドの起動が失敗することは
> ないと考えてよいですか?

NSOperationQueueは、スレッドと1対1で対応している訳ではないので、それは不明。

あと、あるスレッドでエラーが発生すると、スレッドが落ちることもある。
つまり、スレッドが起動成功しても直後にエラー落ちする可能性もある。

根本的に別の手段を考えた方がいいのでは?

760 :デフォルトの名無しさん:2012/08/09(木) 21:40:43.07
>>757
NSOperationQueue は同時に起動するスレッド(NSOperation)数はコア数に制限されているから、
スレッドの起動に失敗するということは全くといっていいほど考えられないのじゃないかなあ

761 :デフォルトの名無しさん:2012/08/09(木) 22:19:02.63
>>760
ん?
スレッド数に制限があることと、スレッドの起動に失敗しないこととの間に、いったいどんな関係が?

762 :デフォルトの名無しさん:2012/08/09(木) 22:21:17.62
>>761
スレッドの起動に失敗するのって逆にどういうの?リソースが足りないぐらいしか思いつかないんだけど

777 :デフォルトの名無しさん:2012/08/10(金) 10:00:28.27
754です。
スレッド起動に関する議論、参考になります。
スレッドが動き出せたのかどうかを知るのって、重要だとおもうんですよ。
議論を読んでいると、NSOperationQueueですら確実に実行できているとは
限らないと読めるんですが、皆さんがスレッド使うプログラムを作るとき
は、結局どう判定してるの?動くこと前提にしちゃうんでしょうか。

>>759
>根本的に別の手段を考えた方がいいのでは?

ということで、オワコンと言われているNSThreadに戻ってきました。
NSThread initWithTargetで、nil以外が受け取れたならばスレッドは起動
出来ると判断して、NSThread startを呼ぶようにしました。
こんな感じですが、どうでしょうか。

NSThread* th = nil;
th = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil];
if(th)
[th start];
else
return false; // エラー



http://toro.2ch.net/test/read.cgi/tech/1330330906/l50/../人気ブログランキングへ

PC等Squeakでマターリ語りましょうや

1 :デフォルトの名無しさん:2005/11/07(月) 16:47:13
全然スレ立たないけどみんな興味無いの?

いっしょに遊びましょ♪

84 :デフォルトの名無しさん:2006/05/04(木) 12:03:01
実際squeakはとっつきにくい。関連したwebや書籍をみても
「オブジェクトありき」とか「すべてはメッセージ」とか、開発者寄りの話
しか見つからない。
初めて(生)MS-DOSを触ったときを思い出した。途方にくれるカンジ。

91 :デフォルトの名無しさん:2006/05/05(金) 04:59:12
最新Squeak(英語版)をGetして実行したら、Package Browserを発見。
ここに列挙されたclassが全部実装されているかと思うと喚起雀躍。
さっそくSqueakからtelnetしたいと思った。
Package BrowserからTelnetMachineというclass発見。そこで、
host := TelnetMachine new. をdo it。->Error:UndefinedObject cannot be changed
どんなもんでもinstanceになるわけではないのか..。
テキスト「自由自在Squeakプログラミング」登場。
morph2 := Morph new openInWorld.
同じエラーメッセージが出た。そもそも考え方が違うってか。

94 :デフォルトの名無しさん:2006/05/05(金) 11:27:38
>>91
ちなみに TelnetMachine は TelnetMachine open の do it (alt/cmd + d) で
ウインドウが開きます。TelnetMachine class >> #open の定義は、ブラウザの
上段第2ペイン下の class ボタンを押して切り替えることで見ることができます。

98 :デフォルトの名無しさん:2006/05/05(金) 23:20:45
>>94
> ちなみに TelnetMachine は TelnetMachine open
たしかにopenで成功しました。そこで質問ですが、

・なぜ「open」という存在を知っていたのか、
・それがインスタンスでなくてクラスである理由

は なんでしょうか?判る範囲で構いませんのでゼヒ。
ちなみに、Morphにおける「new」というメソッドはMorphでも、そのSuperclassである
ObjectでもさらにそのSuperclassであるProtoObjectでも定義されていないんですが、
なぜ有効なんでしょう。

135 :デフォルトの名無しさん:2006/05/24(水) 22:55:17
長文失礼。書き込みたかっただけ。

コトの発端は、
Smalltalk keysDo: [:each |Transcript cr; show: each].
で、システムに登録されたキーをすべて表示したとき、途中を見たかったが、
量が多いし辞書順に出力されるわけでもないんでバックスクロールが面倒だったこと。

select:とか使えば見たい部分を引っ掛けられるんだが、「なんとなく見たい」場合は見たい部分を
指定できるハズもない。
windwowsなら中間ファイルにリダイレクトしてエディタで開く。unixならパイプでless起動。
squeak的にはどんなアプローチが『普通』なんだろう?

squeakではファイルという存在が見えにくい。ならsqueak的にデータは
どこに格納すべきなんだ。やっぱり生データではなくオブジェクトにする
んだろうか。すべてのオブジェクトは生きている(動いている)というのが
元の設計思想らしいので、これに従うと、例えばsqueakにmovieファイルを
ドラッグアンドドロップすると、そのファイルはオブジェクトに自動変換され、
Squeakの画面にある間はずっと再生しつづける、とかかな。オブジェクト4つくらいで
コマ落ちしそう。プロセッサパワーが無限にあると仮定しても、オブジェクトが50とか
あると1画面に入りきらないような気がする。大量のオブジェクトがあった場合、
必要なオブジェクトを探す方法が必要になるね。
いまのsqueakにそんなものってあったっけ。俺が探せていないだけか。

136 :デフォルトの名無しさん:2006/05/24(水) 23:10:35
Smalltalk keys または
Smalltalk keys asSortedArray

を inspect するのはダメ?

147 :デフォルトの名無しさん:2006/06/11(日) 13:38:22
実は作成したいんは

バイナリログファイル->テキストログファイル

です。ハイ。
ファイルの先頭48byteはヘッダで、とりあえず無視します。
そのあとから16byteごとのレコードが続いています。で、レコードは
4つの4byteフィールドからなるっていて、フィールドはその数字に
対応する文字列が別途あり、ここを対応付けるスクリプトを書きたい。

でも4byteの数字をつくることさえ、ままならない。(現時点では掛け算で求めてる)

なお、Cでは簡単にかけちゃうんですが、そこはSqueakを使いたい。
クラス、メソッド、メッセージ。オブジェクト指向って何かがわかるかな??と。

191 :デフォルトの名無しさん:2006/10/23(月) 23:07:45
Squeakを勉強したいのですが、お勧めの書籍を1,2冊教えてください。
C/C++は大体わかります。

196 :デフォルトの名無しさん:2006/11/08(水) 10:38:10
smalltalkでWindowsアプリケーション(VMを使わず起動)を作れますか?
作れるとしたらお勧めの開発環境は何ですか?

197 :デフォルトの名無しさん:2006/11/08(水) 18:31:13
Squeak で windows アプリを作ろう。
ttp://d.hatena.ne.jp/propella/20050925/p1

198 :196:2006/11/10(金) 15:59:32
>>197
ありがとうございます。
なんか、話が変わって申し訳ないんだけど、
SqueakでChessとかのゲームってどうやったらできるの?
インストールしたのは「日本語7」です


242 :デフォルトの名無しさん:2007/06/10(日) 18:38:54
Rubyの作者がSmalltalkっていうときはごく初期のLittle Smalltalkのこと。

273 :デフォルトの名無しさん:2007/06/17(日) 13:08:57
Smalltalkerに上から目線な香具師が多いのは反省すべきだな

274 :デフォルトの名無しさん:2007/06/17(日) 13:31:59
>>273 が上から目線なのがワラタ

単に価値判断基準が違うだけだと思うけどね。
多様な価値基準がある世界に慣れていない人は戸惑うのかもしれないね。

288 :デフォルトの名無しさん:2007/06/19(火) 16:21:32
古株の価値判断って、ファイル・システムに対するオブジェクト・システムのこと?
もはや30年も経った骨董品だから、いい加減Smalltalkはオブジェクト・システムから
脱するべきやな。怠慢もいいところ。

289 :デフォルトの名無しさん:2007/06/19(火) 19:37:20
>>288
で、オブジェクトシステムっていう価値基準は多様なの?www

444 :デフォルトの名無しさん:2008/05/29(木) 23:45:01
いまsqueakで軽いミニゲームを作ってるんだけど
解らないところがあるんだが質問して良い?

445 :デフォルトの名無しさん:2008/05/30(金) 00:37:48
>>444
好きにすれば良い

446 :デフォルトの名無しさん:2008/05/30(金) 02:36:38
>>445
thank

squeak触って間もない初心者だけど
いまシューティングゲームを作っているんだ、
それで自機の弾の連射ができない(´・ω・`)
一発ずつしか撃てないのを改善しようと
4時間悩んでググった結果このスレにたどり着いた。

どうかこのド低脳に解決方法をご教授願えやしませんでしょうか・・・

448 :デフォルトの名無しさん:2008/05/30(金) 10:39:47
>>446
Squeak で作っているということですが、Etoys(ドラッグ&ドロップのプログラミング)でか、
Smalltalk でか(ブラウザとかを使ってクラスとかを定義しているのか)で違うので、
どちらか教えてもらえますか? たぶん、Etoys だとは思うのですが。念のため。

それと、今のところ、どこまでどんなふうに書いたのかを簡単でいいので教えて
もらえると、それに乗っかってヒントも出しやすいです。

449 :デフォルトの名無しさん:2008/05/30(金) 15:50:53
>446
こんな感じ?
http://squeakland.jp/seaside/SBSuperSwiki/85e1abfa-def5-4760-a095-5eb9e62f6e46

538 :デフォルトの名無しさん:2009/02/15(日) 06:22:47
repeatやwhileTrueとかでブロッククロージャから局所脱出させる方法が分からない
^だとメソッド終了しちゃうし・・


539 :デフォルトの名無しさん:2009/02/15(日) 12:47:11
>>538
脱出したいタイミングで例外をあげる処理と #on:do: との組み合わせでは駄目ですか?

| i |
i := 0.
[ [#一連の処理. (i:=i+1) > 100 ifTrue: [Exception signal]. #続きの処理] repeat
] on: Exception do: [:ex | #脱出時の後処理]

542 :デフォルトの名無しさん:2009/02/16(月) 07:58:47
>>539-540
ありがとうございました。
にしてもon: do:はprimitiveっぽくて中身見えず
valueWithExitは何をやってるかさっぱり

Cのbreakやcontinueに相当するものがよくある解説にはまったく出てこないのはどうしてなんだろう?
そういえばcontinue相当がまだ見つからない・・
ブロック内でself value. とかしたら再帰になっちゃいますよね。

588 :デフォルトの名無しさん:2009/03/27(金) 19:48:19
じゃあ早速質問。
1. ブロッククロージャの実行環境というのは
無名のメソッドコンテキストであるという理解でいいのですか?
この場合ブロッククロージャ内に現れるselfの実体は何になるのでしょうか。

2. ブロッククロージャ内で出現する ^ は引数がどんなオブジェクトであれ
現在のメソッドコンテキストを消滅させ、直前のメソッドコンテキストに処理が戻る
という考え方は一般的でしょうか?

3. しかしvalueWithExitの実装を見ると^nil が非常に特殊なものであるように見えます。
これはバイトコンパイルする時に引数がnilである場合にのみ命令の置き換えをしているということでしょうか?

590 :デフォルトの名無しさん:2009/03/27(金) 21:28:08
>>588
> 1. ブロッククロージャの実行環境というのは
> 無名のメソッドコンテキストであるという理解でいいのですか?

違います。
そもそもクロージャにするためにはメソッドコンテキストから独立
させる必要があります。

> この場合ブロッククロージャ内に現れるselfの実体は何になるのでしょうか。

クロージャを包んでいるメソッドの環境でのselfです。

> 2. ブロッククロージャ内で出現する ^ は引数がどんなオブジェクトであれ
> 現在のメソッドコンテキストを消滅させ、直前のメソッドコンテキストに処理が戻る
> という考え方は一般的でしょうか?

はい。

> 3. しかしvalueWithExitの実装を見ると^nil が非常に特殊なものであるように見えます。
> これはバイトコンパイルする時に引数がnilである場合にのみ命令の置き換えをしているということでしょうか?

それはメソッドコンテキストが特殊なのではなく、nilがバイトコードにおいて特殊なだけです。

592 :デフォルトの名無しさん:2009/03/27(金) 22:49:52
>>590-591
即解答ありがとうございます。
新たな疑問が沸いてきました。

6. ブロッククロージャが新たなメソッドコンテキストを生成するものではないなら
^ が発行された時点でメソッドコンテキストが消滅するので
valueWithExitが成り立たないのではという考えに至りました。
しかし実際には機能します。
これはどういうことなんでしょうか?

7. [^nil] value と [^aObject] value で機能的に違いがあるのでしょうか。


5.についてはSmalltalkCompilerが難解なのでざっと見た感じですが
おそらくブロッククロージャのレシーバを除いて
引数のブロッククロージャは例外無くすべてインライン展開されるのではないかと思いましたが違いますか?

593 :デフォルトの名無しさん:2009/03/27(金) 23:49:56
>>592
Squeakで MessageNode >> initialize を見ればいいと思うよ


596 :デフォルトの名無しさん:2009/03/28(土) 09:53:32
>>592
あまり思い込み&先走りせずに、おちついて考えてみてはいかがでしょう。
あと、#repeat のときと同じで、どうしてそういう結論にいたったかを
書いてもらえるとくい違いを指摘しやすいと思います。

#valueWithExit のどちらの ^ について成り立たないと判断されたかわかりませんが、
いずれの ^ でも #valueWithExit をコールしたコンテキストに戻るので
(そしてそれは消滅していないので)問題はないと思いますが、違いますか?

7. については、文面どおり呼び出し元への戻り値が nil か aObject かの違いだけです。

5. については、具体的には SmalltalkCompiler のどのメソッドの記述から、
引数のブロッククロージャは例外なくインライン変換されると結論されたのでしょうか?

597 :デフォルトの名無しさん:2009/03/28(土) 18:44:10
>>596
成り立たないと思ったのは、ブロッククロージャの実行環境が無名メソッドコンテキストではないということは
任意のクラスメソッドを呼んだ時、そこにはいくつブロッククロージャがあっても
クラスメソッドを呼んだ時に生成されたメソッドコンテキストしか存在していないと思ったからです。
であれば、valueWithExitの機能は成り立たたず、通常の^と同じで発行された時点でメソッドの呼び出し元に戻ってしまい
valueWithExitの外に戻ってはこないと思っています。
ここの所がどうもひっかかっています。

7.ですが、ということは[^nil] valueだけが非常に特殊なものというわけではなく、例えば[^Object ] valueとしてもvalueWithExitとまったく同等の機能になるということですか?

5.はifTrueなどのメソッド名がどこにも書かれていなかったので、引数のブロッククロージャはすべてインライン展開されるのでは、という予想です・・
特定のメソッド名で束縛してインライン展開をしているのでは、というこれも予想ではあったのですが・・

>>593-594
ここに記述されているメソッドがインライン展開の対象になるということでしょうか。





653 :デフォルトの名無しさん:2009/06/21(日) 20:48:06
VisualWorksで.im形式のファイルの使い方が分かりません。

ファイルを取り込んだら文字化けしてしまいます。
Windowsでは使えない機能なのでしょうか。

654 :デフォルトの名無しさん:2009/06/21(日) 20:59:35
>>653
virtual machine(visual.exe)にvirtual image(.im)をのせるとVisualWorksが起動する。

>ファイルを取り込んだら文字化けしてしまいます。

いったい何をしようとしたの?

684 :デフォルトの名無しさん:2009/08/07(金) 17:37:53
VisualWorksですが

メソッドをこう定義して
element:aData

aData := 'points'.

^self

とかやってsaveしようとすると
Attempt to store into argument
と出てaDataを書き換えられないような感じです
VisualWorksは引数の書き換えを禁止しているのですか?
逆に引数の書き換えをするにはどう書けばいいのでしょう。

685 :デフォルトの名無しさん:2009/08/07(金) 18:41:32
thisContext localAt: 1 put: 'points'.

689 :デフォルトの名無しさん:2009/08/07(金) 20:29:36

でもって今書いているのはこんなものです。
呼び出し元でn1,n2,d1を使用しているので呼び出し先で書き換えてくれないと困るというか・・
VisualWorksではもっと適切な書き方があるんでしょうか?

patternNND:aString name:n1 name:n2 digit:d1

| m |
m := RxMatcher forString:'�\s*(�\w+)�\s+(�\w+)�\s+(�\d+)�\s*'.
( m matchesPrefix:aString) ifFalse:[^False].
n1 := m subexpression:2.
n2 := m subexpression:3.
d1 := m subexpression:4.
^True.



690 :デフォルトの名無しさん:2009/08/07(金) 21:08:33
ああそういうことなら
n1 become: (m subexpression: 2).
とか書けばいいです。become:はポインタの指す先を入れ替えるメッセージです。
超便利なので使いまくりましょう。

あとTrue, Falseはクラス名なので真偽値をあらわすにはtrue, falseと小文字で書きます。

692 :デフォルトの名無しさん:2009/08/08(土) 14:39:32
>689
この場合はbecome:を使うまでもなく、センダ側で、

arrayOfPattern := Array with: aString with; n1 with: n2 with: d1

みたいにして引数の配列を作っておいて、

patternNND: arrayOfPattern

で呼べばいいのでは。受け取った側では、

arrayOfPattern at: 2 put: (m subexpression: 2).

みたいにして書き換えます。名前付がいいなら配列じゃなくて辞書にする
とか、パタン自体がオブジェクトになる可能性も検討すべきかと(本当に
必要かどうかは設計の問題)。

become:は強力すぎるので、その使用は最低限にすべきでしょう。

695 :デフォルトの名無しさん:2009/08/09(日) 06:26:49
>>692
ダメだよそれじゃ。
配列なんかで渡したら、各パラメータの意味がわかりにくいでしょ?
Perlじゃあるまいし。
漢なら、パラメータは辞書渡し。これならオプション引数まで扱える。
これを使いこなしてこそ、Smalltalker中のSmalltalkerと言える。

697 :デフォルトの名無しさん:2009/08/09(日) 11:50:06
漢の中の漢、ならまだ意味が通る

699 :デフォルトの名無しさん:2009/08/09(日) 18:36:16
>>697
ValueHolderを使えというわけですね
わかります。


702 :684:2009/08/09(日) 22:23:41
色々と試行錯誤してみましたが
なかなかうまくいきません・・

>>685
コンテキスト内は有効みたいですが、呼び出し元でinspectしても
値はまったく変化しないようです。
これではちょっと・・

>>690
becomeはmodifyエラーが出て使えませんでした。
どんな時に有効か教えて頂けませんか?
これで解決するなら本当にありがたいです。

>>692 >>695
配列や辞書渡しは勘弁して下さい・・

>>699
呼び出し元でaValue := (ValueHolder with:aObj)で渡し
呼び出し先でaValue setValue:'ex'. とかすると
呼び出し元でaValue value inspectで正しく変化していることが確認できました。

とはいえ引数をValueHolderでラップして渡すまでもなく
直接変更を加えたいというのが本音なので・・

そもそもどうして引数に対し := で直接書き換えさせてくれないんでしょう。
不便で仕方がないと思うんですが・・
何か理由があってこうしてるんですか?


http://hibari.2ch.net/test/read.cgi/tech/1131349633/l50人気ブログランキングへ

学ばないブログ
忍者AdMax
記事検索
最新コメント
QRコード
QRコード
  • ライブドアブログ