www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - porperty problem..

reply BLS <windevguy hotmail.de> writes:
Hi I have a forward reference pb in conjunction with  property.
Err msg is :
forward refrence to inferred return type of function call s1.servername.
any ideas ? beside, where are the  property docs ?
thanks, bjoern

final class LoadBalancer {
	private static LoadBalancer lb;
	private Server[] servers;
	
	static this() {
		synchronized lb = new LoadBalancer;
	}
	
	private this() {
		Server s1 = new Server();
		s1.servername = "Server 1";  // ERROR
		servers ~= s1;
	}
	
	public static LoadBalancer getLoadBalancer() {
       return lb;
     }

	 property nextServer() {
		return servers[0];
	}
		
	class Server {
		private string _name, _id;
		
		 property servername(string name) {
			_name = name;
		}
		 property servername() {
			return _name;
		}
	}
}
Jun 28 2010
next sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
  BLS <windevguy hotmail.de> wrote:

 Hi I have a forward reference pb in conjunction with  property.
 Err msg is :
 forward refrence to inferred return type of function call s1.servername.
 any ideas ?

No line number? If so, file it in bugzilla. You might also want to file a bug for the forward reference problems.
  beside, where are the  property docs ?

No idea. This:
 	 property nextServer() {
 		return servers[0];
 	}

I believe property does not cause type inference. => property void servername(string name)
 		 property servername(string name) {
 			_name = name;
 		}

=> property string servername()
 		 property servername() {
 			return _name;
 		}

-- Simen
Jun 28 2010
prev sibling next sibling parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Mon, 28 Jun 2010 16:37:06 -0400, BLS <windevguy hotmail.de> wrote:

 Hi I have a forward reference pb in conjunction with  property.
 Err msg is :
 forward refrence to inferred return type of function call s1.servername.
 any ideas ? beside, where are the  property docs ?
 thanks, bjoern

 final class LoadBalancer {
 	private static LoadBalancer lb;
 	private Server[] servers;
 	
 	static this() {
 		synchronized lb = new LoadBalancer;
 	}
 	
 	private this() {
 		Server s1 = new Server();
 		s1.servername = "Server 1";  // ERROR
 		servers ~= s1;
 	}
 	
 	public static LoadBalancer getLoadBalancer() {
        return lb;
      }

 	 property nextServer() {

Shouldn't this be property Server nextServer() { ???
 		return servers[0];
 	}
 		
 	class Server {
 		private string _name, _id;
 		
 		 property servername(string name) {
 			_name = name;
 		}
 		 property servername() {
 			return _name;
 		}
 	}
 }

-Steve
Jun 28 2010
next sibling parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 06/28/2010 03:47 PM, Steven Schveighoffer wrote:
 On Mon, 28 Jun 2010 16:37:06 -0400, BLS <windevguy hotmail.de> wrote:
  property nextServer() {

Shouldn't this be property Server nextServer() { ???

auto functions?
Jun 28 2010
next sibling parent Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 06/28/2010 03:58 PM, Steven Schveighoffer wrote:
 On Mon, 28 Jun 2010 16:55:01 -0400, Ellery Newcomer
 <ellery-newcomer utulsa.edu> wrote:

 On 06/28/2010 03:47 PM, Steven Schveighoffer wrote:
 On Mon, 28 Jun 2010 16:37:06 -0400, BLS <windevguy hotmail.de> wrote:
  property nextServer() {

Shouldn't this be property Server nextServer() { ???

auto functions?

I wasn't aware that property implies auto. I guess that makes sense, but I didn't consider it anything but a hint to the compiler about how it could be called, not that did anything with the type. But I guess it's similar to static... -Steve

There are a bunch of modifiers that do. protection modifiers and maybe align and a few others don't, but pretty much everything else does
Jun 28 2010
prev sibling parent reply BLS <windevguy hotmail.de> writes:
On 28/06/2010 22:58, Steven Schveighoffer wrote:
 I wasn't aware that  property implies auto.  I guess that makes sense,
 but I didn't consider it anything but a hint to the compiler about how
 it could be called, not that did anything with the type.

Hm, this snippet does not compile : class Server { private string _name, _id; property servername(string name) { _name = name; } property string servername() { return _name; } } remove string from property and it works. On the other hand .. property Server nextServer() { return servers[0]; } compiles fine ! Guess we need the official documents... Bjoern
Jun 28 2010
parent BLS <windevguy hotmail.de> writes:
On 29/06/2010 00:07, Simen kjaeraas wrote:
 Maybe it's because you haven't added string to the setter? Just grasping
 at straws here.

 --
 Simen

Hi Simen, yes, thats the prob. I just have not found the property docs.. thanks for all the help.. This snippet works now as expected.. D properties are just fine. Bjoern import std.stdio; import std.random; void main(string[] args) { LoadBalancer b1 = LoadBalancer.getLoadBalancer(); LoadBalancer b2 = LoadBalancer.getLoadBalancer(); LoadBalancer b3 = LoadBalancer.getLoadBalancer(); // Confirm these are the same instance if (b1 == b2 && b2 == b3 ) { writeln("Same instance\n"); } // Next, load 15 requests for a server for (int i = 0; i < 15; i++) { string serverName = b1.nextServer.servername; writeln("Dispatch request to: " ~ serverName); } } // D2 thread safe ?????? singleton final class LoadBalancer { private static LoadBalancer lb; private Server[] servers; static this() { synchronized lb = new LoadBalancer; } private this() { Server s1 = new Server(); s1.servername = "Server 1"; s1.id = ""; Server s2 = new Server(); s2.servername = "Server 2"; servers ~= s1; servers ~= s2; } public static LoadBalancer getLoadBalancer() { return lb; } property { Server nextServer() { return servers[ uniform(0, servers.length) ]; } } // inner class class Server { private string _name, _id; property { string servername(string sn) { return _name = sn; } string servername() { return _name; } string id(string id) { return _id = id; } string id() { return _id; } } } }
Jun 28 2010
prev sibling parent BLS <windevguy hotmail.de> writes:
On 28/06/2010 22:47, Steven Schveighoffer wrote:
 houldn't this be

  property Server nextServer() {

Ouch, you are right.. Interesting enough that property nextServer() { return ...} compiles without giving any error message.. Anyway it seems to be a forward reference bug. moving the inner Server() class in front of LoadBalancer eliminates the error msg. bjoern
Jun 28 2010
prev sibling next sibling parent BLS <windevguy hotmail.de> writes:
On 28/06/2010 22:37, BLS wrote:
 forward refrence to inferred return type of function call s1.servername.
 any ideas ? beside, where are the  property docs ?
 thanks, bjoern

ok moving the inner Server class (see prev. msg) in front of LoadBalancer works.. seems to be a forward reference bug. class Server { private string _name, _id; property servername(string name) { _name = name; } property servername() { return _name; } } final class LoadBalancer { private static LoadBalancer lb; private Server[] servers; static this() { synchronized lb = new LoadBalancer; } private this() { Server s1 = new Server(); s1.servername = "Server 1"; // NO PROBLEM } ... }
Jun 28 2010
prev sibling next sibling parent reply "Rory McGuire" <rmcguire neonova.co.za> writes:
On Mon, 28 Jun 2010 22:37:06 +0200, BLS <windevguy hotmail.de> wrote:

 Hi I have a forward reference pb in conjunction with  property.
 Err msg is :
 forward refrence to inferred return type of function call s1.servername.
 any ideas ? beside, where are the  property docs ?
 thanks, bjoern

 final class LoadBalancer {
 	private static LoadBalancer lb;
 	private Server[] servers;
 	
 	static this() {
 		synchronized lb = new LoadBalancer;
 	}
 	
 	private this() {
 		Server s1 = new Server();
 		s1.servername = "Server 1";  // ERROR
 		servers ~= s1;
 	}
 	
 	public static LoadBalancer getLoadBalancer() {
        return lb;
      }

 	 property nextServer() {
 		return servers[0];
 	}
 		
 	class Server {
 		private string _name, _id;
 		
 		 property servername(string name) {
 			_name = name;
 		}
 		 property servername() {
 			return _name;
 		}
 	}
 }

Only place I've seen property docs is in TDPL
Jun 28 2010
parent BLS <windevguy hotmail.de> writes:
On 28/06/2010 23:00, Steven Schveighoffer wrote:
 http://www.digitalmars.com/d/2.0/function.html#property-functions

 -Steve

Makes sense :) thanks
Jun 28 2010
prev sibling next sibling parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Mon, 28 Jun 2010 16:55:01 -0400, Ellery Newcomer  
<ellery-newcomer utulsa.edu> wrote:

 On 06/28/2010 03:47 PM, Steven Schveighoffer wrote:
 On Mon, 28 Jun 2010 16:37:06 -0400, BLS <windevguy hotmail.de> wrote:
  property nextServer() {

Shouldn't this be property Server nextServer() { ???

auto functions?

I wasn't aware that property implies auto. I guess that makes sense, but I didn't consider it anything but a hint to the compiler about how it could be called, not that did anything with the type. But I guess it's similar to static... -Steve
Jun 28 2010
prev sibling next sibling parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Mon, 28 Jun 2010 16:55:44 -0400, Rory McGuire <rmcguire neonova.co.za>  
wrote:

 On Mon, 28 Jun 2010 22:37:06 +0200, BLS <windevguy hotmail.de> wrote:

 beside, where are the  property docs ?

Only place I've seen property docs is in TDPL

http://www.digitalmars.com/d/2.0/function.html#property-functions -Steve
Jun 28 2010
prev sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
BLS <windevguy hotmail.de> wrote:

 Hm,  this snippet does not compile :
 class Server {
 	private string _name, _id;

 	 property servername(string name) {
 		_name = name;
 	}
 	 property string servername() {
 		return _name;
 	}
 }

 remove string from  property and it works.

Maybe it's because you haven't added string to the setter? Just grasping at straws here. -- Simen
Jun 28 2010