Question

Suppose I have defined a function:

def hello(name:String, words:String) = println("Hello!" + name + words)

Then I defined a partial function:

def p = hello _

Print p, displayed:

(String, String) => Unit = <function2>

There's no function name displayed. Is it possible to get the original method name hello from the partial function p?

Was it helpful?

Solution

There has been some discussion on the mailing lists recently about a language construct that allows you to identify the current method that you're in. It would be called something like thisMethod and would essentially do for methods what this does for class instances.

I'd be interested to see how this interacts with functions (which are a different concept from methods). Your p is an anonymous function created from partially applying the hello method (again, you need to be careful here, a "partially applied function is a very different thing from a PartialFunction). The actual method then invoked would be apply on this function object, and there are several possibilities as to how thisMethod could behave in such a case.

Whatever happens, p is just an object reference, don't expect to ever be able to access it as a name.

OTHER TIPS

No.

Its a feature I'd love to have, but it has serious conceptual problems like, what should happen, when the same function is given two names ... it should still be the same function, shouldn't it?

update in response to comment:

def p = hello _ def q = p

What is the name of q? p? or hello? or println? I have a hard time imagining a solution that is simple, consistent and usefull.

... that is actually a "partially applied function" that is created anonymously by calling your hello function without the parameters being applied. It does not have an explicit name to show.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top